私のレンダリング パイプライン (OpenGL 3.3 コア) には、次のサイクル (疑似コード) があります。
for 1..n:
render to texture T
bind texture T
render to back buffer (with texture T sampled in the fragment shader)
のときn=1
は、すべて OK です。ただし、 の場合n=2
、最初のレンダリングが正しくありません。
のサンプリングが完了する前にrender to texture T
への書き込みを開始したと思われます。T
render to back buffer
T
サイクルの終わりに置くglFlush()
と、レンダリングは正しくなりますが、FPS は少し低下します。インターネットのいたるところで、「glFlush() を使用する必要がある場合は、おそらく何か間違ったことをしている可能性があります」を見つけ続けています。
問題を正しく特定しましたか? glFlush()
この場合、正しい解決策はありますか? 反復ごとに異なるテクスチャを使用すること (私は知っていますn
) がより良い解決策でしょうか?
GTX580 では発生しますが、ATI Mobility Radeon 3470 では発生しません。
私のコンテキスト - 詳細:
2 つのライトと G バッファー (FBO) があります。各反復で、1 つのライトとそのシャドウ マップ (T
すべてのライトに対して相互にテクスチャを持つ別の FBO)を使用してディファード シェーディングを実行していn
ます。中render to back buffer
に光を蓄えます。
次の画像では、光を蓄積しませんでした。代わりに、最初の反復を左側のビューポートにレンダリングし、2 番目の反復を右側のビューポートにレンダリングして、問題を示しました。