在獨立模式中使用著色器Flash Player 10 以及更新的版本,Adobe AIR 1.5 以及更新的版本 當您在獨立模式中使用著色器時,著色器程序的執行方式與輸出的使用方式無關。您必須指定要執行的著色器、設定輸入和參數值,然後指定要在其中放置結果資料的物件。基於下列兩個原因,您可以在獨立模式中使用著色器:
您可以使用 ShaderJob 物件,在獨立模式中執行著色器。首先,您必須建立 ShaderJob 物件,並將其連結至表示要執行之著色器的 Shader 物件。 var job:ShaderJob = new ShaderJob(myShader); 接著,再設定著色器所需的任何輸入或參數值。如果您要在背景執行著色器,請為 ShaderJob 物件的 complete 事件註冊偵聽程式。當著色器完成工作時,便會呼叫您註冊的偵聽程式: function completeHandler(event:ShaderEvent):void { // do something with the shader result } job.addEventListener(ShaderEvent.COMPLETE, completeHandler); 接下來,請建立在著色器作業完成時,要在其中寫入作業結果的物件。然後,再將該物件指定給 ShaderJob 物件的 target 屬性: var jobResult:BitmapData = new BitmapData(100, 75); job.target = jobResult; 如果您要使用 ShaderJob 執行影像處理,請將 BitmapData 實體指定給 target 屬性。如果您要處理二進位或數字資料,請將 ByteArray 物件或 Vector.<Number> 實體指定給 target 屬性。在這種情況下,您必須設定 ShaderJob 物件的 width 和 height 屬性,指定要輸出至 target 物件的資料量。 備註: 您可以傳遞引數至 ShaderJob() 建構函式,一次設定 ShaderJob 物件的 shader、target、width 和 height 屬性,如下所示:var job:ShaderJob = new ShaderJob(myShader, myTarget, myWidth, myHeight);
當您要開始執行著色器時,請呼叫 ShaderJob 物件的 start() 方法: job.start(); 根據預設,呼叫 start() 可以讓 ShaderJob 以非同步方式執行。在這種情況下,程式會立刻從下一行程式碼繼續執行,而不需要等待著色器作業完成。當著色器作業完成時,ShaderJob 物件會呼叫其 complete 事件偵聽程式,告知這些偵聽程式作業已經完成。在這個時候 (也就是在 complete 事件偵聽程式的主體中),target 物件會包含著色器作業結果。 備註: 您可以直接從傳遞至偵聽程式方法的事件物件擷取著色器結果,而不必使用 target 屬性。這個事件物件是 ShaderEvent 實體。視您設定為 target 屬性之物件的資料類型,ShaderEvent 物件具有可用來存取結果的三個屬性:ShaderEvent.bitmapData、ShaderEvent.byteArray 和 ShaderEvent.vector。
此外,您也可以傳遞 true 引數至 start() 方法。在這種情況下,著色器作業會以同步方式執行。如此一來,所有程式碼 (包括與使用者介面的互動及其它事件) 都會暫停,直到著色器作業完成為止。當著色器作業完成時,target 物件會包含著色器結果,然後程式會從下一行程式碼繼續執行。 job.start(true); |
|