2013-02-06 7 views
7

Vorrei avere la capacità di impostare le uniformi attraverso i loro nomi reali nello shaderVale la pena memorizzare nella cache la posizione uniforme di glsl nel codice?

myProgram.uniform3fv("uniformVector", 0.0f, 0.1f, 1.0f); 

devo posizioni della cache in una qualche forma di una mappa?

std::map<std::string, unsigned int> // or unordered_map 

o forse OpenGL (sul desktop) lo memorizza in ogni caso, quindi non avrei alcuna differenza di prestazioni?

risposta

6

La specifica OpenGL definisce la funzionalità, non le prestazioni. Quindi non c'è modo di sapere come una particolare implementazione di OpenGL memorizzerà l'elenco delle uniformi attive o quanto velocemente sarà glGetUniformLocation, relativo alle prestazioni di std::map.

Quindi, davvero, tocca a voi. Se vuoi uniformare, noto come prestazione, fallo da solo. Se si vuole prendere una possibilità sui capricci dell'implementazione di OpenGL, quindi interrogarlo ogni volta che lo si desidera. Personalmente, direi i nomi dei fossi e vado con i luoghi. In questo modo ottieni le massime prestazioni.

+0

così come nella maggior parte dei casi, non possiamo fare affidamento su ipotesi (sull'implementazione del driver) ed è meglio fare un semplice caching da soli. – fen