首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正确删除EGL打开2.0

正确删除EGL打开2.0
EN

Stack Overflow用户
提问于 2015-03-26 17:19:59
回答 1查看 2.6K关注 0票数 2

我编写了一个程序,它在WINCE上创建一个窗口,并使用EGL创建绘图面和上下文。当这个程序退出时,我有以下清理例程:

代码语言:javascript
复制
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;

如果我不重新启动目标系统,这个程序的打开和关闭最终会导致这一行失败:

代码语言:javascript
复制
m_eglContext = eglCreateContext(m_eglDisplay,m_eglConfig,EGL_NO_CONTEXT,arrContextAttrib);

与EGL错误12291,这显然意味着EGL_BAD_ALLOC。我假设有一些与EGL相关的内存,在程序每次退出时都不会被正确删除,但不知道这可能是什么。有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2015-03-30 15:20:58

要正确地释放EGL和OpenGL 2.0资源,您必须做以下工作;

代码语言:javascript
复制
glDeleteProgram(m_eglProgramObject);

删除创建的任何其他GL资源。例如纹理、帧缓冲区、顶点缓冲区、像素缓冲区等

之后,您必须对空曲面和上下文执行eglmakecurrent操作。这将使您的EGLContext与当前线程(TLS)脱离关联。

代码语言:javascript
复制
eglMakeCurrent(m_eglDisplay,EGL_NO_SURFACE,EGL_NO_SURFACE, EGL_NO_CONTEXT );

在此之后,您必须发布创建的所有EGLResources:

代码语言:javascript
复制
eglDestroySurface(m_eglDisplay,m_eglSurface); 
eglDestroyContext(m_eglDisplay,m_eglContext); 

最后,eglTerminate做了:

代码语言:javascript
复制
eglTerminate(m_eglDisplay);

如果您还创建了任何平台窗口对象,例如用于XDisplay的X11、用于Wayland的wl_display或用于Android的AWindow。你也必须删除/销毁它。

希望能帮上忙。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29284904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档