【发布时间】:2018-07-12 11:39:04
【问题描述】:
今天我在开发 OpenGL 4.5 应用程序时遇到了一个奇怪的问题。我尝试将两种不同大小的纹理作为颜色附件附加到一个 FBO 上,以创建一个绽放着色器。据我所知,在现代 OpenGL 版本中这应该是可能的。
这是我正在使用的代码:
//Create textures
GLuint tex[2];
glCreateTextures( GL_TEXTURE_2D, 2, tex );
glTextureStorage2D( tex[0], 1, GL_RGB8, 2048, 2048 );
glTextureStorage2D( tex[1], 1, GL_RGB8, 1024, 1024 );
//Create FBO
GLuint fbo;
glCreateFramebuffers( 1, &fbo );
glNamedFramebufferTexture( fbo, GL_COLOR_ATTACHMENT0, tex[0], 0 );
glNamedFramebufferTexture( fbo, GL_COLOR_ATTACHMENT1, tex[1], 0 );
//Check completeness
GLenum comp = glCheckNamedFramebufferStatus( fbo, GL_FRAMEBUFFER );
我希望comp 是GL_FRAMEBUFFER_COMPLETE,但是,在我的情况下,glCheckNamedFramebufferStatus 返回GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT。
恐怕这可能是一些驱动程序错误,基于这两个线程,因为显然 INCOMPLETE_DIMENSIONS 已从较新的 OpenGL 版本中删除:
这是说明问题的完整代码 - https://pastebin.com/c9Hqzzky。
我的输出是:
0x8cd9
0x8cd9 - GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT
fbotest: fbotest.c:41: main: Assertion `comp != GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT' failed.
Aborted (core dumped)
我有 Nvidia GTX 1060 显卡、Ubuntu 18.04LTS 和 Nvidia 驱动程序版本 390.67。
以前有人见过类似的行为吗?如果是这样,有哪些可能的解决方法? 提前感谢您的帮助
【问题讨论】:
-
嗨,你解决了这个问题吗?我在类似的用例中遇到了完全相同的状态。
-
@MichaelIV 不幸的是,我还没有解决这个问题。为了确保没有任何变化,我尝试运行此处发布的示例代码。结果是相同的。
-
我可以告诉你为什么我的箱子里有那个东西。我也有模板附件,它的大小(更大)与颜色附件不同。如果我删除那个模板缓冲区,那么问题就解决了。这很奇怪,因为我认为 OpenGL 也允许非颜色附件具有不同的大小。但是好像没有。
-
@MichaelIV 在我的例子中,我想要一个带有多个颜色附件的 FBO,以实现基于两通高斯滤波器的延迟渲染和绽放效果。因此,我需要一个额外的附件,它的大小被调换了——这就是我遇到问题的时候。如果我删除附加附件或更改其尺寸以匹配其他附件,它工作正常。显然,要重现此问题,不需要非彩色附件。真是奇怪……明天我会尝试在具有不同 GPU 和驱动程序的 PC 上运行这段代码,然后告诉你结果。
-
@MichaelIV 我让我的朋友运行这段代码,结果是一样的。他有相同的驱动版本和Nvidia GT 440显卡。
标签: c opengl nvidia framebuffer