0

我正在寻求将 as3 代码转换为 pixelbender 代码的帮助,以尝试提高我的应用程序的性能。

这个 as3 代码如下。我以块的形式扫描字节数组的数值。假设这个块长度是 100 个数字,我读取了 2 个数字(左右)并尝试找到最大值。我的字节数组中的数字是 PCM 数据,因此有数百万个,并且此代码通常需要很长时间才能执行,尤其是在低规格机器上。

这样做的全部目的是尽可能快地渲染波形。我对像素弯曲器知之甚少。我基本上可以制作一个新文件并在闪存中创建它的shaderJob,但我真的不确定如何处理这个......

我想我真的在问我如何通过 pixelbender

A)一个“块”数字并让它传给我2个最大值(左和右)

或者

B)我的整个字节数组并让像素弯曲器为我做分块的东西

var spritePixelIndex:Number=0;
            var spriteSize:Number;
            spriteSize=_sizes[_numberOfZoomLevels - 1];
            blockSize=Math.floor(_pcmLength / spriteSize);
                chunksize=blockSize * 100;


for (var i:int=0; i < chunksize; ++i)
            {
                if (_pcmData.bytesAvailable)
                {
                    var la:Number=_pcmData.readFloat();
                    var ra:Number=_pcmData.readFloat();
                    var l:Number=la > 0.0 ? la : -la;
                    var r:Number=ra > 0.0 ? ra : -ra;

                    ++_divCount;
                    var ml:Number=0;
                    var mr:Number=0;
                    var a_ml:Number=ml > 0.0 ? ml : -ml;
                    var a_mr:Number=mr > 0.0 ? mr : -mr;

                    ml=a_ml > (l) ? ml : l;
                    mr=a_mr > (r) ? mr : r;
                }
}
4

1 回答 1

2

Pixel Bender 不是此任务的正确工具,因为它不支持循环,因此无法搜索数据数组以返回单个值。它也不能将值传递给下一个处理的块,这很好,因为那时您可以将当前块与先前找到的最大值进行比较,就像在桶链中一样。

相反,我建议您查看 Alchemy 并使用它的快速字节数组操作码来快速搜索您的数据。Joa Ebert 和 Burak Kalayci 都有构建帮助工具,即使不需要在 C 中编程,您也可以使用这些操作码:http: //philippe.elsass.me/2010/05/as3-fast-memory-access-without-炼金术/

于 2010-07-09T11:14:09.423 回答