opengl - glDrawBuffers 如何关联到深度纹理的绘制

标签 opengl textures glsl depth-buffer render-to-texture

您可以指定使用哪些缓冲区绘制
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/

相关文章:

c++ - 在 OpenGL 中设置 MVP 矩阵

c - 在 Mac OS X 10.8.4 上使用 SDL2 时没有 OpenGL 上下文

android - 颠倒的纹理? | OpenGL-ES 2.0 (安卓)

python-3.x - 我的着色器出现错误并且不知道如何修复

ios - 片段着色器未读取顶点着色器 'colorVarying' 的输出

c++ - 延迟着色、存储位置或从深度构造它

opengl - CUDA OpenGL 互操作,资源映射弄乱了缓冲区

c++ - OpenGL + SDL_TTF : texture index recycling

c - OpenGL 仅在使用多个纹理四边形时纹理坐标不正确

caching - 另一个 CUDA 纹理内存线程。 (为什么 Fermi 上的纹理内存应该更快?)