На iOS с OpenGLES, как иметь несколько представлений?

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

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

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


person Allisone    schedule 14.08.2010    source источник


Ответы (2)


Что ж, я нашел то, что искал, в cocos2d для iphone.

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

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

person Allisone    schedule 12.10.2010

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

[EAGLContext setCurrentContext:oglContext]

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

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

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

person mahboudz    schedule 02.05.2015