]> git.tdb.fi Git - libs/gl.git/blobdiff - source/buffer.cpp
Add vertex array object support to Mesh
[libs/gl.git] / source / buffer.cpp
index 84c72716d0e5da16cebb42fcd8e191c093ae1bd3..d8bb28028ee686380e48b77613c039906df40a35 100644 (file)
@@ -1,8 +1,10 @@
 #include <stdexcept>
-#include "arb_pixel_buffer_object.h"
-#include "arb_uniform_buffer_object.h"
-#include "arb_vertex_buffer_object.h"
+#include <msp/gl/extensions/arb_pixel_buffer_object.h>
+#include <msp/gl/extensions/arb_uniform_buffer_object.h>
+#include <msp/gl/extensions/arb_vertex_buffer_object.h>
 #include "buffer.h"
+#include "error.h"
+#include "mesh.h"
 #include "misc.h"
 
 using namespace std;
@@ -67,12 +69,17 @@ 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(set_current(t, this))
                glBindBuffer(t, id);
 }
 
 void Buffer::unbind_from(BufferType type)
 {
+       if(type==ELEMENT_ARRAY_BUFFER && Mesh::current())
+               throw invalid_operation("Buffer::unbind_from(ELEMENT_ARRAY_BUFFER)");
        if(set_current(type, 0))
                glBindBuffer(type, 0);
 }
@@ -151,13 +158,13 @@ const BufferRange *&BufferRange::binding(BufferType type, unsigned index)
        if(type==UNIFORM_BUFFER)
        {
                if(index>=get_n_uniform_buffer_bindings())
-                       throw out_of_range("Buffer::binding");
+                       throw out_of_range("BufferRange::binding");
                if(bound_uniform.size()<=index)
                        bound_uniform.resize(index+1);
                return bound_uniform[index];
        }
        else
-               throw invalid_argument("Buffer::binding");
+               throw invalid_argument("BufferRange::binding");
 }
 
 bool BufferRange::set_current(BufferType type, unsigned index, const BufferRange *buf)