|
|
|
|
Strumenti |
14-07-2005, 17:57 | #1 |
Senior Member
Iscritto dal: May 2003
Città: Trieste, Pordenone
Messaggi: 920
|
50 fps e basso consumo CPU, si può?
Ho notato che i giochini, anche quelli più banali, tipo Worms (che è 2D) o anche i semplicissimi fire demo e plasma demo, tendono a consumare tutte le risorse della CPU anche se di per se non sono applicazioni "pesanti".
Qui http://gpwiki.org/index.php/C:Beating_the_Message_Pump c'è un'idea che permette di migliorare un po' le cose, ciò far girare il gameloop in un thread separato, ma l'occupazione della CPU sale tantissimo comunque (anche se meno rispetto ai cicli con PeekMessage())... E' da un po' che penso a come si potrebbe fare per evitare che la CPU generi 700 frame al secondo inutilmente quando l'occhio umano ne percepisce 25. Tanto per star larghi ed essere sicuri di non percepire scatti, io punterei a generare 50 fps, quindi 20ms per generare un frame. Se la CPU impiega 3ms per generare quel frame, io la lascerei a riposo per gli altri 17ms... Si potrebbe fare un comune ciclo GetMessage() inviando dei messaggi WMTIMER ogni 20ms, ma a quanto ho letto, pare che qualsiasi valore sotto i 55ms venga aumentato a 55ms che porterebbero a soli 18fps, troppo pochi per un effetto animazione senza scatti. L'alternativa sarebbe quella di utilizzare gli HALT states della CPU per mettere a nanna quel thread per alcuni cicli. Purtroppo, però, è un'istruzione privilegiata e bisognerebbe scrivere un kernel driver per accedervi (a meno che non ci siano delle opportune API che forniscono un front-end ad alto livello, ma io non ne sono a conoscenza)... Qualcuno ha qualche idea?
__________________
buy here |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:32.