Domanda

Attualmente sto lavorando su un motore di gioco scritto in pygame e volevo aggiungere il supporto OpenGL.

Ho scritto un test per vedere come far funzionare insieme pygame e OpenGL e quando funziona in modalità finestra, funziona tra 150 e 200 fps. Quando lo eseguo a schermo intero (tutto ciò che ho fatto è stato aggiungere il flag FULLSCREEN quando ho impostato la finestra), scende a 60 fps. Ho aggiunto molte più funzioni di disegno per vedere se si trattava solo di un enorme calo delle prestazioni, ma funzionava sempre a 60 fps.

C'è qualcosa in più che devo fare per dire a OpenGL che funziona a schermo intero o è una limitazione di OpenGL?

(Sono in esecuzione su Windows XP)

È stato utile?

Soluzione

Come indicato da frou, ciò sarebbe dovuto al fatto che Pygame attendeva la traccia verticale quando aggiorna lo schermo chiamando display.flip () . Come Pygame display documentazione note, se si imposta la modalità di visualizzazione utilizzando i HWSURFACE o i DOUBLEBUF , display.flip () attenderà il ritracciamento verticale prima scambio di buffer.

Ad essere onesti, non vedo alcuna buona ragione (a parte il benchmarking) per cercare di ottenere un frame rate più veloce della frequenza di aggiornamento dello schermo. Tu (e le persone che giocano) non sarete in grado di notare alcuna differenza in termini di velocità o prestazioni, poiché il display può comunque disegnare solo 60 fps. Inoltre, se non ti sincronizzi con la traccia verticale, ci sono buone probabilità che strappi dello schermo .

Altri suggerimenti

È un problema V-Sync ? Qualcosa sulla configurazione o sul tuo ambiente potrebbe limitare la frequenza dei fotogrammi massima alla frequenza di aggiornamento del monitor.

Se non si modifica clock.tick () quando si passa dalla modalità a schermo intero a quella a finestre, questo è quasi sicuramente un problema di vsync. Se sei su un LCD, allora è sicuro al 100%.

Sfortunatamente v-sync può essere gestito in molti luoghi tra cui SDL, Pyopengl, il tuo server di visualizzazione e i tuoi driver video. Se stai usando Windows puoi regolare la levetta vsync nel pannello di controllo di NVIDIA per testare, e c'è molto probabilmente qualcosa nelle impostazioni di NVIDIA anche per Linux. Immagino che i driver di altri produttori abbiano impostazioni simili ma è un'ipotesi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top