OpenGL:当我将GL_NONE传递给glDrawBuffer和glReadBuffer时,屏幕变白

时间:2013-08-12 17:16:40

标签: opengl fbo depth-buffer

我想在渲染器中进行深度传递。我为这个传递创建了一个FBO,我只附加了一个深度缓冲区。我也将GL_NONE传递给glDrawBuffer和glReadBuffer,根据这个帖子:

Rendering multiple depth information with FBOs

然而,在此框架绘制后,屏幕变为白色。如果我禁用该传递,那么我会看到预期的输出(由其他传递产生)。

有关为何发生这种情况的任何想法?起初,我正在重复使用现有的FBO(处理屏幕外渲染)以进行深度传递。然后我为这个场景创建了另一个FBO。这两种方法仍然会产生白屏。

本文是否提供了问题的可能来源?

http://www.opengl.org/discussion_boards/showthread.php/149004-glDrawBuffer(-GL_NONE-)-expected-behaviour

使用apitrace(https://github.com/apitrace/apitrace),我现在可以显示我认为负责白屏的OpenGL代码:

Offending OpenGL code http://imageshack.us/a/img855/7660/jmkq.png

在这个简单的例子中,我只附加FBO 2的深度附件。然后将0传递给glFramebufferTexture2D()和glFramebufferRenderbuffer()以分离GL_COLOR_ATTACHMENT0中的所有先前附件,并将GL_NONE传递给glDrawBuffer()和glReadBuffer ()。然后我立即绑定默认FBO(0),并将视口恢复为1280x720。我还将GL_BACK传递给glDrawBuffer()和glReadBuffer()。

在此之后,我的代码的工作版本和非工作版本都会继续绑定另一个FBO以进行屏幕外渲染。然后我分别使用glFramebufferTexture2D()和glFramebufferRenderbuffer()附加到GL_COLOR_ATTACHMENT0和GL_DEPTH_ATTACHMENT。对于glDrawBuffer()和glReadBuffer(),我提供了GL_COLOR_ATTACHMENT0。

这会让事情更清晰吗?我不太确定上面的代码片段是如何导致我的屏幕变白的。

0 个答案:

没有答案