]> git.tdb.fi Git - libs/gl.git/blob - source/core/vertexsetup.h
Use default member initializers for simple types
[libs/gl.git] / source / core / vertexsetup.h
1 #ifndef MSP_GL_VERTEXSETUP_H_
2 #define MSP_GL_VERTEXSETUP_H_
3
4 #include "datatype.h"
5 #include "vertexformat.h"
6 #include "vertexsetup_backend.h"
7
8 namespace Msp {
9 namespace GL {
10
11 class Buffer;
12 class VertexArray;
13
14 /**
15 Combines a VertexArray with an index buffer.  This wraps OpenGL's vertex array
16 objects.  Intended for internal use.
17 */
18 class VertexSetup: public VertexSetupBackend
19 {
20         friend VertexSetupBackend;
21
22 private:
23         enum ComponentMask
24         {
25                 VERTEX_ARRAY = 1,
26                 INSTANCE_ARRAY = 2,
27                 INDEX_BUFFER = 4
28         };
29
30         mutable unsigned dirty = 0;
31         const VertexArray *vertex_array = 0;
32         VertexFormat vertex_format;
33         const VertexArray *inst_array = 0;
34         VertexFormat inst_format;
35         const Buffer *index_buffer = 0;
36         DataType index_type = UNSIGNED_SHORT;
37
38 public:
39         void set_format(const VertexFormat &);
40         void set_format_instanced(const VertexFormat &, const VertexFormat &);
41
42         void set_vertex_array(const VertexArray &);
43         void set_instance_array(const VertexArray &);
44         void set_index_buffer(const Buffer &, DataType);
45         const VertexArray *get_vertex_array() const { return vertex_array; }
46         const VertexArray *get_instance_array() const { return inst_array; }
47         const Buffer *get_index_buffer() const { return index_buffer; }
48         DataType get_index_type() const { return index_type; }
49
50 private:
51         static bool verify_format(const VertexFormat &);
52         void update() const;
53
54 public:
55         void refresh() const { if(dirty) update(); }
56
57         void unload();
58
59         using VertexSetupBackend::set_debug_name;
60 };
61
62 } // namespace GL
63 } // namespace Msp
64
65 #endif