OpenGL glFramebufferRenderbuffer()获取错误:GL_INVALID_OPERATION,状态:GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT

时间:2014-08-18 01:38:47

标签: opengl opengl-es

我正在尝试使用cocos2d和openGL进行纹理渲染。

我打电话后

glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, _depthRenderBufffer)

我检查了状态,使用:

GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);

并且结果状态为GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT

我还使用

检查了错误
GLenum error = glGetError();

,结果为GL_INVALID_OPERATION

根据the documentationGL_INVALID_OPERATION的原因是:

  • 绑定默认的framebuffer对象名称0。 或
  • 如果renderbuffer既不是0也不是现有renderbuffer对象的名称

我检查了framebuffer和renderbuffer,它们都不是0,但我不确定是否有任何其他rederbuffer对象具有相同的名称。

有人知道如何解决这个问题吗?

我正在使用的详细代码:

.....

GLint oldRBO;
glGetIntegerv(GL_RENDERBUFFER_BINDING, &oldRBO);

 // generate FBO
glGenFramebuffers(1, &_FBO);
glBindFramebuffer(GL_FRAMEBUFFER, _FBO);

// associate texture with FBO
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, _texture.name, 0);

if (depthStencilFormat != 0) {
    glGenRenderbuffers(1, &_depthRenderBufffer);
    glBindRenderbuffer(GL_RENDERBUFFER, _depthRenderBufffer);
    glRenderbufferStorage(GL_RENDERBUFFER, depthStencilFormat, (GLsizei)powW, (GLsizei)powH);

    glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, _depthRenderBufffer);
    GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);        // the status here will result in GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT
    GLenum error = glGetError ();                // the error here will be GL_INVALID_OPERATION

    // I checked the value of _FBO, which was 1, and the value of _depthRenderBufffer was 2

    .....
}

0 个答案:

没有答案