From b4d39f7d85da877b6ca770206e7311f8015bd5c7 Mon Sep 17 00:00:00 2001 From: Elderme Date: Sun, 22 Nov 2015 16:13:34 +0100 Subject: [PATCH] Improved interfaces --- src/graphics/abstract_renderer.hpp | 2 +- src/graphics/draw_calls.cpp | 14 +++++++++++++- src/graphics/draw_calls.hpp | 8 +------- src/graphics/fixed_pipeline_renderer.hpp | 2 +- src/graphics/geometry_passes.cpp | 18 ++---------------- src/graphics/shader_based_renderer.cpp | 2 +- src/graphics/shader_based_renderer.hpp | 2 +- 7 files changed, 20 insertions(+), 28 deletions(-) diff --git a/src/graphics/abstract_renderer.hpp b/src/graphics/abstract_renderer.hpp index c752ae092..370d087ed 100644 --- a/src/graphics/abstract_renderer.hpp +++ b/src/graphics/abstract_renderer.hpp @@ -49,7 +49,7 @@ public: virtual void render(float dt) = 0; virtual void renderScene(irr::scene::ICameraSceneNode * const camnode, - std::vector& glows, + const std::vector& glows, float dt, bool hasShadows, bool forceRTT) = 0; virtual void updateLightsInfo(irr::scene::ICameraSceneNode * const camnode, diff --git a/src/graphics/draw_calls.cpp b/src/graphics/draw_calls.cpp index a5ecef2b9..4ac02282b 100644 --- a/src/graphics/draw_calls.cpp +++ b/src/graphics/draw_calls.cpp @@ -542,6 +542,7 @@ void DrawCalls::renderParticlesList() const */ void DrawCalls::drawIndirectSolidFirstPass() const { + m_solid_cmd_buffer.bind(); m_solid_cmd_buffer.drawIndirectFirstPass(); m_solid_cmd_buffer.drawIndirectFirstPass(); m_solid_cmd_buffer.drawIndirectFirstPass(); @@ -557,6 +558,7 @@ void DrawCalls::drawIndirectSolidFirstPass() const */ void DrawCalls::multidrawSolidFirstPass() const { + m_solid_cmd_buffer.bind(); m_solid_cmd_buffer.multidrawFirstPass(); m_solid_cmd_buffer.multidrawFirstPass(); m_solid_cmd_buffer.multidrawFirstPass(); @@ -569,6 +571,7 @@ void DrawCalls::multidrawSolidFirstPass() const // ---------------------------------------------------------------------------- void DrawCalls::drawIndirectSolidSecondPass(const std::vector &prefilled_tex) const { + m_solid_cmd_buffer.bind(); m_solid_cmd_buffer.drawIndirectSecondPass(prefilled_tex); m_solid_cmd_buffer.drawIndirectSecondPass(prefilled_tex); m_solid_cmd_buffer.drawIndirectSecondPass(prefilled_tex); @@ -581,6 +584,7 @@ void DrawCalls::drawIndirectSolidSecondPass(const std::vector &prefilled // ---------------------------------------------------------------------------- void DrawCalls::multidrawSolidSecondPass(const std::vector &handles) const { + m_solid_cmd_buffer.bind(); m_solid_cmd_buffer.multidraw2ndPass(handles); m_solid_cmd_buffer.multidraw2ndPass(handles); m_solid_cmd_buffer.multidraw2ndPass(handles); @@ -593,6 +597,7 @@ void DrawCalls::multidrawSolidSecondPass(const std::vector &handles) c // ---------------------------------------------------------------------------- void DrawCalls::drawIndirectNormals() const { + m_solid_cmd_buffer.bind(); m_solid_cmd_buffer.drawIndirectNormals(); m_solid_cmd_buffer.drawIndirectNormals(); m_solid_cmd_buffer.drawIndirectNormals(); @@ -604,6 +609,7 @@ void DrawCalls::drawIndirectNormals() const // ---------------------------------------------------------------------------- void DrawCalls::multidrawNormals() const { + m_solid_cmd_buffer.bind(); m_solid_cmd_buffer.multidrawNormals(); m_solid_cmd_buffer.multidrawNormals(); m_solid_cmd_buffer.multidrawNormals(); @@ -615,17 +621,19 @@ void DrawCalls::multidrawNormals() const // ---------------------------------------------------------------------------- void DrawCalls::drawIndirectShadows(unsigned cascade) const { + m_shadow_cmd_buffer.bind(); m_shadow_cmd_buffer.drawIndirect(cascade); m_shadow_cmd_buffer.drawIndirect(cascade); m_shadow_cmd_buffer.drawIndirect(cascade); m_shadow_cmd_buffer.drawIndirect(cascade); m_shadow_cmd_buffer.drawIndirect(windDir, cascade); m_shadow_cmd_buffer.drawIndirect(cascade); - + m_shadow_cmd_buffer.drawIndirect(cascade); } void DrawCalls::multidrawShadows(unsigned cascade) const { + m_shadow_cmd_buffer.bind(); m_shadow_cmd_buffer.multidrawShadow(cascade); m_shadow_cmd_buffer.multidrawShadow(cascade); m_shadow_cmd_buffer.multidrawShadow(cascade); @@ -637,6 +645,7 @@ void DrawCalls::multidrawShadows(unsigned cascade) const // ---------------------------------------------------------------------------- void DrawCalls::drawIndirectReflectiveShadowMaps(const core::matrix4 &rsm_matrix) const { + m_reflective_shadow_map_cmd_buffer.bind(); m_reflective_shadow_map_cmd_buffer.drawIndirect(rsm_matrix); m_reflective_shadow_map_cmd_buffer.drawIndirect(rsm_matrix); m_reflective_shadow_map_cmd_buffer.drawIndirect(rsm_matrix); @@ -647,6 +656,7 @@ void DrawCalls::drawIndirectReflectiveShadowMaps(const core::matrix4 &rsm_matrix // ---------------------------------------------------------------------------- void DrawCalls::multidrawReflectiveShadowMaps(const core::matrix4 &rsm_matrix) const { + m_reflective_shadow_map_cmd_buffer.bind(); m_reflective_shadow_map_cmd_buffer.multidraw(rsm_matrix); m_reflective_shadow_map_cmd_buffer.multidraw(rsm_matrix); m_reflective_shadow_map_cmd_buffer.multidraw(rsm_matrix); @@ -657,11 +667,13 @@ void DrawCalls::multidrawReflectiveShadowMaps(const core::matrix4 &rsm_matrix) c // ---------------------------------------------------------------------------- void DrawCalls::drawIndirectGlow() const { + m_glow_cmd_buffer.bind(); m_glow_cmd_buffer.drawIndirect(); } // ---------------------------------------------------------------------------- void DrawCalls::multidrawGlow() const { + m_glow_cmd_buffer.bind(); m_glow_cmd_buffer.multidraw(); } diff --git a/src/graphics/draw_calls.hpp b/src/graphics/draw_calls.hpp index 6dcef1ea6..4158aa5b9 100644 --- a/src/graphics/draw_calls.hpp +++ b/src/graphics/draw_calls.hpp @@ -48,8 +48,7 @@ private: ShadowCommandBuffer m_shadow_cmd_buffer; ReflectiveShadowMapCommandBuffer m_reflective_shadow_map_cmd_buffer; GlowCommandBuffer m_glow_cmd_buffer; - - + irr::core::vector3df windDir; //TODO: same member in geometry_passes MeshMap m_solid_pass_mesh [Material::SHADERTYPE_COUNT] ; @@ -88,11 +87,6 @@ public: void renderBillboardList() const; void renderParticlesList() const; - inline void bindSolidCmd() const { m_solid_cmd_buffer.bind(); } - inline void bindShadowCmd() const { m_shadow_cmd_buffer.bind(); } - inline void bindReflectiveShadowMapsCmd() const { m_reflective_shadow_map_cmd_buffer.bind(); } - inline void bindGlowCmd() const { m_glow_cmd_buffer.bind(); } - void drawIndirectSolidFirstPass() const; void multidrawSolidFirstPass() const; void drawIndirectSolidSecondPass(const std::vector &prefilled_tex) const; diff --git a/src/graphics/fixed_pipeline_renderer.hpp b/src/graphics/fixed_pipeline_renderer.hpp index 4318dc579..d7f13bf25 100644 --- a/src/graphics/fixed_pipeline_renderer.hpp +++ b/src/graphics/fixed_pipeline_renderer.hpp @@ -26,7 +26,7 @@ public: void render(float dt); void renderScene(irr::scene::ICameraSceneNode * const camnode, - std::vector& glows, + const std::vector& glows, float dt, bool hasShadows, bool forceRTT){} void updateLightsInfo(irr::scene::ICameraSceneNode * const camnode, float dt){} diff --git a/src/graphics/geometry_passes.cpp b/src/graphics/geometry_passes.cpp index 1032f4502..c0e6f5f5c 100644 --- a/src/graphics/geometry_passes.cpp +++ b/src/graphics/geometry_passes.cpp @@ -176,9 +176,6 @@ void GeometryPasses::renderSolidFirstPass(const DrawCalls& draw_calls) { m_wind_dir = getWindDir(); //TODO: why this function instead of Wind::getWind()? - if (CVS->supportsIndirectInstancingRendering()) - draw_calls.bindSolidCmd(); - { ScopedGPUTimer Timer(irr_driver->getGPUTimer(Q_SOLID_PASS1)); irr_driver->setPhase(SOLID_NORMAL_AND_DEPTH_PASS); @@ -279,9 +276,6 @@ void GeometryPasses::renderSolidSecondPass( const DrawCalls& draw_calls, if (!glIsTextureHandleResidentARB(DepthHandle)) glMakeTextureHandleResidentARB(DepthHandle); } - - if (CVS->supportsIndirectInstancingRendering()) - draw_calls.bindSolidCmd(); { ScopedGPUTimer Timer(irr_driver->getGPUTimer(Q_SOLID_PASS2)); @@ -344,7 +338,7 @@ void GeometryPasses::renderNormalsVisualisation(const DrawCalls& draw_calls) // ---------------------------------------------------------------------------- -void GeometryPasses::renderGlow(const DrawCalls& draw_calls, std::vector& glows) +void GeometryPasses::renderGlow(const DrawCalls& draw_calls, const std::vector& glows) { irr_driver->getSceneManager()->setCurrentRendertime(scene::ESNRP_SOLID); irr_driver->getRTT()->getFBO(FBO_TMP1_WITH_DS).bind(); @@ -377,7 +371,6 @@ void GeometryPasses::renderGlow(const DrawCalls& draw_calls, std::vectorsupportsIndirectInstancingRendering()) { - draw_calls.bindGlowCmd(); if (CVS->isAZDOEnabled()) { draw_calls.multidrawGlow(); @@ -632,16 +625,12 @@ void GeometryPasses::renderShadows(const DrawCalls& draw_calls, renderShadow(cascade); renderShadow(cascade); renderShadow(cascade); - renderShadow(cascade); + //renderShadow(cascade); renderShadow(cascade); renderShadow(cascade); renderShadow(cascade); renderShadow(cascade); - if (CVS->supportsIndirectInstancingRendering()) - draw_calls.bindShadowCmd(); - - if (CVS->isAZDOEnabled()) { draw_calls.multidrawShadows(cascade); @@ -716,9 +705,6 @@ void GeometryPasses::renderReflectiveShadowMap(const DrawCalls& draw_calls, drawRSM(rsm_matrix); drawRSM(rsm_matrix); - if (CVS->supportsIndirectInstancingRendering()) - draw_calls.bindReflectiveShadowMapsCmd(); - if (CVS->isAZDOEnabled()) { draw_calls.multidrawReflectiveShadowMaps(rsm_matrix); diff --git a/src/graphics/shader_based_renderer.cpp b/src/graphics/shader_based_renderer.cpp index ae37294cd..3513da9bb 100644 --- a/src/graphics/shader_based_renderer.cpp +++ b/src/graphics/shader_based_renderer.cpp @@ -160,7 +160,7 @@ void ShaderBasedRenderer::computeMatrixesAndCameras(scene::ICameraSceneNode *con // ============================================================================ void ShaderBasedRenderer::renderScene(scene::ICameraSceneNode * const camnode, - std::vector& glows, + const std::vector& glows, float dt, bool hasShadow, bool forceRTT) diff --git a/src/graphics/shader_based_renderer.hpp b/src/graphics/shader_based_renderer.hpp index e6a99d46c..ce2a96683 100644 --- a/src/graphics/shader_based_renderer.hpp +++ b/src/graphics/shader_based_renderer.hpp @@ -53,7 +53,7 @@ private: void prepareDrawCalls(scene::ICameraSceneNode *camnode); void renderScene(irr::scene::ICameraSceneNode * const camnode, - std::vector& glows, + const std::vector& glows, float dt, bool hasShadows, bool forceRTT); void renderParticles();