]> git.tdb.fi Git - libs/gl.git/blobdiff - source/buffer.cpp
Present Mesh's index buffer as current while the Mesh is bound
[libs/gl.git] / source / buffer.cpp
index 61670cf9d378245f9a96ddead7f0fcea32ffb584..9fa03c1242024184585618ff841b71d802fc1a46 100644 (file)
@@ -65,13 +65,26 @@ void Buffer::bind_to(BufferType t) const
 {
        if(t!=type)
                require_buffer_type(t);
-       // Don't change the binding in a mesh's vertex array object
-       if(t==ELEMENT_ARRAY_BUFFER && Mesh::current())
-               throw invalid_operation("Buffer::bind_to(ELEMENT_ARRAY_BUFFER)");
+       if(t==ELEMENT_ARRAY_BUFFER)
+               if(const Mesh *m = Mesh::current())
+               {
+                       // Don't change the binding in a mesh's vertex array object
+                       if(this==m->get_index_buffer())
+                               return;
+                       throw invalid_operation("Buffer::bind_to(ELEMENT_ARRAY_BUFFER)");
+               }
        if(set_current(t, this))
                glBindBuffer(t, id);
 }
 
+const Buffer *Buffer::current(BufferType t)
+{
+       if(t==ELEMENT_ARRAY_BUFFER)
+               if(const Mesh *m = Mesh::current())
+                       return m->get_index_buffer();
+       return binding(t);
+}
+
 void Buffer::unbind_from(BufferType type)
 {
        if(type==ELEMENT_ARRAY_BUFFER && Mesh::current())