シェーダーメタデータへのアクセス

Flash Player 10 以降、Adobe AIR 1.5 以降

Pixel Bender シェーダーのカーネルを作成するとき、Pixel Bender のソースコード内でシェーダーに関するメタデータを指定できます。ActionScript でシェーダーを使用する際、シェーダーを調べてそのメタデータを抽出できます。

Shader インスタンスを作成して、Pixel Bender シェーダーにリンクする場合、シェーダーに関するデータを含む ShaderData オブジェクトが作成され、Shader オブジェクトの data プロパティに格納されます。ShaderData クラスはそれ自体のプロパティは定義しません。ただし、実行時に、シェーダーソースコードで定義されている個々のメタデータ値に対応するプロパティが ShaderData オブジェクトに動的に追加されます。プロパティにはメタデータで指定されている名前と同じ名前が指定されます。例えば、Pixel Bender シェーダーのソースコードに次のようなメタデータ定義が含まれているとします。

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

このシェーダー用に作成される ShaderData オブジェクトには次のようなプロパティと値が設定されます。

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

  • vendor (String): "Bob Jones"

  • version (String): "1"

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

メタデータプロパティは ShaderData オブジェクトに動的に追加されるので、 for..in ループを使用して ShaderData オブジェクトを調べることができます。この方法を使用すると、シェーダーにメタデータが含まれているかどうかとメタデータの値を知ることができます。メタデータプロパティのほか、ShaderData オブジェクトには、シェーダーで定義されている入力とパラメーターを表すプロパティを設定できます。 for..in ループを使用して ShaderData オブジェクトを調べる場合、プロパティが入力(ShaderInput インスタンス)か、パラメーター(ShaderParameter インスタンス)か、メタデータ値(String インスタンス)かを識別するために各プロパティのデータ型を調べます。次の例では、 for..in ループを使用してシェーダーの data プロパティのダイナミックプロパティを調べる方法を示します。各メタデータ値が metadata という名前の Vector インスタンスに追加されます。この例では、 myShader という名前の Shader インスタンスが既に作成されているとします。

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

この例をシェーダーの入力およびパラメーターの抽出も行うように変更した例は、 シェーダーの入力およびパラメーターの識別 を参照してください。入力とパラメーターのプロパティについて詳しくは、 シェーダーの入力およびパラメーターの値の指定 を参照してください。