【问题标题】:Combining Cocos2d and GLKView to render the same data结合 Cocos2d 和 GLKView 渲染相同的数据
【发布时间】:2016-03-08 23:29:21
【问题描述】:

我使用 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 呢?任何帮助表示赞赏!

【问题讨论】:

    标签: ios opengl-es cocos2d-iphone glkview


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的回复。您能否阐明如何使用 CCRenderTexture 在附加到主窗口和外部窗口的 CCGLView 上显示我的数据?我有 CCNode,它具有 CCRenderTexture 并使用它来显示我的动画,但它附加到由 CCDirector 运行的 CCScene。我无法在第二个窗口上运行另一个场景...
    • 您应该将整个场景绘制到 CCRenderTexture 上,然后使用它的数据将其绘制到 CCGLView 中(只需放入新场景并作为子项添加)和外部屏幕(不知道你是怎么做的,但你应该简单地在那里传输图像数据)
    • 如果我明白了,你建议切换场景?这对我来说似乎是一个非常低效的解决方案,特别是我想要 30FPS。知道如何直接使用主 CCGLView 的 FBO 绘制到即 GLKView 中吗?
    • 嗯,你可能不是。您不应该切换任何场景。这是一个稍微改变层次结构的问题。现在您将场景直接绘制到 CCGLView 中。但是你应该把 CCRenderTexture 放在 CCGLView 和你的场景之间。然后,您将能够将其数据渲染到 CCGLView 并使用它作为每帧的简单纹理渲染到其他视图。性能会很棒。
    • 很抱歉问了这么多问题,但我是这个领域的新手。我不明白如何将 CCRenderTexture 的纹理对象渲染到不在场景层次结构中的其他视图(我的意思是它不是 CCDirector 的视图)?您提到将其内容渲染为简单的纹理,我该如何实现?非常感谢您的宝贵时间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-18
    • 1970-01-01
    • 2020-02-08
    • 1970-01-01
    • 2021-10-31
    相关资源
    最近更新 更多