2011-06-04 66 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