Laden oder Einbetten eines Shaders

Flash Player 10 und höher, Adobe AIR 1.5 und höher

Um einen Pixel Bender-Shader in ActionScript zu verwenden, benötigen Sie zunächst Zugriff auf den Shader im ActionScript-Code. Da Shader mit dem Adobe Pixel Bender Toolkit erstellt und in der Pixel Bender-Programmiersprache geschrieben werden, ist kein direkter Zugriff in ActionScript möglich. Sie müssen stattdessen eine Instanz der Shader-Klasse erstellen, die den Pixel Bender-Shader in ActionScript repräsentiert. Mithilfe des Shader-Objekts können Sie Informationen über den Shader ermitteln, z. B. ob Parameter oder Werte für Eingabebilder erforderlich sind. Um den Shader zu verwenden, übergeben Sie das Shader-Objekt an andere Objekte. Um den Shader beispielsweise als Filter zu verwenden, weisen Sie das Shader-Objekt der shader -Eigenschaft eines ShaderFilter-Objekts zu. Alternativ können Sie den Shader auch als Füllung für eine Zeichnung verwenden, indem Sie das Shader-Objekt als Argument an die Graphics.beginShaderFill() -Methode übergeben.

Der ActionScript-Code kann auf einen mit dem Adobe Pixel Bender Toolkit erstellten Shader (eine .pbj-Datei) auf zwei Arten zugreifen:

  • Laden zur Laufzeit: Die Shader-Datei kann mit einem URLLoader-Objekt als externes Element geladen werden. Dieses Verfahren entspricht dem Laden anderer externer Elemente wie z. B. einer Textdatei. Das folgende Beispiel zeigt, wie eine Bytecode-Datei für einen Shader zur Laufzeit geladen und mit einer Shader-Instanz verknüpft wird:

    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 
    }
  • Einbetten in die SWF-Datei: Die Shader-Datei kann beim Kompilieren mithilfe des Metadaten-Tags [Embed] in die SWF-Datei eingebettet werden. Das Metadaten-Tag [Embed] ist nur verfügbar, wenn Sie die SWF-Datei mit dem Flex SDK kompilieren. Der source -Parameter des [Embed] -Tags verweist auf die Shader-Datei und der mimeType -Parameter lautet "application/octet-stream" , wie im folgenden Beispiel gezeigt:

    [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 beiden Fällen verknüpfen Sie den unformatierten Shader-Bytecode (die URLLoader.data -Eigenschaft oder eine Instanz der [Embed] -Datenklasse) mit der Shader-Instanz. Wie im vorherigen Beispiel zu sehen ist, können Sie den Bytecode auf zwei Arten mit der Shader-Instanz verknüpfen. Sie können den Shader-Bytecode als Argument an den Shader() -Konstruktor übergeben. Oder Sie legen ihn als byteCode -Eigenschaft der Shader-Instanz fest.

Nachdem ein Pixel Bender-Shader erstellt und mit einem Shader-Objekt verknüpft wurde, können Sie mit dem Shader auf unterschiedliche Weise Effekte erstellen. Sie können den Shader als Filter, Mischmodus oder Bitmap-Füllung sowie zur eigenständigen Verarbeitung von Bitmaps und anderen Daten verwenden. Darüber hinaus können Sie mit der data -Eigenschaft des Shader-Objekts auf die Metadaten des Shaders zugreifen, Eingabebilder angeben und Parameterwerte festlegen.