包 | flash.display |
类 | public class Shader |
继承 | Shader Object |
子类 | ColorBurnShader, ColorDodgeShader, ColorShader, ExclusionShader, HueShader, LuminosityMaskShader, LuminosityShader, SaturationShader, SoftLightShader |
语言版本: | 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 实例后,即可通过以下若干方式之一使用该实例:
- 着色器填充:使用着色器的输出作为利用绘图 API 所绘制内容的填充。将 Shader 实例作为参数传递到
Graphics.beginShaderFill()
方法。 - 着色器滤镜:使用着色器的输出作为应用于显示对象的图形滤镜。将 Shader 实例赋予 ShaderFilter 实例的
shader
属性。 - 混合模式:着色器的输出呈现为两个重叠显示对象之间的混合。将 Shader 实例赋予两个显示对象中位于上层的对象的
blendShader
属性。 - 后台着色器处理:着色器在后台执行(避免了冻结显示的可能性),并在处理完成时调度一个事件。将 Shader 实例赋予 ShaderJob 实例的
shader
属性。
在 GPU 呈现下不支持着色器填充、滤镜和混合。
移动浏览器支持:在移动浏览器中不支持此功能。
AIR 配置文件支持:所有桌面操作系统均支持此功能,但所有移动设备均不支持此功能。AIR for TV 设备不支持此功能。有关在多个配置文件之间支持 API 的详细信息,请参阅 AIR 配置文件支持。
相关 API 元素
flash.display.Graphics.beginShaderFill()
flash.display.ShaderJob
flash.filters.ShaderFilter
flash.net.URLLoader
属性 | 由以下参数定义 | ||
---|---|---|---|
byteCode : ByteArray [只写]
此 Shader 实例的原始着色器字节代码。 | Shader | ||
constructor : Object
对类对象或给定对象实例的构造函数的引用。 | Object | ||
data : ShaderData
提供对 Shader 实例的参数、输入图像和元数据的访问。 | Shader | ||
precisionHint : String
着色器所执行数学运算的精度。 | Shader |
方法 | 由以下参数定义 | ||
---|---|---|---|
创建一个新的 Shader 实例。 | Shader | ||
表示对象是否已经定义了指定的属性。 | Object | ||
表示 Object 类的实例是否在指定为参数的对象的原型链中。 | Object | ||
表示指定的属性是否存在、是否可枚举。 | Object | ||
设置循环操作动态属性的可用性。 | Object | ||
返回此对象的字符串表示形式,其格式设置遵守区域设置特定的约定。 | Object | ||
返回指定对象的字符串表示形式。 | Object | ||
返回指定对象的原始值。 | Object |
byteCode | 属性 |
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
相关 API 元素
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
相关 API 元素
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 } } }
Tue Jun 12 2018, 11:04 AM Z