2012-04-16 48 views
3

解決!見下面的更新。在NativeActivity上重新初始化OpenGL ES 2窗口resume

我們正在向Android移植一個大型的C++應用程序,並且一切都運行良好,直到暫停和恢復應用程序。我們收聽APP_CMD_INIT_WINDOW命令,當它發生時,我們重新初始化所有egl命令以獲取曲面,上下文和顯示。此後屏幕變黑。但是,如果我們在應用之後設置了glClearColor,這意味着我們至少有窗口並且可以繪製它。這導致我們相信,可能還有別的東西沒有重新初始化。

我的問題是,如果有緩衝區,着色器程序或其他緩存的東西,需要在恢復後(或暫停之前)清除並重新加載,以及測試它的合適方法。我們懷疑它可能與我們的應用程序使用舊的EGL上下文引用舊緩衝區有關,但我們無法知道。該應用程序使用大量的紋理和屏幕外緩衝區。


UPDATE:像往常一樣,嘗試不同的東西一個星期後,我們最後只是在創建後門柱解決它。以下是解決方案:

所有緩存的紋理,緩衝區和着色器都連接到由EGL創建的上下文句柄。有幾件事情初始化來創建GL上下文,窗口表面就是其中之一。這是唯一依賴於在暫停和恢復應用程序時被破壞並重新創建的ANativeWindow對象的機制。因此,這是唯一需要重新創建的。

簡而言之:

運行eglCreateWindowSurface再次與新的窗口對象作爲參數恢復之後。

+0

,而不是更新的答案的問題,你應該回答它。回答你自己的問題是可以的。這樣,問題就不會在列表中顯示爲未答覆。 – haffax 2012-04-16 15:29:26

+0

感謝您的提示。它說我無法在8小時內回答自己的問題,所以我想確保沒有人浪費時間回答它。 – Jake 2012-04-16 16:12:06

+0

好的,我不知道時間限制。 – haffax 2012-04-17 11:36:09

回答

4

所有緩存的紋理,緩衝區和着色器都連接到由EGL創建的上下文句柄。有幾件事情初始化來創建GL上下文,窗口表面就是其中之一。這是唯一依賴於在暫停和恢復應用程序時被破壞並重新創建的ANativeWindow對象的機制。因此,這是唯一需要重新創建的。

簡而言之:

運行eglCreateWindowSurface再次與新的窗口對象作爲參數恢復之後。

0

我不得不打電話都eglCreateWindowSurface和eglMakeCurrent,而其他重用的一切,和它的工作(安卓4.2)