包 | flash.display |
类 | public class Shader |
继承 | Shader Object |
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
shader
属性。
着色器定义对图像中的所有像素执行的函数(一次一个像素)。对该函数的每次调用的结果都是图像中该像素坐标处的输出颜色。着色器可以指定一个或多个输入图像,这些图像的内容可用于确定函数的输出。着色器还可以指定一个或多个参数,这些参数是可用于计算函数输出的输入值。在单一着色器执行中,输入和参数值是常量。唯一发生变化的是像素(其颜色是函数结果)的坐标。针对多个输出像素坐标的着色器函数调用将并行执行,以改进着色器执行性能。
可以使用 URLLoader 实例在运行时加载着色器字节码。下面的示例演示如何在运行时加载着色器字节码文件并将其链接到一个 Shader 实例。
var loader:URLLoader = new URLLoader(); loader.dataFormat = URLLoaderDataFormat.BINARY; loader.addEventListener(Event.COMPLETE, onLoadComplete); loader.load(new URLRequest("myShader.pbj")); var shader:Shader; function onLoadComplete(event:Event):void { // Create a new shader and set the loaded data as its bytecode shader = new Shader(); shader.byteCode = loader.data; // You can also pass the bytecode to the Shader() constructor like this: // shader = new Shader(loader.data); // do something with the shader }
您还可以使用 [Embed]
元数据标记在编译时将着色器嵌入 SWF。只有在使用 Flex SDK 编译 SWF 时,[Embed]
元数据标记才可用。[Embed]
标记的 source
参数指向着色器文件,并且其 mimeType
参数为“application/octet-stream”
,如此例中所示:
[Embed(source="myShader.pbj", mimeType="application/octet-stream)] var MyShaderClass:Class; // ... // create a new shader and set the embedded shader as its bytecode var shaderShader = new Shader(); shader.byteCode = new MyShaderClass(); // You can also pass the bytecode to the Shader() constructor like this: // var shader:Shader = new Shader(new MyShaderClass()); // do something with the shader
在任何一种情况下,都可以将原始着色器(URLLoader.data
属性或 [Embed]
数据类的实例)链接到 Shader 实例。如前面的示例所演示,您可以采用两种方式执行此操作。可以将着色器字节代码作为参数传递到 Shader()
构造函数。或者,可以将其设置为 Shader 实例的 byteCode
属性。
创建了 Shader 实例后,即可通过以下若干方式之一使用该实例:
Graphics.beginShaderFill()
方法。
shader
属性。
blendShader
属性。
shader
属性。
另请参见
属性 | 定义方 | ||
---|---|---|---|
byteCode : ByteArray [只写] 此 Shader 实例的原始着色器字节代码。 | Shader | ||
constructor : Object
对类对象或给定对象实例的构造函数的引用。 | Object | ||
data : ShaderData 提供对 Shader 实例的参数、输入图像和元数据的访问。 | Shader | ||
precisionHint : String 着色器所执行数学运算的精度。 | Shader | ||
prototype : Object [静态]
对类或函数对象的原型对象的引用。 | Object |
方法 | 定义方 | ||
---|---|---|---|
创建一个新的 Shader 实例。 | Shader | ||
指示对象是否已经定义了指定的属性。 | Object | ||
指示 Object 类的实例是否在指定为参数的对象的原型链中。 | Object | ||
指示指定的属性是否存在、是否可枚举。 | Object | ||
设置循环操作动态属性的可用性。 | Object | ||
返回指定对象的字符串表示形式。 | Object | ||
返回指定对象的原始值。 | Object |
byteCode | 属性 |
byteCode:ByteArray
[只写] 语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
此 Shader 实例的原始着色器字节代码。
public function set byteCode(value:ByteArray):void
data | 属性 |
data:ShaderData
[读写] 语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
提供对 Shader 实例的参数、输入图像和元数据的访问。在创建 Shader 实例时,将动态添加表示着色器参数的 ShaderParameter 对象、表示着色器输入图像的 ShaderInput 对象以及表示着色器元数据的其它值,作为 data
属性对象的属性。可以使用这些属性对着色器进行内部检查,以及设置参数和输入值。
有关访问和处理 data
对象的动态属性的信息,请参阅 ShaderData 类说明。
public function get data():ShaderData
public function set data(value:ShaderData):void
另请参见
precisionHint | 属性 |
precisionHint:String
[读写] 语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
着色器所执行数学运算的精度。
precisionHint
属性的可能值的集合由 ShaderPrecision 类中的常量定义。
默认值为 ShaderPrecision.FULL
。将精度设置为 ShaderPrecision.FAST
可以加快数学运算速度,但会降低精度。
full 精度模式 (ShaderPrecision.FULL
) 将按照 IEEE 32 位浮点标准的全宽计算所有数学运算,并在所有平台上提供一致的行为。在此模式下,某些数学运算(比如三角函数和指数函数)可能速度较慢。
fast 精度模式 (ShaderPrecision.FAST
) 旨在获得最高性能,但在不同平台上和各种 CPU 配置下工作不一致。多数情况下,这种精度级别足以创建无可见失真的图形效果。
精度模式选择将影响以下着色器操作。在包含 SSE 指令集的 Intel 处理器上,这些操作的执行速度较快:
sin(x)
cos(x)
tan(x)
asin(x)
acos(x)
atan(x)
atan(x, y)
exp(x)
exp2(x)
log(x)
log2(x)
pow(x, y)
reciprocal(x)
sqrt(x)
public function get precisionHint():String
public function set precisionHint(value:String):void
另请参见
Shader | () | 构造函数 |
public function Shader(code:ByteArray = null)
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
创建一个新的 Shader 实例。
参数code:ByteArray (default = null ) — 要链接到 Shader 的原始着色器字节代码。 |
请注意,此示例假设应用程序输出目录所在的同一目录中有一个名为“donothing.pbj”的着色器字节码文件。ShaderData 类示例中提供了 DoNothing 着色器的 Pixel Bender 源代码。
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 LoadedShaderExample extends Sprite { private var loader:URLLoader; public function LoadedShaderExample() { 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; // do something with the Shader instance } } }
请注意,此示例假设应用程序源代码所在的同一目录中有一个名为“donothing.pbj”的着色器字节码文件,并且使用了 Flex SDK 来编译 SWF。ShaderData 类示例中提供了 DoNothing 着色器的 Pixel Bender 源代码。
package { import flash.display.Shader; import flash.display.Sprite; public class EmbeddedShaderExample extends Sprite { [Embed(source="donothing.pbj", mimeType="application/octet-stream")] private static var DoNothingShader:Class; public function EmbeddedShaderExample() { var shader:Shader = new Shader(); shader.byteCode = new DoNothingShader(); // do something with the Shader instance } } }