initial commit, eq circuit emulator
[eqemu] / src / mesh.h
1 /*
2 eqemu - electronic queue system emulator
3 Copyright (C) 2014  John Tsiombikas <nuclear@member.fsf.org>,
4                     Eleni-Maria Stea <eleni@mutantstargoat.com>
5
6 This program is free software: you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation, either version 3 of the License, or
9 (at your option) any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program.  If not, see <http://www.gnu.org/licenses/>.
18 */
19 #ifndef MESH_H_
20 #define MESH_H_
21
22 #include "bvol.h"
23
24 enum {
25         MESH_ATTR_VERTEX,
26         MESH_ATTR_NORMAL,
27         MESH_ATTR_TEXCOORD,
28
29         NUM_MESH_ATTRIBS
30 };
31
32 class Mesh {
33 private:
34         float *attr[NUM_MESH_ATTRIBS];
35         int vcount;
36         unsigned int vbo[NUM_MESH_ATTRIBS];
37         int attr_size[NUM_MESH_ATTRIBS];
38
39         mutable unsigned int buf_valid; /* bitmask */
40         void update_buffers() const;
41
42         mutable BSphere bsph;
43         mutable bool bsph_valid;
44         void calc_bsph() const;
45
46 public:
47         Mesh();
48         ~Mesh();
49
50         float *set_attrib(int aidx, int count, int elemsz, float *data = 0);
51         float *get_attrib(int aidx);
52         const float *get_attrib(int aidx) const;
53
54         void draw() const;
55
56         BSphere &get_bounds();
57         const BSphere &get_bounds() const;
58 };
59
60 #endif  // MESH_H_