2012-02-29 68 views
2

我想不通,为什么glResolveMultisampleFramebufferAPPLE生成错误1282(0x0502,GL_INVALID_OPERATION)。ResolveMultisampleFramebufferAPPLE生成INVALID_OPERATION

设置代码:

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

glGenRenderbuffers(1, &colorRenderbuffer); 
glBindRenderbuffer(GL_RENDERBUFFER, colorRenderbuffer); 
[context renderbufferStorage:GL_RENDERBUFFER fromDrawable:(id<EAGLDrawable>)self.layer]; 
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, colorRenderbuffer); 

glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &backingWidth); 
glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &backingHeight); 

GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER); 
if(status != GL_FRAMEBUFFER_COMPLETE) { 
    NSLog(@"failed to make complete framebuffer object %x", status); 
} 

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

glGenRenderbuffers(1, &sampleColorRenderbuffer); 
glBindRenderbuffer(GL_RENDERBUFFER, sampleColorRenderbuffer); 
glRenderbufferStorageMultisampleAPPLE(GL_RENDERBUFFER, 4, GL_RGBA8_OES, backingWidth, backingWidth); 
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, sampleColorRenderbuffer); 

glGenRenderbuffers(1, &sampleDepthRenderbuffer); 
glBindRenderbuffer(GL_RENDERBUFFER, sampleDepthRenderbuffer); 
glRenderbufferStorageMultisampleAPPLE(GL_RENDERBUFFER, 4, GL_DEPTH_COMPONENT16_OES, backingWidth, backingWidth); 
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, sampleDepthRenderbuffer); 

渲染代码:

glBindFramebuffer(GL_FRAMEBUFFER, sampleFramebuffer); 
glViewport(0, 0, backingWidth, backingHeight); 

glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); 

GLfloat vertices[] = { 
    1.0f, 1.0f, 0.0f, 
    2.0f, 4.0f, 0.0f, 
    1.0f, 3.0f, 0.0f 
}; 
glColor4f(1.0f, 0.0f, 0.0f, 1.0f); 
glVertexPointer(3, GL_FLOAT, 0, vertices); 
glDrawArrays(GL_TRIANGLE_STRIP, 0, 3); 

glBindFramebuffer(GL_READ_FRAMEBUFFER_APPLE, sampleFramebuffer); 
glBindFramebuffer(GL_DRAW_FRAMEBUFFER_APPLE, framebuffer); 
glResolveMultisampleFramebufferAPPLE(); 
NSLog(@"Error: %d", glGetError()); // <<< Here I get 1282 

const GLenum discards[] = { GL_DEPTH_ATTACHMENT }; 
glDiscardFramebufferEXT(GL_READ_FRAMEBUFFER_APPLE, 1, discards); 

glBindRenderbuffer(GL_RENDERBUFFER, colorRenderbuffer); 
[context presentRenderbuffer:GL_RENDERBUFFER]; 

完整的源可在到位桶中找到:https://bitbucket.org/amjaliks/gl2/src

回答

2

我通过backingWidth两次glRenderbufferStorageMultisampleAPPLE。因此,我得到了不同大小的渲染缓冲区,并导致了INVALID_OPERATION