包 | flash.display |
类 | public class ShaderJob |
继承 | ShaderJob EventDispatcher Object |
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
在独立模式中使用着色器有两个主要原因:
- 处理非图像数据:使用 ShaderJob 实例可以控制输入值和着色器结果的使用方式。着色器可以作为二进制数据或数字数据(而非图像数据)返回结果。
- 后台处理:某些着色器很复杂,并且需要执行很长时间。在应用程序的主要执行操作中执行复杂着色器可能会减慢其他应用程序部件(比如用户交互或更新屏幕操作)的运行速度。使用 ShaderJob 实例,您可以在后台执行着色器。以此方法执行着色器时,着色器操作将独立于应用程序的主执行过程运行。
shader
属性(或构造函数参数)指定 Shader 实例(表示用于操作的着色器)。您使用关联的 ShaderParameter 或 ShaderInput 实例提供着色器所需的任何参数或输入。
在执行 ShaderJob 操作之前,您提供一个向其写入结果的对象,方法是将其设置为 target
属性的值。当着色器操作完成时,结果将写入 target
对象。
要开始后台着色器操作,请调用 start()
方法。当该操作完成时,结果将写入 target
对象。此时 ShaderJob 实例将调度 complete
事件,通知侦听器结果已可用。
要同步执行着色器操作(即不在后台运行),请调用 start()
方法并作为参数传递 true
。着色器在主要执行线程中运行,并且您的代码在操作完成之前将暂停。完成时,结果将写入 target
对象。这时,应用程序将继续运行下一行代码。
相关 API 元素
属性 | 由以下参数定义 | ||
---|---|---|---|
constructor : Object
对类对象或给定对象实例的构造函数的引用。 | Object | ||
height : int
target 中结果数据的高度(如果为 ByteArray 或 Vector.<Number> 实例。 | ShaderJob | ||
progress : Number [只读]
正在运行的着色器的进度。 | ShaderJob | ||
shader : Shader
用于操作的着色器。 | ShaderJob | ||
target : Object
在其中写入着色器操作结果的对象。 | ShaderJob | ||
width : int
target 中结果数据的宽度(如果为 ByteArray 或 Vector.<Number> 实例。 | ShaderJob |
方法 | 由以下参数定义 | ||
---|---|---|---|
ShaderJob | |||
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
使用 EventDispatcher 对象注册事件侦听器对象,以使侦听器能够接收事件通知。 | EventDispatcher | ||
取消当前运行的着色器操作。 | ShaderJob | ||
将事件调度到事件流中。 | EventDispatcher | ||
检查 EventDispatcher 对象是否为特定事件类型注册了任何侦听器。 | EventDispatcher | ||
表示对象是否已经定义了指定的属性。 | Object | ||
表示 Object 类的实例是否在指定为参数的对象的原型链中。 | Object | ||
表示指定的属性是否存在、是否可枚举。 | Object | ||
从 EventDispatcher 对象中删除侦听器。 | EventDispatcher | ||
设置循环操作动态属性的可用性。 | Object | ||
根据 waitForCompletion 参数的值,以同步模式或异步模式启动着色器操作。 | ShaderJob | ||
返回此对象的字符串表示形式,其格式设置遵守区域设置特定的约定。 | Object | ||
返回指定对象的字符串表示形式。 | Object | ||
返回指定对象的原始值。 | Object | ||
检查是否用此 EventDispatcher 对象或其任何祖代为指定事件类型注册了事件侦听器。 | EventDispatcher |
事件 | 摘要 | 由以下参数定义 | ||
---|---|---|---|---|
[广播事件] Flash Player 或 AIR 应用程序获得操作系统焦点并变为活动状态时将调度此事件。 | EventDispatcher | |||
当异步执行的 ShaderJob 使用着色器处理完数据时调度。 | ShaderJob | |||
[广播事件] Flash Player 或 AIR 应用程序失去操作系统焦点并变为非活动状态时将调度此事件。 | EventDispatcher |
height | 属性 |
progress | 属性 |
shader | 属性 |
shader:Shader
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
用于操作的着色器。必须使用 Shader 实例的 data
属性的 ShaderInput 或 ShaderParameter 属性提供着色器所需的任何输入或参数。必须使用与输入对应的 ShaderInput 来提供输入,即使它与 target
对象相同。
要处理包含线性数据数组(而不是图像数据)的 ByteArray,请在 ByteArray 中将对应 ShaderInput 实例的 height
设置为 1,并将 width
设置为 32 位浮点值数字。在这种情况下,必须将着色器中的输入定义为具有 image1
数据类型。
实现
public function get shader():Shader
public function set shader(value:Shader):void
相关 API 元素
target | 属性 |
width | 属性 |
ShaderJob | () | 构造函数 |
public function ShaderJob(shader:Shader = null, target:Object = null, width:int = 0, height:int = 0)
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
参数
shader:Shader (default = null ) — 要用于操作的着色器。
| |
target:Object (default = null ) — 在其中写入着色器操作结果的对象。此参数必须为 BitmapData、ByteArray 或 Vector.<Number> 实例。
| |
width:int (default = 0 ) — target 中结果数据的宽度(如果为 ByteArray 或 Vector.<Number> 实例。如有必要,会增大 ByteArray 或 Vector.<Number> 实例的大小,并会覆盖现有数据。
| |
height:int (default = 0 ) — target 中结果数据的高度(如果为 ByteArray 或 Vector.<Number> 实例。如有必要,会增大 ByteArray 或 Vector.<Number> 实例的大小,并会覆盖现有数据。
|
cancel | () | 方法 |
public function cancel():void
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
取消当前运行的着色器操作。放弃任何已计算出的结果数据。未调度 complete
事件。
调用 cancel()
多次不会产生额外效果。
start | () | 方法 |
public function start(waitForCompletion:Boolean = false):void
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
根据 waitForCompletion
参数的值,以同步模式或异步模式启动着色器操作。
在异步模式(当 waitForCompletion
为 false
时,即默认模式)中,ShaderJob 执行在后台运行。着色器操作不影响显示或其他操作的响应能力。在异步模式中,start()
调用将立即返回,并且该程序继续执行下一行代码。当异步着色器操作完成时,结果将可用并调度 complete
事件。
一次只有一个后台 ShaderJob 操作执行。Shader 操作在执行之前将保留在队列中。如果在着色器操作正在执行的过程中调用 start()
方法,则会将附加操作添加到队列的末尾。以后,在轮到它时将会执行。
要以同步模式执行着色器操作,请使用 waitForCompletion
参数(唯一参数)的 true
值调用 start()
。您的代码将在调用 start()
时暂停,直到着色器操作完成。这时,结果将可用并将继续执行下一行代码。
调用 start()
方法时,将在内部复制 shader
属性中的 Shader 实例。着色器操作将使用该内部副本,而不是对原始着色器的引用。对着色器进行的任何更改(比如更改参数值、输入或字节代码)不会应用于所复制的用于着色器处理的着色器。要将着色器更改结合到着色器处理中,请调用 cancel()
方法(如有必要),并再次调用 start()
方法以重新开始着色器处理。
当着色器操作正在执行时,target
对象的值不会变化。操作完成(并以异步模式调度了 complete
事件)后,整个结果将一次性写入 target
对象。如果 target
对象是 BitmapData 实例,并且在操作完成之前调用了其 dispose()
方法,则仍然会以异步模式调度 complete
事件。但是,结果数据不会写入 BitmapData 对象,因为该对象处于已处理状态。
参数
waitForCompletion:Boolean (default = false ) — 指定是在后台(默认值为 false )还是在主要程序执行 (true ) 中执行着色器。
|
事件
complete: — 如果使用值为 true 的 waitForCompletion 参数调用 start() 方法,则在操作完成时调度。
|
引发
ArgumentError — 当 target 属性为 null ,或者不是 BitmapData、ByteArray 或 Vector.<Number> 实例。
| |
ArgumentError — 当着色器指定了未提供的图像输入时。
| |
ArgumentError — 当使用 ByteArray 或 Vector.<Number> 实例作为输入,并且没有为 ShaderInput 指定 width 和 height 属性或指定的值与输入对象中的数据量不匹配时。有关详细信息,请参阅 ShaderInput.input 属性。
|
complete | 事件 |
flash.events.ShaderEvent
属性 ShaderEvent.type =
flash.events.ShaderEvent.COMPLETE
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
当异步执行的 ShaderJob 使用着色器处理完数据时调度。当使用 waitForCompletion
参数的 false
值调用 start()
方法时,将异步执行 ShaderJob 实例。
complete
事件对象的 type
属性值。
此事件具有以下属性:
属性 | 值 |
---|---|
bubbles | false |
bitmapData | 包含已完成操作的结果的 BitmapData 对象(如果目标不是 BitmapData 对象,则为 null )。 |
byteArray | 包含已完成操作的结果的 ByteArray 对象(如果目标不是 ByteArray 对象,则为 null )。 |
cancelable | false ;没有要取消的默认行为。 |
currentTarget | 当前正在使用某个事件侦听器处理 Event 对象的对象。 |
target | 报告完成的 ShaderJob 对象。 |
vector | 包含已完成操作的结果的 Vector.<Number> 实例(如果目标不是 Vector.<Number> 实例,则为 null )。 |
Tue Jun 12 2018, 11:04 AM Z