Uzyskiwanie dostępu do metadanych modułu cieniującego

Flash Player 10 i nowsze wersje, Adobe AIR 1.5 i nowsze wersje

Tworząc jądro modułu cieniującego Pixel Bender, jego autor może określić w kodzie bajtowym metadane opisujące moduł. Gdy moduł jest używany w programie ActionScript, można odczytać z niego te metadane.

Utworzenie wystąpienia klasy Shader i powiązanie go z modułem cieniującym Pixel Bender powoduje utworzenie obiektu ShaderData zawierającego dane dotyczące modułu cieniującego. Obiekt ten zostaje zapisany we właściwości data obiektu Shader. Klasa ShaderData nie definiuje żadnych właściwości. Jednak w czasie wykonywania do obiektu ShaderData dodawane są dynamicznie właściwości odpowiadające poszczególnym wartościom metadanych w kodzie źródłowym modułu cieniującego. Właściwości te otrzymują takie same nazwy, jak elementy metadanych. Załóżmy na przykład, że w kodzie źródłowym modułu cieniującego Pixel Bender znajduje się następująca definicja metadanych:

namespace : "Adobe::Example"; 
vendor : "Bob Jones"; 
version : 1; 
description : "Creates a version of the specified image with the specified brightness.";

Obiekt ShaderData utworzony dla tego modułu cieniującego będzie miał następujące właściwości i wartości:

  • namespace (String): "Adobe::Example"

  • vendor (String): "Bob Jones"

  • version (String): "1"

  • description (String): "Creates a version of the specified image with the specified brightness"

Właściwości metadanych są dodawane dynamicznie do obiektu ShaderData, dlatego pętla for..in może posłużyć do sprawdzenia zawartości obiektu ShaderData. Ta technika pozwala sprawdzić, czy moduł cieniujący zawiera jakiekolwiek metadane i jakie są wartości tych metadanych. Oprócz właściwości odpowiadających metadanym obiekt ShaderData może mieć właściwości reprezentujące dane wejściowe i parametry zdefiniowane w module cieniującym. Podczas odczytywania właściwości obiektu ShaderData za pomocą pętli for..in należy sprawdzać, czy typ danych każdej znalezionej właściwości to dane wejściowe (wystąpienie klasy ShaderInput), parametr (wystąpienie klasy ShaderParameter), czy wartość metadanych (wystąpienie klasy String). Poniższy przykład ilustruje użycie pętli for..in do odczytywania właściwości dynamicznych z właściwości data modułu cieniującego. Każda wartość metadanych jest dodawana do wystąpienia klasy Vector o nazwie metadata . W przykładzie przyjęto założenie, że istnieje już wystąpienie klasy Shader o nazwie myShader .

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

Wersja tego przykładu, która dodatkowo wyodrębnia dane wejściowe i parametry modułu cieniującego, znajduje się w sekcji Rozpoznawanie danych wejściowych i parametrów modułu cieniującego . Więcej informacji na temat danych wejściowych i parametrów zawiera sekcja Określanie wartości danych wejściowych i parametrów modułu cieniującego .