#pragma once

#include <cstddef>
#include <glm/vec2.hpp>
#include <glm/vec3.hpp>
#include <glm/vec4.hpp>

#include <cstdint>
#include <vector>

namespace kuiper
{

struct vertex {
    glm::vec3 position; // (x, y, z), float
    glm::vec3 normal;   // (x, y, z), float
    glm::vec4 tangent;  // (x, y, z, w), float
    glm::vec2 uv;       // (x, y) float
};

enum class primitive_type : std::uint8_t {
    none = 0,
    triangles
};

} // namespace kuiper

namespace kuiper::resource
{

struct primitive {
    primitive_type             type {primitive_type::none};
    std::vector<vertex>        vertices {};
    std::vector<std::uint32_t> indices {};
    std::size_t                material_idx {};
};

} // namespace kuiper::resource
