访问着色器元数据
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
(字符串):
"Adobe::Example"
-
vendor
(字符串):
"Bob Jones"
-
version
(字符串):
"1"
-
description
(字符串):
"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
有关增加着色器输入和参数提取的此示例版本,请参阅
识别着色器输入和参数
。有关输入和参数属性的详细信息,请参阅
指定着色器输入和参数值
。
|
|
|