您可以指定使用哪些缓冲区绘制
glDrawBuffer()
例子
GLenum 缓冲区[] = { GL_COLOR_ATTACHMENT0 };
glDrawBuffers( 1, 缓冲区 );
好的,所以这是有道理的。
深度纹理怎么样?
所以我们在这里创建了一个帧缓冲区
glGenFramebuffers(1, &m_uifboHandle);
// Initialize FBO
glBindFramebuffer(GL_FRAMEBUFFER, m_uifboHandle);
unsigned int m_uiTextureHandle[2];
glGenTextures( 2, m_uiTextureHandle );
glBindTexture( GL_TEXTURE_2D, m_uiTextureHandle[x]);
// Reserve space for our 2D render target
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage2D(GL_TEXTURE_2D, 0, iInternalFormat, uiWidth, uiHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL);
glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_uiTextureHandle[0], 0);
//now the depth
glBindTexture(GL_TEXTURE_2D, m_uiTextureHandle[1]);
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, uiWidth, uiHeight, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, 0);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, m_uiTextureHandle[1], 0);
glBindFramebuffer(GL_FRAMEBUFFER, 0);
所以如果这些步骤基本上:
1)制作一个框架来操纵渲染到
2) 给我们一个位置让附件 0 写入
3) 创建我们的深度依恋
现在我该如何写入呢?我看到了渲染自动呈现给它的例子,但我想了解写入它的绑定(bind)是如何工作的。
最佳答案
glDrawBuffers
与深度缓冲区完全无关。它允许选择要渲染到的颜色缓冲区,并且每个帧缓冲区可以有多个颜色缓冲区。但是最多只能有一个深度缓冲区。因此,要么根本没有深度缓冲区,要么有深度缓冲区并将深度值写入深度缓冲区(假设深度测试已启用且深度掩码设置为 GL_TRUE
)。
关于opengl - glDrawBuffers 如何关联到深度纹理的绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25587359/