// Luanti // SPDX-License-Identifier: LGPL-2.1-or-later // Copyright (C) 2018 numzero, Lobachevskiy Vitaliy #pragma once #include #include #include "irrlichttypes.h" #include "irr_v3d.h" #include #include "client/tile.h" struct PreMeshBuffer { TileLayer layer; std::vector indices; std::vector vertices; PreMeshBuffer() = default; explicit PreMeshBuffer(const TileLayer &layer) : layer(layer) {} }; struct MeshCollector { std::array, MAX_TILE_LAYERS> prebuffers; // bounding sphere radius and center f32 m_bounding_radius_sq = 0.0f; v3f m_center_pos; v3f offset; // center_pos: pos to use for bounding-sphere, in BS-space // offset: offset added to vertices MeshCollector(const v3f center_pos, v3f offset = v3f()) : m_center_pos(center_pos), offset(offset) {} void append(const TileSpec &material, const video::S3DVertex *vertices, u32 numVertices, const u16 *indices, u32 numIndices); private: void append(const TileLayer &material, const video::S3DVertex *vertices, u32 numVertices, const u16 *indices, u32 numIndices, u8 layernum, bool use_scale = false); PreMeshBuffer &findBuffer(const TileLayer &layer, u8 layernum, u32 numVertices); };