android支持比glreadpixels更好的方法?

时间:2011-11-25 04:50:41

标签: android opengl-es capture recording glreadpixels

我正在制作安卓游戏。(使用andengine) 我需要记录游戏屏幕。 这不是用于制作宣传视频,而是用于游戏玩家查看他们的游戏玩法。 我的应用程序应该自己录制视频。 所以我无法使用市场上的可用录音应用来解决这个问题。 我已经检查了下面的代码。

http://code.google.com/p/andengineexamples/source/browse/src/org/anddev/andengine/examples/ScreenCaptureExample.java?spec=svn66d3057f672175a8a21f9d06e7a045942331f65c&r=66d3057f672175a8a21f9d06e7a045942331f65c

效果很好.. 但是我想录制游戏视频,而不是一个截图。

至少我需要24fps才能顺利重放,但是如果我使用glreadpixels,我可以在我的xoom设备上获得5 fps。 我搜索了各种网站来解决这个优化问题。 大多数人说glreadplxels太慢,无法录制视频。

http://www.gamedev.net/topic/473794-glreadpixel-takes-tooooo-much-time/

他们建议使用glcopyteximage2d而不是glreadpixels。 因为glcopyteximage2d比glreadpixels快得多。 但我找不到如何在andengine中使用glcopyteximage2d。 甚至有人说android opengl ES不支持glcopyteximage2d。

也许存在记录流畅视频的另一种方法。 它是android设备的读取帧缓冲区。 大多数使用此方法在市场上录制应用程序。但这些应用程序需要root权限才能获取framebuffer。 我已经读过一些消息,知道在姜饼之后,android会支持来自suface_flinger的捕获屏幕。

但我无法在没有root权限的情况下找到如何使用framebuffer。 T_T

这些是我的猜测解决方案。

  1. 使用另一个比glreadpixels更快的opengl API。

  2. 找到一些没有root权限的android API可以获得framebuffer。 (也许我可以访问android SURFACE_FLINGER ??)

  3. 绘制另一个屏幕外纹理以录制视频。

  4. 但我不知道如何实现这些方法。 哪种方法是正确的? 你有一个示例代码来记录Android的视频吗? 请帮我解决这个问题。 如果你知道任何其他方法,那将会有所帮助。

    任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

您设备的GPU供应商是否支持es3.0,如果可以,您可以尝试使用PBO。

以下是我可以参考的主题:Low readback performance with PBO , help !!!!!