2017-01-05 3 views
0

OpenGLフラグメントシェーダ内でビット演算と除算を実行する必要があるかどうか、またはシェーダを実行する前に(C++で計算して一様に渡す)どうか不明です。私が実際にやっていることは、RGB値を表す16進intをOpenGLで描画するために使用できる色に変換することです。通常はどのシステムより高速でしょうか?OpenGLシェーダの中で、またはC++でビット単位で処理する方が速いのですか?

+2

色は頂点ごとの属性ですか、またはテクスチャを渡していますか? – Nonanon

答えて

3

ドローコールごとに1つの値が計算される場合は、C++で実行します。

GPUは非常に高速ですが、数百万の頂点やフラグメントに対して同じ値を計算させることにはほとんど意味がありません。

しかし、データがどのように渡されるかという問題があります。違いがあると思われる場合は、両方のアプローチを試して、それらをプロファイルしてください。

+0

GLSLのプロファイルを作成するにはどうすればよいですか? – Accumulator

+0

私はちょうどフレームレートを考えていましたが、それはスレッジハンマーのアプローチです。 – geofftnz

+1

@geofftnz:GLSLコンパイラも最適化を行う可能性があることに注意してください。 1回の操作を何度も実行すると、別の操作に完全に書き換えられることがあります。また、非常に安価な命令の場合、ウィンドウシステムなどの他の要因によるフレームレートのノイズは、シェーダのパフォーマンスへの影響よりも重要です。 – Bartvbl

関連する問題