Я написал программу, которая создает окно на WINCE и использует EGL для создания поверхности и контекста рисования. Когда эта программа завершает работу, у меня есть следующие очистки рутина:Правильное удаление EGL Opengles 2.0
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, которая не удаляется должным образом каждый раз, когда программа выходит, но не знает, что это может быть. Какие-либо предложения?
Правильная реализация должна очистить все ресурсы, связанные с OpenGL, когда программа выйдет. Как вы говорите, вы тоже разрушаете поверхность? Возможно, стоит попробовать, если вы этого уже не делаете. Кроме того, указанная выше последовательность недействительна. Вызов 'glDelete *()' необходимо сделать, если у вас все еще есть действующий текущий контекст. –
@RetoKoradi благодарит за советы. Я просмотрел чит-листы как для EGL, так и для Opengles 2.0 и внесены изменения в код для включения в деконструктор: 'glDeleteProgram (m_eglProgramObject); glReleaseShaderCompiler(); eglTerminate (m_eglDisplay); eglMakeCurrent (m_eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); eglDestroySurface (m_eglDisplay, m_eglSurface); eglDestroyContext (m_eglDisplay, m_eglContext); eglReleaseThread(); ' – CodingNinja
Но тот же результат случается. В конце концов, для EGL есть плохое выделение памяти:/Можете ли вы быть достаточно любезными, чтобы указать, какова должна быть правильная последовательность вызовов glDelete? – CodingNinja