我對FrameBuffers有點困惑。 目前,爲了在屏幕上繪製,我使用此代碼爲GL_COLOR_ATTACHMENT0
生成了一個帶有渲染緩衝區的幀緩衝區。OpenGL ES 2.0和iOS中的默認FrameBuffer
-(void)initializeBuffers{
//Build the main FrameBuffer
glGenFramebuffers(1, &frameBuffer);
glBindFramebuffer(GL_FRAMEBUFFER, frameBuffer);
//Build the color Buffer
glGenRenderbuffers(1, &colorBuffer);
glBindRenderbuffer(GL_RENDERBUFFER, colorBuffer);
//setup the color buffer with the EAGLLayer (it automatically defines width and height of the buffer)
[context renderbufferStorage:GL_RENDERBUFFER fromDrawable:EAGLLayer];
glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &bufferWidth);
glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &bufferHeight);
//Attach the colorbuffer to the framebuffer
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, colorBuffer);
//Check the Framebuffer status
GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
NSAssert(status == GL_FRAMEBUFFER_COMPLETE, ERROR_FRAMEBUFFER_FAIL);
}
我顯示了使用
[context presentRenderbuffer:GL_RENDERBUFFER];
閱讀this question緩衝區的內容,我看到Arttu Peltonen的誰說註釋:
默認幀緩衝區是你默認渲染,你沒有 做任何事情來獲得。 Framebuffer對象是您可以渲染到的東西,而這被稱爲「離屏渲染」。 如果你這樣做,你最終得到的是你的圖像紋理,而不是 默認幀緩衝區(顯示在屏幕上)。您可以將 圖像從該紋理複製到默認幀緩衝區(屏幕上),即 通常使用blitting完成(但它僅在OpenGL ES 3.0中提供)。 但是,如果你只是想在屏幕上顯示圖像,你可能 首先不會使用FBO。
所以我不知道我的方法是否只是用於離屏渲染。 在那種情況下,我必須做什麼才能在默認緩衝區上呈現?! (注意,我不想使用GLKView ...)