помогите преобразовать этот код as3 в код пиксель-бендера - PullRequest
0 голосов
/ 09 июля 2010

Мне нужна помощь в преобразовании кода as3 в код pixelbender, чтобы повысить производительность моего приложения.

Этот код as3 выглядит следующим образом. Я сканирую числовые значения байтового массива кусками. Допустим, длина фрагмента была 100 цифр. Я прочитал 2 цифры (слева и справа) и попытался найти максимальные значения. Числа в моем байтовом массиве - это данные PCM, поэтому их миллионы, и выполнение этого кода часто занимает много времени, особенно на машине с низкой спецификацией.

Вся цель этого - сделать сигнал максимально быстрым. Я очень мало знаю о пиксельном изгибе. Я могу в основном сделать новый файл и создать его shaderJob во флэш-памяти, но я действительно не уверен, как подойти к этому ...

Полагаю, я действительно спрашиваю, как я могу передать pixelbender

А) «кусок» чисел и заставить его передать мне 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;
                }
}

1 Ответ

2 голосов
/ 09 июля 2010

Pixel Bender не является подходящим инструментом для этой задачи, поскольку он не поддерживает циклы и, следовательно, не может выполнять поиск в массиве данных, чтобы вернуть вам отдельные значения.Он также не может передавать значения следующему обработанному чанку, что было бы неплохо с тех пор, как вы можете просто сравнить текущий чанк с найденным ранее максимумом, как в цепочке сегментов.

Вместо этого я рекомендую вам иметьвзгляните на Alchemy и используйте его быстрые коды операций bytearray для быстрого поиска в ваших данных.У Joa Ebert и Burak Kalayci есть инструменты для сборки, которые позволяют вам использовать эти коды операций даже без необходимости программирования на C: http://philippe.elsass.me/2010/05/as3-fast-memory-access-without-alchemy/

...