结合 Cocos2d 和 GLKView 渲染相同的数据
Combining Cocos2d and GLKView to render the same data
我使用 cocos2d 引擎将一些动画渲染到 CCGLView,CCGLView 位于应用程序主 window 上,靠近常规 UIView。我的应用程序使用外部屏幕,我想在该屏幕上呈现与 CCGLView 中完全相同的内容,但没有任何其他视图。而且我需要以高效的方式执行此操作,因此无法截取 CCGLView 的屏幕截图。
据我所知,使用 cocos2d 没有这样的选项,因为它支持一次只呈现一个场景(CCDirector 一次只更新一个 CCGLView)。
所以我的问题是:
是否可以使用 GLKView 实现这个目标?我可以从 CCGLView 访问帧缓冲区对象,并且可以从缓冲区读取像素。我认为最好的选择是使用 cocos2d runloop 并在常规 cocos2d 渲染之后执行此操作。不幸的是,我对 openGLES 了解不多,也不知道如何实现。 cocos2d 使用 openGLES 2.0。
编辑:
目前唯一的建议来自@s1ddok(谢谢),想法是使用 CCRenderTexture 绘制到放置在 main window 上的 CCGLView 中,并使用 CCRenderTexture 的数据渲染到外部 window .但我仍然不明白如何第二次渲染纹理 - 这次是另一个视图。使用另一个 CCGLView 需要将此视图配置为 CCDirector 的目标,我该怎么做?此外,第二个 CCGLView 将与第一个共享 EAGLContext ... 那么如何强制 cocos2d 渲染到第二个 CCGLView?感谢您的帮助!
我想你可以采用的最佳方式是 CCRenderTexture。将整个场景渲染到它上面,然后在外部屏幕上显示数据。
这是多种用途的常见做法,例如,如果您需要将着色器应用于整个场景或其他内容。
这实际上将允许您每帧只渲染一次场景,然后将相同的数据用于 UIKit 和外部屏幕。
我使用 cocos2d 引擎将一些动画渲染到 CCGLView,CCGLView 位于应用程序主 window 上,靠近常规 UIView。我的应用程序使用外部屏幕,我想在该屏幕上呈现与 CCGLView 中完全相同的内容,但没有任何其他视图。而且我需要以高效的方式执行此操作,因此无法截取 CCGLView 的屏幕截图。
据我所知,使用 cocos2d 没有这样的选项,因为它支持一次只呈现一个场景(CCDirector 一次只更新一个 CCGLView)。
所以我的问题是:
是否可以使用 GLKView 实现这个目标?我可以从 CCGLView 访问帧缓冲区对象,并且可以从缓冲区读取像素。我认为最好的选择是使用 cocos2d runloop 并在常规 cocos2d 渲染之后执行此操作。不幸的是,我对 openGLES 了解不多,也不知道如何实现。 cocos2d 使用 openGLES 2.0。
编辑:
目前唯一的建议来自@s1ddok(谢谢),想法是使用 CCRenderTexture 绘制到放置在 main window 上的 CCGLView 中,并使用 CCRenderTexture 的数据渲染到外部 window .但我仍然不明白如何第二次渲染纹理 - 这次是另一个视图。使用另一个 CCGLView 需要将此视图配置为 CCDirector 的目标,我该怎么做?此外,第二个 CCGLView 将与第一个共享 EAGLContext ... 那么如何强制 cocos2d 渲染到第二个 CCGLView?感谢您的帮助!
我想你可以采用的最佳方式是 CCRenderTexture。将整个场景渲染到它上面,然后在外部屏幕上显示数据。
这是多种用途的常见做法,例如,如果您需要将着色器应用于整个场景或其他内容。
这实际上将允许您每帧只渲染一次场景,然后将相同的数据用于 UIKit 和外部屏幕。