A 3D game engine from scratch.
at main 58 lines 1.6 kB view raw
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};