如何从其他帧缓冲区访问深度纹理?

时间:2013-06-14 08:27:08

标签: opengl framebuffer render-to-texture depth-buffer deferred-rendering

我在游戏中使用了延迟渲染器。因此,第一个渲染过程是使用多个渲染rarget并填充深度缓冲区来创建反照率和普通缓冲区。所有这些缓冲区实际上都是纹理。

现在我想从其他渲染过程中访问深度缓冲区,从而在不改变深度纹理的情况下访问其他帧缓冲区。我只想读深度值。对于那些传球,我主要绘制全屏四边形,我不希望它们更新深度纹理并将其消隐为深度值0。

如何将给定深度纹理附加到另一个帧缓冲区并确保它是只写的?

1 个答案:

答案 0 :(得分:3)

您可以将相同的深度缓冲区附加到其他帧缓冲区(如果要在绘制光量时使用深度测试,则只需执行此操作)。禁用这些传递的深度写入(glDepthMask(GL_FALSE))。您还可以将深度缓冲区(假设它是纹理而不是渲染缓冲区)绑定到纹理单元,并在着色器中从中读取深度值。你不能做的唯一的事情是同时从同一个纹理读取和写入,但你不想这样做。