]> git.tdb.fi Git - libs/gl.git/blobdiff - source/backends/vulkan/structurebuilder.h
Initial implementation of Vulkan backend
[libs/gl.git] / source / backends / vulkan / structurebuilder.h
diff --git a/source/backends/vulkan/structurebuilder.h b/source/backends/vulkan/structurebuilder.h
new file mode 100644 (file)
index 0000000..f59153f
--- /dev/null
@@ -0,0 +1,36 @@
+#ifndef MSP_GL_VULKAN_STRUCTUREBUILDER_H_
+#define MSP_GL_VULKAN_STRUCTUREBUILDER_H_
+
+#include <cstdlib>
+#include <vector>
+
+namespace Msp {
+namespace GL {
+
+class StructureBuilder
+{
+private:
+       struct Part
+       {
+               std::size_t offset = 0;
+               void *pointer = 0;
+       };
+
+       std::vector<char> &storage;
+       std::vector<Part> parts;
+
+public:
+       StructureBuilder(std::vector<char> &, unsigned);
+
+       template<typename T>
+       T *&add(std::size_t count = 1)
+       { return reinterpret_cast<T *&>(add(sizeof(T)*count, alignof(T))); }
+
+private:
+       void *&add(std::size_t, std::size_t);
+};
+
+} // namespace GL
+} // namespace Msp
+
+#endif