2016-03-07 3 views
0

Я использую движок cocos2d для рендеринга некоторой анимации в CCGLView, который находится в главном окне приложения рядом с обычными UIViews. Мое приложение использует внешний экран, и я хотел бы отобразить на этом экране точно такой же контент, как в CCGLView, но без каких-либо других представлений. И мне нужно выполнить эту операцию эффективным образом, так что скриншоты CCGLView не являются вариантом.Объединение Cocos2d и GLKView для визуализации тех же данных

Как я понимаю, такой вариант не используется с использованием cocos2d, поскольку он поддерживает представление только одной сцены во времени (CCDirector обновляет только один CCGLView во время).

Так что мой вопрос:

Можно ли достичь этой цели, используя GLKView? У меня есть доступ к объекту буфера кадров из CCGLView, и я могу читать пиксели из буфера. Я думаю, что лучшим вариантом было бы использовать cocos2d runloop и выполнить эту операцию рядом с регулярным рендерингом cocos2d. К сожалению, я не слишком разбираюсь в openGLES, и я не знаю, как я могу это достичь. cocos2d использует openGLES 2.0.

Edit:

В настоящее время единственное предложение пришло от @ s1ddok (спасибо) и идея заключается в том, чтобы использовать CCRenderTexture рисовать в CCGLView помещенной в главном окне и использовать данные CCRenderTexture для визуализации в окне внешнего. Но я до сих пор не понимаю, как я могу визуализировать текстуру во второй раз - на этот раз к другому представлению. Использование другого CCGLView потребует настройки этого представления в качестве цели для CCDirector, как я могу это сделать? Более того, второй CCGLView будет делиться EAGLContext с первым ... Итак, как заставить cocos2d отображать второй CCGLView? Любая помощь приветствуется!

ответ

1

Я думаю, что лучший способ, которым вы можете пойти, - это CCRenderTexture. Отобразите всю сцену на нем, а затем отобразите данные на внешнем экране.

Это обычная практика для множества целей, например, если вам нужно применить шейдер к целой сцене или что-то в этом роде.

Это позволит вам визуализировать сцену только один раз для каждого кадра, а затем использовать те же данные для UIKit и внешнего экрана.

+0

благодарит за ответ. Не могли бы вы пояснить, как я могу использовать CCRenderTexture для отображения моих данных на CCGLView, который прикреплен к главному окну и внешнему окну? У меня есть CCNode, который имеет CCRenderTexture и использует его для отображения моей анимации, но он привязан к CCScene, который запускается CCDirector. Я не могу запустить другую сцену во втором окне ... – parbo

+0

Вы должны нарисовать всю сцену на CCRenderTexture, а затем использовать ее данные, чтобы нарисовать ее в CCGLView (просто поместите в новую сцену и добавить в качестве ребенка) и на внешний экран (у вас нет идеи, как вы это делаете, но вы должны просто передавать данные изображения там) – s1ddok

+0

Если я понял, вы предлагаете переключать сцены? Это кажется очень неэффективным решением для меня, особенно, что я хочу иметь 30FPS. Любая идея, как я могу использовать FBO основного CCGLView, чтобы рисовать, например, GLKView? – parbo