9

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.
viktorzeid
  • 1,521
  • 1
  • 22
  • 35
  • 1
    `uniformLocation` That's not a uniform location. That is a uniform block index. It's not the same thing. – Nicol Bolas Jul 24 '13 at 07:49
  • 1
    *"If this is correct then this answers my first question."* - No, it doesn't (referring to the *"answer"* not the *"is correct"*). Why should it? – Christian Rau Jul 24 '13 at 09:08

1 Answers1

11

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.

Nicol Bolas
  • 449,505
  • 63
  • 781
  • 982