X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fcore%2Fvertexarray.cpp;h=beffa64e0873fa66ee3d8f4228a76922abf1355c;hp=0703b1dd57a6d38ee0b3afd4ae98b49aea104172;hb=HEAD;hpb=ea7832c7c1ffab00cc1168bc8c41375fdd0eae86 diff --git a/source/core/vertexarray.cpp b/source/core/vertexarray.cpp index 0703b1dd..beffa64e 100644 --- a/source/core/vertexarray.cpp +++ b/source/core/vertexarray.cpp @@ -1,9 +1,4 @@ -#include -#include -#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(); } @@ -28,28 +24,34 @@ void VertexArray::clear() 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(); } @@ -60,6 +62,7 @@ VertexArray::Loader::Loader(VertexArray &a): add("vertex", static_cast(&Loader::vertex)); add("vertex", static_cast(&Loader::vertex)); add("normal", static_cast(&Loader::normal)); + add("tangent", static_cast(&Loader::tangent)); add("texcoord", static_cast(&Loader::texcoord)); add("texcoord", static_cast(&Loader::texcoord)); add("texcoord", static_cast(&Loader::texcoord)); @@ -70,33 +73,18 @@ VertexArray::Loader::Loader(VertexArray &a): add("multitexcoord", static_cast(&Loader::multitexcoord)); add("color", static_cast(&Loader::color)); add("color", static_cast(&Loader::color)); - add("attrib", static_cast(&Loader::attrib)); - add("attrib", static_cast(&Loader::attrib)); - add("attrib", static_cast(&Loader::attrib)); - add("attrib", static_cast(&Loader::attrib)); - add("tangent", static_cast(&Loader::tangent)); - add("binormal", static_cast(&Loader::binormal)); - - add("vertex2", static_cast(&Loader::vertex)); - add("vertex3", static_cast(&Loader::vertex)); - add("vertex4", static_cast(&Loader::vertex)); - add("normal3", static_cast(&Loader::normal)); - add("texcoord1", static_cast(&Loader::texcoord)); - add("texcoord2", static_cast(&Loader::texcoord)); - add("texcoord3", static_cast(&Loader::texcoord)); - add("texcoord4", static_cast(&Loader::texcoord)); - add("multitexcoord1", static_cast(&Loader::multitexcoord)); - add("multitexcoord2", static_cast(&Loader::multitexcoord)); - add("multitexcoord3", static_cast(&Loader::multitexcoord)); - add("multitexcoord4", static_cast(&Loader::multitexcoord)); - add("color3", static_cast(&Loader::color)); - add("color4", static_cast(&Loader::color)); - add("attrib1", static_cast(&Loader::attrib)); - add("attrib2", static_cast(&Loader::attrib)); - add("attrib3", static_cast(&Loader::attrib)); - add("attrib4", static_cast(&Loader::attrib)); - add("tangent3", static_cast(&Loader::tangent)); - add("binormal3", static_cast(&Loader::binormal)); + add("generic", static_cast(&Loader::generic)); + add("generic", static_cast(&Loader::generic)); + add("generic", static_cast(&Loader::generic)); + add("generic", static_cast(&Loader::generic)); + add("group", static_cast(&Loader::group)); + add("group", static_cast(&Loader::group)); + add("group", static_cast(&Loader::group)); + add("group", static_cast(&Loader::group)); + add("weight", static_cast(&Loader::weight)); + add("weight", static_cast(&Loader::weight)); + add("weight", static_cast(&Loader::weight)); + add("weight", static_cast(&Loader::weight)); } } // namespace GL