Я разрабатываю приложение OpenGL ES 2.0 (с использованием Angleproject в Windows для разработки), которое состоит из нескольких «фреймов».
Каждый фрейм представляет собой изолированное приложение, которое не должно мешать окружающим фреймам. Фреймы отрисовываются с использованием OpenGL ES 2.0 кодом, работающим внутри этого фрейма.
Моя первая попытка заключалась в том, чтобы назначить буфер кадра для каждого кадра. Но возникла проблема: внутренние состояния OpenGL изменяются во время рисования одного кадра, и если следующий кадр не сбрасывает полностью все известные состояния OpenGL, могут возникнуть побочные эффекты. Это противоречит моему требованию, чтобы каждый фрейм был изолирован и не влиял друг на друга.
Моя следующая попытка заключалась в использовании контекста для каждого кадра. Я создал уникальный контекст для каждого кадра. Я использую общие ресурсы, так что я могу eglMakeCurrent для каждого кадра, рендерить каждый в свой собственный буфер / текстуру кадра, а затем eglMakeCurrent обратно на глобальный уровень, чтобы скомпоновать каждую текстуру для финального экрана.
Однако это отлично помогает изолировать экземпляры .. eglMakeCurrent очень медленный. Всего лишь 4 из них могут занять секунду или больше, чтобы отобразить экран.
Какой подход я могу выбрать? Есть ли способ ускорить переключение контекста или избежать переключения контекста, каким-то образом сохраняя состояние OpenGL для каждого кадра?