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

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

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