2014-07-09 5 views
1

iOS 응용 프로그램에서 3D 모델을 표시하기 위해 Framebuffer를 만들려고하지만 프레임 버퍼가 만들어지면 renderbufferStorage가 false를 반환합니다. 내 코드는 GLCameraRipple 샘플 코드를 기반으로합니다.Open GL ES 2.0 renderbufferStorage가 false를 반환합니다.

- (void)createFramebuffer 
{ 
if (_context && !defaultFramebuffer) { 

    [EAGLContext setCurrentContext:_context]; 

    // Create default framebuffer object 
    glGenFramebuffers(1, &defaultFramebuffer); 
    glBindFramebuffer(GL_FRAMEBUFFER, defaultFramebuffer); 

    // Create colour renderbuffer and allocate backing store 
    glGenRenderbuffers(1, &colorRenderbuffer); 
    glBindRenderbuffer(GL_RENDERBUFFER, colorRenderbuffer); 

    // Allocate the renderbuffer's storage (shared with the drawable object) 
    CAEAGLLayer *layer = (CAEAGLLayer*)self.glkView.layer; 
    BOOL success = [_context renderbufferStorage:GL_RENDERBUFFER fromDrawable:layer]; 
    if(!success) { 
     NSLog(@"Error rendering buffer storage"); 
    } 

    glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA4, layer.bounds.size.width, layer.bounds.size.height); 

    glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &framebufferWidth); 
    glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &framebufferHeight); 


    // Create the depth render buffer and allocate storage 
    glGenRenderbuffers(1, &depthRenderbuffer); 
    glBindRenderbuffer(GL_RENDERBUFFER, depthRenderbuffer); 
    glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, framebufferWidth, framebufferHeight); 

    // Attach colour and depth render buffers to the frame buffer 
    glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, colorRenderbuffer); 
    glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthRenderbuffer); 


    if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) 
     NSLog(@"Failed to make complete framebuffer object %x", glCheckFramebufferStatus(GL_FRAMEBUFFER)); 

} 
} 

어떤 도움을 이해할 수있을 것이다 :

프레임 버퍼를 생성하기위한 코드는 다음과 같다.

미리 감사드립니다.

+0

해결책을 찾았습니다. 문제는 viewcontroller에서 UIView가 아닌 ​​프레임을 생성한다는 것이 었습니다. 동일한 코드가 UIView 잘 작동합니다. – sastresa

답변

1

나는 이것으로 어려움을 겪고 있었고 해결책은 나를 위해 일한다는 것을 알았습니다. 내가 사용하고 있었다

var openGLView = OpenGLView() 

"renderbufferStorage"가 false를 반환했습니다. 내가 이것을 바꾼 후에

var openGLView: OpenGLView! 

나는 "renderbufferStorage"를 반환했다.

-1

iOS에서 표준 renderbufferStorage를 사용할 수 없습니다. 당신은 EAGLContext의 인스턴스 인 객체를 사용하여 이것을 수행해야합니다.

+0

사실이 아닙니다. – kelin