Luanti 5.15.0-dev
 
Loading...
Searching...
No Matches
collector.h
Go to the documentation of this file.
1// Luanti
2// SPDX-License-Identifier: LGPL-2.1-or-later
3// Copyright (C) 2018 numzero, Lobachevskiy Vitaliy <numzer0@yandex.ru>
4
5#pragma once
6#include <array>
7#include <vector>
8#include "irrlichttypes.h"
9#include "irr_v3d.h"
10#include <S3DVertex.h>
11#include "client/tile.h"
12
14{
16 std::vector<u16> indices;
17 std::vector<video::S3DVertex> vertices;
18
19 PreMeshBuffer() = default;
20 explicit PreMeshBuffer(const TileLayer &layer) : layer(layer) {}
21
22 bool empty() const {
23 return indices.empty();
24 }
25
28 {
29 video::SColor tc = layer.color;
30 if (tc == video::SColor(0xFFFFFFFF))
31 return;
32 for (auto &vertex : vertices) {
33 video::SColor *c = &vertex.Color;
34 c->set(c->getAlpha(),
35 c->getRed() * tc.getRed() / 255U,
36 c->getGreen() * tc.getGreen() / 255U,
37 c->getBlue() * tc.getBlue() / 255U);
38 }
39 }
40
43 bool append(const PreMeshBuffer &other);
44};
45
47{
48 std::array<std::vector<PreMeshBuffer>, MAX_TILE_LAYERS> prebuffers;
49 // bounding sphere radius and center
53
54 // center_pos: pos to use for bounding-sphere, in BS-space
55 // offset: offset added to vertices
56 MeshCollector(const v3f center_pos, v3f offset = v3f()) : m_center_pos(center_pos), offset(offset) {}
57
58 void append(const TileSpec &material,
59 const video::S3DVertex *vertices, u32 numVertices,
60 const u16 *indices, u32 numIndices);
61
62private:
63 void append(const TileLayer &material,
64 const video::S3DVertex *vertices, u32 numVertices,
65 const u16 *indices, u32 numIndices,
66 u8 layernum);
67
68 PreMeshBuffer &findBuffer(const TileLayer &layer, u8 layernum, u32 numVertices);
69};
core::vector3df v3f
Definition irr_v3d.h:11
Definition collector.h:47
void append(const TileSpec &material, const video::S3DVertex *vertices, u32 numVertices, const u16 *indices, u32 numIndices)
Definition collector.cpp:23
MeshCollector(const v3f center_pos, v3f offset=v3f())
Definition collector.h:56
v3f offset
Definition collector.h:52
v3f m_center_pos
Definition collector.h:51
std::array< std::vector< PreMeshBuffer >, MAX_TILE_LAYERS > prebuffers
Definition collector.h:48
PreMeshBuffer & findBuffer(const TileLayer &layer, u8 layernum, u32 numVertices)
Definition collector.cpp:54
f32 m_bounding_radius_sq
Definition collector.h:50
Definition collector.h:14
std::vector< video::S3DVertex > vertices
Definition collector.h:17
TileLayer layer
Definition collector.h:15
PreMeshBuffer(const TileLayer &layer)
Definition collector.h:20
bool empty() const
Definition collector.h:22
std::vector< u16 > indices
Definition collector.h:16
bool append(const PreMeshBuffer &other)
Append another buffer to this one.
Definition collector.cpp:9
void applyTileColor()
Colorizes vertices as indicated by tile layer.
Definition collector.h:27
PreMeshBuffer()=default
Defines a layer of a tile.
Definition tile.h:75
video::SColor color
Definition tile.h:164
Definition tile.h:233
#define MAX_TILE_LAYERS
We have two tile layers: layer 0 = base layer 1 = overlay.
Definition tile.h:71