我编写了一个程序,它在WINCE上创建一个窗口,并使用EGL创建绘图面和上下文。当这个程序退出时,我有以下清理例程:
eglMakeCurrent(m_eglDisplay,EGL_NO_SURFACE,EGL_NO_SURFACE,m_eglContext);
eglDestroyContext(m_eglDisplay,m_eglContext);
glDeleteProgram(m_eglProgramObject);
glReleaseShaderCompiler();
delete m_eglDisplay;
delete m_eglSurface;
delete m_eglContext;
delete m_eglConfig;如果我不重新启动目标系统,这个程序的打开和关闭最终会导致这一行失败:
m_eglContext = eglCreateContext(m_eglDisplay,m_eglConfig,EGL_NO_CONTEXT,arrContextAttrib);与EGL错误12291,这显然意味着EGL_BAD_ALLOC。我假设有一些与EGL相关的内存,在程序每次退出时都不会被正确删除,但不知道这可能是什么。有什么建议吗?
发布于 2015-03-30 15:20:58
要正确地释放EGL和OpenGL 2.0资源,您必须做以下工作;
glDeleteProgram(m_eglProgramObject);删除创建的任何其他GL资源。例如纹理、帧缓冲区、顶点缓冲区、像素缓冲区等
之后,您必须对空曲面和上下文执行eglmakecurrent操作。这将使您的EGLContext与当前线程(TLS)脱离关联。
eglMakeCurrent(m_eglDisplay,EGL_NO_SURFACE,EGL_NO_SURFACE, EGL_NO_CONTEXT );在此之后,您必须发布创建的所有EGLResources:
eglDestroySurface(m_eglDisplay,m_eglSurface);
eglDestroyContext(m_eglDisplay,m_eglContext); 最后,eglTerminate做了:
eglTerminate(m_eglDisplay);如果您还创建了任何平台窗口对象,例如用于XDisplay的X11、用于Wayland的wl_display或用于Android的AWindow。你也必须删除/销毁它。
希望能帮上忙。
https://stackoverflow.com/questions/29284904
复制相似问题