Opengl es 使用帧缓冲区和GLKit';s-Glkbase效应

Opengl es 使用帧缓冲区和GLKit';s-Glkbase效应,opengl-es,opengl-es-2.0,glkit,Opengl Es,Opengl Es 2.0,Glkit,我试图使用GLKit绘制纹理(然后在对象上使用该纹理),但我收到GL ERROR:0x0502,我认为这意味着传递给函数的值无效。问题是,错误是在effects prepareToDraw方法中的某个地方触发的。顶点数组似乎设置正确,因为我可以在默认帧缓冲区上绘制,使用相同的设置不会有问题。有什么我遗漏的吗 GLint defaultFBO; glGetIntegerv(GL_FRAMEBUFFER_BINDING, &defaultFBO); GLenum status; glBin

我试图使用GLKit绘制纹理(然后在对象上使用该纹理),但我收到
GL ERROR:0x0502
,我认为这意味着传递给函数的值无效。问题是,错误是在effects prepareToDraw方法中的某个地方触发的。顶点数组似乎设置正确,因为我可以在默认帧缓冲区上绘制,使用相同的设置不会有问题。有什么我遗漏的吗

GLint defaultFBO;
glGetIntegerv(GL_FRAMEBUFFER_BINDING, &defaultFBO);

GLenum status;
glBindFramebuffer(GL_FRAMEBUFFER, _boundsTextureFramebuffer);
glBindTexture(GL_TEXTURE_2D, self.backgroundTexture.name);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8_OES, 1024, 1024, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, self.backgroundTexture.name, 0);
status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
if (status != GL_FRAMEBUFFER_COMPLETE)
{
    NSLog(@"Failed to initialize the texture framebuffer");
}

effect.constantColor = [self.color vectorValue];
[effect prepareToDraw];

glBindVertexArrayOES(self.vertexArray);
glDrawElements(_data.mode, (GLsizei)self.data.indicesCount, GL_UNSIGNED_INT, (void*)0);
glBindVertexArrayOES(0);


glBindFramebuffer(GL_FRAMEBUFFER, (GLuint)defaultFBO);

您在发布的代码中遗漏了一件重要的事情:渲染缓冲区。添加一个可能会解决您的问题。下面是我脑海中的一个例子:

    GLint defaultFBO;
    glGetIntegerv(GL_FRAMEBUFFER_BINDING, &defaultFBO);

    GLint defaultRBO;
    glGetIntegerv(GL_RENDERBUFFER_BINDING, &defaultRBO);


    glGenFramebuffers(1, &_boundsTextureFramebuffer);
    glBindFramebuffer(GL_FRAMEBUFFER, _boundsTextureFramebuffer);


    glGenRenderbuffers(1, &_boundsTextureRenderbuffer);
    glBindRenderbuffer(GL_RENDERBUFFER, _boundsTextureRenderbuffer);
    glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA4, width, height);
    glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, _boundsTextureRenderbuffer);

    ...

    glBindFramebuffer(GL_FRAMEBUFFER, (GLuint)defaultFBO);
    glBindRenderbuffer(GL_RENDERBUFFER, (GLuint)defaultRBO);

renderbuffer没有丢失,OP选择使用帧缓冲区渲染纹理。帧缓冲区可以使用附加的纹理,也可以使用附加的渲染缓冲区。你有没有想过这个问题?