A 3D game engine from scratch.
at main 131 lines 3.8 kB view raw
1// (c) 2020 Vlad-Stefan Harbuz <vlad@vladh.net> 2 3#include "debug.hpp" 4#include "util.hpp" 5#include "logs.hpp" 6#include "models.hpp" 7 8 9drawable::State *drawable::state = nullptr; 10 11 12char const * 13drawable::render_pass_to_string(drawable::Pass render_pass) 14{ 15 if (render_pass == drawable::Pass::none) { 16 return "none"; 17 } else if (render_pass == drawable::Pass::shadowcaster) { 18 return "shadowcaster"; 19 } else if (render_pass == drawable::Pass::deferred) { 20 return "deferred"; 21 } else if (render_pass == drawable::Pass::forward_depth) { 22 return "forward_depth"; 23 } else if (render_pass == drawable::Pass::forward_nodepth) { 24 return "forward_nodepth"; 25 } else if (render_pass == drawable::Pass::forward_skybox) { 26 return "forward_skybox"; 27 } else if (render_pass == drawable::Pass::lighting) { 28 return "lighting"; 29 } else if (render_pass == drawable::Pass::postprocessing) { 30 return "postprocessing"; 31 } else if (render_pass == drawable::Pass::preblur) { 32 return "preblur"; 33 } else if (render_pass == drawable::Pass::blur1) { 34 return "blur1"; 35 } else if (render_pass == drawable::Pass::blur2) { 36 return "blur2"; 37 } else if (render_pass == drawable::Pass::renderdebug) { 38 return "renderdebug"; 39 } else { 40 logs::error("Don't know how to convert drawable::Pass to string: %d", render_pass); 41 return "<unknown>"; 42 } 43} 44 45 46drawable::Pass 47drawable::render_pass_from_string(const char* str) 48{ 49 if (pstr_eq(str, "none")) { 50 return drawable::Pass::none; 51 } else if (pstr_eq(str, "shadowcaster")) { 52 return drawable::Pass::shadowcaster; 53 } else if (pstr_eq(str, "deferred")) { 54 return drawable::Pass::deferred; 55 } else if (pstr_eq(str, "forward_depth")) { 56 return drawable::Pass::forward_depth; 57 } else if (pstr_eq(str, "forward_nodepth")) { 58 return drawable::Pass::forward_nodepth; 59 } else if (pstr_eq(str, "forward_skybox")) { 60 return drawable::Pass::forward_skybox; 61 } else if (pstr_eq(str, "lighting")) { 62 return drawable::Pass::lighting; 63 } else if (pstr_eq(str, "postprocessing")) { 64 return drawable::Pass::postprocessing; 65 } else if (pstr_eq(str, "preblur")) { 66 return drawable::Pass::preblur; 67 } else if (pstr_eq(str, "blur1")) { 68 return drawable::Pass::blur1; 69 } else if (pstr_eq(str, "blur2")) { 70 return drawable::Pass::blur2; 71 } else if (pstr_eq(str, "renderdebug")) { 72 return drawable::Pass::renderdebug; 73 } else { 74 logs::fatal("Could not parse drawable::Pass: %s", str); 75 return drawable::Pass::none; 76 } 77} 78 79 80bool 81drawable::is_component_valid(drawable::Component *drawable_component) 82{ 83 return geom::is_mesh_valid(&drawable_component->mesh); 84} 85 86 87void 88drawable::destroy_component(drawable::Component *drawable_component) 89{ 90 if (!is_component_valid(drawable_component)) { 91 return; 92 } 93 geom::destroy_mesh(&drawable_component->mesh); 94} 95 96 97Array<drawable::Component> * 98drawable::get_components() 99{ 100 return &drawable::state->components; 101} 102 103 104drawable::Component * 105drawable::get_component(entities::Handle entity_handle) 106{ 107 return drawable::state->components[entity_handle]; 108} 109 110 111u32 112drawable::get_last_drawn_shader_program() 113{ 114 return drawable::state->last_drawn_shader_program; 115} 116 117 118void 119drawable::set_last_drawn_shader_program(u32 val) 120{ 121 drawable::state->last_drawn_shader_program = val; 122} 123 124 125void 126drawable::init(drawable::State *drawable_state, memory::Pool *asset_memory_pool) 127{ 128 drawable::state = drawable_state; 129 drawable::state->components = Array<drawable::Component>( 130 asset_memory_pool, MAX_N_ENTITIES, "drawable_components", true, 1); 131}