还不是开发人员,只是试图找出一个Android应用程序是否可以做我需要的东西..
我需要什么:
简单的应用程序,以固定频率在屏幕上以特定强度显示单一颜色的完整帧!我需要它以尽可能高的分辨率进行同步(通过以尽可能高的固定频率改变已知模式中的强度来实现)。
我有什么问题:
Android设备是否运行 固定显示频率或是否存在 以任何方式将其设置为固定的 频率为60fps?
如果固定频率可以 实现了,是否存在vsync中断 或类似的东西让我 改变屏幕上的强度 在合适的时间。
如果以上两件事都可以 实现了,我需要哪种方法 采取。我想我需要看一下 在OpenGL ES和NDK .... 有人可以指点我 正确的方向....
答案 0 :(得分:9)
我希望刷新率固定在硬件或显示驱动程序级别。有an API for finding out what it is,但我怀疑你是否可以设置它。
我写了一个实现40fps固定帧率的游戏。基本技术是将所有内容绘制到屏幕外缓冲区......这些内容会自动发生在GL中,但如果使用Canvas则必须手动完成。
当完成在屏幕外绘制场景的昂贵且可变长度的工作时,您可以阻止渲染线程(或做其他工作)直到渲染时间。这样做可确保每个帧以均匀的间隔显示。这可以让你获得很好的平滑动作,你可以通过画太多来焚烧你的电池(很多基于GL的应用程序都会因为没有充分的理由而使用RENDERMODE_CONTINUOUSLY)。
答案 1 :(得分:0)
的Mathias,
所以,如果你想与android上的显示同步,只需让android告诉你何时需要绘制视图 - 这是android上最基本的事情。您将从android提供的View类派生一个类。您将覆盖View类onDraw()方法,每当需要刷新视图时,android会调用它。
如果要确保显示的每个帧都具有预定的时间长度,那么您可能需要设置新的线程。在新线程中,您将进入一个定时循环 - 首先捕获System.nanoTime()(第二个分辨率的十亿分之一)到一个变量,然后循环直到达到所需的帧长度,然后更新一个全局静态布尔变量。可以在onDraw()方法中检查此全局静态布尔值,以确定何时更改强度。