2017-03-13 1 views
2

Release I irgendein Problem haben ..nicht Gewinde in OpenGLES auf android

Wenn die Funktion aufrufen, eglReleaseThread() sofort Anwendung ohne Rückgabewert auf bestimmten Gerät geschlossen ist, die ‚Galaxy S4‘ ist. andere Geräte (Galaxy Note2,3 Galaxy S7) machen den Fehler nicht. Ich benutze JNI für openGLES 2.0 und das spezifische Gerät hat 4.3 Version (API 18)

Dies ist Release Part Quellcode.

if (mEGLDisplay != EGL_NO_DISPLAY) { 
    CppLog("env - release - exist display"); 
    if(!eglMakeCurrent(mEGLDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT)){ 
     CppError("ImageProcGLES - eglMakeCurrent"); 
     return -1; 
    } 
    else{ 
     CppLog("env - release - eglMakeCurrent"); 
    } 

    if(!eglDestroySurface(mEGLDisplay, mEGLSurface)){ 
     CppError("ImageProcGLES - eglDestroySurface Error."); 
     return -1; 
    } 
    else{ 
     CppLog("env - release - eglDestroySurface"); 
    } 

    if(!eglDestroyContext(mEGLDisplay, mEGLContext)){ 
     CppError("ImageProcGLES - eglDestroyContext."); 
     return -1; 
    }else{ 
     CppLog("env - release - eglDestroyContext"); 
    } 

    if(!eglReleaseThread()){ 
     CppError("ImageProcGLES - eglReleaseThread."); 
     return -1; 
    }else{ 
     CppLog("env - release - eglReleaseThread"); 
    } 

    if(!eglTerminate(mEGLDisplay)){ 
     CppError("ImageProcGLES - eglTerminate."); 
     return -1; 
    }else{ 
     CppLog("env - release - eglTerminate"); 
    } 
} 
else{ 
    CppError("env - release - No Display"); 
} 

und dies ist Rückmeldung.

buffer - release 
    env - release - start 
    env - release - exist display 
    env - release - eglMakeCurrent 
    env - release - eglDestroySurface 
    env - release - eglDestroyContext 

Wenn Sie eine Idee haben ... bitte helft mir :(

+0

Sieht aus wie ein Fehler im Gerätetreiber. Welches spezifische Modell des Galaxy S4 verwendest du? Einige basieren auf SGX-GPUs, andere basieren auf Adreno-GPUs. – solidpixel

+0

@solidpixel, wenn es ein Fehler im Gerätetreiber ist, wie das Problem zu beheben? Ich weiß nicht genau, welche GPU verwendet wird, vielleicht ist es ** I9500/Südkorea Modell **, das auf 'SGX544MP3' GPU basiert –

+0

Sie können es nicht beheben. Workaround vielleicht, aber nicht beheben. Die beste Antwort ist wahrscheinlich nur vermeiden, 'eglReleaseThread() 'zu nennen ... in der Theorie sollten alle EGL-Ressourcen freigegeben werden, wenn Sie' eglTerminate() 'auf jeden Fall aufrufen. – solidpixel

Antwort

1

Es ist ein Fehler in der EGL-Treiber. Ich habe das gleiche Problem haben, um ihn zu arbeiten egl Oberfläche erstellen von Oberflächen- und . nicht SurfaceTexture Wenn Sie Oberfläche erstellen:

mSurface = new Surface(mSurfaceTexture); 
      mEglSurface = EGL14.eglCreateWindowSurface(mEglDisplay, 
mEglConfig, mSurface, surfaceAttribs, 0); 

hier Schlüsselmoment Oberfläche von SurfaceTexture zu erstellen ist:

Surface surface = new Surface(mSurfaceTexture);