Beim Erstellen eines Shader-Kernels in Pixel Bender kann der Ersteller im Pixel Bender-Quellcode Metadaten zum Shader angeben. Bei der Verwendung eines Shaders in ActionScript haben Sie die Möglichkeit, diesen zu analysieren und die zugehörigen Metadaten zu extrahieren.
Wenn Sie eine Shader-Instanz erstellen und mit einem Pixel Bender-Shader verknüpfen, wird ein ShaderData-Objekt mit Daten zu dem Shader erstellt und in der
data
-Eigenschaft des Shader-Objekts gespeichert. Die ShaderData-Klasse selbst definiert keine Eigenschaften. Zur Laufzeit wird dem ShaderData-Objekt jedoch dynamisch eine Eigenschaft für jeden Metadatenwert hinzugefügt, der im Quellcode des Shaders definiert ist. Der Name der einzelnen Eigenschaften entspricht dem Namen, der in den Metadaten angegeben ist. Angenommen, der Quellcode eines Pixel Bender-Shaders enthält die folgende Metadatendefinition:
namespace : "Adobe::Example";
vendor : "Bob Jones";
version : 1;
description : "Creates a version of the specified image with the specified brightness.";
Das ShaderData-Objekt für diesen Shader wird dann mit den folgenden Eigenschaften und Werten erstellt:
-
namespace
(String):
"Adobe::Example"
-
vendor
(String):
"Bob Jones"
-
version
(String):
"1"
-
description
(String):
"Creates a version of the specified image with the specified brightness"
Da Metadateneigenschaften dem ShaderData-Objekt dynamisch hinzugefügt werden, können Sie eine
for..in
-Schleife verwenden, um das ShaderData-Objekt zu analysieren. Mit diesem Verfahren können Sie ermitteln, ob der Shader Metadaten enthält und wie die Metadatenwerte lauten. Zusätzlich zu Metadateneigenschaften kann ein ShaderData-Objekt Eigenschaften aufweisen, die in dem Shader definierte Eingaben und Parameter darstellen. Bei Verwendung einer
for..in
-Schleife zum Analysieren eines ShaderData-Objekts müssen Sie den Datentyp jeder Eigenschaft überprüfen. Auf diese Weise können Sie feststellen, ob die Eigenschaft eine Eingabe (eine ShaderInput-Instanz), ein Parameter (eine ShaderParameter-Instanz) oder ein Metadatenwert (eine String-Instanz) ist. Das folgende Beispiel veranschaulicht, wie Sie mit der
for..in
-Schleife die dynamischen Eigenschaften der
data
-Eigenschaft eines Shaders überprüfen. Jeder Metadatenwert wird einer Vector-Instanz mit dem Namen
metadata
hinzugefügt. Beachten Sie, dass für dieses Beispiel bereits eine Shader-Instanz mit dem Namen
myShader
erstellt sein muss.
var shaderData:ShaderData = myShader.data;
var metadata:Vector.<String> = new Vector.<String>();
for (var prop:String in shaderData)
{
if (!(shaderData[prop] is ShaderInput) && !(shaderData[prop] is ShaderParameter))
{
metadata[metadata.length] = shaderData[prop];
}
}
// do something with the metadata
Eine Version dieses Beispiels, in der zudem Shader-Eingaben und -Parameter extrahiert werden, finden Sie unter
Identifizieren von Shader-Eingaben und -Parametern
. Weitere Informationen zu Eingabe- und Parametereigenschaften finden Sie unter
Angeben von Shader-Eingaben und -Parameterwerten
.