2016-12-27 4 views
1

Я разрабатываю приложение, которое работает на разных реализациях EGL, таких как Mesa, ANGLE, AMD EGL и т. Д. Приложение создает несколько потоков, каждый поток имеет несколько EGLContexts.Ресурсы EGLContext освобождаются автоматически?

Когда поток выходит, должен ли он освобождать все текстуры, буферы и т. Д., Созданные в контексте, прежде чем уничтожить его (eglDestroyContext), или достаточно ли просто уничтожить контекст? Предположим, что аппаратное обеспечение может быть iGPU, и в качестве его памяти используется системная память.

ответ

2

Вы можете уничтожить их, если вы хотите, но вы не должны:

EGL 1.5 spec, раздел 3.7.2 "Разрушая Контексты рендеринга", стр 57 (курсив мой):

EGLBoolean eglDestroyContext(EGLDisplay dpy, EGLContext ctx);

Все ресурсы, связанные с ctx помечены для удаления как можно скорее. Когда несколько контекстов обмениваются объектами (см. eglCreateContext), такие общие объекты не удаляются до тех пор, пока не будут уничтожены все контексты в списке общего доступа, если только объекты не будут сначала явно удалены приложением. Следуя eglDestroyContext, контекст и дескриптор, относящиеся к нему, обрабатываются так же, как контекст, разрушенный eglTerminate (см. Раздел 3.2).