现在我正在使用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;
}
对不起,但是NG是什么意思? – 2011-06-04 12:39:24
我得到了一个解决方法,但花费更多的内存,当顶点数据发生变化时再次启动opengl视图。 其他人有很好的方法吗? – Feder 2011-06-04 13:18:08
我并没有完全理解(语言明智)你试图告诉我们什么。但据我猜测,我认为你以某种方式假设只是改变一些顶点数据直接影响可见性。只是为了清楚:在更改顶点数据后,您必须发出绘图调用以实际将其绘制到某处。 OpenGL不是一个场景图,它没有内置水晶球。它给你的只是一些复杂的铅笔和纸。 – datenwolf 2011-06-04 16:13:15