// Copyright (c) 2022 Dominic Masters // // This software is released under the MIT License. // https://opensource.org/licenses/MIT #pragma once #include "display/mesh/Mesh.hpp" #define QUAD_VERTICE_COUNT 4 #define QUAD_INDICE_COUNT 6 #define QUAD_INDICE_PER_QUAD 2 namespace Dawn { class QuadMesh { public: /** * Buffers the vertices of a quad onto a primitive. * * @param mesh The primitive to buffer to. * @param xy0 The lower X and Y coordinate. * @param uv0 The lower Xand Y texture coordinate. * @param xy1 The higher X and Y coordinate. * @param uv1 The higher X and Y texture coordinate. * @param z The Z position of the coordinates. * @param verticeStart Start vertice to buffer to. * @param indiceStart Start indice to buffer to. */ static void bufferQuadMeshWithZ( Mesh *mesh, glm::vec2 xy0, glm::vec2 uv0, glm::vec2 xy1, glm::vec2 uv1, float_t z, int32_t verticeStart, int32_t indiceStart ); /** * Buffers the vertices of a quad onto a primitive. * * @param mesh The primitive to buffer to. * @param xy0 The lower X and Y coordinate. * @param uv0 The lower Xand Y texture coordinate. * @param xy1 The higher X and Y coordinate. * @param uv1 The higher X and Y texture coordinate. * @param verticeStart Start vertice to buffer to. * @param indiceStart Start indice to buffer to. */ static void bufferQuadMesh( Mesh *mesh, glm::vec2 xy0, glm::vec2 uv0, glm::vec2 xy1, glm::vec2 uv1, int32_t verticeStart, int32_t indiceStart ); /** * Buffers texture coordinates on to an already initialized quad mesh. * * @param mesh Mesh to buffer the texture coordinates on to. * @param uv0 Lower X and Y coordinates. * @param uv1 Upper X and Y coordinates. * @param verticeStart Start vertice to buffer in to. */ static void bufferCoordinates( Mesh *mesh, glm::vec2 uv0, glm::vec2 uv1, int32_t verticeStart ); /** * Buffers the positions of a quad onto a primitive. * * @param mesh The primitive to buffer to. * @param xy0 The lower X and Y coordinate. * @param xy1 The higher X and Y coordinate. * @param verticeStart Start vertice to buffer to. */ static void bufferPositions( Mesh *mesh, glm::vec2 xy0, glm::vec2 xy1, int32_t verticeStart ); /** * Initializes a mesh to be a single quad. * * @param mesh The primitive to buffer to. * @param xy0 The lower X and Y coordinate. * @param uv0 The lower Xand Y texture coordinate. * @param xy1 The higher X and Y coordinate. * @param uv1 The higher X and Y texture coordinate. * @param z The Z position of the coordinates. */ static void initQuadMesh( Mesh *mesh, glm::vec2 xy0, glm::vec2 uv0, glm::vec2 xy1, glm::vec2 uv1, float_t z ); }; }