正确删除EGL Opengles 2.0
Deleting EGL Opengles 2.0 properly
我编写了一个程序,在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相关的内存没有在每次程序退出时正确删除,但不知道这可能是什么。有什么建议吗?
要正确释放EGL和OpenGL 2.0资源,您必须执行以下操作;
glDeleteProgram(m_eglProgramObject);
删除创建的任何其他总账资源。例如纹理、帧缓冲区、顶点缓冲区、像素缓冲区等
在此之后,您必须使用null曲面和上下文执行eglmakecurrent。这将取消您的EGLContext与当前线程(TLS)的关联
eglMakeCurrent(m_eglDisplay,EGL_NO_SURFACE,EGL_NO_SURFACE, EGL_NO_CONTEXT );
在此之后,您必须释放所有创建的EGL资源:
eglDestroySurface(m_eglDisplay,m_eglSurface);
eglDestroyContext(m_eglDisplay,m_eglContext);
最后执行eglTerminate:
eglTerminate(m_eglDisplay);
如果您还创建了任何平台窗口对象,例如X11的XDisplay、Wayland的wl_display或Android的AWindow。你也必须删除/销毁它。
我希望它能有所帮助。
相关文章:
- 为什么我不能使用 EGL 创建无头 OpenGl 上下文?
- phytec phyBOARD iMX-6在从闪存而不是SD卡运行qt5 opengles应用程序时表现不佳(FPS减半
- EGL 在第一次 opengl 函数调用时崩溃
- 使用 GTK 将 EGL 图像渲染到帧缓冲区
- 如何将 gtkmm 与 EGL 一起使用
- Android OpenGLES Rendering using C++ and Java
- 如何在C opengles iOS中解开glbindframebuffer
- Android NDK OpenGLES 不渲染三角形
- X11和NVIDIA驱动程序的奇怪EGL行为
- Android Native:CMake 链接错误:未定义对 GL 函数的引用 - 即使包含并链接了 EGL 和 GLESv3
- "Missing GL version" 从 glewInit() 使用 EGL?
- 有没有办法将 EGL 绘制到 /dev/fb1 而不是 /dev/fb0,而无需在树莓派上复制数据
- ios |OpenGles 2/3- glmatrixmode替代方案
- 为什么我的索引缓冲区未与gldrawarraysinstanced一起使用(OpenGles 3.0)
- 如何使用SKIA SKBITMAP在EGL纹理上绘制文本
- 为Omap4开发使用PowerVR的EGL应用程序
- 在安卓系统上使用opengles播放YUV视频后活动混乱
- 在PC上测试opengles程序
- opengles 3D 图形覆盆子派
- 正确删除EGL Opengles 2.0