X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fgraphics%2FPrimitiveMesh.hpp;fp=src%2Fgraphics%2FPrimitiveMesh.hpp;h=1aa3cce58acf417e6605fe82f99c2d473845ed1c;hb=75172fd735e34082c34b47ae7c194445b53038d9;hp=0000000000000000000000000000000000000000;hpb=57d3e33b47c92d56de4007e23800d9bcdb353463;p=blank.git diff --git a/src/graphics/PrimitiveMesh.hpp b/src/graphics/PrimitiveMesh.hpp new file mode 100644 index 0000000..1aa3cce --- /dev/null +++ b/src/graphics/PrimitiveMesh.hpp @@ -0,0 +1,72 @@ +#ifndef BLANK_GRAPHICS_PRIMITIVEMESH_HPP_ +#define BLANK_GRAPHICS_PRIMITIVEMESH_HPP_ + +#include "VertexArray.hpp" + +#include +#include +#include + + +namespace blank { + +class PrimitiveMesh { + +public: + using Position = glm::vec3; + using Color = glm::vec4; + using Index = unsigned short; + + using Positions = std::vector; + using Colors = std::vector; + using Indices = std::vector; + + enum Attribute { + ATTRIB_VERTEX, + ATTRIB_COLOR, + ATTRIB_INDEX, + ATTRIB_COUNT, + }; + + struct Buffer { + + Positions vertices; + Colors colors; + Indices indices; + + void Clear() noexcept { + vertices.clear(); + colors.clear(); + indices.clear(); + } + + void Reserve(size_t p, size_t i) { + vertices.reserve(p); + colors.reserve(p); + indices.reserve(i); + } + + void FillRect( + float w, float h, + const glm::vec4 &color = glm::vec4(0.0f), + const glm::vec2 &pivot = glm::vec2(0.0f) + ); + + }; + + using VAO = VertexArray; + +public: + void Update(const Buffer &) noexcept; + + void DrawLines() noexcept; + void DrawTriangles() noexcept; + +private: + VAO vao; + +}; + +} + +#endif