]> git.tdb.fi Git - libs/gl.git/blob - source/mesh.cpp
44005514d97a74deb54fdb339d42436b5f74ed0a
[libs/gl.git] / source / mesh.cpp
1 /* $Id$
2
3 This file is part of libmspgl
4 Copyright © 2007  Mikko Rasa, Mikkosoft Productions
5 Distributed under the LGPL
6 */
7
8 #include "mesh.h"
9
10 using namespace std;
11
12 namespace Msp {
13 namespace GL {
14
15 Mesh::Mesh():
16         vertices(NODATA)
17 { }
18
19 Mesh::Mesh(VertexFormat f):
20         vertices(f)
21 { }
22
23 void Mesh::use_vertex_buffer(bool b)
24 {
25         if(b)
26                 vertices.use_vertex_buffer();
27         else
28                 vertices.use_vertex_buffer(0);
29 }
30
31 RefPtr<MeshBuilder> Mesh::modify()
32 {
33         return new MeshBuilder(*this);
34 }
35
36 void Mesh::add_batch(const Batch &b)
37 {
38         batches.push_back(b);
39 }
40
41 void Mesh::draw() const
42 {
43         vertices.apply();
44         for(list<Batch>::const_iterator i=batches.begin(); i!=batches.end(); ++i)
45                 i->draw();
46 }
47
48
49 Mesh::Loader::Loader(Mesh &m):
50         mesh(m)
51 {
52         add("vertices", &Loader::vertices);
53         add("batch",    &Loader::batch);
54 }
55
56 void Mesh::Loader::vertices(VertexFormat f)
57 {
58         mesh.vertices.reset(f);
59         load_sub(mesh.vertices);
60 }
61
62 void Mesh::Loader::batch(PrimitiveType p)
63 {
64         mesh.batches.push_back(Batch(p));
65         load_sub(mesh.batches.back());
66 }
67
68 } // namespace GL
69 } // namespace Msp