Как вы отображаете 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

вот ссылка на drawText()

Я знаю, что уже поздно, но это первое предложение от 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++;
Другие вопросы по тегам