0

我使用 cocos2d 引擎向 CCGLView 渲染一些动画,CCGLView 放置在常规 UIView 旁边的应用程序主窗口中。我的应用程序使用外部屏幕,我想在该屏幕上呈现与 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 呢?任何帮助表示赞赏!

4

1 回答 1

1

我想最好的方法是 CCRenderTexture。将整个场景渲染到它上面,然后在外部屏幕上显示数据。

这是多种用途的常见做法,例如,如果您需要将着色器应用于整个场景或其他内容。

这实际上将允许您每帧只渲染一次场景,然后为 UIKit 和外部屏幕使用相同的数据。

于 2016-03-07T19:33:07.793 回答