blob: d160b7e932423fe9173660f4cd180d8e56891b5e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
#pragma once
#include "core/math/constexpr.hh"
#include "shared/world/voxel_registry.hh"
namespace world
{
// [0] XXXXXXXXYYYYYYYYZZZZZZZZWWWWHHHH
// [1] FFFFTTTTTTTTTTTAAAAA------------
using ChunkQuad = std::array<std::uint32_t, 2>;
} // namespace world
namespace world
{
constexpr inline static ChunkQuad make_chunk_quad(const glm::fvec3& position, const glm::fvec2& size, voxel_facing facing,
std::size_t texture, std::size_t frames)
{
ChunkQuad result = {};
result[0] = 0x00000000;
result[1] = 0x00000000;
// [0] XXXXXXXXYYYYYYYYZZZZZZZZ--------
result[0] |= (0x000000FFU & static_cast<std::uint32_t>(position.x * 16.0f)) << 24U;
result[0] |= (0x000000FFU & static_cast<std::uint32_t>(position.y * 16.0f)) << 16U;
result[0] |= (0x000000FFU & static_cast<std::uint32_t>(position.z * 16.0f)) << 8U;
// [0] ------------------------WWWWHHHH
result[0] |= (0x0000000FU & static_cast<std::uint32_t>(size.x * 16.0f - 1.0f)) << 4U;
result[0] |= (0x0000000FU & static_cast<std::uint32_t>(size.y * 16.0f - 1.0f));
// [1] FFFF----------------------------
result[1] |= (0x0000000FU & static_cast<std::uint32_t>(facing)) << 28U;
// [1] ----TTTTTTTTTTTAAAAA------------
result[1] |= (0x000007FFU & static_cast<std::uint32_t>(texture)) << 17U;
result[1] |= (0x0000001FU & static_cast<std::uint32_t>(frames)) << 12U;
return result;
}
} // namespace world
|