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.
|
|
|