android - android上的FPS问题

标签 android opengl-es-2.0 frame-rate

我在 android 上的实现有一个小问题。我正在用 OpenGL ES 渲染一些东西。对于每一帧,我都必须更新我的日期。所以我决定设置最大 FPS 以避免无用的计算。

但问题是,无论我设置的每秒帧数是多少,我都看不出有什么区别。即使我输入 1 fps。

这是我的代码:

long now = SystemClock.elapsedRealtime(), diff;    
diff = now - CURRENT_TIME;    
if (diff < MILLISECOND_PER_FRAME)    
{    
  try    
  {    
    wait(MILLISECOND_PER_FRAME - diff);    
  }    
  catch(Exception e)    
  {}    
  now = SystemClock.elapsedRealtime();    
  diff = now - CURRENT_TIME;    
}    
CURRENT_TIME = now;

因此,那段代码似乎根本不会减慢执行速度。有什么建议吗?

而且,如果有人有疑问,对于 X fps,我将 MILLISECOND_PER_FRAME 计算为

MILLISECOND_PER_FRAME = (int)(1000.0f / X);

已解决:

好的,所以我解决了这个问题。如果您想让线程休眠特定的毫秒数,请使用 Thread.sleep(millis);。这个函数影响它运行的线程。现在我看到了 1 fps 与 25 fps 的巨大差异。

感谢所有看过这个问题的人。

最佳答案

干杯,

虽然你已经解决了这个问题,但似乎你是从错误的一端开始做的。最好保持渲染的速度,只在特定的时间间隔更新应用程序状态。这意味着没有线程休眠,只是一个条件来查看是否有足够的时间来进行更新。

这似乎是一个更简洁的解决方案。我不确定如果你中断渲染线程会对你的手机产生什么影响(因为它适用于图形硬件,你实际上也可能会停止一些其他(系统)线程)。不确定这是否是一件好事。

另一方面,对于某些不渲染任何内容的应用程序可能有意义(但通过立即从渲染函数返回会更好地实现,而无需交换前后缓冲区 - 我不确定这在 Android 上是否可行) .

关于android - android上的FPS问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6448343/

相关文章:

android - 存储到 SD 卡时 Android 可接受的文件名是什么

无法编译 GL ES 2.0 着色器

android - 位图纹理不会显示在 Android 上的帧缓冲区表面中

objective-c - 故意减慢 FPS Spritekit

c# - 使用 SharpAVI 增加 FPS 可以加快视频速度

android - RCConnection 错误 : setSDP Error: Failed to set remote offer sip: Called with SDP without DTLS fingerprint

android - 您将以哪种方式设计设备之间的这种相互通信

Android 2d Canvas 游戏: FPS Jitter problem

android - StringIndexOutOfBoundsException : String index out of range: When using a "Android Layout Inspector"

ios - OpenGL ES 2.0 渲染到纹理