访问着色器元数据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 有关增加着色器输入和参数提取的此示例版本,请参阅识别着色器输入和参数。有关输入和参数属性的详细信息,请参阅指定着色器输入和参数值。 |
|