]> git.tdb.fi Git - libs/gl.git/blob - source/backends/vulkan/structurebuilder.h
Initial implementation of Vulkan backend
[libs/gl.git] / source / backends / vulkan / structurebuilder.h
1 #ifndef MSP_GL_VULKAN_STRUCTUREBUILDER_H_
2 #define MSP_GL_VULKAN_STRUCTUREBUILDER_H_
3
4 #include <cstdlib>
5 #include <vector>
6
7 namespace Msp {
8 namespace GL {
9
10 class StructureBuilder
11 {
12 private:
13         struct Part
14         {
15                 std::size_t offset = 0;
16                 void *pointer = 0;
17         };
18
19         std::vector<char> &storage;
20         std::vector<Part> parts;
21
22 public:
23         StructureBuilder(std::vector<char> &, unsigned);
24
25         template<typename T>
26         T *&add(std::size_t count = 1)
27         { return reinterpret_cast<T *&>(add(sizeof(T)*count, alignof(T))); }
28
29 private:
30         void *&add(std::size_t, std::size_t);
31 };
32
33 } // namespace GL
34 } // namespace Msp
35
36 #endif