2011-06-04 71 views
0

现在我正在使用opengl来显示视图。 我的意图是实时更新opengl视图,如果我更改顶点数据,视图也会改变。但没有运气,在Xcode中有一个错误。 在第二次布局opengl视图时,它被称为用于backingWidth/backingHeight的createFramebuffer NG。iphone opengl createFramebuffer问题

1.我也试过把createFramebuffer放在drawview中,也是NG。 2.when glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES)!= GL_FRAMEBUFFER_COMPLETE_OES,我也试图再次创建framebuffer,但也NG。

其他人也发现了这一点:OpenGL-ES, iPhone and intermittent error: GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES (0x8CD6)

任何人遇到这样的问题?你是怎么处理的? 提前谢谢!

- (BOOL)createFramebuffer { 
    NSLog(@"createFramebuffer"); 
    //****************************************************** 
    //Create the framebuffer and renderbuffer object 
    //****************************************************** 
    glGenFramebuffersOES(1, &viewFramebuffer); 
    glGenRenderbuffersOES(1, &viewRenderbuffer); 
    //******************************************************************* 
    //Bind the framebuffer and renderbuffer object to the pipeline 
    //******************************************************************* 
    glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer); 
    glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer); 
    //****************************************************** 
    //Allocate storage 
    //****************************************************** 
    [context renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:(CAEAGLLayer*)self.layer]; 
    //****************************************************** 
    //Attach renderbuffer object to framebuffer object 
    //****************************************************** 
    glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, viewRenderbuffer); 

    glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &backingWidth); 
    glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &backingHeight); 

    NSLog(@" backing size = (%d, %d)", backingWidth, backingHeight); 

    if (USE_DEPTH_BUFFER) { 
     glGenRenderbuffersOES(1, &depthRenderbuffer); 
     glBindRenderbufferOES(GL_RENDERBUFFER_OES, depthRenderbuffer); 
     glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_DEPTH_COMPONENT16_OES, backingWidth, backingHeight); 
     glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT_OES, GL_RENDERBUFFER_OES, depthRenderbuffer); 
    } 

    if(glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES) != GL_FRAMEBUFFER_COMPLETE_OES) { 
     NSLog(@"failed to make complete framebuffer object %x", glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES)); 
     return NO; 
    } 

    return YES; 
} 
+0

对不起,但是NG是什么意思? – 2011-06-04 12:39:24

+0

我得到了一个解决方法,但花费更多的内存,当顶点数据发生变化时再次启动opengl视图。 其他人有很好的方法吗? – Feder 2011-06-04 13:18:08

+0

我并没有完全理解(语言明智)你试图告诉我们什么。但据我猜测,我认为你以某种方式假设只是改变一些顶点数据直接影响可见性。只是为了清楚:在更改顶点数据后,您必须发出绘图调用以实际将其绘制到某处。 OpenGL不是一个场景图,它没有内置水晶球。它给你的只是一些复杂的铅笔和纸。 – datenwolf 2011-06-04 16:13:15

回答

0

我得到了一个解决方法,但花费更多的内存,当顶点数据被改变时再次初始化opengl视图。 其他人有很好的方法吗?

+0

http://www.blog.namar0x0309.com/2011/10/adaptive-resolution/我重新创建帧缓冲区。 – namar0x0309 2013-12-31 21:21:35