X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fcore%2Fvertexarray.cpp;h=2bb6a6677b9ef5e2099a1a5922b1d2990910708c;hb=2d3113a7dbbe4be2f1d1e8980c1c4e42175163da;hp=e3aef7a0eea16cd38302d068535edaa255c56028;hpb=7aaec9a70b8d7733429bec043f8e33e02956f266;p=libs%2Fgl.git diff --git a/source/core/vertexarray.cpp b/source/core/vertexarray.cpp index e3aef7a0..2bb6a667 100644 --- a/source/core/vertexarray.cpp +++ b/source/core/vertexarray.cpp @@ -11,16 +11,21 @@ using namespace std; namespace Msp { namespace GL { +VertexArray::VertexArray(): + stride(0) +{ } + 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 = get_stride(format); + stride = format.stride(); } void VertexArray::clear() @@ -30,11 +35,15 @@ void VertexArray::clear() void VertexArray::reserve(unsigned n) { + if(format.empty()) + throw invalid_operation("VertexArray::reserve"); data.reserve(n*stride); } float *VertexArray::append() { + if(format.empty()) + throw invalid_operation("VertexArray::append"); data.insert(data.end(), stride, 0.0f); update_offset(); dirty = true; @@ -43,6 +52,8 @@ float *VertexArray::append() float *VertexArray::modify(unsigned i) { + if(format.empty()) + throw invalid_operation("VertexArray::modify"); dirty = true; return &data[0]+i*stride; } @@ -70,13 +81,20 @@ 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("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)); + // Deprecated add("vertex2", static_cast(&Loader::vertex)); add("vertex3", static_cast(&Loader::vertex)); add("vertex4", static_cast(&Loader::vertex)); @@ -91,12 +109,17 @@ VertexArray::Loader::Loader(VertexArray &a): 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("generic1", static_cast(&Loader::generic)); + add("generic2", static_cast(&Loader::generic)); + add("generic3", static_cast(&Loader::generic)); + add("generic4", static_cast(&Loader::generic)); +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" add("tangent3", static_cast(&Loader::tangent)); add("binormal3", static_cast(&Loader::binormal)); + add("tangent", static_cast(&Loader::tangent)); + add("binormal", static_cast(&Loader::binormal)); +#pragma GCC diagnostic pop } } // namespace GL