| 包 | 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 | String | "DoNothing" |
| nameSpace | String | "Adobe::Example" |
| version | String | "1" |
| description | String | "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 属性。
另请参见
| 方法 | 定义方 | ||
|---|---|---|---|
ShaderData(byteCode:ByteArray) 创建 ShaderData 实例。 | ShaderData | ||
![]() |
指示对象是否已经定义了指定的属性。 | Object | |
![]() |
指示 Object 类的实例是否在指定为参数的对象的原型链中。 | Object | |
![]() |
指示指定的属性是否存在、是否可枚举。 | Object | |
![]() |
设置循环操作动态属性的可用性。 | Object | |
![]() |
返回指定对象的字符串表示形式。 | Object | |
![]() |
返回指定对象的原始值。 | Object | |
| ShaderData | () | 构造函数 |
public function ShaderData(byteCode:ByteArray)| 语言版本: | ActionScript 3.0 |
| 运行时版本: | Flash Player 10, AIR 1.5 |
创建 ShaderData 实例。通常,开发人员代码不直接调用 ShaderData 构造函数。使用 Shader 实例的 data 属性来访问包含该实例数据、参数和输入的 ShaderData 实例。
byteCode:ByteArray — 着色器的字节代码。 |
另请参见
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]);
}
}
}
}
}