我是 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?