can';t在android上的opengles中释放线程
我有一些问题 调用函数eglReleaseThread()时,应用程序立即关闭,特定设备上没有任何返回值,即“Galaxy S4”。 其他设备(galaxy note2,3 galaxy S7)不会出现错误。 我在openGLES 2.0中使用JNI,特定设备有4.3版本(API 18) 这是发布部分的源代码can';t在android上的opengles中释放线程,android,opengl-es,java-native-interface,egl,Android,Opengl Es,Java Native Interface,Egl,我有一些问题 调用函数eglReleaseThread()时,应用程序立即关闭,特定设备上没有任何返回值,即“Galaxy S4”。 其他设备(galaxy note2,3 galaxy S7)不会出现错误。 我在openGLES 2.0中使用JNI,特定设备有4.3版本(API 18) 这是发布部分的源代码 if (mEGLDisplay != EGL_NO_DISPLAY) { CppLog("env - release - exist display"); if(!eglM
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
如果你有一些想法。。。请帮助我:(这是EGL驱动程序中的一个错误。我曾经有过同样的问题,为了解决这个问题,从surface而不是SurfaceTexture创建EGL曲面。 创建曲面时:
mSurface = new Surface(mSurfaceTexture);
mEglSurface = EGL14.eglCreateWindowSurface(mEglDisplay,
mEglConfig, mSurface, surfaceAttribs, 0);
这里的关键时刻是从SurfaceTexture创建曲面:
Surface surface = new Surface(mSurfaceTexture);
看起来像是设备驱动程序中的错误。您使用的是Galaxy S4的哪个特定型号?一些基于SGX gpu,其他基于Adreno gpu。@solidpixel如果是设备驱动程序中的错误,如何解决问题?我不知道具体使用的是哪个gpu,可能是基于“SGX544MP3”gpu的I9500/韩国型号。您无法修复它。Wor最好的答案可能是避免调用
eglReleaseThread()
…理论上,当你调用eglTerminate()
时,所有的EGL资源都应该被释放。啊..!你的意思是如果我不调用eglreleasethreed()
,问题就不会出现,因为eglTerminate()
释放所有资源,如内存、线程等……如果重复初始化和发布,是否真的会出现问题?我担心应用程序会死掉,因为很多线程都是madeNo-这里应该没有问题。