diff --git a/README b/README index 901eb2a..c14d5cc 100644 --- a/README +++ b/README @@ -46,32 +46,38 @@ _________________ .. 2.30 DONE Fix problems with texture units .. 2.31 CANCELED Draw light volumes .. 2.32 TODO Fix problems with frustrum culling -.. 2.33 TODO 2d drawing routines -.. 2.34 DONE Gui -.. 2.35 CANCELED Image based lighting? -.. 2.36 CANCELED Deferred rendering? -.. 2.37 TODO Fix mouse bugs on windows -.. 2.38 TODO Physics/Collision detection in 2d -.. 2.39 TODO Complete gui integration -.. 2.40 TODO Allow passsing base path as commandline argument? -.. 2.41 DONE Resizable framebuffers and textures -.. 2.42 DONE Support for multiple color attachments in framebuffers? -.. 2.43 TODO Multisampled textures and framebuffers -.. 2.44 DONE Better way to store and manage textures attached to framebuffers -.. 2.45 TODO Validate necessary assets at game launch -.. 2.46 TODO Variant type -.. 2.47 TODO Log and debug/stats output in gui -.. 2.48 TODO Editor -.. 2.49 TODO Event Subsystem -.. 2.50 TODO Keybindings for gui? -.. 2.51 DONE Compile and test on windows -.. 2.52 TODO Array based string type comptible with cstring(char*) -.. 2.53 DONE Fix mouse bugs -.. 2.54 DONE Fix -.. 2.55 TODO issues with opengl context showing 2.1 only -.. 2.56 TODO Improve this readme -.. 2.57 TODO ??? -.. 2.58 TODO Profit! +.. 2.33 TODO +.. 2.34 TODO +.. 2.35 TODO 2d drawing routines +.. 2.36 DONE Gui +.. 2.37 CANCELED Image based lighting? +.. 2.38 CANCELED Deferred rendering? +.. 2.39 TODO Fix mouse bugs on windows +.. 2.40 DONE Toggleable debug drawing for meshes +.. 2.41 TODO Interleaved vbos for meshes and changes to blender exporter accordingly +.. 2.42 TODO Enumerate and save all the uniform and attribute positions in shader when it is added and cache them in shader object? +.. 2.43 TODO Physics/Collision detection in 2d +.. 2.44 TODO Complete gui integration +.. 2.45 TODO Allow passsing base path as commandline argument? +.. 2.46 TODO Sprite sheet animations +.. 2.47 DONE Resizable framebuffers and textures +.. 2.48 DONE Support for multiple color attachments in framebuffers? +.. 2.49 TODO Multisampled textures and framebuffers +.. 2.50 DONE Better way to store and manage textures attached to framebuffers +.. 2.51 TODO Validate necessary assets at game launch +.. 2.52 TODO Variant type +.. 2.53 TODO Log and debug/stats output in gui +.. 2.54 TODO Editor +.. 2.55 TODO Event Subsystem +.. 2.56 TODO Keybindings for gui? +.. 2.57 DONE Compile and test on windows +.. 2.58 TODO Array based string type comptible with cstring(char*) +.. 2.59 DONE Fix mouse bugs +.. 2.60 DONE Fix +.. 2.61 TODO issues with opengl context showing 2.1 only +.. 2.62 TODO Improve this readme +.. 2.63 TODO ??? +.. 2.64 TODO Profit! 1 Project Symmetry @@ -288,45 +294,66 @@ _________________ 2.32 TODO Fix problems with frustrum culling ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +2.33 TODO +~~~~~~~~~~ + + +2.34 TODO +~~~~~~~~~~ + - Recalculate bounding boxes for rotated meshes? -2.33 TODO 2d drawing routines +2.35 TODO 2d drawing routines ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Sprite batching - - Debug drawing -2.34 DONE Gui +2.36 DONE Gui ~~~~~~~~~~~~~ - State "DONE" from "TODO" [2017-03-15 Wed 23:41] -2.35 CANCELED Image based lighting? +2.37 CANCELED Image based lighting? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - State "CANCELED" from "TODO" [2017-03-14 Tue 00:31] Not a requirement for current project -2.36 CANCELED Deferred rendering? +2.38 CANCELED Deferred rendering? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - State "CANCELED" from "TODO" [2017-02-26 Sun 01:49] Sticking with forward rendering for now and focusing on tools etc. -2.37 TODO Fix mouse bugs on windows +2.39 TODO Fix mouse bugs on windows ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -2.38 TODO Physics/Collision detection in 2d +2.40 DONE Toggleable debug drawing for meshes +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + - State "DONE" from "TODO" [2017-03-18 Sat 16:18] + + +2.41 TODO Interleaved vbos for meshes and changes to blender exporter accordingly +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +2.42 TODO Enumerate and save all the uniform and attribute positions in shader when it is added and cache them in shader object? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +2.43 TODO Physics/Collision detection in 2d ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -2.39 TODO Complete gui integration +2.44 TODO Complete gui integration ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ x Font selection x Font atlas proper cleanup @@ -334,89 +361,93 @@ _________________ - Custom rendering for gui -2.40 TODO Allow passsing base path as commandline argument? +2.45 TODO Allow passsing base path as commandline argument? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -2.41 DONE Resizable framebuffers and textures +2.46 TODO Sprite sheet animations +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +2.47 DONE Resizable framebuffers and textures ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - State "DONE" from "TODO" [2017-03-16 Thu 22:50] -2.42 DONE Support for multiple color attachments in framebuffers? +2.48 DONE Support for multiple color attachments in framebuffers? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - State "DONE" from "TODO" [2017-03-16 Thu 22:51] -2.43 TODO Multisampled textures and framebuffers +2.49 TODO Multisampled textures and framebuffers ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -2.44 DONE Better way to store and manage textures attached to framebuffers +2.50 DONE Better way to store and manage textures attached to framebuffers ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - State "DONE" from "TODO" [2017-03-16 Thu 22:51] -2.45 TODO Validate necessary assets at game launch +2.51 TODO Validate necessary assets at game launch ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -2.46 TODO Variant type +2.52 TODO Variant type ~~~~~~~~~~~~~~~~~~~~~~ -2.47 TODO Log and debug/stats output in gui +2.53 TODO Log and debug/stats output in gui ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -2.48 TODO Editor +2.54 TODO Editor ~~~~~~~~~~~~~~~~ -2.49 TODO Event Subsystem +2.55 TODO Event Subsystem ~~~~~~~~~~~~~~~~~~~~~~~~~ -2.50 TODO Keybindings for gui? +2.56 TODO Keybindings for gui? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -2.51 DONE Compile and test on windows +2.57 DONE Compile and test on windows ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - State "DONE" from "TODO" [2017-03-14 Tue 00:32] -2.52 TODO Array based string type comptible with cstring(char*) +2.58 TODO Array based string type comptible with cstring(char*) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -2.53 DONE Fix mouse bugs +2.59 DONE Fix mouse bugs ~~~~~~~~~~~~~~~~~~~~~~~~ - State "DONE" from "TODO" [2017-03-01 Wed 00:45] -2.54 DONE Fix +2.60 DONE Fix ~~~~~~~~~~~~~ -2.55 TODO issues with opengl context showing 2.1 only +2.61 TODO issues with opengl context showing 2.1 only ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - State "DONE" from "TODO" [2017-02-26 Sun 15:39] -2.56 TODO Improve this readme +2.62 TODO Improve this readme ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -2.57 TODO ??? +2.63 TODO ??? ~~~~~~~~~~~~~ -2.58 TODO Profit! +2.64 TODO Profit! ~~~~~~~~~~~~~~~~~ diff --git a/assets/shaders/debug.frag b/assets/shaders/debug.frag index f752302..bb86af5 100644 --- a/assets/shaders/debug.frag +++ b/assets/shaders/debug.frag @@ -1,10 +1,10 @@ //include version.glsl -uniform vec3 wireframe_color; +uniform vec3 debug_color; out vec4 frag_color; void main() { - frag_color = vec4(wireframe_color, 1.0); + frag_color = vec4(debug_color, 1.0); } diff --git a/orgfile.org b/orgfile.org index e67dd85..1897e81 100644 --- a/orgfile.org +++ b/orgfile.org @@ -81,10 +81,11 @@ All the code in this repository is under GPLv3, see LICENSE for more information - State "CANCELED" from "TODO" [2017-02-26 Sun 15:39] \\ Deferred rendering on hold for now. ** TODO Fix problems with frustrum culling +** TODO +** TODO - Recalculate bounding boxes for rotated meshes? ** TODO 2d drawing routines - Sprite batching -- Debug drawing ** DONE Gui - State "DONE" from "TODO" [2017-03-15 Wed 23:41] ** CANCELED Image based lighting? @@ -94,6 +95,10 @@ All the code in this repository is under GPLv3, see LICENSE for more information - State "CANCELED" from "TODO" [2017-02-26 Sun 01:49] \\ Sticking with forward rendering for now and focusing on tools etc. ** TODO Fix mouse bugs on windows +** DONE Toggleable debug drawing for meshes +- State "DONE" from "TODO" [2017-03-18 Sat 16:18] +** TODO Interleaved vbos for meshes and changes to blender exporter accordingly +** TODO Enumerate and save all the uniform and attribute positions in shader when it is added and cache them in shader object? ** TODO Physics/Collision detection in 2d ** TODO Complete gui integration x Font selection diff --git a/src/model.c b/src/model.c index 4724fe8..e3afcec 100644 --- a/src/model.c +++ b/src/model.c @@ -363,3 +363,28 @@ struct Model* model_get_all(void) { return model_list; } + +void model_render_all_debug(struct Camera* camera, + int debug_shader, + enum Geometry_Draw_Mode draw_mode, + const vec3* debug_color) +{ + assert(debug_shader > -1); + shader_bind(debug_shader); + { + static mat4 mvp; + shader_set_uniform_vec3(debug_shader, "debug_color", debug_color); + for(int i = 0; i < array_len(model_list); i++) + { + struct Model* model = &model_list[i]; + struct Entity* entity = entity_get(model->node); + struct Transform* transform = entity_component_get(entity, C_TRANSFORM); + int geometry = model->geometry_index; + mat4_identity(&mvp); + mat4_mul(&mvp, &camera->view_proj_mat, &transform->trans_mat); + shader_set_uniform_mat4(debug_shader, "mvp", &mvp); + geom_render(geometry, draw_mode); + } + } + shader_unbind(); +} diff --git a/src/model.h b/src/model.h index 8e83ebd..ef47b9f 100644 --- a/src/model.h +++ b/src/model.h @@ -24,5 +24,9 @@ void model_cleanup(void); void model_render_all(struct Camera* camera, enum Geometry_Draw_Mode draw_mode); int model_set_material_param(struct Model* model, const char* name, void* value); int model_get_material_param(struct Model* model, const char* name, void* value_out); +void model_render_all_debug(struct Camera* camera, + int debug_shader, + enum Geometry_Draw_Mode draw_mode, + const vec3* debug_color); #endif diff --git a/src/renderer.c b/src/renderer.c index dbd7fda..bce58fa 100644 --- a/src/renderer.c +++ b/src/renderer.c @@ -7,7 +7,6 @@ #include "texture.h" #include "framebuffer.h" #include "array.h" -#include "geometry.h" #include "shader.h" #include "num_types.h" #include "light.h" @@ -37,14 +36,17 @@ void renderer_init(void) glCullFace(GL_BACK); platform_windowresize_callback_set(on_framebuffer_size_change); - settings.fog.mode = FM_EXPONENTIAL; - settings.fog.density = 0.01f; - settings.fog.start_dist = 50.f; - settings.fog.max_dist = 150.f; - vec3_fill(&settings.fog.color, 60.f/255.f, 60.f/255.f, 75.f/255.f); - vec3_fill(&settings.ambient_light, 0.1f, 0.1f, 0.12f); + settings.fog.mode = FM_EXPONENTIAL; + settings.fog.density = 0.01f; + settings.fog.start_dist = 50.f; + settings.fog.max_dist = 150.f; + settings.debug_draw_enabled = 0; + settings.debug_draw_mode = GDM_LINES; settings.max_gui_vertex_memory = MAX_GUI_VERTEX_MEMORY; settings.max_gui_element_memory = MAX_GUI_ELEMENT_MEMORY; + vec3_fill(&settings.fog.color, 60.f/255.f, 60.f/255.f, 75.f/255.f); + vec3_fill(&settings.ambient_light, 0.1f, 0.1f, 0.12f); + vec3_fill(&settings.debug_draw_color, 0.f, 1.f, 0.f); gui_init(); @@ -176,28 +178,29 @@ void renderer_draw(void) shader_unbind(); /* Debug Pass */ - shader_bind(debug_shader); - { - glEnable(GL_DEPTH_TEST); - glEnable(GL_CULL_FACE); - glCullFace(GL_BACK); - static vec3 wireframe_color = {0, 1, 0}; - static mat4 mvp; - shader_set_uniform_vec3(debug_shader, "wireframe_color", &wireframe_color); - struct Model* model_list = model_get_all(); - for(int i = 0; i < array_len(model_list); i++) - { - struct Model* model = &model_list[i]; - struct Entity* entity = entity_get(model->node); - struct Transform* transform = entity_component_get(entity, C_TRANSFORM); - int geometry = model->geometry_index; - mat4_identity(&mvp); - mat4_mul(&mvp, &active_camera->view_proj_mat, &transform->trans_mat); - shader_set_uniform_mat4(debug_shader, "mvp", &mvp); - geom_render(geometry, GDM_LINES); - } - } - shader_unbind(); + /* shader_bind(debug_shader); */ + /* { */ + /* glEnable(GL_DEPTH_TEST); */ + /* glEnable(GL_CULL_FACE); */ + /* glCullFace(GL_BACK); */ + /* static vec3 wireframe_color = {0, 1, 0}; */ + /* static mat4 mvp; */ + /* shader_set_uniform_vec3(debug_shader, "wireframe_color", &wireframe_color); */ + /* struct Model* model_list = model_get_all(); */ + /* for(int i = 0; i < array_len(model_list); i++) */ + /* { */ + /* struct Model* model = &model_list[i]; */ + /* struct Entity* entity = entity_get(model->node); */ + /* struct Transform* transform = entity_component_get(entity, C_TRANSFORM); */ + /* int geometry = model->geometry_index; */ + /* mat4_identity(&mvp); */ + /* mat4_mul(&mvp, &active_camera->view_proj_mat, &transform->trans_mat); */ + /* shader_set_uniform_mat4(debug_shader, "mvp", &mvp); */ + /* geom_render(geometry, GDM_LINES); */ + /* } */ + /* } */ + /* shader_unbind(); */ + if(settings.debug_draw_enabled) model_render_all_debug(active_camera, debug_shader, settings.debug_draw_mode, &settings.debug_draw_color); gui_render(NK_ANTI_ALIASING_ON, settings.max_gui_vertex_memory, settings.max_gui_element_memory); } @@ -221,7 +224,7 @@ void on_framebuffer_size_change(int width, int height) framebuffer_resize_all(width, height); } -void renderer_set_clearcolor(float red, float green, float blue, float alpha) +void renderer_clearcolor_set(float red, float green, float blue, float alpha) { glClearColor(red, green, blue, alpha); } @@ -253,3 +256,8 @@ struct Render_Settings* renderer_get_settings(void) { return &settings; } + +void renderer_debug_draw_enabled(int enabled) +{ + settings.debug_draw_enabled = enabled; +} diff --git a/src/renderer.h b/src/renderer.h index 88a0fb2..3367cdd 100644 --- a/src/renderer.h +++ b/src/renderer.h @@ -2,6 +2,7 @@ #define renderer_H #include "linmath.h" +#include "geometry.h" enum Fog_Mode { @@ -23,17 +24,21 @@ struct Fog struct Render_Settings { - struct Fog fog; - vec3 ambient_light; - int max_gui_vertex_memory; - int max_gui_element_memory; + struct Fog fog; + vec3 ambient_light; + int max_gui_vertex_memory; + int max_gui_element_memory; + int debug_draw_enabled; + vec3 debug_draw_color; + enum Geometry_Draw_Mode debug_draw_mode; }; struct Render_Settings* renderer_get_settings(void); void renderer_init(void); void renderer_draw(void); void renderer_cleanup(void); -void renderer_set_clearcolor(float r, float g, float b, float a); +void renderer_clearcolor_set(float r, float g, float b, float a); +void renderer_debug_draw_enabled(int enabled); int renderer_check_glerror(const char* context); #endif