2009-10-12 111 views
1

我正在使用具有顏色緩衝區附件的幀緩衝區對象來執行每像素點擊測試。我想將它渲染到屏幕上進行調試和測試,但現在我所得到的只是一個大白色的虛無。我假設我必須發送一些類似於glSwapBuffers()的渲染命令,但由於我只使用一個緩衝區,我不知道它將交換到什麼地方。是否有等同的命令只使用一個緩衝區?如何測試幀緩衝區對象是否正確渲染?

這裏是我的設置:

// Store the real framebuffer 
    glGetIntegerv(GL_FRAMEBUFFER_BINDING_OES, (GLint*) &regularFbo); 
    // Generate an offscreen framebuffer/renderbuffer for rendering the hit detection polys 
    // Create framebuffer 
    glGenFramebuffersOES(1, &hitDetectionFbo); 
    glBindFramebufferOES(GL_FRAMEBUFFER_OES, hitDetectionFbo); 
    // Create colorbuffer 
    glGenRenderbuffersOES(1, &colorBuffer); 
    glBindRenderbufferOES(GL_RENDERBUFFER_OES, colorBuffer); 
    // Create storage (RGBA) for color buffer 
    glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_RGBA8_OES, SCREEN_WIDTH, SCREEN_HEIGHT); 
    // Attach color buffer to framebuffer 
    glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, colorBuffer); 
    glDisable(GL_DEPTH_TEST); 
    glDepthMask(GL_FALSE); 

這不標記任何glErrors但我清楚地失去了一些東西,因爲沒有什麼是出現在屏幕上我切換到我的新的FBO之後。如果我繼續使用原始幀緩衝區(通過調用glBindFramebufferOES(GL_FRAMEBUFFER_OES, regularFbo)),該程序將渲染得很好。

感謝您的幫助, -S

回答

1

在iPhone平臺上,可以直接用作後備緩衝唯一的FBO是具有已使用分配的顏色緩衝區中的一個:

[myEaglContext renderbufferStorage:GL_RENDERBUFFER fromDrawable: eaglLayer]; 

如果您使用glRenderbufferStorageOES分配顏色緩衝區,那麼這是一個正常的屏幕外FBO,使其顯示屏幕的最佳方式是將其綁定到紋理並渲染四邊形。

相關問題