套件 | 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 作業。所有著色器作業都會保留在佇列中,等候這些作業完成。如果在著色器作業執行時呼叫 start()
方法,佇列結尾會新增另一個作業。等到之後輪到該作業時,它才會執行。
若要以同步模式執行著色器作業,請呼叫 start()
,且使用 true
值做為 waitForCompletion
參數 (唯一的參數)。您的程式碼會暫停在呼叫 start()
的位置,直到著色器作業完成為止。此時會結果產生並繼續執行下一行程式碼。
當您呼叫 start()
方法時,shader
屬性中的 Shader 實體就會在內部複製。著色器作業會使用該內部副本,而不是原始著色器的參考。任何對著色器的變更,例如變更參數值、輸入,或是位元組碼,都不會套用到用於著色器處理的著色器副本。若要將著色器變更整合到著色器處理中,必要時呼叫 cancel()
方法,並再次呼叫 start()
方法來重新啟動著色器處理。
在著色器作業執行期間,target
物件的值並不會變更。當作業完成 (而且非同步模式中已傳送 complete
事件) 後,就會一次將完整結果寫入 target
物件。如果 target
物件為 BitmapData 實體且在作業完成之前呼叫其 dispose()
方法,則非同步模式中仍會傳送 complete
事件。但是,結果資料並不會寫入 BitmapData 物件,因為此物件處於已處理狀態。
參數
waitForCompletion:Boolean (default = false ) — 指定要在背景執行著色器 (預設值 false ) 或在主要程式中執行 (true )。
|
事件
complete: — 於作業完成時傳送,而且原先呼叫 start() 方法時 waitForCompletion 引數必須為 true 。
|
擲回值
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 使用著色器處理完資料時傳送。當呼叫 start()
方法,且使用 false
值做為 waitForCompletion
參數時,ShaderJob 實體就會以非同步方式執行。
complete
事件物件的 type
屬性值。
這個事件具有下列屬性:
屬性 | 值 |
---|---|
bubbles | false |
bitmapData | BitmapData 物件,內含剛完成的作業結果 (或為 null ,如果目標不是 BitmapData 物件的話)。 |
byteArray | ByteArray 物件,內含剛完成的作業結果 (或為 null ,如果目標不是 ByteArray 物件的話)。 |
cancelable | false ;沒有要取消的預設行為指令。 |
currentTarget | 正主動使用事件偵聽程式處理 Event 物件的物件。 |
target | 用來報告作業完成的 ShaderJob 物件。 |
vector | 已傳入 ShaderRunner.spawn() 的 Vector.<Number> 實體,內含剛完成的作業結果 (或為 null ,如果目標不是 Vector.<Number> 實體的話)。 |
Tue Jun 12 2018, 03:47 PM Z