From 834683f414edfb3aadf8dccdd20e77aafd4d4c64 Mon Sep 17 00:00:00 2001 From: Vincent Lejeune Date: Fri, 12 Dec 2014 02:12:14 +0100 Subject: [PATCH] Add codecheck before rendering GI/Shadow --- src/graphics/irr_driver.hpp | 10 ++++++++++ src/graphics/render.cpp | 4 ++-- src/graphics/render_lighting.cpp | 4 ++-- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/graphics/irr_driver.hpp b/src/graphics/irr_driver.hpp index 8134089e8..767cc9b13 100644 --- a/src/graphics/irr_driver.hpp +++ b/src/graphics/irr_driver.hpp @@ -298,6 +298,16 @@ public: return getGLSLVersion() >= 330; } + bool usesShadows() const + { + return supportGeometryShader() && UserConfigParams::m_shadows; + } + + bool usesGI() const + { + return supportGeometryShader() && UserConfigParams::m_gi && !needUBOWorkaround(); + } + bool usesTextureCompression() const { return UserConfigParams::m_texture_compression && m_support_texture_compression; diff --git a/src/graphics/render.cpp b/src/graphics/render.cpp index 41a5a6825..1c7e8b13f 100644 --- a/src/graphics/render.cpp +++ b/src/graphics/render.cpp @@ -352,12 +352,12 @@ void IrrDriver::renderScene(scene::ICameraSceneNode * const camnode, unsigned po // To avoid wrong culling, use the largest view possible m_scene_manager->setActiveCamera(m_suncam); if (UserConfigParams::m_dynamic_lights && - UserConfigParams::m_shadows && !irr_driver->needUBOWorkaround() && hasShadow) + UserConfigParams::m_shadows && irr_driver->usesShadows() && hasShadow) { PROFILER_PUSH_CPU_MARKER("- Shadow", 0x30, 0x6F, 0x90); renderShadows(); PROFILER_POP_CPU_MARKER(); - if (UserConfigParams::m_gi) + if (irr_driver->usesGI()) { PROFILER_PUSH_CPU_MARKER("- RSM", 0xFF, 0x0, 0xFF); renderRSM(); diff --git a/src/graphics/render_lighting.cpp b/src/graphics/render_lighting.cpp index ca5e45061..0aafd69ad 100644 --- a/src/graphics/render_lighting.cpp +++ b/src/graphics/render_lighting.cpp @@ -145,7 +145,7 @@ void IrrDriver::renderLights(unsigned pointlightcount, bool hasShadow) glClear(GL_COLOR_BUFFER_BIT); m_rtts->getFBO(FBO_DIFFUSE).Bind(); - if (UserConfigParams::m_gi && UserConfigParams::m_shadows && hasShadow) + if (irr_driver->usesGI() && hasShadow) { ScopedGPUTimer timer(irr_driver->getGPUTimer(Q_GI)); m_post_processing->renderGI(rh_matrix, rh_extend, m_rtts->getRH().getRTT()[0], m_rtts->getRH().getRTT()[1], m_rtts->getRH().getRTT()[2]); @@ -162,7 +162,7 @@ void IrrDriver::renderLights(unsigned pointlightcount, bool hasShadow) if (!World::getWorld() || World::getWorld()->getTrack()->hasShadows()) { ScopedGPUTimer timer(irr_driver->getGPUTimer(Q_SUN)); - if (World::getWorld() && UserConfigParams::m_shadows && !irr_driver->needUBOWorkaround() && hasShadow) + if (World::getWorld() && irr_driver->usesShadows() && hasShadow) m_post_processing->renderShadowedSunlight(irr_driver->getSunDirection(), irr_driver->getSunColor(), sun_ortho_matrix, m_rtts->getShadowFBO().getRTT()[0]); else m_post_processing->renderSunlight(irr_driver->getSunDirection(), irr_driver->getSunColor());