Properly implemented simple toggleable debug drawing for meshes

dev
Shariq Shah 9 years ago
parent 4a091cea9a
commit 3389c423df
  1. 137
      README
  2. 4
      assets/shaders/debug.frag
  3. 7
      orgfile.org
  4. 25
      src/model.c
  5. 4
      src/model.h
  6. 68
      src/renderer.c
  7. 15
      src/renderer.h

137
README

@ -46,32 +46,38 @@ _________________
.. 2.30 DONE Fix problems with texture units .. 2.30 DONE Fix problems with texture units
.. 2.31 CANCELED Draw light volumes .. 2.31 CANCELED Draw light volumes
.. 2.32 TODO Fix problems with frustrum culling .. 2.32 TODO Fix problems with frustrum culling
.. 2.33 TODO 2d drawing routines .. 2.33 TODO
.. 2.34 DONE Gui .. 2.34 TODO
.. 2.35 CANCELED Image based lighting? .. 2.35 TODO 2d drawing routines
.. 2.36 CANCELED Deferred rendering? .. 2.36 DONE Gui
.. 2.37 TODO Fix mouse bugs on windows .. 2.37 CANCELED Image based lighting?
.. 2.38 TODO Physics/Collision detection in 2d .. 2.38 CANCELED Deferred rendering?
.. 2.39 TODO Complete gui integration .. 2.39 TODO Fix mouse bugs on windows
.. 2.40 TODO Allow passsing base path as commandline argument? .. 2.40 DONE Toggleable debug drawing for meshes
.. 2.41 DONE Resizable framebuffers and textures .. 2.41 TODO Interleaved vbos for meshes and changes to blender exporter accordingly
.. 2.42 DONE Support for multiple color attachments in framebuffers? .. 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 Multisampled textures and framebuffers .. 2.43 TODO Physics/Collision detection in 2d
.. 2.44 DONE Better way to store and manage textures attached to framebuffers .. 2.44 TODO Complete gui integration
.. 2.45 TODO Validate necessary assets at game launch .. 2.45 TODO Allow passsing base path as commandline argument?
.. 2.46 TODO Variant type .. 2.46 TODO Sprite sheet animations
.. 2.47 TODO Log and debug/stats output in gui .. 2.47 DONE Resizable framebuffers and textures
.. 2.48 TODO Editor .. 2.48 DONE Support for multiple color attachments in framebuffers?
.. 2.49 TODO Event Subsystem .. 2.49 TODO Multisampled textures and framebuffers
.. 2.50 TODO Keybindings for gui? .. 2.50 DONE Better way to store and manage textures attached to framebuffers
.. 2.51 DONE Compile and test on windows .. 2.51 TODO Validate necessary assets at game launch
.. 2.52 TODO Array based string type comptible with cstring(char*) .. 2.52 TODO Variant type
.. 2.53 DONE Fix mouse bugs .. 2.53 TODO Log and debug/stats output in gui
.. 2.54 DONE Fix .. 2.54 TODO Editor
.. 2.55 TODO issues with opengl context showing 2.1 only .. 2.55 TODO Event Subsystem
.. 2.56 TODO Improve this readme .. 2.56 TODO Keybindings for gui?
.. 2.57 TODO ??? .. 2.57 DONE Compile and test on windows
.. 2.58 TODO Profit! .. 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 1 Project Symmetry
@ -288,45 +294,66 @@ _________________
2.32 TODO Fix problems with frustrum culling 2.32 TODO Fix problems with frustrum culling
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2.33 TODO
~~~~~~~~~~
2.34 TODO
~~~~~~~~~~
- Recalculate bounding boxes for rotated meshes? - Recalculate bounding boxes for rotated meshes?
2.33 TODO 2d drawing routines 2.35 TODO 2d drawing routines
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Sprite batching - Sprite batching
- Debug drawing
2.34 DONE Gui 2.36 DONE Gui
~~~~~~~~~~~~~ ~~~~~~~~~~~~~
- State "DONE" from "TODO" [2017-03-15 Wed 23:41] - 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] - State "CANCELED" from "TODO" [2017-03-14 Tue 00:31]
Not a requirement for current project 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] - State "CANCELED" from "TODO" [2017-02-26 Sun 01:49]
Sticking with forward rendering for now and focusing on tools etc. 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 x Font selection x Font atlas proper cleanup
@ -334,89 +361,93 @@ _________________
- Custom rendering for gui - 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] - 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] - 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] - 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] - 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] - 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] - 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!
~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~

@ -1,10 +1,10 @@
//include version.glsl //include version.glsl
uniform vec3 wireframe_color; uniform vec3 debug_color;
out vec4 frag_color; out vec4 frag_color;
void main() void main()
{ {
frag_color = vec4(wireframe_color, 1.0); frag_color = vec4(debug_color, 1.0);
} }

@ -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] \\ - State "CANCELED" from "TODO" [2017-02-26 Sun 15:39] \\
Deferred rendering on hold for now. Deferred rendering on hold for now.
** TODO Fix problems with frustrum culling ** TODO Fix problems with frustrum culling
** TODO
** TODO
- Recalculate bounding boxes for rotated meshes? - Recalculate bounding boxes for rotated meshes?
** TODO 2d drawing routines ** TODO 2d drawing routines
- Sprite batching - Sprite batching
- Debug drawing
** DONE Gui ** DONE Gui
- State "DONE" from "TODO" [2017-03-15 Wed 23:41] - State "DONE" from "TODO" [2017-03-15 Wed 23:41]
** CANCELED Image based lighting? ** 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] \\ - State "CANCELED" from "TODO" [2017-02-26 Sun 01:49] \\
Sticking with forward rendering for now and focusing on tools etc. Sticking with forward rendering for now and focusing on tools etc.
** TODO Fix mouse bugs on windows ** 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 Physics/Collision detection in 2d
** TODO Complete gui integration ** TODO Complete gui integration
x Font selection x Font selection

@ -363,3 +363,28 @@ struct Model* model_get_all(void)
{ {
return model_list; 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();
}

@ -24,5 +24,9 @@ void model_cleanup(void);
void model_render_all(struct Camera* camera, enum Geometry_Draw_Mode draw_mode); 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_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); 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 #endif

@ -7,7 +7,6 @@
#include "texture.h" #include "texture.h"
#include "framebuffer.h" #include "framebuffer.h"
#include "array.h" #include "array.h"
#include "geometry.h"
#include "shader.h" #include "shader.h"
#include "num_types.h" #include "num_types.h"
#include "light.h" #include "light.h"
@ -37,14 +36,17 @@ void renderer_init(void)
glCullFace(GL_BACK); glCullFace(GL_BACK);
platform_windowresize_callback_set(on_framebuffer_size_change); platform_windowresize_callback_set(on_framebuffer_size_change);
settings.fog.mode = FM_EXPONENTIAL; settings.fog.mode = FM_EXPONENTIAL;
settings.fog.density = 0.01f; settings.fog.density = 0.01f;
settings.fog.start_dist = 50.f; settings.fog.start_dist = 50.f;
settings.fog.max_dist = 150.f; settings.fog.max_dist = 150.f;
vec3_fill(&settings.fog.color, 60.f/255.f, 60.f/255.f, 75.f/255.f); settings.debug_draw_enabled = 0;
vec3_fill(&settings.ambient_light, 0.1f, 0.1f, 0.12f); settings.debug_draw_mode = GDM_LINES;
settings.max_gui_vertex_memory = MAX_GUI_VERTEX_MEMORY; settings.max_gui_vertex_memory = MAX_GUI_VERTEX_MEMORY;
settings.max_gui_element_memory = MAX_GUI_ELEMENT_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(); gui_init();
@ -176,28 +178,29 @@ void renderer_draw(void)
shader_unbind(); shader_unbind();
/* Debug Pass */ /* Debug Pass */
shader_bind(debug_shader); /* shader_bind(debug_shader); */
{ /* { */
glEnable(GL_DEPTH_TEST); /* glEnable(GL_DEPTH_TEST); */
glEnable(GL_CULL_FACE); /* glEnable(GL_CULL_FACE); */
glCullFace(GL_BACK); /* glCullFace(GL_BACK); */
static vec3 wireframe_color = {0, 1, 0}; /* static vec3 wireframe_color = {0, 1, 0}; */
static mat4 mvp; /* static mat4 mvp; */
shader_set_uniform_vec3(debug_shader, "wireframe_color", &wireframe_color); /* shader_set_uniform_vec3(debug_shader, "wireframe_color", &wireframe_color); */
struct Model* model_list = model_get_all(); /* struct Model* model_list = model_get_all(); */
for(int i = 0; i < array_len(model_list); i++) /* for(int i = 0; i < array_len(model_list); i++) */
{ /* { */
struct Model* model = &model_list[i]; /* struct Model* model = &model_list[i]; */
struct Entity* entity = entity_get(model->node); /* struct Entity* entity = entity_get(model->node); */
struct Transform* transform = entity_component_get(entity, C_TRANSFORM); /* struct Transform* transform = entity_component_get(entity, C_TRANSFORM); */
int geometry = model->geometry_index; /* int geometry = model->geometry_index; */
mat4_identity(&mvp); /* mat4_identity(&mvp); */
mat4_mul(&mvp, &active_camera->view_proj_mat, &transform->trans_mat); /* mat4_mul(&mvp, &active_camera->view_proj_mat, &transform->trans_mat); */
shader_set_uniform_mat4(debug_shader, "mvp", &mvp); /* shader_set_uniform_mat4(debug_shader, "mvp", &mvp); */
geom_render(geometry, GDM_LINES); /* geom_render(geometry, GDM_LINES); */
} /* } */
} /* } */
shader_unbind(); /* 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); 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); 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); glClearColor(red, green, blue, alpha);
} }
@ -253,3 +256,8 @@ struct Render_Settings* renderer_get_settings(void)
{ {
return &settings; return &settings;
} }
void renderer_debug_draw_enabled(int enabled)
{
settings.debug_draw_enabled = enabled;
}

@ -2,6 +2,7 @@
#define renderer_H #define renderer_H
#include "linmath.h" #include "linmath.h"
#include "geometry.h"
enum Fog_Mode enum Fog_Mode
{ {
@ -23,17 +24,21 @@ struct Fog
struct Render_Settings struct Render_Settings
{ {
struct Fog fog; struct Fog fog;
vec3 ambient_light; vec3 ambient_light;
int max_gui_vertex_memory; int max_gui_vertex_memory;
int max_gui_element_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); struct Render_Settings* renderer_get_settings(void);
void renderer_init(void); void renderer_init(void);
void renderer_draw(void); void renderer_draw(void);
void renderer_cleanup(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); int renderer_check_glerror(const char* context);
#endif #endif

Loading…
Cancel
Save