Caricamento o incorporamento di uno shader

Flash Player 10 e versioni successive, Adobe AIR 1.5 e versioni successive

Il primo passo per usare uno shader di Pixel Bender in ActionScript consiste nell'accedere allo shader con codice scritto in ActionScript. Poiché lo shader viene creato con Adobe Pixel Bender Toolkit e viene scritto nel linguaggio Pixel Bender, non è possibile chiamarlo direttamente in ActionScript. È invece necessario creare un'istanza della classe Shader, che rappresenti lo shader di Pixel Bender in ActionScript. L'oggetto Shader vi consente di trovare le informazioni desiderate sullo shader, ad esempio se richiede parametri o valori per le immagini in input. Per usare lo shader, dovete passare l'oggetto Shader agli altri oggetti. Ad esempio, per usare lo shader come filtro dovete assegnare l'oggetto Shader a una proprietà shader dell'oggetto ShaderFilter. In alternativa, per usare lo shader come riempimento dovete impostare l'oggetto Shader come argomento del metodo Graphics.beginShaderFill() .

Usando il codice di ActionScript è possibile accedere a uno shader creato con Adobe Pixel Bender Toolkit (un file .pbj) in due modi:

  • Caricandolo in fase di runtime: il file shader può essere caricato come una risorsa esterna usando l'oggetto URLLoader. Questa tecnica è analoga a caricare risorse esterne come ad esempio i file di testo. 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 
    }
  • Incorporandolo nel file SWF: il file shader può essere incorporato nel file SWF in fase di compilazione usando il tag per metadati [Embed] . Il tag per metadati [Embed] è disponibile solo se usate Flex SDK per compilare il file SWF. Il parametro source del tag [Embed] 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 shader and set the embedded shader as its bytecode 
    var shader:Shader = 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 il codice byte dello shader d'origine (la proprietà URLLoader.data o un'istanza della classe di dati [Embed] ) all'istanza Shader. Come dimostrano gli esempi precedenti, è possibile assegnare il codice byte all'istanza Shader 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.

Dopo aver creato e collegato uno shader di Pixel Bender a un oggetto Shader, potete usare lo shader per creare gli effetti in vari modi. Potete usarlo come filtro, come metodo di fusione, come riempimento bitmap o per l'elaborazione autonoma di bitmap o altri dati. Potete inoltre usare la proprietà data dell'oggetto Shader per accedere ai metadati dello shader, per specificare le immagini di input e per impostare i valori dei parametri.