我正在寻找帮助将as3代码转换为pixelbender代码的一些帮助,以尝试提高我的应用程序的性能。
这个as3代码如下。我扫描块中的bytearray的Number值。让我们说这个块长度是100个数字我读了2个数字(左和右)并尝试找到最大值。我的bytearray中的数字是PCM数据,因此有数百万个,这些代码通常需要很长时间才能执行,特别是在低规格机器上。
这样做的目的是尽可能快地渲染波形。我对像素弯曲器知之甚少。我基本上可以创建一个新文件并在flash中创建一个shaderJob,但我真的不确定如何处理它...
我想我真的在问我如何传递pixelbender
A)数字的“大块”并让它传回2个最大值(左和右)
或
B)我的整个bytearray和像素弯曲器为我做块状的东西
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;
}
}
答案 0 :(得分:2)
Pixel Bender不适合执行此任务,因为它不支持循环,因此无法搜索数据数组以返回单个值。它也不能将值传递给下一个处理过的块,这样会很好,因为那样你就可以将当前块与先前找到的最大值进行比较,就像在存储桶链中一样。
相反,我建议您查看Alchemy并使用其快速的bytearray操作码快速搜索您的数据。 Joa Ebert和Burak Kalayci都构建了帮助工具,即使不需要在C语言中编程,也可以使用这些操作码:http://philippe.elsass.me/2010/05/as3-fast-memory-access-without-alchemy/