OpenGL(FBO)中的普通后台缓冲区+渲染到深度纹理
Posted
技术标签:
【中文标题】OpenGL(FBO)中的普通后台缓冲区+渲染到深度纹理【英文标题】:Normal back buffer + render to depth texture in OpenGL (FBOs) 【发布时间】:2011-03-11 22:39:17 【问题描述】:情况如下:我有一个包含一些深度值的纹理。我想使用该纹理作为深度缓冲区来渲染一些几何图形,但我希望将颜色写入普通帧缓冲区(即窗口的帧缓冲区)。
我该怎么做?我尝试创建一个 FBO 并仅将深度纹理绑定到它(GL_DEPTH_COMPONENT),但这不起作用;没有任何颜色出现。
【问题讨论】:
【参考方案1】:不,你不能。您正在渲染的 FBO 可能是主帧缓冲区或离屏缓冲区。你不能以任何方式混合它们。
相反,我建议您渲染到颜色渲染缓冲区,然后在主帧缓冲区中执行简单的 blitting 操作。
编辑-1。
或者,如果您已经在主 FB 中有深度,您可以先对深度进行 blit,然后渲染到主 FB,从而在额外的颜色渲染缓冲区中节省视频内存。
附: Blitting 是通过glBlitFramebuffer
完成的。为了让它工作,你应该为它们每个设置GL_READ_FRAMEBUFFER
、GL_DRAW_FRAMEBUFFER
和glDrawBuffer()。
【讨论】:
在主/窗口帧缓冲区中的渲染被屏蔽到仅窗口的可见部分,即窗口被遮挡的地方没有内容写入主/窗口帧缓冲区。如果系统使用合成桌面(XComposite/Copmiz,Windows Vista/7 Aero),则不会发生窗口遮挡,但如果没有合成或禁用此蒙版。以上是关于OpenGL(FBO)中的普通后台缓冲区+渲染到深度纹理的主要内容,如果未能解决你的问题,请参考以下文章