2009-08-02 9 views
2

Ich arbeite gerade an einer Spiel-Engine geschrieben in Pygame und ich wollte OpenGL-Unterstützung hinzufügen.PyOpenGL + Pygame bis zu 60 FPS im Vollbildmodus

Ich schrieb einen Test, um zu sehen, wie pygame und OpenGL zusammen arbeiten, und wenn es im Fenstermodus läuft, läuft es zwischen 150 und 200 fps. Wenn ich es im Vollbildmodus ausführe (ich habe nur den FULLSCREEN-Flag hinzugefügt, als ich das Fenster eingerichtet habe), fällt es auf 60 fps herunter. Ich habe viel mehr Zeichnungsfunktionen hinzugefügt, um zu sehen, ob es nur ein riesiger Leistungsabfall war, aber es lief immer mit 60 fps.

Gibt es noch etwas, was ich tun muss, um OpenGL mitzuteilen, dass es im Vollbildmodus läuft oder ist das eine Einschränkung von OpenGL?

(I in Windows XP leite)

+0

Auf welchem ​​System laufen Sie (Windows, Linux/X11, etc ..)? –

Antwort

7

Wie bereits erwähnt, würde dies daran liegen, dass Pygame auf den vertikalen Rücklauf wartet, wenn Sie den Bildschirm aktualisieren, indem Sie display.flip() aufrufen. Wie die Pygame display documentation anmerkt: Wenn Sie den Anzeigemodus mit den Flags HWSURFACE oder DOUBLEBUF einstellen, wartet display.flip() auf den vertikalen Rücklauf, bevor Puffer ausgetauscht werden.

Um ehrlich zu sein, sehe ich keinen guten Grund (abgesehen von Benchmarking) zu versuchen, eine Bildrate zu erreichen, die schneller ist als die Bildwiederholfrequenz des Bildschirms. Sie (und die Leute, die Ihr Spiel spielen) werden keinen Unterschied in der Geschwindigkeit oder Leistung bemerken, da das Display sowieso nur 60 fps ziehen kann. Plus, wenn Sie nicht mit dem vertikalen Rücklauf synchronisieren, gibt es eine gute Chance, dass Sie screen tearing erhalten.

1

Ist das ein V-Sync Problem? Etwas an der Konfiguration oder Ihrer Umgebung kann die maximale Bildrate auf die Aktualisierungsrate Ihres Monitors begrenzen.

0

Wenn Sie Ihren clock.tick() nicht ändern, wenn Sie zwischen Vollbild- und Fenstermodus wechseln, ist dies fast sicher ein vsync-Problem. Wenn Sie auf einem LCD-Bildschirm sind, dann ist es 100% sicher.

Leider kann v-sync an vielen Stellen verwendet werden, einschließlich SDL, Pyopengl, Ihrem Display-Server und Ihren Grafiktreibern. Wenn Sie Windows verwenden, können Sie den Vsync-Toggle im nvidia-Kontrollfeld zum Testen anpassen, und unter Linux gibt es höchstwahrscheinlich auch etwas in nvidia-settings. Ich würde vermuten, dass andere Hersteller Treiber ähnliche Einstellungen haben, aber das ist eine Vermutung.

+0

Was meinst du mit "changin clock.tickf()?" Ich verwende auch die Grafikkarte, die mit dem Computer geliefert wurde, also glaube ich nicht, dass ich auf die vsync Einstellungen zugreifen kann. Kann ich das mit OpenGL machen? –

+0

clock.tick() ist ein Pygames-Mechanismus zur Kontrolle der Häufigkeit von Screen-Redraws. http://www.pygame.org/docs/ref/time.html ist das Dokument, und hier ist ein Beispiel mit http://www.pygame.org/docs/tut/chimp/ChimpLineByLine.html. – Pmc

+0

@htw Wenn es ein pygame-Implementierungsproblem wäre, wären die Ergebnisse unabhängig vom FULLSCREEN-Zustand nicht einheitlich? – Pmc