2013-01-17 92 views
6

我正在開發一個Android應用程序類型指畫顏料。我正在使用OpenGL ES 2.0。基本上我有一個圖像,其中每個觸摸屏都應該對應一個圓alpha,以應用於顯示下面的其他圖像的位置。我嘗試了不同的技術,但速度很慢,因爲它的功能類似於使用有機glTexSubImage2D,這會減慢渲染階段。我試圖瞭解FBO的使用,因爲它們允許離屏渲染。有人可以更好地解釋屏幕上顯示的內容,以及加速我的方法可以獲得哪些優勢?Android Opengl FBO屏幕外

我想在屏幕外意味着您可以更改由我創建的幀緩衝,onDrawFrame?在另一個線程?

回答

0

當您需要回讀(部分)屏幕並將相同數量的數據重新寫回到GPU內存時,您的方法會消耗大量內存帶寬。這是非常緩慢的,並使您的繪圖代碼在渲染之前將圖像移回到GPU之前等待。你有沒有考慮爲每個手指按壓或某種類型的原始圖形繪製四邊形,以滿足您的需求?爲什麼你需要OpenGL?

1

除了能夠使用OpenGL ES 2.0渲染到屏幕上的窗口之外,您還可以渲染到名爲 pbuffers(像素緩衝區的簡稱)的不可見的離屏幕表面。就像一個窗口一樣,Pbuffers可以充分利用OpenGL ES 2.0提供的任何硬件加速功能 。 Pbuffers最常用於生成紋理貼圖。如果所有你想要的 do渲染到紋理,我們建議使用幀緩衝對象(在第12章「幀緩衝對象」中涵蓋 )而不是pbuffers,因爲它們的效率更高,因爲它們是 。但是,對於某些不能使用幀緩衝對象的情況,例如在使用OpenGL ES渲染離屏 表面,然後將其用作另一API(如OpenVG的 )中的紋理時,pbuffers仍可能有用。

[來源:OpenGL ES 2.0的節目指南]

我希望這有助於。請仔細閱讀 - 「使用OpenGL ES渲染到離屏表面時,pbuffers仍然很有用」

+0

但是,由於需要在兩個EGL上下文之間切換,因此我已經提到pbuffer方法在Android上很慢。相反,搜索使用「framebuffer對象」作爲屏幕外緩衝區的stackoverflow答案。 – ToolmakerSteve