+++ /dev/null
-#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;
-
-namespace Msp {
-namespace GL {
-
-VertexArray::VertexArray(const VertexFormat &f)
-{
- reset(f);
-}
-
-void VertexArray::reset(const VertexFormat &f)
-{
- clear();
- format = f;
- stride = get_stride(format);
-}
-
-void VertexArray::clear()
-{
- data.clear();
-}
-
-void VertexArray::reserve(unsigned n)
-{
- data.reserve(n*stride);
-}
-
-float *VertexArray::append()
-{
- data.insert(data.end(), stride, 0.0f);
- update_offset();
- dirty = true;
- return &*(data.end()-stride);
-}
-
-float *VertexArray::modify(unsigned i)
-{
- dirty = true;
- return &data[0]+i*stride;
-}
-
-unsigned VertexArray::get_data_size() const
-{
- return data.size()*sizeof(float);
-}
-
-
-VertexArray::Loader::Loader(VertexArray &a):
- VertexArrayBuilder(a)
-{
- add("vertex", static_cast<void (Loader::*)(float, float)>(&Loader::vertex));
- 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("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("texcoord", static_cast<void (Loader::*)(float, float, float, float)>(&Loader::texcoord));
- add("multitexcoord", static_cast<void (Loader::*)(unsigned, float)>(&Loader::multitexcoord));
- add("multitexcoord", static_cast<void (Loader::*)(unsigned, float, float)>(&Loader::multitexcoord));
- add("multitexcoord", static_cast<void (Loader::*)(unsigned, float, float, float)>(&Loader::multitexcoord));
- 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));
-}
-
-} // namespace GL
-} // namespace Msp