На iOS с OpenGLES как иметь несколько представлений? - PullRequest
2 голосов
/ 14 августа 2010

В iOS, если я хочу наложить два вида, а затем смешать одну сцену с другой.

Например: от меню игры до самой игры.Сначала выберите меню, затем нажмите («начать игру»), загрузите вид игры и сделайте хорошее смешивание / преобразование из меню на игровую стадию.

Это не конкретный вопрос для смешивания, а о том, как с ним справитьсянесколько просмотров в приложении OpenGL.Я читал и играл с некоторыми основами о том, как рисовать линии, объекты, молнии, цвета и тому подобное, но я полностью зелен, когда речь идет о том, чтобы собрать все это вместе в реальном (а не в одном статическом виде) приложении OpenGLES.Я имею в виду, что вы должны использовать разные взгляды, верно?Или этот шаблон проектирования с различными контроллерами представления и представлениями, к которым мы все привыкли в повседневном программировании UIKit, неприменим, когда речь идет об OpenGLES?Потому что я просто не могу этого сделать.И я не могу найти никаких примеров.

Ответы [ 2 ]

1 голос
/ 12 октября 2010

Ну, я нашел то, что искал в cocos2d для iphone

Это дает вам слои, переходы сцен, готовые к работе меню, спрайты и т. Д. Поэтому я перестал беспокоитьсякак это сделать и просто использовать кокосы сейчас.

Не стесняйтесь, если вы новичок в OpenGL, это сделает вашу жизнь в 147 * раз проще.И кстати ... вы также можете объединить его с 3D.

0 голосов
/ 02 мая 2015

Если вы хотите, чтобы в вашем приложении было несколько одновременно видимых представлений OpenGL в форме CAEAGLLayers, важно помнить следующее:

[EAGLContext setCurrentContext:oglContext]

изменит контекст не только для представления, которое выполняется в данный момент, но и для всех представлений EAGL вашего приложения. Это может проявиться в создании других представлений, которые работали для замораживания, поскольку вызовы OpenGL теперь переходят к последнему представлению, которое выполняло [EAGLContext setCurrentContext:oglContext].

Чтобы обойти это, вы должны вызывать [EAGLContext setCurrentContext:oglContext] каждый раз, когда вызывается экземпляр вашего представления, прежде чем делать какие-либо вызовы OpenGL.

В моем приложении я устанавливаю контекст только один раз, в представлении initWithFrame. Это работало хорошо в течение многих лет. Как только я создал второй экземпляр этого представления, первое представление перестало обновляться. Теперь я устанавливаю контекст в своих вызовах обновления, прежде чем делать какие-либо вызовы CVOpenGLES.

...