Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

10.11.2003, 10:23

Immer gleich schlechte FPS

Hallo zusammen,

folgendes Problem mit der Engine von David.
Das original Spiel Breakonoid (mit zusätzlicher Ausgabe der FPS) und auch ein Spiel von mir, das auf einer etwas abgeänderten Version der David Engine aufsetzt, zeigt immer die gleiche Framerate an:
Im Hauptmenu. 60 FPS, während des Spiels: 30 FPS.
Selbst wenn ich in der Render-Methode nichts male ausser der Ausgabe der FPS die gleichen Zahlen.
DirectX9- und auch OpenGL Beispiele, die sicherlich wesentlich komplexer sind und auch mehr Triangles zu rendern haben, liegen bei 500 - 1000 FPS.
Die Daten meines Rechners: 2.6 GHz, ATI Radeon 9600, 512 MB.

Selbst wenn ich die Auflösung der Grafik ändere, ändert sich nichts an den FPS.
In der original tbDoMessageLoop habe ich schon etwas rumexperimentiert und z.B. die Zeit pro Frame in ein Log-File rausgeschrieben. Dadurch hat sich Framerate in beide Richtungen verändert, d.h. oft auch dramatisch verbessert. Wo ist da der Zusammenhang?

Meine Fragen:
Habe ich mit den FPS (Frames per second) etwas falsch verstanden?
Gibt es evtl. verschiedene Definitionen der FPS?
Wer hat schon ähnliches festgestellt?
Wer kann mir helfen?

Vielen Dank für Eure Hilfe

Jumping Jack

Treue Seele

Beiträge: 142

Wohnort: Hamburg

Beruf: Schüler

  • Private Nachricht senden

2

10.11.2003, 13:32

Ich kenne die Engine nicht, aber ich vermute, dass da ne framebremse ist oder die Vertiale-Synchronisation (V-Sync) an ist.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

3

10.11.2003, 14:09

Richtig, die V-Synchronisation!
BTW: Unser Auge kann eh nur 30 Bilder pro Sekunde wahrnehmen. Also ist es ziemlich egal, wieviele Frames pro Sekunde Du hast, solange sie über diesem Wert liegen!

4

10.11.2003, 14:27

@David:
Mit der Wahrnehmung von max. 30 Bildern pro Sekunde, ist sicherlich richtig, allerdings will man natürlich bei der Entwicklung eines Spiels die aktuellen FPS wissen um auch den noch möglichen Spielraum zu kennen.

Folgende weitere Fragen ergeben sich dann:
Heisst das, dass die tb-Engine auf die V-Sync wartet und welcher Parameter ist dafür zuständig?
Wie kann man das dann abstellen?
Wenn man es abstellt, gibt es dann wo anders Probleme?
Warum ändert sich die FPS, wenn in der tbDoMessageLoop die Zeit pro Frame in eine Log-Datei geschrieben wird?

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

5

10.11.2003, 14:33

Das Schreiben in eine Datei braucht auch seine Zeit, darum die Änderung! 30 oder 60 FPS dürften eigentlich trotzdem nicht durch V-Sync kommen, es sei denn Du hättest einen 30- oder 60-Hz-Modus, aber 30 Hz gibt es garnicht...
Wie schnell läuft denn das "Texte"-Beispielprogramm aus Kapitel 3?

Jumping Jack

Treue Seele

Beiträge: 142

Wohnort: Hamburg

Beruf: Schüler

  • Private Nachricht senden

6

10.11.2003, 15:01

Eigentlich kann das Auge nur 24 bilder pro sekunde wahrnehmen. Das Auge kann afaik aber mehr als 24 fps wahrnehmen, dadurch dass eine art motion blur effekt auftritt.

7

11.11.2003, 00:07

@David:
Das Texte-Beispielprogramm läuft im Window-Modus mit 30, im Vollbildmodus mit 60 fps. Also wie mein Programm. Wenn ich allerdings V-Sync ausschalte, ergibt sich im Window-Modus nachwievor 30, im Vollbildmodus 630 fps.
Jetzt habe ich natürlich etwas rumexperimentiert, um rauszubekommen, warum der Window-Modus so schlecht ist. Das Übel liegt in dem Parameter PresentationInterval der PresentParams Struktur. Dieser muss auf D3DPRESENT_INTERVAL_IMMEDIATE gesetzt werden. In meinem Programm ergab sich somit eine Steiegerung der fps von 30 auf 300, im Vollbildmodus nach Ausschalten V-Sync von 30 auf 550 fps.

Den genauen Zusammenhang verstehe ich allerdings nicht. Man muss und kann aber nicht alles verstehen.
Gibt es evtl. mit D3DPRESENT_INTERVAL_IMMEDIATE Deines Wissens nach Probleme?

Werbeanzeige