在我的渲染管道(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
时,一切正常。但是,当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)。在每次迭代中,我正在使用一个灯光及其阴影贴图(另一个具有纹理T
的FBO - 所有灯光相互作用)进行延迟着色,其中n
是多个灯光。在render to back buffer
我积累了光。
在下图中,我没有累积光线。相反,我将第一次迭代渲染到左视口,第二次迭代渲染到右视图以演示问题。