2013-02-26 44 views
1

我想創建一個程序,使用我自己製作的所有fbo進行渲染。我知道像這樣渲染的常見過程: 1. egl init。 2.程序的使用。 3.輸入紋理數據 4. swapbuffer。 ,但是當我將它改成fbo渲染時,發生了一些事情,我不知道原因。這裏是我的代碼,我補充說:如何直接在opengl es2.0中渲染framebuffer?

glGenFramebuffers(1,frame_buf); 
    glBindFramebuffer(GL_FRAMEBUFFER, frame_buf); 
    glGenRenderbuffers(1, &color_buf); 
    glBindRenderbuffer(GL_RENDERBUFFER, s->color_buf); 
    glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA, screen_width, screen_height); 
    glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, s->color_buf); 

我認爲,當我加入這一點,GL將在我做出的綁定FBO運營。但沒有圖像顯示在窗口..

回答

0

當然沒有圖像顯示。一般來說,您必須渲染到默認幀緩衝區才能看到它。這就是可見圖像所在的位置:默認幀緩衝區。

您可以對FBO進行中間渲染。但是在交換緩衝區調用將被使用之前,您必須將其提交到默認幀緩衝區。

+0

感謝您的回答,但正如我在IOS API知道了OpenGL的實施提供一切使用FBO,它綁定到渲染層來顯示圖像。所以我想知道是否有類似的方法使用egl api來做同樣的事情。你能告訴我如何直接將fbo粘貼到默認的fbo嗎? – Lustlord 2013-02-26 09:15:22

0

如果你想直接呈現到屏幕,使用此代碼,而不是您所使用的代碼

glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA, screen_width, screen_height); 

變化

[eaglContext renderbufferStorage:GL_RENDERBUFFER fromDrawable:(id<EAGLDrawable>)eaglLayer]; 

glRenderbufferStorage()提請關閉屏幕

如果您在Android工作,請遵循此規則

#ifdef IOS 

glBindFramebuffer(GL_FRAMEBUFFER,s_FrameBuffer);

#elif ANDROID 

glBindFramebuffer(GL_FRAMEBUFFER,0);

#endif 
+0

T我知道來自ios api,但我工作的環境是android ...你的建議不起作用 – Lustlord 2013-02-28 07:54:25

+0

我沒有提到這一點。好的,在IOS和ANDROID之間設置FBO有點不同。 – Sung 2013-03-01 00:28:36

+0

我更新了我的答案,如果您想直接渲染,請不要使用glRenderbufferStorage() – Sung 2013-03-01 00:38:03