Risposte:
Utilizzare VBO anziché glStart () / glEnd (). Ciò consente di risparmiare cicli nel trasferimento dei dati nella memoria della GPU.
glStart()/glEnd()
.
Questi sono dai riferimenti della documentazione di Apple su OpenGL, ma ogni piccolo aiuto è giusto? ;)
Ottimizzazione delle prestazioni di OpenGL: Nozioni di base
Ottimizzazione della velocità di trasmissione dei dati OpenGL su OS X.
(Quest'ultima è un'applicazione di esempio)
Ottimizzazione del vertice
Ci sono anche molti video disponibili sull'argomento (anche di Apple) che parlano di estensioni OpenGL. Alcuni di essi sono specifici di OS X, ma altri sono più generalizzati e molto probabilmente potrebbero essere applicati a Windows e Linux.
Puoi trovare i video qui . Tuttavia, per visualizzarli è necessario iTunes e un account Apple (ma sono gratuiti!: D)
Bene, dipende davvero da cosa stai pianificando di fare, ma ecco le basi:
La tua CPU è molto preziosa mentre la tua GPU è una bestia affamata. Offset il più possibile sulla GPU. Oggi puoi farlo con eccellenti librerie come OpenCL, CUDA e Thrust.
Fai la tua illuminazione in uno shader. Questo non solo ti aiuterà a mantenere la sanità mentale, ma ti permetterà di fare cose davvero fantastiche come toon shader e illuminazione differita .
Le particelle fanno schifo. Anche quando si utilizzano sprite di punti OpenGL.
Riduci al minimo i cambiamenti di stato. Su molte piattaforme, ogni cambio di stato scarica potenzialmente la pipeline. È molto meglio raggruppare insieme oggetti simili e cambiare stato una volta.
glEnable(GL_CULL_FACES);
Una fodera semplice che applica l'abbattimento della faccia posteriore. Questo è eccellente per ridurre il conteggio dei poligoni. Guarda anche l'abbattimento di frustum / occlusione per ridurre il numero di poli.
Un'altra cosa da esaminare è SIMD per i tuoi vettori e quaternioni (utilizzato principalmente nelle rotazioni della fotocamera). Se non vuoi scherzare con ASM, dai un'occhiata a libSIMD che è un'ottima libreria per gestire SIMD in C.
Non utilizzare glGet * quando è possibile accedere alle variabili locali, ad esempio:
Queste chiamate sono molto lente
Sposta le cose inutilizzate al di fuori di glBegin - clausola glEnd (sia glColor o glNormal o qualsiasi altra cosa) se non cambia all'interno. OpenGL è una macchina a stati, utilizza l'ultimo valore.
Riduci al minimo i comandi OpenGL è la chiave. Quindi è necessario raggruppare tutti i comandi di disegno. Per i giochi 2D, è una buona idea usare Altas Texture e disegnare tutti gli sprite che condividono la stessa trama in un solo comando.