2010-03-25 140 views
3

好吧,我有4個緩衝區,3個FBO和一個渲染緩衝區。讓我解釋。如何合併兩個FBO?

我有一個視圖FBO,它將在渲染緩衝區之前存儲場景。

我有一個背景緩衝區,其中包含場景的背景。

我有一個用戶操作的用戶緩衝區。

當用戶進行一些操作時,我使用一些混合繪製到用戶緩衝區。

然後要重畫整個場景,我想要做的是清除視圖緩衝區,將背景緩衝區繪製到視圖緩衝區,更改混合,然後將用戶緩衝區繪製到視圖緩衝區。最後將視圖緩衝區渲染到渲染緩衝區。

但我不知道如何繪製一個FBO到另一個FBO。我想要做的事情基本上是合併和混合兩個FBO,但我無法弄清楚如何!我是OpenGL ES的新手,非常感謝所有的幫助。

回答

2

設置您的屏幕外幀緩衝區以直接渲染到紋理。此鏈接顯示您如何:

http://developer.apple.com/iphone/library/documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/WorkingwithEAGLContexts/WorkingwithEAGLContexts.html#//apple_ref/doc/uid/TP40008793-CH103-SW7

讓我花點時間來描述幀緩存並renderbuffers,爲了我和你。幀緩衝區就像一個接受OpenGL渲染命令的端口。必須先將其附加到紋理或渲染緩衝區,然後才能看到或使用渲染輸出。您可以選擇使用glFramebufferTexture2DOES附加紋理或使用glFramebufferRenderbufferOES的渲染緩衝區。渲染緩衝區就像一個保存渲染結果的柵格圖像。柵格圖像的存儲由OpenGL管理。如果您希望圖像顯示在屏幕上而不是屏幕外緩衝區中,請使用-[EAGLContext renderBufferStorage:fromDrawable:]將EAGLContext的存儲與渲染緩衝區一起使用。該代碼位於OpenGL ES項目模板中。

您可能不需要視圖幀緩衝區,因爲在將場景背景和用戶圖層渲染爲紋理之後,可以將這些紋理繪製到渲染緩衝區(也就是與屏幕渲染緩衝區關聯的幀緩衝區)中。

+0

謝謝永久環視後,我剛剛發現了這個答案。出於某種原因,我只是認爲這會很慢。 – DevDevDev 2010-03-26 03:56:56

+0

我發現真的很慢是全屏alpha混合。將4層混合在一起使我下降到15 FPS。當我不需要它時,我必須小心地關掉混合。 – codewarrior 2010-03-26 06:55:40

+0

感謝您的提示。只有很小的部分會在不同的幀之間變化,是否有一種簡單的方法可以清除和重繪部分幀。例如,假設你有一個矩形繪圖程序。在用戶輸入(touchesEnded)上。您計算用戶進行更改的矩形區域,清除那裏的像素,重繪該矩形中的背景,然後繪製用戶操作?我的意思是我可以手動執行某些操作,但我希望OpenGL具有此功能。 也有可能將兩個渲染緩衝區合併在一起?對不起,提出這麼多問題,但大多數教程都寫得很差...... – DevDevDev 2010-03-26 16:33:18