2016-09-27 43 views
4

メインスレッド外でテクスチャを読み込むために複数のEGLコンテキストを使用しようとしています。 エラーが発生しました。eglCreateContext呼び出し後にエラーが発生します。 android.opengl.RendererOpenGLコンテキストのAndroid間のリソースの共有

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がshare_contextが同じクライアントのEGLレンダリングコンテキストがない場合は

EGL_BAD_CONTEXTが生成されると言うドキュメントhere、に私を導く私のインサイド

新しく作成されたコンテキストとしての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 }); 
関連する問題