首页 > 解决方案 > 将不同大小的纹理附加到 FBO 的问题

问题描述

今天我在开发 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是return 。GL_FRAMEBUFFER_COMPLETEglCheckNamedFramebufferStatusGL_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。

有没有人见过类似的行为?如果是这样,有哪些可能的解决方法?提前感谢您的帮助

标签: copenglnvidiaframebuffer

解决方案


这实际上是 ARB DSA 的 Nvidia 错误(我已于去年 2 月提交),如果您使用非命名版本,它不会给出验证错误。


推荐阅读