簡體   English   中英

正確刪除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);

刪除創建的所有其他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。 您還必須刪除/銷毀該文件。

希望對您有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM