我使用Rajawali框架制作基于OpenGL ES的动态壁纸。为了实现我的许多动画效果,我创建了一些从onDrawFrame方法调用的函数。这些函数从简单的x,y,z旋转到具有模拟风或其他随机运动的条件语句的更复杂的方程。它目前效果很好,并且具有高响应性,特别是在睡眠和唤醒设备时。
随着我的动态壁纸变得越来越复杂,我担心我的原始解决方案最终会导致性能问题。是这样的吗?
有没有更好的方法来进行这些类型的周期性或重复性更改,例如制作后台线程?
答案 0 :(得分:0)
尝试将尽可能多的计算移动到顶点和片段着色器中。达到CPU限制以外的其他限制更容易。如果没有示例并且不深入了解您要归档的内容,没有人能够轻松回答您的问题。
最佳提示:在开发过程中经常和早期进行测量。
希望有所帮助。
答案 1 :(得分:0)
Rajawali onDrawFrame()方法由计时器调用,该计时器使用frameRate()方法设置。这比估计线程休眠提供了更平滑的动画(一种不建议的替代解决方案)。
如果你的速度是100fps,那么你可以在几帧之间进行10ms的计算 - 就是这样,但现代CPU需要花费很多时间。
将GPU计算放在单独的线程中是有问题的,因为这不是线程安全的。您可以将任何非GPU计算放在单独的线程中,但这可能会导致同步问题。
着色器被编译为本机代码,但实际上应该限制在完成所有昂贵的3D计算之后渲染实际像素(总是瓶颈)所需的按位(整数)运算。
例如,立体照片着色器会处理两个立体帧的覆盖。
希望这有帮助!