2013-07-24 10 views
7

Quando si utilizzano UBO, si associa un blocco uniforme a un punto di rilegatura. Poi abbiamo anche associare l'UBO allo stesso punto di rilegatura: qualcosa di simile:L'ordine tra glUniformBlockBinding e glBindBufferBase è importante?

glUseProgram(ProgramName); 
glUniformBlockBinding(ProgramName, uniformLocation, bindingPoint); 
glBindBufferBase(GL_UNIFORM_BUFFER, bindingPoint, bufId); 

Ho 2 domande su questo:

  1. mi dovrebbe specificare glUniformBlockBinding primo o glBindBufferBase o l'ordine non importa ?
  2. Se la mia comprensione è corretta, allora glBindBufferBase deve essere chiamato solo dopo aver aggiornato l'UBO con i dati. Se questo è corretto, questo risponde alla mia prima domanda.
+1

'uniformLocation' Questa non è una posizione uniforme. Questo è un indice di blocco uniforme. Non è la stessa cosa –

+1

* "Se questo è corretto, questo risponde alla mia prima domanda." * - No, non lo fa (facendo riferimento alla * "risposta" * non * è corretto "*). Perché dovrebbe? –

risposta

9

glUniformBlockBinding imposta lo stato nel programma (motivo per cui non si dovrebbe chiamarlo ogni frame). glBindBufferRange imposta lo stato nel contesto OpenGL. Nessuno dei due influenza l'altro finché non lo fai, quindi no, non importa quale.

E sì, non è possibile chiamare glBindBufferRange (o Base, che è definito in termini di intervallo) a meno che non sia stata allocata memoria per l'oggetto buffer.

+0

Grazie Nicol. Questo risponde alla mia domanda. – viktorzeid

+0

btw, potresti spiegare la differenza tra l'impostazione dello stato nel programma e lo stato di impostazione nel contesto GL? – viktorzeid

+0

@kvikram: Forse dovresti prendere del tempo per [imparare un po 'di più su OpenGL] (http://www.opengl.org/wiki/Portal:OpenGL_Concepts). –

Problemi correlati