// Copyright (c) 2021 Dominic Masters
// 
// This software is released under the MIT License.
// https://opensource.org/licenses/MIT

#pragma once
#include <dawn/dawn.h>
#include "../primitive.h"

#define QUAD_VERTICE_COUNT 4
#define QUAD_INDICE_COUNT 6

/**
 * Buffers the vertices of a quad onto a primitive.
 * 
 * @param primitive The primitive to buffer to.
 * @param z The Z axis coordinate of the quad.
 * @param x0 The X lower coordinate.
 * @param y0 The Y lower coordinate.
 * @param u0 The X lower texture coordinate.
 * @param v0 The Y lower texture coordinate.
 * @param x1 The X higher coordinate.
 * @param y1 The Y higher coordinate.
 * @param u1 The X higher texture coordinate.
 * @param v1 The Y higher texture coordinate.
 * @param verticeStart Start vertice to buffer to.
 * @param indiceStart Start indice to buffer to.
 */
void quadBuffer(primitive_t *primitive, float z,
  float x0, float y0, float u0, float v0,
  float x1, float y1, float u1, float v1,
  int32_t verticeStart, int32_t indiceStart
);

/**
 * Creates a new quad primitive.
 * 
 * @param primitive Primitive to turn into a quad.
 * @param z The Z axis coordinate of the quad.
 * @param x0 The X lower coordinate.
 * @param y0 The Y lower coordinate.
 * @param u0 The X lower texture coordinate.
 * @param v0 The Y lower texture coordinate.
 * @param x1 The X higher coordinate.
 * @param y1 The Y higher coordinate.
 * @param u1 The X higher texture coordinate.
 * @param v1 The Y higher texture coordinate.
 */
void quadInit(primitive_t *primitive, float z,
  float x0, float y0, float u0, float v0,
  float x1, float y1, float u1, float v1
);