[英]Can't create OpenCL context sharing with EGL/OpenGLES context
[英]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.