android 无法在 opengles 中释放线程
can't release thread in opengles on android
我有一些问题..
当调用函数 eglReleaseThread() 时,应用程序立即关闭,特定设备上没有任何 return 值 '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");
}
这是 return 日志。
buffer - release
env - release - start
env - release - exist display
env - release - eglMakeCurrent
env - release - eglDestroySurface
env - release - eglDestroyContext
如果你有什么想法...请帮助我:(
这是 EGL 驱动程序中的错误。我曾经遇到过同样的问题,要解决它,请从 Surface 而不是 SurfaceTexture 创建 egl 表面。
创建曲面时:
mSurface = new Surface(mSurfaceTexture);
mEglSurface = EGL14.eglCreateWindowSurface(mEglDisplay,
mEglConfig, mSurface, surfaceAttribs, 0);
这里的关键时刻是从 SurfaceTexture 创建 Surface:
Surface surface = new Surface(mSurfaceTexture);
我有一些问题..
当调用函数 eglReleaseThread() 时,应用程序立即关闭,特定设备上没有任何 return 值 '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");
}
这是 return 日志。
buffer - release
env - release - start
env - release - exist display
env - release - eglMakeCurrent
env - release - eglDestroySurface
env - release - eglDestroyContext
如果你有什么想法...请帮助我:(
这是 EGL 驱动程序中的错误。我曾经遇到过同样的问题,要解决它,请从 Surface 而不是 SurfaceTexture 创建 egl 表面。 创建曲面时:
mSurface = new Surface(mSurfaceTexture);
mEglSurface = EGL14.eglCreateWindowSurface(mEglDisplay,
mEglConfig, mSurface, surfaceAttribs, 0);
这里的关键时刻是从 SurfaceTexture 创建 Surface:
Surface surface = new Surface(mSurfaceTexture);