android 支持比 glreadpixels 更好的方法?

Posted

技术标签:

【中文标题】android 支持比 glreadpixels 更好的方法?【英文标题】:android support better method than glreadpixels? 【发布时间】:2011-11-25 04:50:41 【问题描述】:

我正在制作安卓游戏。(使用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 权限才能获取帧缓冲区。 我读到一些消息,Android 将在姜饼之后支持从 suface_flinger 捕获屏幕。

但我不知道如何在没有 root 权限的情况下使用帧缓冲区。 T_T

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

    使用另一个速度比 glreadpixels 更快的 opengl API。

    发现一些android API可以在没有root权限的情况下获取framebuffer。 (也许我可以访问android SURFACE_FLINGER ??)

    绘制另一个屏幕外纹理来录制视频。

但我不知道如何实现这些方法。 哪种方法是正确的? 你有为安卓录制视频的示例代码吗? 请帮我解决这个问题。 如果您知道任何其他方法,那将很有帮助。

任何帮助将不胜感激

【问题讨论】:

【参考方案1】:

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

这里有一个话题可以参考:Low readback performance with PBO , help !!!!!

【讨论】:

以上是关于android 支持比 glreadpixels 更好的方法?的主要内容,如果未能解决你的问题,请参考以下文章

PixelBuffer对象和Android上的glReadPixel(ARCore)阻塞

使用 OpenCV 处理来自 glReadPixels 的图像并将其作为纹理返回

Android OpenGL 纹理/对象检测

使用 OpenGL ES 1.0 在 Android 上进行离屏渲染的选项?

如何在不同的线程上调用 glReadPixels?

glReadPixels 不更新值