現在我正在使用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