-#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;
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();
}
data.clear();
}
-void VertexArray::reserve(unsigned n)
+void VertexArray::reserve(size_t 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;
+ mark_dirty();
return &*(data.end()-stride);
}
-float *VertexArray::modify(unsigned i)
+char *VertexArray::modify(size_t i)
{
- dirty = true;
+ if(format.empty())
+ throw invalid_operation("VertexArray::modify");
+ mark_dirty();
return &data[0]+i*stride;
}
-unsigned VertexArray::get_data_size() const
+size_t VertexArray::get_data_size() const
{
- return data.size()*sizeof(float);
+ return data.size();
}
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));
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("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("generic1", static_cast<void (Loader::*)(unsigned, float)>(&Loader::generic));
- add("generic2", static_cast<void (Loader::*)(unsigned, float, float)>(&Loader::generic));
- add("generic3", static_cast<void (Loader::*)(unsigned, float, float, float)>(&Loader::generic));
- add("generic4", static_cast<void (Loader::*)(unsigned, float, float, float, float)>(&Loader::generic));
- add("tangent3", static_cast<void (Loader::*)(float, float, float)>(&Loader::tangent));
- add("binormal3", static_cast<void (Loader::*)(float, float, float)>(&Loader::binormal));
+ 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