Zugreifen auf Shader-Metadaten

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

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 .