[Flash Player 10 #3] Shader + Vector で計算の高速化
beinteractive さんの twitter でのコメント。
Player10 で結構な長さのint配列に対して演算をしなければならない場合、
1. ただのArray
2. Vector.<int>
3. Vector.<int> を BitmapData に setVector して、Shader (Pixel Bender) で計算後、 getVector
のどれが一番速いんだろう
を受けて、自分も気になったので調べてみました。100 万個強のデータに uint を加算するテスト結果は以下の通り。
Array => 361 ms
Vector => 188 ms
Shader + Vector => 35 ms
Shader + Vector の組み合わせは Array より十倍近く早い結果に。今回は簡単な加算のみですが、色々と試してみる価値がありそうですね。試したコードは libspark に上げています。一式必要な方は http://www.libspark.org/svn/as3/Astro/ShaderFilter/CalcShader/ 以下をチェックアウトしてください。
‘08 5/23 追記:
活用法がないか色々と考えたり試したりしているんですが、そもそも setVector する時点で 0×00FFFFFF 以下のデータはアルファが 0 になるので、数値自体も 0 としてセットされてしまうんですよね。PixelBender 上で一ピクセルの情報だけを取り出して・・・とかの方法も分からない(できない?)し、何か良い活用法思いついた方はいらっしゃらないでしょうか?
[Astro] Vector クラス(1)
僕様ちゃん的には 3D Effects に目を奪われがちな Astro ですが、ココとか見ると Vector クラスもスゴそうじゃないの。
…