Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is ordering between glUniformBlockBinding and glBindBufferBase important?

When using UBOs, we bind a uniform block to a binding point. Then we also bind the UBO to the same binding point: something like:

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

I have 2 questions on this:

  1. should I specify glUniformBlockBinding first or glBindBufferBase or the order doesn't matter?
  2. If my understanding is correct, then glBindBufferBase must be called only after we have updated the UBO with data. If this is correct then this answers my first question.
like image 238
viktorzeid Avatar asked Jul 24 '13 07:07

viktorzeid


1 Answers

glUniformBlockBinding sets state in the program (which is why you shouldn't be calling it every frame). glBindBufferRange sets state in the OpenGL context. Neither affects the other until you render, so no, it doesn't matter which.

And yes, you cannot call glBindBufferRange (or Base, which is defined in terms of Range) unless you have allocated storage for the buffer object.

like image 129
Nicol Bolas Avatar answered Nov 15 '22 21:11

Nicol Bolas