将“onDrawFrame”转换成太多会产生滞后吗?

时间:2013-01-27 02:14:04

标签: android opengl-es rajawali

我使用Rajawali框架制作基于OpenGL ES的动态壁纸。为了实现我的许多动画效果,我创建了一些从onDrawFrame方法调用的函数。这些函数从简单的x,y,z旋转到具有模拟风或其他随机运动的条件语句的更复杂的方程。它目前效果很好,并且具有高响应性,特别是在睡眠和唤醒设备时。

随着我的动态壁纸变得越来越复杂,我担心我的原始解决方案最终会导致性能问题。是这样的吗?

有没有更好的方法来进行这些类型的周期性或重复性更改,例如制作后台线程?

2 个答案:

答案 0 :(得分:0)

尝试将尽可能多的计算移动到顶点和片段着色器中。达到CPU限制以外的其他限制更容易。如果没有示例并且不深入了解您要归档的内容,没有人能够轻松回答您的问题。

最佳提示:在开发过程中经常和早期进行测量。

希望有所帮助。

答案 1 :(得分:0)

Rajawali onDrawFrame()方法由计时器调用,该计时器使用frameRate()方法设置。这比估计线程休眠提供了更平滑的动画(一种不建议的替代解决方案)。

如果你的速度是100fps,那么你可以在几帧之间进行10ms的计算 - 就是这样,但现代CPU需要花费很多时间。

将GPU计算放在单独的线程中是有问题的,因为这不是线程安全的。您可以将任何非GPU计算放在单独的线程中,但这可能会导致同步问题。

着色器被编译为本机代码,但实际上应该限制在完成所有昂贵的3D计算之后渲染实际像素(总是瓶颈)所需的按位(整数)运算。

例如,立体照片着色器会处理两个立体帧的覆盖。

希望这有帮助!