Объединение Cocos2d и GLKView для рендеринга одних и тех же данных.

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

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

Итак, мой вопрос:

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

Редактировать:

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

1 ответ

Решение

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

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

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

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