2012-08-03 5 views
7

Are glGetUniformLocation e glGetAttribLocation richiedono tempo?OpenGL - Devo memorizzare posizioni attributo/uniforme?

Qual è il modo migliore?

  1. chiamata glGetAttribLocation o glGetUniformLocation ogni volta che ne ho bisogno?
  2. Immagazzinare le posizioni in varables e usarle quando necessario?
+0

grazie per upvote: D – GLES

risposta

5

Sia su Android o iPhone, per una superficie opengl si avrà metodi come: onSurfaceCreated e onSurfaceChanged, prendere l'abitudine di uniformi prendendo e attributi qui in questi 2 metodi.

L'unico modo è possibile effettuare il rendering più veloce (che presto diventerà la vostra priorità quando il codice incrocia 1000 linee di codice) è di avere solo gluseprogram, glbindbuffer, tessitura si lega e altri si lega all'interno metodo onDrawFrame, sempre la cache variabili all'interno di OnSurfaceCreated e onSurfaceChanged

+2

Buona risposta. Attributi, uniformi e altre variabili usate all'interno degli shader devono essere memorizzati nella cache all'interno dei metodi init() e non con i metodi draw_Frame(). – divyaSharma

8

Qual è il modo migliore?

Pensaci. Non importa quanto velocemente glGetUniformLocation e glGetAttribLocation, non possono essere essere più veloce di un semplice recupero di una variabile. Quindi, se sei preoccupato per le prestazioni, utilizza il metodo sempre più veloce.

3

Secondo i miei test, il recupero di tali posizioni ha richiesto circa 100 ~ 200 volte la quantità di tempo necessaria per una singola chiamata glDrawElements. Questa è solo una stima basata su System.nanoTime(), ma penso che sia impossibile dire che vale la pena archiviarli in variabili durante l'inizializzazione.

+0

Questa è una risposta molto migliore. (Spero che i dati siano corretti, naturalmente, ma immagino che lo sia, perché ottenere gli attributi è sincrono e il disegno non lo è). –