0

アプリケーションのパフォーマンスを向上させるために、as3 コードを pixelbender コードに変換する方法を探しています。

この as3 コードは次のようになります。bytearray の Number 値をチャンク単位でスキャンします。このチャンクの長さが 100 の数字であるとしましょう。2 つの数字 (左と右) を読み取り、最大値を見つけようとします。私の bytearray の数値は PCM データであるため、何百万ものデータがあり、特に低スペックのマシンでは、このコードの実行に時間がかかることがよくあります。

これの全体的な目的は、波形をできるだけ速くレンダリングすることです。ピクセルベンダーについてはほとんど知りません。私は基本的に新しいファイルを作成し、そのシェーダージョブをフラッシュで作成できますが、これにアプローチする方法が本当にわかりません...

どうすれば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 を見て、その高速な bytearray オペコードを使用してデータをすばやく検索することをお勧めします。Joa Ebert と Burak Kalayci は、C でプログラミングしなくてもこれらのオペコードを使用できるビルド ヘルパー ツールを提供しています: http://philippe.elsass.me/2010/05/as3-fast-memory-access-without-錬金術/

于 2010-07-09T11:14:09.423 に答える