包 | flash.display |
类 | public final dynamic class ShaderData |
继承 | ShaderData Object |
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
创建 ShaderData 对象时会将这些属性添加到该对象中。这些属性的名称与着色器源代码中指定的名称相匹配。每个属性的数据类型因属性所表示的着色器方面而异。表示着色器参数的属性是 ShaderParameter 实例,表示输入图像的属性是 ShaderInput 实例,而表示着色器元数据的属性是与其数据类型相对应的 ActionScript 类的实例(例如,文本元数据的 String 实例和 uint 元数据的 uint)。
例如,假设有以下着色器,其中定义有一个输入图像 (src
)、两个参数(size
和 radius
)以及三个元数据值(nameSpace
、version
和 description
):
<languageVersion : 1.0;> kernel DoNothing < namespace: "Adobe::Example"; vendor: "Adobe examples"; version: 1; description: "A shader that does nothing, but does it well."; > { input image4 src; output pixel4 dst; parameter float2 size < description: "The size of the image to which the kernel is applied"; minValue: float2(0.0, 0.0); maxValue: float2(100.0, 100.0); defaultValue: float2(50.0, 50.0); >; parameter float radius < description: "The radius of the effect"; minValue: 0.0; maxValue: 50.0; defaultValue: 25.0; >; void evaluatePixel() { float2 one = (radius / radius) ∗ (size / size); dst = sampleNearest(src, outCoord()); } }
如果通过为此着色器加载字节代码来创建 Shader 实例,则其 data
属性中的 ShaderData 实例包含以下属性:
属性 | 数据类型 | 值 |
---|---|---|
name | 字符串 | "DoNothing" |
nameSpace | 字符串 | "Adobe::Example" |
version | 字符串 | "1" |
description | 字符串 | "A shader that does nothing, but does it well." |
src | ShaderInput | [一个 ShaderInput 实例] |
size | ShaderParameter | [一个 ShaderParameter 实例,包含参数元数据的属性] |
radius | ShaderParameter | [一个 ShaderParameter 实例,包含参数元数据的属性] |
请注意,将着色器编译为字节代码时,会删除着色器源代码中已定义但未在着色器的 evaluatePixel()
函数中使用的任何输入图像或参数。这种情况下,不会添加对应的 ShaderInput 或 ShaderParameter 实例作为 ShaderData 实例的属性。
通常,开发人员代码不创建 ShaderData 实例。包含着色器数据、参数和输入的 ShaderData 实例可用作 Shader 实例的 data
属性。
相关 API 元素
公共方法
方法 | 由以下参数定义 | ||
---|---|---|---|
ShaderData(byteCode:ByteArray)
创建 ShaderData 实例。 | ShaderData | ||
表示对象是否已经定义了指定的属性。 | Object | ||
表示 Object 类的实例是否在指定为参数的对象的原型链中。 | Object | ||
表示指定的属性是否存在、是否可枚举。 | Object | ||
设置循环操作动态属性的可用性。 | Object | ||
返回此对象的字符串表示形式,其格式设置遵守区域设置特定的约定。 | Object | ||
返回指定对象的字符串表示形式。 | Object | ||
返回指定对象的原始值。 | Object |
构造函数详细信息
ShaderData | () | 构造函数 |
示例 如何使用本示例
ShaderDataExample.1.as
下面的示例加载着色器并枚举着色器的
data
属性中的 ShaderData 实例,以显示着色器的输入、参数和元数据属性。
请注意,此示例假设应用程序输出目录所在的同一目录中有一个名为“donothing.pbj”的着色器字节码文件。
// // Source code for the shader: // <languageVersion : 1.0;> kernel DoNothing < namespace: "Adobe::Example"; vendor: "Adobe examples"; version: 1; description: "A shader that does nothing, but does it well."; > { input image4 src; output pixel4 dst; parameter float2 size < description: "The size of the image to which the shader is applied"; minValue: float2(0.0, 0.0); maxValue: float2(100.0, 100.0); defaultValue: float2(50.0, 50.0); >; parameter float radius < description: "The radius of the effect"; minValue: float(0.0); maxValue: float(50.0); defaultValue: float(25.0); >; void evaluatePixel() { float2 one = (radius / radius) * (size / size); dst = sampleNearest(src, outCoord()); } } // // ActionScript source code: // package { import flash.display.Shader; import flash.display.Sprite; import flash.events.Event; import flash.net.URLLoader; import flash.net.URLLoaderDataFormat; import flash.net.URLRequest; public class ShaderDataExample extends Sprite { private var loader:URLLoader; public function ShaderDataExample() { loader = new URLLoader(); loader.dataFormat = URLLoaderDataFormat.BINARY; loader.addEventListener(Event.COMPLETE, loadCompleteHandler); loader.load(new URLRequest("donothing.pbj")); } private function loadCompleteHandler(event:Event):void { var shader:Shader = new Shader(); shader.byteCode = loader.data; for (var p:String in shader.data) { trace(p, ":", shader.data[p]); for (var d:String in shader.data[p]) { trace("\t", d, ":", shader.data[p][d]); } } } } }
Tue Jun 12 2018, 11:04 AM Z