0

我只想在我的渲染器中进行深度传递。我为此通道创建了一个 FBO,并且我只附加了一个深度缓冲区。根据这个线程,我还将 GL_NONE 传递给 glDrawBuffer 和 glReadBuffer:

使用 FBO 渲染多个深度信息

但是,在绘制此帧之后,屏幕将完全变白。如果我禁用该通道,那么我会看到预期的输出(由其他通道产生)。

关于为什么会发生这种情况的任何想法?起初,我将现有的 FBO(处理离屏渲染)重用于仅深度通道。然后我为这个场景创建了另一个 FBO。这两种方法仍然会导致白屏。

这篇文章是否提供了问题的可能来源?

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

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

违规 OpenGL 代码 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。

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

4

0 回答 0