我正在开发一个运行在不同EGL实现上的应用程序,例如Mesa,ANGLE,AMD EGL等。该应用程序创建多个线程,每个线程都有许多EGLContexts。
当一个线程退出时,是否应该在销毁它之前释放在上下文中创建的所有纹理,缓冲区等(eglDestroyContext),或者它是否足以简单地破坏上下文?假设硬件可能是iGPU,并且它使用系统RAM作为其内存。
答案 0 :(得分:2)
如果你愿意,你可以销毁它们,但你不必:
EGL 1.5 spec,第3.7.2节"销毁渲染上下文",第57页(强调我的):
EGLBoolean eglDestroyContext(EGLDisplay dpy, EGLContext ctx);
与
ctx
相关联的所有资源都会尽快标记为删除。当多个上下文共享对象时(请参阅eglCreateContext
),此类共享对象在删除之前不会被删除除非首先由应用程序显式删除对象,否则将销毁共享列表上的所有上下文。在eglDestroyContext
之后,上下文和引用它的句柄的处理方式与eglTerminate
销毁的上下文相同(参见第3.2节)。