プログラミングの柔軟性と実行時のパフォーマンスの観点から、FlashのPixelBenderとSilverlightのPixelShader(HLSL)の違いを誰かが説明できますか?
2 に答える
プログラマビリティについてはわかりませんが、実行時のパフォーマンスに関しては、pixelbenderは素晴らしいです。現在、Silverlight 3ではこの処理をバックグラウンドで実行できませんが、PixelBenderでは実行できます。計算量の多いフィルターを使用する場合、UIはそれほど影響を受けないため、これは適切です。
このフォーラムには、Silverlight3の 長所と短所がいくつかあります。このトピックは古いことは知っていますが、少し不完全に見えたので追加します。
Silverlight シェーダーについてはよくわかりませんが、PixelBender については話せます。
pixelbender シェーダはビットマップ データを取得し、各 32 ビット ピクセル (実際には 4 つの float の各チャンク) を一度に 1 つずつ評価し、計算を実行します。シェーダーへの入力は 1 つ以上の画像とオプションのパラメーターで、出力は常に 1 つの画像です。計算は画像内のすべてのピクセルで並行して行われ、ピクセル間では「ステートレス」です。つまり、1 つのピクセルを評価している間に値を保存して別のピクセルで使用することはできません。実際、ピクセル評価に関しては、この関数は無限大の画像で動作するように設計されているため、画像のサイズと形状には影響されません。
シェーダー用の Flash Player で使用できる機能は、pixelbender 言語全体のサブセットです。再利用可能なライブラリ関数やリージョン関数などの言語機能は除外されます。
ピクセル ベンダー シェーダーは、Flash Player とは別のスレッドで GPU で実行でき、基本的に Flash でのスレッド化されたプロセスを可能にします。実際には、これは、ピクセルベンダーのステートレス性と制限された機能を考慮して、大規模なバッチ数のクランチにのみ役立ちます。数値の bytearray をビットマップデータとして偽装してシェーダーに渡し、ShaderJob を使用して非同期 (または同期) に実行できます。
構文的には、HLSL と PBJ はどちらも C に似ており、GLSL に基づいています。グラフィックのハードウェアに関する Microsoft の経験を考えると、おそらく HLSL の方がパフォーマンスが高く、より多くの機能を備えていると思います。ただし、Flash と Silverlight の違いはシェーダーをはるかに超えており、Flash はほぼすべての領域で Silverlight を上回っていると思います。そのため、どちらのプラットフォームがニーズに適しているかが問題になります。