无法在android上的opengles中发布线程

时间:2017-03-13 08:02:12

标签: android opengl-es java-native-interface egl

我有一些问题..

当调用函数eglReleaseThread()时,立即关闭应用程序,而在特定设备上没有任何返回值,即Galaxy S4'。  其他设备(galaxy note2,3 galaxy S7)不会出错。 我将JNI用于openGLES 2.0,特定设备具有4.3版本(API 18)

这是发布部分源代码。

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");
}

这是返回日志。

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

如果您有任何想法......请帮助我:(

1 个答案:

答案 0 :(得分:1)

这是EGL驱动程序中的一个错误。我曾经有同样的问题,要解决它从Surface创建egl表面而不是SurfaceTexture。 创建曲面时:

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

这里的关键时刻是从SurfaceTexture创建Surface:

Surface surface = new Surface(mSurfaceTexture);