Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
can';t在android上的opengles中释放线程_Android_Opengl Es_Java Native Interface_Egl - Fatal编程技术网

can';t在android上的opengles中释放线程

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

我有一些问题

调用函数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(!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-这里应该没有问题。