gpt4 book ai didi

c++ - 正确删除 EGL Opengles 2.0

转载 作者:行者123 更新时间:2023-11-30 03:54:55 24 4
gpt4 key购买 nike

我编写了一个在 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);

删除创建的任何其他 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);

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

希望对你有帮助。

关于c++ - 正确删除 EGL Opengles 2.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29284904/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com