+#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