Pacchetto | flash.display |
Classe | public class Shader |
Ereditarietà | Shader Object |
Sottoclassi | ColorBurnShader, ColorDodgeShader, ColorShader, ExclusionShader, HueShader, LuminosityMaskShader, LuminosityShader, SaturationShader, SoftLightShader |
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 10, AIR 1.5 |
shader
di un oggetto ShaderFilter.
Uno shader definisce una funzione che viene eseguita su tutti i pixel di un'immagine, un pixel alla volta. Il risultato di ogni chiamata alla funzione è il colore di output in corrispondenza di tale coordinata di pixel nell'immagine. Uno shader consente di specificare una o più immagini di input, ovvero immagini il cui contenuto possa essere utilizzato per determinare l'output della funzione. Uno shader consente inoltre di specificare uno o più parametri, che corrispondono ai valori di input che è possibile utilizzare per calcolare l'output della funzione. In una singola esecuzione dello shader, i valori di input e parametri sono costanti. L'unico elemento che varia sono le coordinate dei pixel i cui colori sono il risultato della funzione. Le chiamate alla funzione shader per più coordinate dei pixel di output vengono eseguite in parallelo per migliorare le prestazioni di esecuzione dello shader.
Potete caricare il codice byte dello shader in fase di runtime utilizzando un'istanza URLLoader. Nell'esempio seguente viene mostrato il caricamento di un file di codice byte dello shader in fase di runtime e il relativo collegamento a un'istanza Shader.
var loader:URLLoader = new URLLoader(); loader.dataFormat = URLLoaderDataFormat.BINARY; loader.addEventListener(Event.COMPLETE, onLoadComplete); loader.load(new URLRequest("myShader.pbj")); var shader:Shader; function onLoadComplete(event:Event):void { // Create a new shader and set the loaded data as its bytecode shader = new Shader(); shader.byteCode = loader.data; // You can also pass the bytecode to the Shader() constructor like this: // shader = new Shader(loader.data); // do something with the shader }
Potete inoltre incorporare lo shader nel file SWF in fase di compilazione utilizzando il tag per metadati [Embed]
. Il tag per metadati [Embed]
è disponibile solo se per la compilazione del file SWF utilizzate Flex SDK. Nel tag [Embed]
, il parametro source
fa riferimento al file dello shader e il relativo parametro mimeType
è "application/octet-stream"
, come in questo esempio:
[Embed(source="myShader.pbj", mimeType="application/octet-stream)] var MyShaderClass:Class; // ... // create a new shader and set the embedded shader as its bytecode var shaderShader = new Shader(); shader.byteCode = new MyShaderClass(); // You can also pass the bytecode to the Shader() constructor like this: // var shader:Shader = new Shader(new MyShaderClass()); // do something with the shader
In entrambi i casi dovete collegare lo shader originario (la proprietà URLLoader.data
o un'istanza della classe di dati [Embed]
) all'istanza Shader. Come illustrato nell'esempio precedente, potete effettuare questa operazione in due modi. Potete passare il codice byte dello shader come argomento alla funzione di costruzione Shader()
. In alternativa, potete impostarlo come proprietà byteCode
dell'istanza Shader.
Una volta creata un'istanza Shader, potete utilizzarla in diversi modi:
- Come riempimento: l'output dello shader viene utilizzato come riempimento per il contenuto disegnato con l'API di disegno. Passate l'istanza Shader come argomento al metodo
Graphics.beginShaderFill()
. - Come filtro: l'output dello shader viene utilizzato come filtro grafico applicato a un oggetto di visualizzazione. Assegnate l'istanza Shader alla proprietà
shader
di un'istanza ShaderFilter. - Come metodo di fusione: il rendering dell'output viene eseguito come fusione tra due oggetti di visualizzazione sovrapposti. Assegnate l'istanza Shader alla proprietà
blendShader
di quello superiore dei due oggetti di visualizzazione. - Elaborazione in background: lo shader viene eseguito in background, evitando il possibile blocco dello schermo, e invia un evento al termine dell'elaborazione. Assegnate l'istanza Shader alla proprietà
shader
di un'istanza ShaderJob.
I riempimenti shader, i filtri e le fusioni non sono supportati nel rendering GPU.
Supporto browser per dispositivi mobili: questa caratteristica non è supportata nei browser per dispositivi mobili.
Supporto profili AIR: questa funzionalità è supportata in tutti i sistemi operativi desktop ma non in tutti i dispositivi mobili. Inoltre, non è supportato nei dispositivi AIR per TV. Per ulteriori informazioni sul supporto delle API tra più profili, vedete Supporto dei profili AIR.
Altri esempi
Elementi API correlati
flash.display.Graphics.beginShaderFill()
flash.display.ShaderJob
flash.filters.ShaderFilter
flash.net.URLLoader
Proprietà | Definito da | ||
---|---|---|---|
byteCode : ByteArray [sola scrittura]
Il codice byte dello shader originario per questa istanza Shader. | Shader | ||
constructor : Object
Un riferimento all'oggetto classe o alla funzione di costruzione per una determinata istanza di oggetto. | Object | ||
data : ShaderData
Fornisce l'accesso ai parametri, alle immagini di input e ai metadati per l'istanza Shader. | Shader | ||
precisionHint : String
La precisione delle operazioni matematiche eseguite dallo shader. | Shader |
Metodo | Definito da | ||
---|---|---|---|
Crea una nuova istanza Shader. | Shader | ||
Indica se per un oggetto è definita una proprietà specifica. | Object | ||
Indica se un'istanza della classe Object si trova nella catena di prototipi dell'oggetto specificato come parametro. | Object | ||
Indica se la proprietà specificata esiste ed è enumerabile. | Object | ||
Imposta la disponibilità di una proprietà dinamica per le operazioni cicliche. | Object | ||
Restituisce la rappresentazione in formato stringa di questo oggetto, formattato in base alle convenzioni specifiche per le versioni localizzate. | Object | ||
Restituisce la rappresentazione in formato stringa dell'oggetto specificato. | Object | ||
Restituisce il valore di base dell'oggetto specificato. | Object |
byteCode | proprietà |
data | proprietà |
data:ShaderData
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 10, AIR 1.5 |
Fornisce l'accesso ai parametri, alle immagini di input e ai metadati per l'istanza Shader. Gli oggetti ShaderParameter che rappresentano i parametri dello shader, gli oggetti ShaderInput che rappresentano le immagini di input dello shader e altri valori che rappresentano i metadati dello shader vengono aggiunti in modo dinamico come proprietà dell'oggetto data
al momento della creazione dell'istanza Shader. Tali proprietà possono essere utilizzate per l'introspezione dello shader e per l'impostazione dei valori dei parametri e di input.
Per informazioni sull'accesso e sulla gestione delle proprietà dinamiche dell'oggetto data
, vedete la descrizione della classe ShaderData.
Implementazione
public function get data():ShaderData
public function set data(value:ShaderData):void
Altri esempi
Elementi API correlati
precisionHint | proprietà |
precisionHint:String
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 10, AIR 1.5 |
La precisione delle operazioni matematiche eseguite dallo shader.
L'insieme di possibili valori per la proprietà precisionHint
viene definito dalle costanti nella classe ShaderPrecision.
Il valore predefinito è ShaderPrecision.FULL
. L'impostazione della precisione su ShaderPrecision.FAST
può rendere più veloce le operazioni matematiche a scapito della precisione.
La modalità di precisione "full" (ShaderPrecision.FULL
) calcola tutte le operazioni matematiche all'ampiezza completa dello standard IEEE per il calcolo a virgola mobile a 32 bit e fornisce un comportamento coerente su tutte le piattaforme. In questa modalità, alcune funzioni matematiche, come quelle trigonometriche ed esponenziali, possono risultare molto lente.
La modalità di precisione "fast" (ShaderPrecision.FAST
) è progettata per fornire il massimo livello di prestazioni, ma non funziona in modo coerente su piattaforme diverse e configurazioni di singole CPU. In molti casi, questo livello di precisione è sufficiente per creare effetti grafici senza disturbi visibili.
La selezione della modalità di precisione influisce sulle seguenti operazioni shader. Queste operazioni risultano più veloci su un processore Intel con impostata l'istruzione SSE:
sin(x)
cos(x)
tan(x)
asin(x)
acos(x)
atan(x)
atan(x, y)
exp(x)
exp2(x)
log(x)
log2(x)
pow(x, y)
reciprocal(x)
sqrt(x)
Implementazione
public function get precisionHint():String
public function set precisionHint(value:String):void
Elementi API correlati
Shader | () | Funzione di costruzione |
L'esempio seguente presuppone che sia disponibile un file di codice byte dello shader denominato "donothing.pbj" nella stessa directory di output dell'applicazione. Il codice di origine Pixel Bender per lo shader DoNothing è disponibile nell'esempio di classe ShaderData.
package { import flash.display.Shader; import flash.display.Sprite; import flash.events.Event; import flash.net.URLLoader; import flash.net.URLLoaderDataFormat; import flash.net.URLRequest; public class LoadedShaderExample extends Sprite { private var loader:URLLoader; public function LoadedShaderExample() { loader = new URLLoader(); loader.dataFormat = URLLoaderDataFormat.BINARY; loader.addEventListener(Event.COMPLETE, loadCompleteHandler); loader.load(new URLRequest("donothing.pbj")); } private function loadCompleteHandler(event:Event):void { var shader:Shader = new Shader(); shader.byteCode = loader.data; // do something with the Shader instance } } }
L'esempio seguente presuppone che sia disponibile un file di codice byte dello shader denominato "donothing.pbj" nella stessa directory del codice sorgente dell'applicazione e che per compilare il file SWF venga utilizzato Flex SDK. Il codice di origine Pixel Bender per lo shader DoNothing è disponibile nell'esempio di classe ShaderData.
package { import flash.display.Shader; import flash.display.Sprite; public class EmbeddedShaderExample extends Sprite { [Embed(source="donothing.pbj", mimeType="application/octet-stream")] private static var DoNothingShader:Class; public function EmbeddedShaderExample() { var shader:Shader = new Shader(); shader.byteCode = new DoNothingShader(); // do something with the Shader instance } } }
Tue Jun 12 2018, 02:44 PM Z