3 This file is part of libmspgl
4 Copyright © 2007-2011 Mikko Rasa, Mikkosoft Productions
5 Distributed under the LGPL
24 Mesh::Mesh(const VertexFormat &f):
41 void Mesh::use_buffers(bool b)
45 vertices.use_vertex_buffer();
47 ibuf = new Buffer(ELEMENT_ARRAY_BUFFER);
52 vertices.use_vertex_buffer(0);
59 unsigned Mesh::get_n_vertices() const
61 return vertices.size();
64 float *Mesh::modify_vertex(unsigned i)
66 return vertices.modify(i);
69 void Mesh::add_batch(const Batch &b)
71 bool can_append = false;
74 PrimitiveType type = b.get_type();
75 can_append = (type==batches.back().get_type() &&
76 type!=LINE_STRIP && type!=LINE_LOOP && type!=POLYGON &&
77 (type!=TRIANGLE_FAN || is_supported("GL_NV_primitive_restart")));
82 ibuf = new Buffer(ELEMENT_ARRAY_BUFFER);
87 batches.back().append(b);
90 Batch *prev = (batches.empty() ? 0 : &batches.back());
93 batches.back().use_index_buffer(ibuf, prev);
97 void Mesh::draw() const
102 ibuf->bind_to(ELEMENT_ARRAY_BUFFER);
104 for(list<Batch>::const_iterator i=batches.begin(); i!=batches.end(); ++i)
108 Buffer::unbind_from(ELEMENT_ARRAY_BUFFER);
111 void Mesh::draw(Renderer &renderer) const
113 renderer.set_vertex_array(&vertices);
114 renderer.set_element_buffer(ibuf);
116 for(list<Batch>::const_iterator i=batches.begin(); i!=batches.end(); ++i)
121 Mesh::Loader::Loader(Mesh &m):
122 DataFile::ObjectLoader<Mesh>(m)
124 add("vertices", &Loader::vertices);
125 add("batch", &Loader::batch);
128 void Mesh::Loader::vertices(VertexFormat f)
130 obj.vertices.reset(f);
131 load_sub(obj.vertices);
134 void Mesh::Loader::batch(PrimitiveType p)