載入或嵌入著色器

Flash Player 10 以及更新的版本,Adobe AIR 1.5 以及更新的版本

在 ActionScript 中使用 Pixel Bender 著色器的第一個步驟,就是在您的 ActionScript 程式碼中存取著色器。由於著色器是使用 Adobe Pixel Bender Toolkit 建立,並以 Pixel Bender 語言撰寫而成,因此無法在 ActionScript 中直接存取,而必須建立代表 Pixel Bender 著色器的 Shader 類別實體至 ActionScript。Shader 物件可以讓您查明有關著色器的資訊,例如,著色器應該會預期得到參數或輸入影像值。您需要將 Shader 物件傳遞給其他物件,才能真正使用著色器。例如,若要使用著色器做為濾鏡,必須指定 Shader 物件給 ShaderFilter 物件的 shader 屬性。或者,若要使用著色器做為繪圖填色,必須以 Shader 物件做為引數,傳遞給 Graphics.beginShaderFill() 方法。

您的 ActionScript 程式碼有兩種方式可以存取由 Adobe Pixel Bender Toolkit 建立的著色器 (.pbj 檔):

  • 在執行階段載入:著色器檔案可以使用 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 
    }
  • 嵌入 SWF 檔中:在編譯階段,可以使用 [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 shader and set the embedded shader as its bytecode 
    var shader:Shader = 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() 建構函數。或者,您可以將它設為 Shader 實體的 byteCode 屬性。

建立 Pixel Bender 著色器並連結至 Shader 物件之後,您就可以使用著色器,以多種方式來創造效果。您可以用它來做為濾鏡、混合模式、點陣圖填色,或者獨立處理點陣圖或其他資料。您也可以使用 Shader 物件的 data 屬性,存取著色器的中繼資料、指定輸入影像,以及設定參數值。