【问题标题】:Problems with attaching textures of different sizes to FBO将不同大小的纹理附加到 FBO 的问题
【发布时间】: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 );

我希望compGL_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


【解决方案1】:

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

【讨论】:

  • 我正在使用 DSA API 获得这个。我在驱动 V 411.81
  • 这是一个已确认的驱动程序错误
猜你喜欢
  • 2013-04-30
  • 1970-01-01
  • 2018-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-22
相关资源
最近更新 更多