Как вы отображаете FPS с OpenGLES (Android)
Я новичок в Java и OpenGL и все еще учусь, так что прости меня за мое невежество. Я сделал файл apk надвигающегося объекта. Теперь я хочу просмотреть fps, как приложение воспроизводится на моем устройстве. Я следовал этому руководству http://www.youtube.com/watch?v=1MYgP8Oj5RY&list=UUKwypsRGgHj1mrlQXhLXsvg&index=67 и пытался изменить его для Android, но я не могу заставить его работать.
Может ли кто-нибудь показать мне пример того, как добавить простой индикатор FPS в углу или на титульном листе и как управлять FPS.
Спасибо
3 ответа
Если вы используете этот класс и вызываете logFrame(), он сообщит вам fps в журнале вашего logcat:
import android.util.Log;
public class FPSCounter {
long startTime = System.nanoTime();
int frames = 0;
public void logFrame() {
frames++;
if(System.nanoTime() - startTime >= 1000000000) {
Log.d("FPSCounter", "fps: " + frames);
frames = 0;
startTime = System.nanoTime();
}
}
}
Из того, что я читал, вы оптимизируете свой код, чтобы получить лучшую частоту кадров, сводя к минимуму обращения к состояниям gl
Я знаю, что уже поздно, но это первое предложение от Google. Так что я просто хочу сделать это лучше:
Зачем считать кадры, которые проходит за одну секунду? Мне нужно, чтобы в моем приложении была текущая стоимость FPS (как вы должны использовать это тоже). И до сих пор я знаю, что это говорит
Frames/Second
Это означает, что вы можете измерить время между одним кадром и сказать следующее:
Second/Frame
Чтобы попасть в FPS это просто
1/(Second/Frame).
Вот код Я использовал код сверху и отредактировал его, чтобы получить результат:
public class FPSCounter {
private long lastFrame = System.nanoTime();
public float FPS = 0;
public void logFrame() {
long time = (System.nanoTime() - lastFrame);
FPS = 1/(time/1000000000.0f);
lastFrame = System.nanoTime();
}
}
Основная деятельность
import java.util.Timer;
import java.util.TimerTask;
....
....
public static int fps = 0;
protected void onCreate(...) {
....
Timer timer = new Timer();
timer.schedule(new TimerTask() {
public void run() {
fps();
}
},0,1000);
}
public void fps() {
runOnUiThread(new Runnable() {
public void run() {
text.setText("FPS: " + fps);
fps = 0;
}
});
}
Метод рендеринга onDrawFrame()
MainActivity.fps++;