Opengl 帧缓冲区内部格式纹理的附件不完整?

Opengl 帧缓冲区内部格式纹理的附件不完整?,opengl,Opengl,所以我试图创建一个帧缓冲区,在这里我渲染到一个纹理,但我似乎无法让它与我需要的格式一起工作。这就是GL_RGB32F。它适用于GL_RGB16F和GL_RGBA32F,所以我不明白GL_RGB32F为什么从glCheckFramebufferStatus给我GL_FRAMEBUFFER_INCOMEPLETE_附件。我也没有从创建纹理的调用中得到错误。是否有使用该内部格式的特殊要求?我能看看我是否支持它吗 glGenFramebuffers(1, &fbo); glBindFramebu

所以我试图创建一个帧缓冲区,在这里我渲染到一个纹理,但我似乎无法让它与我需要的格式一起工作。这就是GL_RGB32F。它适用于GL_RGB16F和GL_RGBA32F,所以我不明白GL_RGB32F为什么从glCheckFramebufferStatus给我GL_FRAMEBUFFER_INCOMEPLETE_附件。我也没有从创建纹理的调用中得到错误。是否有使用该内部格式的特殊要求?我能看看我是否支持它吗

glGenFramebuffers(1, &fbo);
glBindFramebuffer(GL_FRAMEBUFFER, fbo);

glGenTextures(1, &positionTexture);
    glBindTexture(GL_TEXTURE_2D, positionTexture);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB32F, width, height, 0, GL_RGB, GL_FLOAT, nullptr);
    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);

    glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, positionTexture, 0);

GL_RGB16F和GL_RGB32F在GL中不是必需的颜色缓冲区格式,而GL_RGBA32F是必需的。假设上述文件于2017年6月修订,您可以查看第198-200页的表8.12。它告诉您,所有这些提到的格式都是颜色可渲染的,但该集合中只有GL_RGBA32F是必需的渲染格式。实现可能支持其他可选的颜色缓冲区格式,但您不能依赖于此。

GL_RGB16F和GL_RGB32F在GL中不是必需的颜色缓冲区格式,而GL_RGBA32F是必需的。假设上述文件于2017年6月修订,您可以查看第198-200页的表8.12。它告诉您,所有这些提到的格式都是颜色可渲染的,但该集合中只有GL_RGBA32F是必需的渲染格式。实现可能会选择性地支持其他实现,但您不能依赖于此。

您对表8.13和相应页码的引用似乎不正确。表8.13甚至没有提到RGBA32F。你是说198-200页的8.12分吗?@Ruslan:嗯,是的,谢谢你的提示。根据当前4.5核心规范的附录H.3,本文件在2015年12月编写本答案后进行了第三次修订。。。我这里还有一份2014年8月修订版的本地副本,数字是正确的。。。不幸的是,khronos只是用最新版本替换了官方规范文档,因此很可能会发生这种不同步。。。我认为gl规范现在已经在github repo上了,所以最好在那里链接到一个特定的提交……您对表8.13和相应页码的引用似乎不正确。表8.13甚至没有提到RGBA32F。你是说198-200页的8.12分吗?@Ruslan:嗯,是的,谢谢你的提示。根据当前4.5核心规范的附录H.3,本文件在2015年12月编写本答案后进行了第三次修订。。。我这里还有一份2014年8月修订版的本地副本,数字是正确的。。。不幸的是,khronos只是用最新版本替换了官方规范文档,因此很可能会发生这种不同步。。。我认为gl规范现在已经在github repo上了,所以最好在那里链接到一个特定的提交。。。