Woher resultieren FPS-Schwankungen?
-
um darauf antworten zu können, müßten wir wissen wie du die fps berechnest bzw die zeit nimmst.
rapso->greets();
-
rapso schrieb:
um darauf antworten zu können, müßten wir wissen wie du die fps berechnest bzw die zeit nimmst.
rapso->greets();
Bereits da ;), aber okay war knapp
MfG SideWinder
-
Ich würde nicht LARGE_INTEGER verwenden, sondern __int64 und den Zeiger auf LARGE_INTEGER casten. Ist ein bisschen leichter zu verwenden dann.
Und die Frequency musst du nur einmal auslesen. Die ist Hardwareabhängig.
Wie oft startest und stopst du? Und wie lange läuft das? Für ein Frame kann man schon mal ne gute Abweichung haben.
Und 800fps und 1000fps ist kein weltbewegender Unterschied.
-
Nicht 1000, 10000! Ich starte und stoppe jeden Frame.
Hier mal ein Auszug, umso mehr Objekte ich rendere umso weniger werden die Annormalien. Aber bei 0-5 Objekten sieht mein Log so aus:
FPS 0 FPS 9062 FPS 20109 FPS 20338 FPS 335 FPS 7664 FPS 2616 FPS 817 FPS 818 FPS 812 FPS 818 FPS 811 FPS 327 FPS 10198 FPS 2168 FPS 811 FPS 812 FPS 819 FPS 814 FPS 597 FPS 129 FPS 5498 FPS 19560 FPS 20223 FPS 20454 FPS 981 FPS 825 FPS 425 FPS 5926 FPS 849 FPS 818 FPS 812 FPS 818 FPS 812 FPS 819
MfG SideWinder
-
Die 0 am Beginn ist weil ich statt dem throw nun return0 habe und der Counter erst beim zweitem Mal aktiv wird (hat was mit der Engine zu tun).
MfG SideWinder
-
Jeden Frame? Dann kann es doch leicht sein, dass du mal 1ms und mal 1.25ms brauchst?
Ist doch dann mehr oder weniger Zufall, wenn das Betriebssystem dir grad die CPU wegnimmt, musst halt ein paar Mikrosekunden warten.Man nimmt ja auch nicht bei jedem Frame die Zeit sondern zählt die Frames, bis eine Sekunde vorbei ist.
-
Interessanter Punkt mit dem Zählen bis eine Sekunde vorbei ist...ich glaube so ist das fast besser implementiert
BTW: Die paar ms könnten mir aber im schlimmsten Fall die FPS nach unten ziehen (bis hin zu 0 wenn mich das OS mal ne Sekunde im Stich lässt) aber sie können doch nicht bis auf 20K steigen
*trotzdem umschreib*
MfG SideWinder
-
es kann sein, dass du auf irgend ein caching eingefahren bist. z.b. zeichnen grakas ja nicht sofort das was du denen übergibst, es kann also sein, dass du deren abarbeitungsbuffer füllst und dafür so gut wie keine zeit brauchst. wenn der mal voll ist (kann 5frames im voraus speichern), dann könnte der treiber warten bis der abarbeitungsbuffer nur noch 2frames im cache hat und auf diese weise schwankt die framerate pro frame.
caches hast du überall und kannst überall diese ursachen suchen, z.b. beim abspielen von mp3 von der festplatte, beim zugriff auf selten gebrauchte speicherteile darauf dass windows das als ausgelagerte markierte wieder entsperrt...
rapso->greets();
-
Und es wird dir mit hoher Wahrscheinlichkeit nichts bringen, wenn du den Grund herausfindest.
Bye, TGGC \-/
-
TGGC schrieb:
Und es wird dir mit hoher Wahrscheinlichkeit nichts bringen, wenn du den Grund herausfindest.
Stimmt, deswegen braucht es mich auch nicht zu interessieren
Ich zähl jetzt die Frames hoch, das macht die ganze Sache sehr stabil in Sachen FPS (klar wird ja auch nur noch sekundenweise geändert).
MfG SideWinder