将整数纹理附加到帧缓冲区

dup*_*per 3 opengl graphics textures framebuffer render-to-texture

我正在尝试将具有内部格式的纹理附加GL_R32UI到帧缓冲区,以用作ID缓冲区。但是,即使它是唯一的附件,也要glCheckFramebufferStatus不断提出GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT

这对我来说很奇怪,因为OpenGL 4.2规范似乎GL_R32UI表明OpenGL实现是附加到帧缓冲区时OpenGL实现必须支持的格式之一。我怀疑这是驱动程序错误。我是对的,还是有人可以告诉我我所忽略的东西?

dup*_*per 6

我解决了自己的问题。

void glTexImage2D(GLenum target,
    GLint level,
    GLint internalFormat,
    GLsizei width,
    GLsizei height,
    GLint border,
    GLenum format,
    GLenum type,
    const GLvoid * data);
Run Code Online (Sandbox Code Playgroud)

调用glTexImage2D创建纹理时,即使您要为data参数传递空指针,第7个参数“ format”也需要与第3个“ internalFormat”参数相对应。如果内部格式是整数格式,则需要提供的格式GL_RED_INTEGER,而不是的格式GL_RED

  • 请注意,像[glIntercept](http://code.google.com/p/glintercept/)之类的工具将允许您通过显示错误消息来检测此错误。因此,将使用调试上下文和ARB_debug_output扩展。 (2认同)