PyOpenGL + Pygame capped bis 60 FPS in Vollbild
-
10-07-2019 - |
Frage
Im Moment arbeite ich an einem Spiel-Engine in pygame geschrieben und ich wollte OpenGL-Unterstützung hinzuzufügen.
Ich schrieb einen Test, um zu sehen, wie pygame und OpenGL Arbeit zusammen zu machen, und wenn es im Fenstermodus läuft, läuft es zwischen 150 und 200 fps. Wenn ich ihm Vollbild laufen (alles, was ich tat, war die Fullscreen Flag ist hinzuzufügen, wenn ich das Fenster einrichten), fällt es bis zu 60 Bildern pro Sekunde nach unten. Ich habe viel mehr Zeichenfunktionen, um zu sehen, ob es nur ein großer Leistungsabfall war, aber es lief immer bei 60 fps.
Gibt es etwas extra ich tun muss OpenGL sagen, dass es Vollbild ausgeführt wird oder ist dies eine Einschränkung von OpenGL?
(I in Windows XP leite)
Lösung
Wie frou wies darauf hin, würde dies für die vertikalen Rücklauf auf Pygame warten fällig, wenn Sie den Bildschirm aktualisieren, indem display.flip()
aufrufen. Als Pygame display
Dokumentation stellt fest, wenn Sie die Set Anzeigemodus der HWSURFACE
oder die DOUBLEBUF
Flags verwenden, display.flip()
wird für den vertikalen Rücklauf warten, bevor Puffer getauscht werden.
Um ehrlich zu sein, ich sehe keinen guten Grund (abgesehen von Benchmarking) zu versuchen, eine Frame-Rate zu erreichen, die schneller ist als die Bildwiederholrate des Bildschirms. Sie (und die Leute das Spiel spielen) in der Lage, keinen Unterschied in der Geschwindigkeit oder Leistung feststellen, da die Anzeige nur 60 fps sowieso ziehen. Plus, wenn Sie nicht mit dem vertikalen Rücklauf synchronisieren, gibt es eine gute Chance, dass Sie Bildschirm bekommen reißen .
Andere Tipps
Ist das ein V-Sync Problem? Etwas über die Konfiguration oder Ihre Umgebung kann der Monitor Bildwiederholfrequenz maximale Bildrate einschränkend.
Wenn Sie nicht Ihren clock.tick ändern (), wenn Sie zwischen Vollbild- und Fenstermodus zu ändern ist dies mit ziemlicher Sicherheit ein Vsync Problem. Wenn Sie auf einem LCD sind, dann ist es 100% sicher ist.
Leider V-Sync kann in vielen Orten einschließlich SDL, PyOpenGL, Ihre Anzeige-Server und Ihre Grafiktreiber behandelt werden. Wenn Sie Windows verwenden, können Sie die Vsync Toggle im nvidia Bedienfeld einstellen zu testen, und es gibt mehr als wahrscheinlich etwas in nvidia-settings für Linux als auch. Ich würde vermuten, andere Hersteller Treiber haben ähnliche Einstellungen, aber das ist eine Vermutung.