From b7b9bedf14bce331e49129410d4756cda6a19eda Mon Sep 17 00:00:00 2001 From: Kearwood Gilbert Date: Wed, 1 May 2013 12:32:16 -0700 Subject: [PATCH] Implemented collider visualization to aid in debugging navigation issues. --- KREngine/kraken/KRCamera.cpp | 8 +- KREngine/kraken/KRCollider.cpp | 44 +++++++++++ KREngine/kraken/KRCollider.h | 2 + KREngine/kraken/KREngine.mm | 119 +++++++++++++---------------- KREngine/kraken/KRRenderSettings.h | 2 + 5 files changed, 110 insertions(+), 65 deletions(-) diff --git a/KREngine/kraken/KRCamera.cpp b/KREngine/kraken/KRCamera.cpp index 95cca4c..479ad2a 100644 --- a/KREngine/kraken/KRCamera.cpp +++ b/KREngine/kraken/KRCamera.cpp @@ -422,7 +422,7 @@ void KRCamera::renderFrame(float deltaTime, GLint renderBufferWidth, GLint rende GL_PUSH_GROUP_MARKER("Debug Overlays"); - if(settings.bShowOctree) { + if(settings.debug_display == KRRenderSettings::KRENGINE_DEBUG_DISPLAY_OCTREE) { // Enable z-buffer test GLDEBUG(glEnable(GL_DEPTH_TEST)); GLDEBUG(glDepthRangef(0.0, 1.0)); @@ -1042,6 +1042,12 @@ std::string KRCamera::getDebugText() stream << "\n\n\t\tTOTAL:\t" << draw_call_count << " draw calls\t" << vertex_count << " vertices"; } break; + case KRRenderSettings::KRENGINE_DEBUG_DISPLAY_OCTREE: + stream << "Octree Visualization"; + break; + case KRRenderSettings::KRENGINE_DEBUG_DISPLAY_COLLIDERS: + stream << "Collider Visualization"; + break; } return stream.str(); } diff --git a/KREngine/kraken/KRCollider.cpp b/KREngine/kraken/KRCollider.cpp index 72f55c7..167bca4 100644 --- a/KREngine/kraken/KRCollider.cpp +++ b/KREngine/kraken/KRCollider.cpp @@ -150,3 +150,47 @@ void KRCollider::setAudioOcclusion(float audio_occlusion) { m_audio_occlusion = audio_occlusion; } + + +void KRCollider::render(KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass) +{ + + KRNode::render(pCamera, point_lights, directional_lights, spot_lights, viewport, renderPass); + + if(renderPass == KRNode::RENDER_PASS_FORWARD_TRANSPARENT && pCamera->settings.debug_display == KRRenderSettings::KRENGINE_DEBUG_DISPLAY_COLLIDERS) { + loadModel(); + if(m_models.size()) { + + GL_PUSH_GROUP_MARKER("Debug Overlays"); + + KRShader *pShader = getContext().getShaderManager()->getShader("visualize_overlay", pCamera, point_lights, directional_lights, spot_lights, 0, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, renderPass); + + if(getContext().getShaderManager()->selectShader(*pCamera, pShader, viewport, getModelMatrix(), point_lights, directional_lights, spot_lights, 0, renderPass)) { + + // Enable additive blending + GLDEBUG(glEnable(GL_BLEND)); + GLDEBUG(glBlendFunc(GL_ONE, GL_ONE)); + + + // Disable z-buffer write + GLDEBUG(glDepthMask(GL_FALSE)); + + // Enable z-buffer test + GLDEBUG(glEnable(GL_DEPTH_TEST)); + GLDEBUG(glDepthFunc(GL_LEQUAL)); + GLDEBUG(glDepthRangef(0.0, 1.0)); + + + for(int i=0; i < m_models[0]->getSubmeshCount(); i++) { + m_models[0]->renderSubmesh(i, renderPass, getName(), "visualize_overlay"); + } + + // Enable alpha blending + GLDEBUG(glEnable(GL_BLEND)); + GLDEBUG(glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)); + } + + GL_POP_GROUP_MARKER; + } + } +} diff --git a/KREngine/kraken/KRCollider.h b/KREngine/kraken/KRCollider.h index 41aa669..cabf368 100644 --- a/KREngine/kraken/KRCollider.h +++ b/KREngine/kraken/KRCollider.h @@ -68,6 +68,8 @@ public: float getAudioOcclusion(); void setAudioOcclusion(float audio_occlusion); + void render(KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass); + private: std::vector m_models; std::string m_model_name; diff --git a/KREngine/kraken/KREngine.mm b/KREngine/kraken/KREngine.mm index 623cbbb..9550f70 100644 --- a/KREngine/kraken/KREngine.mm +++ b/KREngine/kraken/KREngine.mm @@ -172,31 +172,30 @@ void kraken::set_parameter(const std::string ¶meter_name, float parameter_va @"debug_enable_diffuse" : @25, @"debug_enable_specular" : @26, @"debug_enable_reflection" : @27, - @"debug_octree" : @28, - @"debug_deferred" : @29, - @"enable_deferred_lighting" : @30, - @"near_clip" : @31, - @"far_clip" : @32, - @"volumetric_environment_enable" : @33, - @"volumetric_environment_downsample" : @34, - @"volumetric_environment_max_distance" : @35, - @"volumetric_environment_slices" : @36, - @"volumetric_environment_intensity" : @37, - @"fog_type": @38, - @"fog_near": @39, - @"fog_far": @40, - @"fog_density": @41, - @"fog_color_r": @42, - @"fog_color_g": @43, - @"fog_color_b": @44, - @"dust_enable" : @45, - @"dust_intensity" : @46, - @"lod_bias" : @47, - @"enable_realtime_occlusion" : @48, - @"debug_display" : @49, - @"siren_enable" : @50, - @"siren_enable_reverb" : @51, - @"siren_enable_hrtf" : @52 + @"debug_deferred" : @28, + @"enable_deferred_lighting" : @29, + @"near_clip" : @30, + @"far_clip" : @31, + @"volumetric_environment_enable" : @32, + @"volumetric_environment_downsample" : @33, + @"volumetric_environment_max_distance" : @34, + @"volumetric_environment_slices" : @35, + @"volumetric_environment_intensity" : @36, + @"fog_type": @37, + @"fog_near": @38, + @"fog_far": @39, + @"fog_density": @40, + @"fog_color_r": @41, + @"fog_color_g": @42, + @"fog_color_b": @43, + @"dust_enable" : @44, + @"dust_intensity" : @45, + @"lod_bias" : @46, + @"enable_realtime_occlusion" : @47, + @"debug_display" : @48, + @"siren_enable" : @49, + @"siren_enable_reverb" : @50, + @"siren_enable_hrtf" : @51 } copy]; [self loadShaders]; @@ -269,7 +268,7 @@ void kraken::set_parameter(const std::string ¶meter_name, float parameter_va -(int)getParameterCount { - return 53; + return 52; } @@ -285,7 +284,7 @@ void kraken::set_parameter(const std::string ¶meter_name, float parameter_va -(NSString *)getParameterLabelWithIndex: (int)i { - NSString *parameter_labels[53] = { + NSString *parameter_labels[52] = { @"Camera FOV", @"Shadow Quality (0 - 2)", @"Enable per-pixel lighting", @@ -314,7 +313,6 @@ void kraken::set_parameter(const std::string ¶meter_name, float parameter_va @"Debug - Enable Diffuse", @"Debug - Enable Specular", @"Debug - Enable Reflections", - @"Debug - Octree Visualize", @"Debug - Deferred Lights Visualize", @"Enable Deferred Lighting", @"Clip Plane - Near", @@ -344,7 +342,7 @@ void kraken::set_parameter(const std::string ¶meter_name, float parameter_va } -(KREngineParameterType)getParameterTypeWithIndex: (int)i { - KREngineParameterType types[53] = { + KREngineParameterType types[52] = { KRENGINE_PARAMETER_FLOAT, KRENGINE_PARAMETER_INT, @@ -376,7 +374,6 @@ void kraken::set_parameter(const std::string ¶meter_name, float parameter_va KRENGINE_PARAMETER_BOOL, KRENGINE_PARAMETER_BOOL, KRENGINE_PARAMETER_BOOL, - KRENGINE_PARAMETER_BOOL, KRENGINE_PARAMETER_FLOAT, KRENGINE_PARAMETER_FLOAT, KRENGINE_PARAMETER_BOOL, @@ -404,7 +401,7 @@ void kraken::set_parameter(const std::string ¶meter_name, float parameter_va } -(float)getParameterValueWithIndex: (int)i { - float values[53] = { + float values[52] = { _settings.perspective_fov, (float)_settings.m_cShadowBuffers, _settings.bEnablePerPixel ? 1.0f : 0.0f, @@ -433,7 +430,6 @@ void kraken::set_parameter(const std::string ¶meter_name, float parameter_va _settings.bEnableDiffuse ? 1.0f : 0.0f, _settings.bEnableSpecular ? 1.0f : 0.0f, _settings.bEnableReflection ? 1.0f : 0.0f, - _settings.bShowOctree ? 1.0f : 0.0f, _settings.bShowDeferred ? 1.0f : 0.0f, _settings.bEnableDeferredLighting ? 1.0f : 0.0f, _settings.getPerspectiveNearZ(), @@ -583,84 +579,79 @@ void kraken::set_parameter(const std::string ¶meter_name, float parameter_va } break; case 28: - if(_settings.bShowOctree != bNewBoolVal) { - _settings.bShowOctree = bNewBoolVal; - } - break; - case 29: if(_settings.bShowDeferred != bNewBoolVal) { _settings.bShowDeferred = bNewBoolVal; } break; - case 30: + case 29: if(_settings.bEnableDeferredLighting != bNewBoolVal) { _settings.bEnableDeferredLighting = bNewBoolVal; } break; - case 31: + case 30: _settings.setPerspectiveNear(v); break; - case 32: + case 31: _settings.setPerpsectiveFarZ(v); break; - case 33: + case 32: _settings.volumetric_environment_enable = bNewBoolVal; break; - case 34: + case 33: _settings.volumetric_environment_downsample = 5 - (int)v; break; - case 35: + case 34: _settings.volumetric_environment_max_distance = v; break; - case 36: + case 35: _settings.volumetric_environment_quality = v; break; - case 37: + case 36: _settings.volumetric_environment_intensity = v; break; - case 38: + case 37: _settings.fog_type = v; break; - case 39: + case 38: _settings.fog_near = v; break; - case 40: + case 39: _settings.fog_far = v; break; - case 41: + case 40: _settings.fog_density = v; break; - case 42: + case 41: _settings.fog_color.x = v; break; - case 43: + case 42: _settings.fog_color.y = v; break; - case 44: + case 43: _settings.fog_color.z = v; break; - case 45: + case 44: _settings.dust_particle_enable = bNewBoolVal; break; - case 46: + case 45: _settings.dust_particle_intensity = v; break; - case 47: + case 46: _settings.setLODBias(v); break; - case 48: + case 47: _settings.setEnableRealtimeOcclusion(bNewBoolVal); break; - case 49: + case 48: _settings.debug_display = (KRRenderSettings::debug_display_type)v; break; - case 50: + case 49: _settings.siren_enable = bNewBoolVal; break; - case 51: + case 50: _settings.siren_enable_reverb = bNewBoolVal; break; - case 52: + case 51: _settings.siren_enable_hrtf = bNewBoolVal; break; } @@ -668,10 +659,10 @@ void kraken::set_parameter(const std::string ¶meter_name, float parameter_va -(float)getParameterMinWithIndex: (int)i { - float minValues[53] = { + float minValues[52] = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.01f, 50.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, -10.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f @@ -682,10 +673,10 @@ void kraken::set_parameter(const std::string ¶meter_name, float parameter_va -(float)getParameterMaxWithIndex: (int)i { - float maxValues[53] = { + float maxValues[52] = { PI, 3.0f, 1.0f, 1.0, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 10.0f, 1.0f, 10.0f, 2.0f, 1.0f, 1.0f, 1.0f, 5.0f, 1.0f, 0.5f, 1.0f, - 2.0f, 2.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, + 2.0f, 2.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 10.0f, 1000.0f, 1.0f, 5.0f, 1000.0f, 1.0f, 5.0f, 3.0f, 1000.0f, 1000.0f, 0.01f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 10.0f, 1.0f, (float)(KRRenderSettings::KRENGINE_DEBUG_DISPLAY_NUMBER - 1), 1.0f, 1.0f, 1.0f diff --git a/KREngine/kraken/KRRenderSettings.h b/KREngine/kraken/KRRenderSettings.h index 9e609bf..f058ea7 100644 --- a/KREngine/kraken/KRRenderSettings.h +++ b/KREngine/kraken/KRRenderSettings.h @@ -93,6 +93,8 @@ public: KRENGINE_DEBUG_DISPLAY_MEMORY, KRENGINE_DEBUG_DISPLAY_TEXTURES, KRENGINE_DEBUG_DISPLAY_DRAW_CALLS, + KRENGINE_DEBUG_DISPLAY_OCTREE, + KRENGINE_DEBUG_DISPLAY_COLLIDERS, KRENGINE_DEBUG_DISPLAY_NUMBER } debug_display;