+ // The buffer gets bound as a side effect
+ Buffer::set_current(t, &buffer);
+ glBindBufferRange(t, i, buffer.id, offset, size);
+ }
+}
+
+void BufferRange::unbind_from(BufferType t, unsigned i)
+{
+ if(set_current(t, i, 0))
+ {
+ Buffer::set_current(t, 0);
+ glBindBufferBase(t, i, 0);
+ }
+}
+
+const BufferRange *&BufferRange::binding(BufferType type, unsigned index)
+{
+ if(type==UNIFORM_BUFFER)
+ {
+ if(index>=get_n_uniform_buffer_bindings())
+ throw out_of_range("BufferRange::binding");
+ if(bound_uniform.size()<=index)
+ bound_uniform.resize(index+1);
+ return bound_uniform[index];