]> git.tdb.fi Git - libs/gl.git/blobdiff - source/core/vertexarray.cpp
Use default member initializers for simple types
[libs/gl.git] / source / core / vertexarray.cpp
index 0703b1dd57a6d38ee0b3afd4ae98b49aea104172..796bef8053c15a346273bd03beaa8c80abe73d74 100644 (file)
@@ -1,9 +1,4 @@
-#include <msp/gl/extensions/arb_multitexture.h>
-#include <msp/gl/extensions/arb_vertex_shader.h>
-#include "buffer.h"
 #include "error.h"
-#include "gl.h"
-#include "mesh.h"
 #include "vertexarray.h"
 
 using namespace std;
@@ -13,12 +8,13 @@ namespace GL {
 
 VertexArray::VertexArray(const VertexFormat &f)
 {
-       reset(f);
+       set_format(f);
 }
 
-void VertexArray::reset(const VertexFormat &f)
+void VertexArray::set_format(const VertexFormat &f)
 {
-       clear();
+       if(!format.empty())
+               throw invalid_operation("VertexArray::set_format");
        format = f;
        stride = format.stride();
 }
@@ -30,26 +26,32 @@ void VertexArray::clear()
 
 void VertexArray::reserve(unsigned n)
 {
+       if(format.empty())
+               throw invalid_operation("VertexArray::reserve");
        data.reserve(n*stride);
 }
 
-float *VertexArray::append()
+char *VertexArray::append()
 {
+       if(format.empty())
+               throw invalid_operation("VertexArray::append");
        data.insert(data.end(), stride, 0.0f);
        update_offset();
        dirty = true;
        return &*(data.end()-stride);
 }
 
-float *VertexArray::modify(unsigned i)
+char *VertexArray::modify(unsigned i)
 {
+       if(format.empty())
+               throw invalid_operation("VertexArray::modify");
        dirty = true;
        return &data[0]+i*stride;
 }
 
 unsigned VertexArray::get_data_size() const
 {
-       return data.size()*sizeof(float);
+       return data.size();
 }
 
 
@@ -60,6 +62,7 @@ VertexArray::Loader::Loader(VertexArray &a):
        add("vertex", static_cast<void (Loader::*)(float, float, float)>(&Loader::vertex));
        add("vertex", static_cast<void (Loader::*)(float, float, float, float)>(&Loader::vertex));
        add("normal", static_cast<void (Loader::*)(float, float, float)>(&Loader::normal));
+       add("tangent", static_cast<void (Loader::*)(float, float, float)>(&Loader::tangent));
        add("texcoord", static_cast<void (Loader::*)(float)>(&Loader::texcoord));
        add("texcoord", static_cast<void (Loader::*)(float, float)>(&Loader::texcoord));
        add("texcoord", static_cast<void (Loader::*)(float, float, float)>(&Loader::texcoord));
@@ -70,33 +73,18 @@ VertexArray::Loader::Loader(VertexArray &a):
        add("multitexcoord", static_cast<void (Loader::*)(unsigned, float, float, float, float)>(&Loader::multitexcoord));
        add("color", static_cast<void (Loader::*)(float, float, float)>(&Loader::color));
        add("color", static_cast<void (Loader::*)(float, float, float, float)>(&Loader::color));
-       add("attrib", static_cast<void (Loader::*)(unsigned, float)>(&Loader::attrib));
-       add("attrib", static_cast<void (Loader::*)(unsigned, float, float)>(&Loader::attrib));
-       add("attrib", static_cast<void (Loader::*)(unsigned, float, float, float)>(&Loader::attrib));
-       add("attrib", static_cast<void (Loader::*)(unsigned, float, float, float, float)>(&Loader::attrib));
-       add("tangent", static_cast<void (Loader::*)(float, float, float)>(&Loader::tangent));
-       add("binormal", static_cast<void (Loader::*)(float, float, float)>(&Loader::binormal));
-
-       add("vertex2",   static_cast<void (Loader::*)(float, float)>(&Loader::vertex));
-       add("vertex3",   static_cast<void (Loader::*)(float, float, float)>(&Loader::vertex));
-       add("vertex4",   static_cast<void (Loader::*)(float, float, float, float)>(&Loader::vertex));
-       add("normal3",   static_cast<void (Loader::*)(float, float, float)>(&Loader::normal));
-       add("texcoord1", static_cast<void (Loader::*)(float)>(&Loader::texcoord));
-       add("texcoord2", static_cast<void (Loader::*)(float, float)>(&Loader::texcoord));
-       add("texcoord3", static_cast<void (Loader::*)(float, float, float)>(&Loader::texcoord));
-       add("texcoord4", static_cast<void (Loader::*)(float, float, float, float)>(&Loader::texcoord));
-       add("multitexcoord1", static_cast<void (Loader::*)(unsigned, float)>(&Loader::multitexcoord));
-       add("multitexcoord2", static_cast<void (Loader::*)(unsigned, float, float)>(&Loader::multitexcoord));
-       add("multitexcoord3", static_cast<void (Loader::*)(unsigned, float, float, float)>(&Loader::multitexcoord));
-       add("multitexcoord4", static_cast<void (Loader::*)(unsigned, float, float, float, float)>(&Loader::multitexcoord));
-       add("color3",    static_cast<void (Loader::*)(float, float, float)>(&Loader::color));
-       add("color4",    static_cast<void (Loader::*)(float, float, float, float)>(&Loader::color));
-       add("attrib1",   static_cast<void (Loader::*)(unsigned, float)>(&Loader::attrib));
-       add("attrib2",   static_cast<void (Loader::*)(unsigned, float, float)>(&Loader::attrib));
-       add("attrib3",   static_cast<void (Loader::*)(unsigned, float, float, float)>(&Loader::attrib));
-       add("attrib4",   static_cast<void (Loader::*)(unsigned, float, float, float, float)>(&Loader::attrib));
-       add("tangent3",  static_cast<void (Loader::*)(float, float, float)>(&Loader::tangent));
-       add("binormal3", static_cast<void (Loader::*)(float, float, float)>(&Loader::binormal));
+       add("generic", static_cast<void (Loader::*)(unsigned, float)>(&Loader::generic));
+       add("generic", static_cast<void (Loader::*)(unsigned, float, float)>(&Loader::generic));
+       add("generic", static_cast<void (Loader::*)(unsigned, float, float, float)>(&Loader::generic));
+       add("generic", static_cast<void (Loader::*)(unsigned, float, float, float, float)>(&Loader::generic));
+       add("group", static_cast<void (Loader::*)(int)>(&Loader::group));
+       add("group", static_cast<void (Loader::*)(int, int)>(&Loader::group));
+       add("group", static_cast<void (Loader::*)(int, int, int)>(&Loader::group));
+       add("group", static_cast<void (Loader::*)(int, int, int, int)>(&Loader::group));
+       add("weight", static_cast<void (Loader::*)(float)>(&Loader::weight));
+       add("weight", static_cast<void (Loader::*)(float, float)>(&Loader::weight));
+       add("weight", static_cast<void (Loader::*)(float, float, float)>(&Loader::weight));
+       add("weight", static_cast<void (Loader::*)(float, float, float, float)>(&Loader::weight));
 }
 
 } // namespace GL