【发布时间】:2011-03-11 22:39:17
【问题描述】:
情况如下:我有一个包含一些深度值的纹理。我想使用该纹理作为深度缓冲区来渲染一些几何图形,但我希望将颜色写入普通帧缓冲区(即窗口的帧缓冲区)。
我该怎么做?我尝试创建一个 FBO 并仅将深度纹理绑定到它(GL_DEPTH_COMPONENT),但这不起作用;没有任何颜色出现。
【问题讨论】:
情况如下:我有一个包含一些深度值的纹理。我想使用该纹理作为深度缓冲区来渲染一些几何图形,但我希望将颜色写入普通帧缓冲区(即窗口的帧缓冲区)。
我该怎么做?我尝试创建一个 FBO 并仅将深度纹理绑定到它(GL_DEPTH_COMPONENT),但这不起作用;没有任何颜色出现。
【问题讨论】:
不,你不能。您正在渲染的 FBO 可能是主帧缓冲区或离屏缓冲区。你不能以任何方式混合它们。
相反,我建议您渲染到颜色渲染缓冲区,然后在主帧缓冲区中执行简单的 blitting 操作。
编辑-1。
或者,如果您已经在主 FB 中有深度,您可以先对深度进行 blit,然后渲染到主 FB,从而在额外的颜色渲染缓冲区中节省视频内存。
附: Blitting 是通过glBlitFramebuffer 完成的。为了让它工作,你应该为它们每个设置GL_READ_FRAMEBUFFER、GL_DRAW_FRAMEBUFFER和glDrawBuffer()。
【讨论】: