Monad Engine da02fba2
> Undercity Codex_
Loading...
Searching...
No Matches
Builder.cpp
Go to the documentation of this file.
1#include <memory>
2
3#include "render/Builder.h"
4
5#include "render/Mesh.h"
6
7namespace mnd
8{
9
10std::shared_ptr<Mesh> MeshData::buildMesh()
11{
12 return std::make_shared<Mesh>(layout, vertices, indices);
13}
14
16{
17 MeshData data;
18
19 // clang-format off
20 data.vertices = {
21 // Front face
22 0.5f, 0.5f, 0.5f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f,
23 -0.5f, 0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f,
24 -0.5f, -0.5f, 0.5f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f,
25 0.5f, -0.5f, 0.5f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f,
26
27 // Top face
28 0.5f, 0.5f, -0.5f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f,
29 -0.5f, 0.5f, -0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f,
30 -0.5f, 0.5f, 0.5f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f,
31 0.5f, 0.5f, 0.5f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f,
32
33 // Right face
34 0.5f, 0.5f, -0.5f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f,
35 0.5f, 0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f,
36 0.5f, -0.5f, 0.5f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f,
37 0.5f, -0.5f, -0.5f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f,
38
39 // Left face
40 -0.5f, 0.5f, 0.5f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f,
41 -0.5f, 0.5f, -0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f,
42 -0.5f, -0.5f, -0.5f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f,
43 -0.5f, -0.5f, 0.5f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f,
44
45 // Bottom face
46 0.5f, -0.5f, 0.5f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f,
47 -0.5f, -0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f,
48 -0.5f, -0.5f, -0.5f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f,
49 0.5f, -0.5f, -0.5f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f,
50
51 // Back face
52 -0.5f, 0.5f, -0.5f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f,
53 0.5f, 0.5f, -0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f,
54 0.5f, -0.5f, -0.5f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f,
55 -0.5f, -0.5f, -0.5f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f
56 };
57 // clang-format on
58
59 // clang-format off
60 data.indices = {
61 // front face
62 0, 1, 2,
63 0, 2, 3,
64 // top face
65 4, 5, 6,
66 4, 6, 7,
67 // right face
68 8, 9, 10,
69 8, 10, 11,
70 // left face
71 12, 13, 14,
72 12, 14, 15,
73 // bottom face
74 16, 17, 18,
75 16, 18, 19,
76 // back face
77 20, 21, 22,
78 20, 22, 23
79 };
80
81 // clang-format off
82
83 // Postion
84 data.layout.elements.push_back({0, 3, GL_FLOAT, 0});
85
86 // Color
87 data.layout.elements.push_back({1, 3, GL_FLOAT, sizeof(f32) * 3});
88
89 // UV
90 data.layout.elements.push_back({2, 2, GL_FLOAT, sizeof(f32) * 6});
91
92 data.layout.stride = sizeof(f32) * 8;
93
94 return data;
95}
96
98{
99 MeshData data;
100
101 f32 halfW = width / 2.0F;
102 f32 halfH = height / 2.0F;
103
104 // clang-format off
105 data.vertices = {
106 halfW, halfH, 0.0F, 1.0F, 0.0F, 0.0F, // top-right
107 -halfW, halfH, 0.0F, 0.0F, 1.0F, 0.0F, // top-left
108 -halfW, -halfH, 0.0F, 0.0F, 0.0F, 1.0F, // bottom-left
109 halfW, -halfH, 0.0f, 1.0f, 1.0f, 0.0f // bottom-right
110 };
111 // clang-format on
112
113 data.indices = {0, 1, 2, 0, 2, 3};
114
115 // Postion
116 data.layout.elements.push_back({0, 3, GL_FLOAT, 0});
117 // Color
118 data.layout.elements.push_back({1, 3, GL_FLOAT, sizeof(f32) * 3});
119 data.layout.stride = sizeof(f32) * 6;
120
121 return data;
122}
123
125{
126 MeshData data;
127
128 // clang-format off
129 data.vertices = {
130 -size, -size, 0.0F, 1.0F, 0.0F, 0.0F, //bottom-left, red
131 size, -size, 0.0F, 0.0F, 1.0F, 0.0F, //bottom-right, green
132 0.0F, size, 0.0F, 0.0F, 0.0F, 1.0F, //top, blue
133 };
134 // clang-format on
135
136 data.indices = {
137 0,
138 1,
139 2,
140 };
141
142 // Postion
143 data.layout.elements.push_back({0, 3, GL_FLOAT, 0});
144 // Color
145 data.layout.elements.push_back({1, 3, GL_FLOAT, sizeof(f32) * 3});
146 data.layout.stride = sizeof(f32) * 6;
147
148 return data;
149}
150
152{
153 MeshData data;
154 // clang-format off
155 data.vertices = {
156 -1.0F, -1.0F, 0.0F, 1.0F, 1.0F, 1.0F, // bottom-left
157 1.0F, -1.0F, 0.0F, 1.0F, 1.0F, 1.0F, // bottom-right
158 1.0F, 1.0F, 0.0F, 1.0F, 1.0F, 1.0F, // top-right
159 -1.0F, 1.0F, 0.0F, 1.0F, 1.0F, 1.0F // top-left
160 };
161 // clang-format on
162 data.indices = {0, 1, 2, 0, 2, 3};
163 // Position
164 data.layout.elements.push_back({0, 3, GL_FLOAT, 0});
165 // Color (unused by shader effect, but keeps layout consistent)
166 data.layout.elements.push_back({1, 3, GL_FLOAT, sizeof(f32) * 3});
167 data.layout.stride = sizeof(f32) * 6;
168 return data;
169}
170} // namespace mnd
Static factory methods for creating common primitive mesh shapes.
static MeshData CreateCube(f32 width, f32 height)
Create a box (6 faces) with the given dimensions.
Definition Builder.cpp:15
static MeshData CreateFullscreenQuad()
Create a clip-space quad covering the entire screen.
Definition Builder.cpp:151
static MeshData CreateRectangle(f32 width, f32 height)
Create a flat quad with the given dimensions.
Definition Builder.cpp:97
static MeshData CreateTriangle(f32 size)
Create an equilateral triangle centred at the origin.
Definition Builder.cpp:124
float f32
32-bit IEEE float — the standard GL scalar type.
Definition Types.h:40
CPU-side mesh bundle produced by Builder factory methods.
Definition Builder.h:44
std::vector< f32 > vertices
Interleaved vertex data (pos, normal, UV …).
Definition Builder.h:45
std::vector< u32 > indices
Triangle list indices (empty → non-indexed draw).
Definition Builder.h:46
std::shared_ptr< Mesh > buildMesh()
Upload this geometry to the GPU and return a renderable Mesh.
Definition Builder.cpp:10
VertexLayout layout
Attribute layout that matches the vertex data format.
Definition Builder.h:47
std::vector< VertexElement > elements
Ordered list of vertex attributes.
uint32_t stride
Total byte size of one vertex.