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

Posted

技术标签:

【中文标题】将整数纹理附加到帧缓冲区【英文标题】:Attaching integer textures to a framebuffer 【发布时间】:2012-11-05 11:00:26 【问题描述】:

我正在尝试将内部格式为 GL_R32UI 的纹理附加到帧缓冲区,用作 ID 缓冲区。然而,glCheckFramebufferStatus 不断出现GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT,即使它是唯一的附件。

这对我来说很奇怪,因为 OpenGL 4.2 规范似乎声明 GL_R32UI 是 OpenGL 实现在附加到帧缓冲区时必须支持的格式之一。我怀疑这是驱动程序错误。我说得对吗,或者谁能告诉我我忽略了什么?

【问题讨论】:

你使用什么格式? 我认为您正在逐步接近我刚刚制定的解决方案 :) 很高兴它的工作:)。如果您有兴趣,我在第 163 页的spec 中找到了它。 啊,我明白了。现在我知道去哪里找了。 【参考方案1】:

我解决了我自己的问题。

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

调用glTexImage2D创建纹理时,第7个参数'format'需要对应于第3个'internalFormat'参数,即使你为data参数传递了一个空指针。如果你的内部格式是一个完整的格式,你需要提供像GL_RED_INTEGER这样的格式,而不是像GL_RED这样的格式。

【讨论】:

请注意,glIntercept 之类的工具将允许您通过向您提供错误消息来检测此错误。使用调试上下文和 ARB_debug_output 扩展也是如此。

以上是关于将整数纹理附加到帧缓冲区的主要内容,如果未能解决你的问题,请参考以下文章

将负值混合到帧缓冲区 0 opengl

将 RGBA32F 纹理与帧缓冲区一起使用会引发 INVALID_ENUM 错误

OpenGL中的单色渲染到帧缓冲区对象?

OpenGL 帧缓冲绑定目标

在着色器中使用 glTexture

我是不是需要将渲染缓冲区附加到已经附加了纹理的帧缓冲区?