A 3D game engine from scratch.
1// (c) 2020 Vlad-Stefan Harbuz <vlad@vladh.net>
2
3#pragma once
4
5#include "spatial.hpp"
6#include "shaders.hpp"
7#include "types.hpp"
8
9class debugdraw {
10public:
11 static constexpr u32 MAX_N_VERTICES = 2048;
12 static constexpr u32 VERTEX_LENGTH = 7;
13 static constexpr size_t VERTEX_SIZE = sizeof(f32) * VERTEX_LENGTH;
14
15 struct DebugDrawVertex {
16 v3 position;
17 v4 color;
18 };
19
20 struct State {
21 shaders::Asset shader_asset;
22 u32 vao;
23 u32 vbo;
24 DebugDrawVertex vertices[MAX_N_VERTICES];
25 u32 n_vertices_pushed;
26 };
27
28 static void draw_line(v3 start_pos, v3 end_pos, v4 color);
29 static void draw_ray(spatial::Ray *ray, f32 length, v4 color);
30 static void draw_quad(
31 v3 p1, // clockwise: top left
32 v3 p2, // top right
33 v3 p3, // bottom right
34 v3 p4, // bottom left
35 v4 color
36 );
37 static void draw_box(
38 v3 p1, // clockwise top face: top left
39 v3 p2, // top right
40 v3 p3, // bottom right
41 v3 p4, // top left
42 v3 p5, // clockwise bottom face: top left
43 v3 p6, // top right
44 v3 p7, // bottom right
45 v3 p8, // top left
46 v4 color
47 );
48 static void draw_obb(spatial::Obb *obb, v4 color);
49 static void draw_point(v3 position, f32 size, v4 color);
50 static void clear();
51 static void render();
52 static void init(debugdraw::State *debug_draw_state, memory::Pool *memory_pool);
53
54private:
55 static void push_vertices(DebugDrawVertex vertices[], u32 n_vertices);
56
57 static debugdraw::State *state;
58};