Cocos3D 2.0 и несколько CCGLViews/GLViews

У меня есть проект, над которым я работаю, и он должен иметь возможность отображать и взаимодействовать с несколькими разными моделями. Одно из этих представлений является полноэкранным (Пейзажная ориентация iPad), а другие представляют собой меньшие подвиды. Проблемы, с которыми я сейчас сталкиваюсь, следующие:

  1. Создание CCGLView вручную и применение его к разделяемому директору вызывает всевозможные ошибки GL, особенно связанные с методом swapBuffers CCGLView.

  2. Поскольку директор Cocos3D является подклассом UIViewController, а также синглтоном, очень сложно/неприятно пытаться иметь несколько представлений в проекте без создания сложного стека для управления тем, где и какое представление в данный момент активно/должно быть отображается.

Наряду с этими факторами, общей иерархией проекта (из-за его полной пользовательской природы с использованием всех настраиваемых элементов управления) мне приходится использовать вложенный контроллер представления для управления навигацией между всеми различными контроллерами представлений в проекте. Соедините это с синглтоном, который позволяет взаимодействовать только с одним GLView в контексте Cocos3D, и вы увидите, где начинается беспорядок.

У кого-нибудь есть предложения, что делать? Если у вас есть какие-либо идеи о том, что я могу делать неправильно при создании экземпляра моего GLView, это тоже будет по крайней мере началом.

_director = CocosViewController.sharedDirector;
_director.supportedInterfaceOrientations = UIInterfaceOrientationMaskAll;
_director.viewShouldUseStencilBuffer = NO;      // Set to YES if using shadow volumes
_director.viewPixelSamples = 1;                 // Set to 4 for antialiasing multisampling
_director.animationInterval = (1.0f / kAnimationFrameRate);
_director.displayStats = NO;
[_director enableRetinaDisplay: YES];
CCGLView *glView = [CCGLView viewWithFrame:_director.view.frame
                               pixelFormat:kEAGLColorFormatRGBA8
                               depthFormat:0 preserveBackbuffer:NO
                                sharegroup:nil
                             multiSampling:NO
                           numberOfSamples:0];

glView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;

[_director setCcGLView:glView];

Просто это не работает и дает мне черный экран с ошибками OpenGL 0x502.


person dannyskim    schedule 09.07.2013    source источник


Ответы (1)


Cocos2D 2.0 не предназначен для работы с более чем одним представлением, и «исправить» это совсем не тривиально.

Поскольку cocos3d требует cocos2d, вам здесь не повезло. Придерживайтесь единого взгляда.

person LearnCocos2D    schedule 09.07.2013
comment
Можно ли установить CCGLView на лету? Единственный способ заставить его правильно инициализироваться — это переопределить loadView внутри моего подкласса CC3UIViewController. Например, я планирую иметь прокрутку с 7 разными моделями на 7 разных «страницах». Я понимаю, что теперь мне нужно пойти на уступку, имея только одно представление, но возможно ли хотя бы установить CCGLView на лету, или вы рекомендуете каким-то образом сделать мой собственный способ просто нажимать и выталкивать сцены при повторном использовании первоначально созданного экземпляра CCGLView из одноэлементного доступа CC3UIViewController? - person dannyskim; 10.07.2013