2013-02-28 95 views
0

我试图用GLKit绘制纹理(然后使用该对象的纹理),但我收到GL ERROR: 0x0502,我认为这意味着无效值传递给功能。事情是,错误在特效prepareToDraw方法中的某处被触发。顶点数组似乎设置正确,因为我可以使用相同的设置在默认帧缓冲区上绘制而不会出现问题。有什么我失踪?使用帧缓冲区渲染纹理GLKit的GLKBaseEffect

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); 
+0

你有没有设法弄清楚这一点? – 2015-12-18 04:25:56

回答

1

您错过了您发布的代码中的一件重要事情:呈现缓冲区。添加一个可能会解决您的问题。这里是一个例子,我的头顶:

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); 
+1

渲染缓冲区不会丢失,OP已选择使用帧缓冲区渲染到纹理。帧缓冲区可以使用附加的纹理或附加的渲染缓冲区。 – 2013-07-10 10:12:57

相关问题