1

私のレンダリング パイプライン (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への書き込みを開始したと思われます。Trender to back bufferT

サイクルの終わりに置くglFlush()と、レンダリングは正しくなりますが、FPS は少し低下します。インターネットのいたるところで、「glFlush() を使用する必要がある場合は、おそらく何か間違ったことをしている可能性があります」を見つけ続けています。

問題を正しく特定しましたか? glFlush()この場合、正しい解決策はありますか? 反復ごとに異なるテクスチャを使用すること (私は知っていますn) がより良い解決策でしょうか?

GTX580 では発生しますが、ATI Mobility Radeon 3470 では発生しません。


私のコンテキスト - 詳細:

2 つのライトと G バッファー (FBO) があります。各反復で、1 つのライトとそのシャドウ マップ (Tすべてのライトに対して相互にテクスチャを持つ別の FBO)を使用してディファード シェーディングを実行していnます。中render to back bufferに光を蓄えます。

次の画像では、光を蓄積しませんでした。代わりに、最初の反復を左側のビューポートにレンダリングし、2 番目の反復を右側のビューポートにレンダリングして、問題を示しました。

分離されたシェーディング パス

4

0 に答える 0