2011-01-28 38 views
2

在iOS設備(iPad)上,我決定將我的渲染緩衝區的存儲從支持視圖的CAEAGLLayer更改爲通過glRenderbufferStorage顯式存儲。可悲的是,以下代碼未能導致有效的FBO。有人可以告訴我什麼,我錯過了?:爲什麼在iOS上,glRenderbufferStorage顯示失敗?

glGenFramebuffers(1, &m_framebuffer); 
glBindFramebuffer(GL_FRAMEBUFFER, m_framebuffer); 

glGenRenderbuffers(1, &m_colorbuffer); 
glBindRenderbuffer(GL_RENDERBUFFER, m_colorbuffer); 

GLsizei width = (GLsizei)layer.bounds.size.width; 
GLsizei height = (GLsizei)layer.bounds.size.height; 
glRenderbufferStorage(m_colorbuffer, GL_RGBA8_OES, width, height); 

glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, m_colorbuffer); 

注:
層尺寸是有效的和正確的。 這是可靠的生產工作渲染代碼。我作出的唯一變化是該行:

glRenderbufferStorage(...) 

以前我做:

[m_context renderbufferStorage:GL_RENDERBUFFER fromDrawable:layer] 
+0

正確的答案是因爲你不能用'glRenderbufferStorage(...)`調用`[context renderbufferStorage]`來調用 – bobobobo 2013-01-10 22:13:03

回答

2

glRenderbufferStorage第一個參數應該是GL_RENDERBUFFER,不m_colorbuffer

(這將在m_colorbuffer存儲,因爲那是什麼必然的GL_RENDERBUFFER目標從以前glBindRenderbuffer調用)

+0

好。得到它了。我仍然困惑於如何獲得渲染緩衝區顯示結果。如果我沒有建立我的CAEAGLLayer和渲染緩衝區之間的連接,我無法獲得屏幕上的像素。我錯過了什麼?!?嘆息... – dugla 2011-01-30 16:28:41

5
iOS中

,您不能使用glRenderBufferStorage綁定附色,你需要從EAGLContext上要求存儲視圖層。某處在你的視圖代碼,您必須使用類似的代碼如下:

// First Bind a Render Buffer 
glBindRenderbuffer(GL_RENDERBUFFER, m_colorBuffer); 
[context renderBufferStorage:GL_RENDERBUFFER forDrawable:(CAEAGLLayer*) self.layer]; 

你無法避免第二行,因爲它是由iOS的需要,這就是你指的線「聯動」,從渲染到層