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 для этого сценария.

Вы можете найти это здесь.

Другие вопросы по тегам