How to use Pixel Bender (pbj) in ActionScript3 on large Vectors to make fast calculations?
        Posted  
        
            by 
                Arthur Wulf White
            
        on Game Development
        
        See other posts from Game Development
        
            or by Arthur Wulf White
        
        
        
        Published on 2012-10-13T20:50:25Z
        Indexed on 
            2012/10/13
            21:53 UTC
        
        
        Read the original article
        Hit count: 421
        
Remember my old question: 2d game view camera zoom, rotation & offset using 'Filter' / 'Shader' processing?
I figured I could use a Pixel Bender Shader to do the computation for any large group of elements in a game to save on processing time. At least it's a theory worth checking.
I also read this question: Pass large array to pixel shader
Which I'm guessing is about accomplishing the same thing in a different language.
I read this tutorial: http://unitzeroone.com/blog/2009/03/18/flash-10-massive-amounts-of-3d-particles-with-alchemy-source-included/
I am attempting to do some tests. Here is some of the code:
        private const SIZE : int = Math.pow(10, 5);
        private var testVectorNum : Vector.<Number>; 
        private function testShader():void
        {
            shader.data.ab.value = [1.0, 8.0];
            shader.data.src.input = testVectorNum;
            shader.data.src.width = SIZE/400;
            shader.data.src.height = 100;
            shaderJob = new ShaderJob(shader, testVectorNum, SIZE / 4, 1);
            var time : int = getTimer(), i : int = 0;
            shaderJob.start(true);
            trace("TEST1 : ", getTimer() - time);
        }
The problem is that I keep getting a error saying:
[Fault] exception, information=Error: Error #1000: The system is out of memory.
Update:
I managed to partially workaround the problem by converting the vector into bitmapData: (Using this technique I still get a speed boost of 3x using Pixel Bender)
    private function testShader():void
    {
        shader.data.ab.value = [1.0, 8.0];
        var time : int = getTimer(), i : int = 0;
        testBitmapData.setVector(testBitmapData.rect, testVectorInt);
        shader.data.src.input = testBitmapData;
        shaderJob = new ShaderJob(shader, testBitmapData);
        shaderJob.start(true);
        testVectorInt = testBitmapData.getVector(testBitmapData.rect);
        trace("TEST1 : ", getTimer() - time);
    }
        © Game Development or respective owner