OpenGL ES и внешний дисплей на iOS
Я выполняю рендеринг с использованием OpenGL ES на главном экране iPad (или iPhone, iPod Touch), и мне хотелось бы выполнять рендеринг на внешнем экране, когда содержимое "переходит" на внешний экран, как только пользователь подключает его. (и возврат к главному экрану, когда внешний экран отключен). Я использую библиотеку, которая делает вызовы OpenGL (по крайней мере, те, которые не зависят от платформы, то есть не интегрируются как EAGL и CAEAGL), но имеют небольшое состояние. Каков наилучший способ (с точки зрения производительности, а затем технического обслуживания) сделать это?
- Я не думаю, что это поддерживается, и даже если бы это было так, я не думаю, что рекомендуется просто перемещаться по представлению, поддерживаемому CAEAGLLayer, в новое окно
- В противном случае у меня поэтому есть две карты. Должен ли я сохранить один EAGLContext, отсоединить его от слоя CAEAGLL основного экрана и прикрепить его к слою CAEAGLL внешнего дисплея (и наоборот, когда пользователь отключает внешний дисплей)?
- Если у меня будет два контекста, и я попытаюсь использовать один и тот же экземпляр библиотеки-обертки (который, следовательно, придется перенастроить, хотя в любом случае это должно быть в некоторой степени, даже если бы я сохранил один контекст из-за разного соотношения сторон экрана, пиксель) соотношение сторон и т. д.)
- Если у меня есть два контекста и один экземпляр библиотеки-оболочки для каждого контекста (преимущество заключается в том, что я могу сделать экземпляр библиотеки иваром моего пользовательского UIView с поддержкой CAEAGLLayer).
- Должен ли я использовать два контекста, но использовать группу общего доступа, чтобы некоторые ресурсы могли быть общими?
Что Apple рекомендует (если есть одна рекомендация)? И как вы, ребята, сделали это (не говорите мне, что это необычная особенность!)?
2 ответа
Это работает очень хорошо с одним контекстом и двумя drawables. Нужно просто быть осторожным, чтобы уничтожить рендер-буфер, прежде чем отсоединяться от старого. CAEAGLLayer
и перераспределить новый с новым CAEAGLLayer
; Большая часть кода для этого предоставляется в EAGLView
класс шаблона приложения OpenGL ES в Xcode. И, конечно же, нужно перенастроить объекты, которые рисуют OpenGL, в соответствии с размером нового слоя.
У Apple есть прекрасный пример проекта под названием GLAirplay для этого сценария.
Вы можете найти это здесь.