Damit wir auf der Konsole eine Lebenszeichen unserer Engine bekommen, wollen wir dort die aktuelle Bildwiederholrate ausgeben.

Wir definieren dazu in unserer graphics.c Datei eine neue Funktion printFps:

static void printFps()
{
    static double previousTime = 0;
    static int frameCount = 0;

    double currentTime = glfwGetTime();
    if (currentTime - previousTime >= 1.0)
    {
        printf("FPS: %i\n", frameCount);

        frameCount = 0;
        previousTime = currentTime;
    }
    frameCount++;
}

Wie Sie sehen ist diese Funktion als static definiert. Außerdem nutzen zwei Variablen innerhalb der Funktion ebenfalls das Schlüsselwort static. Was bedeutet das?

Anders als in vielen anderen Programmiersprachen bedeutet das Schlüsselwort static in C etwas ähnliches wie in Java oder C# private bedeutet:

  • Funktionen die als static markiert sind, sind nur innerhalb der selben Quellcode Datei zugreifbar. Die Funktion printFps kann also nur innerhalb der graphics.c aufgerufen werden.
  • Variablen auf der obersten Ebene, die mit static gekennzeichnet sind, sind ebenfalls in ihrem Zugriff auf die aktuelle Quellcodedatei beschränkt.
  • Variablen innerhalb einer Funktion die als static markiert sind, sind nur innerhalb der Funktion definiert und erhalten zusätzlich ihren Wert zwischen zwei Funktionsaufrufen. Wenn hier also frameCount hochgezählt wird, dann behält die Variable Ihren Wert bis zum nächsten Aufruf.

Rufen Sie printFps() in Ihrem Renderloop auf und Sie sollten eine Ausgabe auf der Konsole erhalten.

Denken Sie daran, die Signatur der Funktion, ebenfalls mit dem static Keyword in Ihre Header Datei einzufügen damit Sie von den übrigen Funktionen innerhlab der graphics.c gefunden werden kann.