Suggerimenti per l'ottimizzazione di OpenGL [chiuso]


26

Quali suggerimenti o trucchi hai quando si tratta di rendere OpenGL più efficiente?

Risposte:


16

Utilizzare VBO anziché glStart () / glEnd (). Ciò consente di risparmiare cicli nel trasferimento dei dati nella memoria della GPU.


7
Inoltre, glBegin e glEnd sono stati deprecati nelle revisioni successive e sono stati completamente rimossi (e quindi non funzioneranno) nelle versioni 3.xe successive. Se richiedi un contesto OpenGL 3.x non sarai in grado di usarli completamente.
Slurps Mad Rips,

DirectX in realtà ti impone questo, non ha un equivalente di glStart()/glEnd().
knight666,

@SAHChandler Non lo sapevo. Non mi ero reso conto che era deprecato.
MrValdez,

3
@SAHChandler: Che schifo! Ho imparato tutti i miei disegni con glBegin () e glEnd (). Noooo !!!

8

La punta standard di profilo, profilo, profilo si applica anche qui, anche se gli strumenti sono leggermente diversi.

gDEBugger ti aiuta a vedere esattamente cosa succede sotto il cofano. È costoso, però.


2
Volevo solo aggiungere che ora è gratuito.
DMan

8

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)


7

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.


6

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.


4
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.


4

Non utilizzare glGet * quando è possibile accedere alle variabili locali, ad esempio:

  • Non eseguire query sulle dimensioni delle trame da OpenGL, memorizzale al caricamento in variabili
  • Non eseguire query su larghezze di linea / dimensioni di punti da OpenGL quando è possibile memorizzare le modifiche nell'applicazione

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.


3

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.


Stai attento. I lotti meno grandi sono utili, ma a seconda della piattaforma di destinazione i lotti "troppo grandi" ridurranno le prestazioni.
Andreas,

3

Lotto, lotto, lotto !! (Ab) utilizza la GPU per eseguire il rendering il più possibile in ogni chiamata di disegno. I giochi sono per lo più limitati dalla quantità di cambiamenti di stato, non tanto dalla quantità di triangoli.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.