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,一切正常。但是,当 时n=2,第一次渲染是不正确的。


我怀疑是在之前的采样完成之前render to texture T开始写的。Trender to back bufferT

glFlush()循环结束后,渲染是正确的,但是 FPS 下降了一点。在 Internet 上的任何地方,我一直在发现“如果您需要使用 glFlush(),您可能做错了什么”。

我是否正确识别了问题?glFlush()在这种情况下是正确的解决方案吗?每次迭代使用不同的纹理(我知道n)会是更好的解决方案吗?

它发生在 GTX580 上,但不在 ATI Mobility Radeon 3470 上。


我的背景 - 详细信息:

我有 2 个灯和 g-buffer (FBO)。在每次迭代中,我都使用一个灯光及其阴影贴图(另一个具有纹理的 FBO T- 所有灯光相互)进行延迟着色,其中n是多个灯光。在render to back buffer我身上积聚光。

在下图中,我没有累积光。相反,我将第一次迭代渲染到左侧视口,第二次渲染到右侧以演示问题。

分离的着色通道

4

0 回答 0