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