【问题标题】:Why does unbinding a texture from a FBO clear the texture?为什么从 FBO 解除绑定纹理会清除纹理?
【发布时间】:2011-12-23 22:27:39
【问题描述】:

我在渲染到纹理操作时遇到了一些问题。我创建了一个 FBO,附加纹理,渲染它,一切都很好,但是当我尝试通过再次调用 glFramebufferTexture2DEXT 将附加纹理更改为 0 或新句柄时,我附加的纹理变为空白(所有像素值重置为 (0, 0, 0, 0))。

The documentation 并没有说这应该发生,这对我来说有点麻烦,因为我需要保留这个纹理中的信息。有谁知道为什么会发生这种情况,以及如何预防或解决它?

【问题讨论】:

  • 听起来像是驱动程序错误,但我们需要查看您的代码才能确定。
  • @Nicol:真的没什么可看的。我将纹理绑定到 FBO,我调用 glDrawArrays 几次以在其上进行渲染,然后尝试绑定不同的纹理。我已经在 gDEBUgger 中验证了它。就在我打电话给glFramebufferTexture2DEXT 之前,绑定到FBO 的纹理充满了数据。紧接着,它是空白的。
  • 你确定你没有在其他地方删除纹理对象吗?

标签: opengl fbo


【解决方案1】:

刚刚遇到了几乎相同的情况。最终的解决方案是在创建纹理时,我们必须确保设置 TexParameters。

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

根据https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glTexParameter.xhtml,GL_TEXTURE_MIN_FILTER 默认为 GL_NEAREST_MIPMAP_LINEAR,但我们没有进行 mipmapping。我不确定为什么这会导致纹理看起来被擦除,但我们就是这样做来修复它的。

【讨论】:

    猜你喜欢
    • 2015-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多