我使用cocos2d引擎将一些动画渲染到CCGLView,它放在常规UIViews旁边的app主窗口上。我的应用程序使用外部屏幕,我想在该屏幕上呈现与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?任何帮助表示赞赏!
答案 0 :(得分:1)
我猜你最好的方法就是CCRenderTexture。将整个场景渲染到其上,然后在外部屏幕上显示数据。
这是多种用途的常见做法,例如,如果您需要将着色器应用于整个场景或其他内容。
这实际上允许你每帧只渲染一次场景,然后对UIKit和外部屏幕使用相同的数据。