2013-01-19 28 views
1

我有一個問題,它變得真的很煩人。我想用一個簡單的Shader返回所有像素的顏色的圖像,而只是分配一個腳本到Shader被證明是一個挑戰。 我不知道PixelBender劇本,我不打算研究太多,因爲我只是想用它爲這個簡單的功能,但是從我的例子已經構造這個簡單的腳本:AS3 - PixelBender着色器引發ArgumentError

<languageVersion : 1.0;> 

kernel PixelColourShader 
< namespace : "puggsoy"; 
    vendor : "Puggsoy"; 
    version : 1; 
> 
{ 
    input image4 src; 
    output pixel4 dst; 

    void 
    evaluatePixel() 
    { 
     dst = sampleNearest(src, outCoord()); 
    } 
} 

這裏的我做了一個簡單的AS3的腳本來測試加載它:

package 
{ 
    import flash.display.Shader; 
    import flash.display.Sprite; 
    import flash.utils.ByteArray; 

    public class Main extends Sprite 
    { 
     [Embed(source = "PixelColourShader.pbj", mimeType = "application/octet-stream")] 
     private var PixelColourShader:Class; 

     private var shader:Shader; 

     public function Main():void 
     { 
      shader = new Shader(new PixelColourShader() as ByteArray); 
     } 

    } 

} 

我看過了許多例子,我敢肯定這是加載它的正確方法。然而,這總是給這個運行時錯誤:

[Fault] exception, information=ArgumentError: Error #2004: One of the parameters is invalid. 

,我不知道爲什麼。從我所看到的參數是完全有效的。

我在做這與使用的FlashDevelop了Flex 4 SDK的AIR應用程序。

+0

這是奇數。我不能建議很多,但我只是測試你的代碼在Flash CS5.5和它編譯並運行正常,所以我不認爲你正在做什麼不對勁的地方(以及內核本身顯然是幾乎相同的模板腳本)。 –

回答

0

試試這個:

var shaderShader = new Shader(); 
shader.byteCode = new PixelColourShader(); 
+0

這也行不通,我得到相同的結果。在你的代碼中也有一個錯誤,它應該是'shader'而不是'shaderShader'。 – puggsoy

0

你需要使用的東西像Adobe的Pixel Bender編譯文本文件轉換爲二進制PBJ。