将整数纹理附加到帧缓冲区
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 扩展也是如此。以上是关于将整数纹理附加到帧缓冲区的主要内容,如果未能解决你的问题,请参考以下文章