2016-09-27 312 views
4

我想使用多個EGL上下文在我的主線程之外加載紋理。在撥打eglCreateContext後,我收到EGL_BAD_CONTEXT錯誤。在Android上的OpenGL上下文之間共享資源

裏面我android.opengl.Renderer

public void onSurfaceCreated (javax.microedition.khronos.opengles.GL10 gl, EGLConfig config) { 
    // ... 
    EGLContext sharedContext = egl.getCurrentContext(); 
    EGLDisplay display = eglGetCurrentDisplay(); 
    eglCreateContext(display, config, sharedContext, new int[] { EGL_CONTEXT_CLIENT_VERSION, 2 }); 
} 

EGL_BAD_CONTEXT導致我的文檔here,說,如果share_context是不一樣的客戶端的EGL渲染背景下產生

EGL_BAD_CONTEXT API類型作爲新創建的上下文,而不是EGL_NO_CONTEXT。

這就是爲什麼我添加了EGL_CONTEXT_CLIENT_VERSION參數,但它似乎沒有效果。

我所看到的是,即使我得到這個錯誤,上下文似乎是半有效的。我能夠用它在另一個線程

egl.eglMakeCurrent(display, EGL10.EGL_NO_SURFACE, EGL10.EGL_NO_SURFACE, context); 

在此之後,該線程創建的紋理不原因的錯誤。但我確實看到紋理名稱不是共享的,每個線程似乎都從0開始計數。


我的下一個假設是我需要共享上下文之間的界面。但是,如果我通過從原始上下文相同的表面到我eglMakeCurrent,但我

E/AndroidRuntime(3210): java.lang.IllegalArgumentException 
E/AndroidRuntime(3210):  at com.google.android.gles_jni.EGLImpl._eglCreateContext(Native Method) 
E/AndroidRuntime(3210):  at com.google.android.gles_jni.EGLImpl.eglCreateContext(EGLImpl.java:54) 

完全失敗我覺得好像我幾乎有,是否有人知道缺少了什麼?

回答

0

this question原來,由於一些幫助:

我的輔環境要求的表面。它是而不是與原始上下文的表面相同。

我需要使用eglCreatePbufferSurface來創建新的曲面。我之前嘗試過的失敗的原因是它默認的寬度和高度爲0.通過將它設置爲1x1表面,它完美地工作。

egl.eglCreatePbufferSurface(display, config, new int[] { EGL10.EGL_WIDTH, 1, EGL10.EGL_HEIGHT, 1, EGL10.EGL_NONE });