ios - 结合 Cocos2d 和 GLKView 渲染相同的数据

标签 ios opengl-es cocos2d-iphone glkview

我使用 cocos2d 引擎将一些动画渲染到 CCGLView,CCGLView 放置在应用程序主窗口上,靠近常规 UIView。我的应用程序使用外部屏幕,我想在该屏幕上呈现与 CCGLView 中完全相同的内容,但没有任何其他 View 。而且我需要以高效的方式执行此操作,因此无法截取 CCGLView 的屏幕截图。

据我所知,使用 cocos2d 没有这样的选项,因为它支持一次只呈现一个场景(CCDirector 一次只更新一个 CCGLView)。

所以我的问题是:

是否可以使用 GLKView 实现这个目标?我可以从 CCGLView 访问帧缓冲区对象,并且可以从缓冲区读取像素。我认为最好的选择是使用 cocos2d runloop 并在常规 cocos2d 渲染之后执行此操作。不幸的是,我对 openGLES 了解不多,也不知道如何实现。 cocos2d 使用 openGLES 2.0。

编辑:

目前唯一的建议来自@s1ddok(感谢),想法是使用 CCRenderTexture 绘制到放置在主窗口上的 CCGLView 中,并使用 CCRenderTexture 的数据渲染到外部窗口。但我仍然不明白如何第二次渲染纹理 - 这次是另一个 View 。使用另一个 CCGLView 需要将此 View 配置为 CCDirector 的目标,我该怎么做?此外,第二个 CCGLView 将与第一个共享 EAGLContext ... 那么如何强制 cocos2d 渲染到第二个 CCGLView?感谢您的帮助!

最佳答案

我想您可以采用的最佳方式是 CCRenderTexture。将整个场景渲染到它上面,然后在外部屏幕上显示数据。

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

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

关于ios - 结合 Cocos2d 和 GLKView 渲染相同的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35846750/

相关文章:

ios - 键盘出现时向上移动 UITextField 和 UITableView

ios - 如何通过 iPhone 中的 Graph API 访问 facebook 上的 "like"和 "comment"?

javascript - 出现虚拟键盘时防止滚动

java - Android 触摸边界矩形和纹理位置

iphone - openGL 中的 3d 游戏开发人员

ios - 如何使用 CIDetector 和 Swift 在图像中裁剪检测到的矩形

java - 是否存在结构不同但做类似事情的方法的设计模式?

ios - 创建一个启用 Storyboard、Cocos2D 和 ARC 的项目

objective-c - Cocos2d如何创建进度条(加载场景)

android - 低级流媒体 : A new API based on Khronos OpenMAX AL 1. 0.1