0

我是 OpenGL ES 的新手。我正在尝试为 iOS 应用程序(尤其是游戏)的屏幕录制编写代码。

我正在使用此答案中的代码描述的“渲染到纹理”方法来捕获屏幕并为 cocos2d 游戏编写视频。我所做的一项修改是,当我打电话时,CVOpenGLESTextureCacheCreate我正在使用 [EAGLContext currentContext] 而不是

[[GPUImageOpenGLESContext sharedImageProcessingOpenGLESContext] context]

它确实录制了视频,但有两个问题

(1)- 当它开始录制时,屏幕上的新绘图停止。我也希望应用程序继续在屏幕上绘图。由于我是 OpenGL ES 的新手,我对帧缓冲区对象等没有深入的了解,所以我很难弄清楚如何同时在屏幕上绘制和捕获屏幕。我会欣赏这方面的代码示例。

(2)- 录制的视频倒置。我怎样才能让它在正确的方向?

以前我也考虑glReadPixels过方法,但这有性能缺陷。

更新:我也想到了一些想法。根据我的一点了解,

我可以简单地将我的纹理绘制回屏幕,但不知道如何。

或者

我可以有一个辅助 FBO,我可以将纹理附加到它,即

glGenFramebuffersOES(1, &textureFrameBuffer);
glBindFramebufferOES(GL_FRAMEBUFFER_OES, textureFrameBuffer);

glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, CVOpenGLESTextureGetName(renderTexture), 0);
//Then I restore the screen FBO.
glBindFramebufferOES(GL_FRAMEBUFFER_OES, 1);

但如果我这样做,那么我如何将屏幕绘图复制到我的辅助 FBO?

4

1 回答 1

0

有现成的解决方案,所以如果你不想重新发明轮子,你可以试试 Everyplay ( https://everyplay.com/about )。

从 OpenGL 级别记录屏幕的文档可以在这里找到:https ://developers.everyplay.com/doc/Everyplay-integration-to-iOS-game

免责声明:我为制作 Everyplay 的公司工作

于 2013-02-01T07:59:21.853 回答