2010-06-22 52 views
6

我試圖找到一種方法來檢查當前EGLContext是否存在並準備在Android上使用。通過規範,我一直在使用調用以檢查Android中是否存在當前EGLContext

((EGL10)EGLContext.getEGL())。eglGetCurrentContext()

嘗試,然後比較它EGL10.EGL_NO_CONTEXT(試過.equals()和!=)。然而,儘管通過調試'似乎'它正在返回一個'EGL_NO_CONTEXT'的實例(似乎意味着所有的內部值都是未初始化的),但無論我做了什麼比較,我都無法讓它工作。

任何人都知道另一個/正確的方法來完成這項工作?我不想通過拋出一個隨機GL呼叫和捕捉EGLError來做到這一點......

回答

0

你可以嘗試測試它是否爲空,而不是等於給定的上下文。這是我在標準的opengl程序中要做的。

[編輯]有它使用它,如下所示爲例here

if ((eglGetCurrentContext() != context->egl_context) || 
    (eglGetCurrentSurface (EGL_READ) != drawable->egl_surface)) 

我不知道這是任何幫助。

+1

它從不遺憾地返回null。我已經調試過它,並且由eglGetCurrentContext()給我的EGLContext實際上不是當前的,因爲使用它的任何操作都會給我'沒有當前上下文集'的錯誤。 – Moncader 2010-06-22 14:13:44

+0

那麼在初始化過程中是否存在某種錯誤?當我早點查看你的問題時,我發現了各種各樣的示例代碼,但沒有任何錯誤檢查它。也許你應該仔細檢查你的初始化例程,以符合現在的例子中的內容,並在以後找到錯誤檢查的東西?您也可以在更多以Android爲中心的網站上進行諮詢,並隨時查看更新。此外,如果您的其他途徑之一得到回報,請務必在此處發佈解決方案以幫助其他人找到它。 – Amos 2010-06-22 16:43:35

+0

我已經有一個完整的工作應用程序。然而,我有一些情況,當Android沒有設置當前的GL上下文時,我想要將紋理加載到內存中(如果您不知道android,那麼這就是它的工作原理)。顯然,這是不可能的,因此當我檢測到沒有當前上下文時,我會將該位圖追加到隊列中,以便當上下文變得可用時再添加到VRAM中。 – Moncader 2010-06-23 01:13:38

2

似乎是Android的執行EGL10.eglGetCurrentContext(),其中eglGetCurrentContxt()的結果,必須使用

result.equals(EGL10.EGL_NO_CONTEXT) 

而不是

result == EGL10.EGL_NO_CONTEXT 

例如進行比較的一個bug :

if (((EGL10) EGLContext.getEGL()).eglGetCurrentContext().equals(EGL10.EGL_NO_CONTEXT)) { 
    // no current context. 
} 
2

我遇到了不能重新關閉的問題在嘗試將GLSurfaceView中的屏幕上的內容呈現給屏幕外的EGLPixelBufferSurface時,請使用當前的EGLContext。從我可以告訴,利用靜態方法

EGLContext.getEgl()

的問題是,它會創建一個默認的EGL實例 - 這將意味着,與它相關的EGLContext相當於EGL10.EGL_NO_CONTEXT。

此外,在Android中,EGLContext只能與一個線程相關聯(Android開發人員Romain Guy如此說:here)。因此,爲了正確地使用

EGL.getCurrentContext()

你就必須有一個預先存在的EGL實例,並調用創建該EGLContext線程的getCurrentContext()方法。

注意:當GLThread在GLSurfaceView類中暫停/恢復時(看看setPreserveEGLContextOnPause(boolean preserveOnPause)方法),Android現在可以處理保存EGLContext。

相關問題