シェーダーメタデータへのアクセス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 オブジェクトには次のようなプロパティと値が設定されます。
メタデータプロパティは 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 この例をシェーダーの入力およびパラメーターの抽出も行うように変更した例は、シェーダーの入力およびパラメーターの識別を参照してください。入力とパラメーターのプロパティについて詳しくは、シェーダーの入力およびパラメーターの値の指定を参照してください。 |
![]() |