5

次のコードを使用して、EGLコンテキストbwteen2GLSurfaceViewsを共有しようとしています。

createContext(EGL10 egl, EGLDisplay display, EGLConfig eglConfig) {
    EGLContext shared = ...; // a cached egl context
    int[] attrib_list = { EGL_CONTEXT_CLIENT_VERSION, 2, EGL10.EGL_NONE };
    EGLContext context = egl.eglCreateContext(display, eglConfig, shared == null ? EGL10.EGL_NO_CONTEXT : shared,
        attrib_list);
    return context;
  }
}

このコードは、ほとんどのAndroidフォン(OS> = 2.2)で機能しますが、テストしたすべてのタブレットで失敗しました。

01-12 18:33:35.381:E / AndroidRuntime(12171):致命的な例外:GLThread 11

01-12 18:33:35.381:E / AndroidRuntime(12171):java.lang.RuntimeException:eglMakeCurrentが失敗しました:EGL_BAD_ACCESS

01-12 18:33:35.381:E / AndroidRuntime(12171):android.opengl.GLSurfaceView $ EglHelper.throwEglException(GLSurfaceView.java:1146)

LOCAL_LDLIBS:= -lGLESv2を宣言したので、EGLは2.0コンテキストです。

タブレットで失敗した理由(xoom、galaxy、lg、sonyなど)

任意の洞察をいただければ幸いです。

4

2 に答える 2

2

この失敗の考えられる 2 つの理由 (EGL 仕様から):

  • ctx が他のスレッドに対して現在のものである場合、または描画または読み取りのいずれかが別のスレッドのコンテキストにバインドされている場合、EGL_BAD_ACCESS エラーが生成されます。
  • バインド ctx が、実装でサポートされているクライアント API タイプの現在のコンテキスト数を超える場合、EGL_BAD_ACCESS エラーが生成されます。

タブレットで使用している GPU が共有コンテキストをサポートしていない可能性もあります。

于 2012-01-13T07:52:17.147 に答える
0

おそらく次の行が GLSurfaceView のエラーの原因です。

public GL createSurface(SurfaceHolder holder) {
    ....

    /*
     * Before we can issue GL commands, we need to make sure
     * the context is current and bound to a surface.
     */
    if (!mEgl.eglMakeCurrent(mEglDisplay, mEglSurface, mEglSurface, mEglContext)) {
         throwEglException("eglMakeCurrent");
    }

}
于 2012-01-13T04:24:13.540 に答える