在我的渲染管道(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 下降了一点。在 Internet 上的任何地方,我一直在发现“如果您需要使用 glFlush(),您可能做错了什么”。
我是否正确识别了问题?glFlush()
在这种情况下是正确的解决方案吗?每次迭代使用不同的纹理(我知道n
)会是更好的解决方案吗?
它发生在 GTX580 上,但不在 ATI Mobility Radeon 3470 上。
我的背景 - 详细信息:
我有 2 个灯和 g-buffer (FBO)。在每次迭代中,我都使用一个灯光及其阴影贴图(另一个具有纹理的 FBO T
- 所有灯光相互)进行延迟着色,其中n
是多个灯光。在render to back buffer
我身上积聚光。
在下图中,我没有累积光。相反,我将第一次迭代渲染到左侧视口,第二次渲染到右侧以演示问题。