/** * Copyright (c) 2025 Dominic Masters * * This software is released under the MIT License. * https://opensource.org/licenses/MIT */ #include "quad.h" #include "assert/assert.h" #include "debug/debug.h" mesh_t QUAD_MESH_SIMPLE; meshvertex_t QUAD_MESH_SIMPLE_VERTICES[QUAD_VERTEX_COUNT] = { { .color = COLOR_WHITE_4B, .uv = { 0.0f, 0.0f }, .pos = { 0.0f, 0.0f, 0.0f } }, { .color = COLOR_WHITE_4B, .uv = { 1.0f, 0.0f }, .pos = { 1.0f, 0.0f, 0.0f } }, { .color = COLOR_WHITE_4B, .uv = { 1.0f, 1.0f }, .pos = { 1.0f, 1.0f, 0.0f } }, { .color = COLOR_WHITE_4B, .uv = { 0.0f, 0.0f }, .pos = { 0.0f, 0.0f, 0.0f } }, { .color = COLOR_WHITE_4B, .uv = { 1.0f, 1.0f }, .pos = { 1.0f, 1.0f, 0.0f } }, { .color = COLOR_WHITE_4B, .uv = { 0.0f, 1.0f }, .pos = { 0.0f, 1.0f, 0.0f } } }; void quadInit() { meshInit( &QUAD_MESH_SIMPLE, QUAD_PRIMITIVE_TYPE, QUAD_VERTEX_COUNT, QUAD_MESH_SIMPLE_VERTICES ); } void quadBuffer( meshvertex_t *vertices, const float_t minX, const float_t minY, const float_t maxX, const float_t maxY, const color_t color, const float_t u0, const float_t v0, const float_t u1, const float_t v1 ) { const float_t z = 0.0f; // Z coordinate for 2D rendering assertNotNull(vertices, "Vertices cannot be NULL"); // First triangle vertices[0].color = color; vertices[0].uv[0] = u0; vertices[0].uv[1] = v1; vertices[0].pos[0] = minX; vertices[0].pos[1] = maxY; vertices[0].pos[2] = z; vertices[1].color = color; vertices[1].uv[0] = u1; vertices[1].uv[1] = v0; vertices[1].pos[0] = maxX; vertices[1].pos[1] = minY; vertices[1].pos[2] = z; vertices[2].color = color; vertices[2].uv[0] = u0; vertices[2].uv[1] = v0; vertices[2].pos[0] = minX; vertices[2].pos[1] = minY; vertices[2].pos[2] = z; // Second triangle vertices[3].color = color; vertices[3].uv[0] = u0; vertices[3].uv[1] = v1; vertices[3].pos[0] = minX; vertices[3].pos[1] = maxY; vertices[3].pos[2] = z; vertices[4].color = color; vertices[4].uv[0] = u1; vertices[4].uv[1] = v1; vertices[4].pos[0] = maxX; vertices[4].pos[1] = maxY; vertices[4].pos[2] = z; vertices[5].color = color; vertices[5].uv[0] = u1; vertices[5].uv[1] = v0; vertices[5].pos[0] = maxX; vertices[5].pos[1] = minY; vertices[5].pos[2] = z; } void quadBuffer3D( meshvertex_t *vertices, const vec3 min, const vec3 max, const color_t color, const vec2 uvMin, const vec2 uvMax ) { assertNotNull(vertices, "Vertices cannot be NULL"); assertNotNull(min, "Min vector cannot be NULL"); assertNotNull(max, "Max vector cannot be NULL"); assertNotNull(uvMin, "UV Min vector cannot be NULL"); assertNotNull(uvMax, "UV Max vector cannot be NULL"); // First triangle vertices[0].color = color; vertices[0].uv[0] = uvMin[0]; vertices[0].uv[1] = uvMin[1]; vertices[0].pos[0] = min[0]; vertices[0].pos[1] = min[1]; vertices[0].pos[2] = min[2]; vertices[1].color = color; vertices[1].uv[0] = uvMax[0]; vertices[1].uv[1] = uvMin[1]; vertices[1].pos[0] = max[0]; vertices[1].pos[1] = min[1]; vertices[1].pos[2] = min[2]; vertices[2].color = color; vertices[2].uv[0] = uvMax[0]; vertices[2].uv[1] = uvMax[1]; vertices[2].pos[0] = max[0]; vertices[2].pos[1] = max[1]; vertices[2].pos[2] = min[2]; // Second triangle vertices[3].color = color; vertices[3].uv[0] = uvMin[0]; vertices[3].uv[1] = uvMin[1]; vertices[3].pos[0] = min[0]; vertices[3].pos[1] = min[1]; vertices[3].pos[2] = min[2]; vertices[4].color = color; vertices[4].uv[0] = uvMax[0]; vertices[4].uv[1] = uvMax[1]; vertices[4].pos[0] = max[0]; vertices[4].pos[1] = max[1]; vertices[4].pos[2] = min[2]; vertices[5].color = color; vertices[5].uv[0] = uvMin[0]; vertices[5].uv[1] = uvMax[1]; vertices[5].pos[0] = min[0]; vertices[5].pos[1] = max[1]; vertices[5].pos[2] = min[2]; }