【问题标题】:GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT when trying to attach texture尝试附加纹理时的 GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT
【发布时间】:2010-08-31 23:11:44
【问题描述】:

在尝试创建渲染到纹理的帧缓冲区后,我收到错误 GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT。我不知道出了什么问题,非常感谢任何帮助。

编辑:修复它!工作代码:

    glGenTextures(1, &texture);
    glBindTexture(GL_TEXTURE_2D, texture);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 768, 1024, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
    glBindTexture(GL_TEXTURE_2D, 0);

    glGenRenderbuffers(1, &rboID);
    glBindRenderbuffer(GL_RENDERBUFFER, rboID);
    glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, 768, 1024);
    glBindRenderbuffer(GL_RENDERBUFFER, 0);

    glGenFramebuffers(1, &backFramebuffer);
    glBindFramebuffer(GL_FRAMEBUFFER, backFramebuffer);
    glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0);
    glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, rboID);
    [self checkFramebufferStatus];
    glBindFramebuffer(GL_FRAMEBUFFER, 0);

注意:如果您的版本不起作用,请确保在每次调用后检查错误,并在第一次调用之前清除错误,否则您将在此之前检查代码。

【问题讨论】:

  • 我正在将我的代码与这个 sn-p 进行比较以尝试找出错误。对于 Android OpenGL ES 2.0,我的收获是 GL_DEPTH_COMPONENT 与 GL_DEPTH_COMPONENT16。在 glRenderBufferStorage 中确保深度组件是 GL_DEPTH_COMPONENT16。很难捕捉到,因为每一行代码都与您的 sn-p 相同。
  • 你也应该留下不好的代码,这样人们在事后阅读它就能看到解决方案。或者至少解释一下你检查的内容。无论如何,感谢您显示固定代码。
  • @Halsafar 是的,这是一个很常见的错误。还好你注意到了。但是,如果你包装检查错误,你会更快地发现这个错误,因此我的最后一条评论是“每次调用后检查错误”。
  • 抱歉,这可能是一个小问题,但我看到您的代码在任何地方都不包含 _OES / OES。对于我的标题,我必须使用 GL_FRAMEBUFFER_OES 而不是 GL_FRAMEBUFFER ...等等。我只是想知道您是否真的删除了“_OES”进行演示? (顺便感谢一下,这个示例代码确实有帮助)。
  • @Nick 请不要从问题中删除无效代码,因为这会使您提出的问题对未来的访问者几乎毫无用处。

标签: opengl-es


【解决方案1】:

很可能是纹理不完整。纹理的默认 MIN_FILTER 指定 mipmapping,但您只提供了纹理级别 0,因此纹理本身是不完整的。

添加对 glTexParamter 的调用以将 MIN_FILTER 设置为非 mipmapped 模式之一。

【讨论】:

  • 我添加了创建非 mipmap 纹理的调用,但这会导致相同的错误。不过还是谢谢,一路学习。
  • 这是一个不完整的纹理!不是因为 mipmap,而是因为其他一些东西。工作代码在问题文本中。非常感谢。
  • 我遇到了两个令人困惑的错误:[1] 我试图使用 GL_LUMINANCE 纹理作为目标(由于某种原因,魔法不允许),[2] 我没有 glBindTexture( GL_TEXTURE_2D,0) 之前 glFramebufferTexture2D(...)
  • 确实不允许 GL_LUMINANCE 或 GL_ALPHA 作为像素类型,这是我代码中的问题。
  • "glTexParamter to set the MIN_FILTER" 你能举个例子吗?
猜你喜欢
  • 1970-01-01
  • 2017-02-03
  • 1970-01-01
  • 2018-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多