#pragma once

#include <cstdint>

/*
    Воксели рендерятся точками, которые распаковываются в квадратные плоскости

    В чанке по оси 256 вокселей, и 257 позиций вершин (включая дальнюю границу чанка)
    9 бит на позицию *3 оси = 27 бит
    Указание материала 16 бит
*/

namespace LV::Client::VK {

struct VoxelVertexPoint {
    uint32_t 
        FX : 9, FY : 9, FZ : 9, // Позиция
        Place : 3,              // Положение распространения xz, xy, zy, и обратные
        N1 : 1,                 // Не занято
        LS : 1,                 // Масштаб карты освещения (1м/16 или 1м)
        TX : 8, TY : 8,         // Размер+1
        VoxMtl : 16,            // Материал вокселя DefVoxelId_t
        LU : 14, LV : 14,       // Позиция на карте освещения
        N2 : 2;                 // Не занято
};

/*
    Максимальный размер меша 14^3 м от центра ноды
    Координатное пространство то же, что и у вокселей + 8 позиций с двух сторон
    Рисуется полигонами
*/

struct NodeVertexStatic {
    uint32_t
        FX : 9, FY : 9, FZ : 9, // Позиция -15 -120 ~ 240 360 +15 / 16
        N1 : 4,                 // Не занято
        LS : 1,                 // Масштаб карты освещения (1м/16 или 1м)
        Tex : 18,               // Текстура
        N2 : 14,                // Не занято
        TU : 16, TV : 16;       // UV на текстуре
};

}