From 51415ed43a790a1e702435b4e6e8659b34a6b2e8 Mon Sep 17 00:00:00 2001 From: Elderme Date: Tue, 20 Oct 2015 21:32:56 +0200 Subject: [PATCH] Minor coding style improvements --- src/graphics/draw_tools.hpp | 47 +++++++++++++++++++------------- src/graphics/geometry_passes.cpp | 30 ++++++++++---------- 2 files changed, 43 insertions(+), 34 deletions(-) diff --git a/src/graphics/draw_tools.hpp b/src/graphics/draw_tools.hpp index 54ff05486..087996de7 100644 --- a/src/graphics/draw_tools.hpp +++ b/src/graphics/draw_tools.hpp @@ -72,20 +72,19 @@ struct CustomUnrollArgs<> }; // CustomUnrollArgs - // ---------------------------------------------------------------------------- -/** Variadic template to bind textures.*/ +/** Variadic template to implement TexExpander*/ template struct TexExpanderImpl { template - static void ExpandTex(const GLMesh &mesh, + static void expandTex(const GLMesh &mesh, const STK::Tuple &tex_swizzle, Args... args) { size_t idx = STK::tuple_get(tex_swizzle); - TexExpanderImpl::template ExpandTex(mesh, + TexExpanderImpl::template expandTex( mesh, tex_swizzle, args..., getTextureGLuint(mesh.textures[idx])); @@ -98,7 +97,7 @@ template struct TexExpanderImpl { template - static void ExpandTex(const GLMesh &mesh, + static void expandTex(const GLMesh &mesh, const STK::Tuple &tex_swizzle, Args... args) { @@ -106,48 +105,53 @@ struct TexExpanderImpl } // ExpandTex }; // TexExpanderImpl - // ---------------------------------------------------------------------------- template struct TexExpander { + /** Bind textures. + * \param mesh The mesh which owns the textures + * \param tex_swizzle Indices of texture id in mesh texture array + * \param args Other textures ids (each of them will be bound) + */ template - static void ExpandTex(const GLMesh &mesh, + static void expandTex(const GLMesh &mesh, const STK::Tuple &tex_swizzle, Args... args) { - TexExpanderImpl::ExpandTex(mesh, + TexExpanderImpl::expandTex(mesh, tex_swizzle, args...); } // ExpandTex }; // TexExpander - // ---------------------------------------------------------------------------- +/** Variadic template to implement HandleExpander*/ template struct HandleExpanderImpl { template - static void Expand(uint64_t *TextureHandles, + static void expand(uint64_t *texture_handles, const STK::Tuple &tex_swizzle, Args... args) { size_t idx = STK::tuple_get(tex_swizzle); - HandleExpanderImpl::template Expand(TextureHandles, + HandleExpanderImpl::template expand(texture_handles, tex_swizzle, args..., - TextureHandles[idx]); + texture_handles[idx]); } // Expand }; // HandleExpanderImpl // ---------------------------------------------------------------------------- +/** Partial specialisation of TexExpanderImpl to end the recursion */ template struct HandleExpanderImpl { template - static void Expand(uint64_t *TextureHandles, + static void expand(uint64_t *texture_handles, const STK::Tuple &tex_swizzle, Args... args) { @@ -159,20 +163,25 @@ struct HandleExpanderImpl template struct HandleExpander { + /** Give acces to textures in shaders without first binding them + * (require GL_ARB_bindless_texture extension) in order to reduce + * driver overhead. + * \param texture_handles Array of handles + * \param tex_swizzle Indices of handles in textures_handles array + * \param args Other textures handles + * (each of them will be accessible in shader) + */ template - static void Expand(uint64_t *TextureHandles, + static void expand(uint64_t *texture_handles, const STK::Tuple &tex_swizzle, Args... args) { - HandleExpanderImpl::Expand(TextureHandles, + HandleExpanderImpl::expand(texture_handles, tex_swizzle, args...); } // Expand }; // HandleExpander - - - -#endif //HEADER_DRAW_TOOLS_HPP \ No newline at end of file +#endif //HEADER_DRAW_TOOLS_HPP diff --git a/src/graphics/geometry_passes.cpp b/src/graphics/geometry_passes.cpp index 5ec7a33ec..9a0205cd0 100644 --- a/src/graphics/geometry_passes.cpp +++ b/src/graphics/geometry_passes.cpp @@ -1003,9 +1003,9 @@ void renderMeshes1stPass() } if (CVS->isAZDOEnabled()) - HandleExpander::template Expand(mesh.TextureHandles, T::FirstPassTextures); + HandleExpander::template expand(mesh.TextureHandles, T::FirstPassTextures); else - TexExpander::template ExpandTex(mesh, T::FirstPassTextures); + TexExpander::template expandTex(mesh, T::FirstPassTextures); CustomUnrollArgs::template drawMesh(meshes.at(i)); } } // renderMeshes1stPass @@ -1029,7 +1029,7 @@ void renderInstancedMeshes1stPass(Args...args) continue; } #endif - TexExpander::template ExpandTex(*mesh, T::FirstPassTextures); + TexExpander::template expandTex(*mesh, T::FirstPassTextures); T::InstancedFirstPassShader::getInstance()->setUniforms(args...); glDrawElementsIndirect(GL_TRIANGLES, GL_UNSIGNED_SHORT, (const void*)((SolidPassCmd::getInstance()->Offset[T::MaterialType] + i) * sizeof(DrawElementsIndirectCommand))); @@ -1135,12 +1135,12 @@ void renderMeshes2ndPass( const std::vector &Prefilled_Handle, if (CVS->isAZDOEnabled()) HandleExpander::template - Expand(mesh.TextureHandles, T::SecondPassTextures, + expand(mesh.TextureHandles, T::SecondPassTextures, Prefilled_Handle[0], Prefilled_Handle[1], Prefilled_Handle[2]); else TexExpander::template - ExpandTex(mesh, T::SecondPassTextures, Prefilled_Tex[0], + expandTex(mesh, T::SecondPassTextures, Prefilled_Tex[0], Prefilled_Tex[1], Prefilled_Tex[2]); CustomUnrollArgs::template drawMesh(meshes.at(i)); } @@ -1158,7 +1158,7 @@ void renderInstancedMeshes2ndPass(const std::vector &Prefilled_tex, Args { GLMesh *mesh = meshes[i]; TexExpander::template - ExpandTex(*mesh, T::SecondPassTextures, Prefilled_tex[0], + expandTex(*mesh, T::SecondPassTextures, Prefilled_tex[0], Prefilled_tex[1], Prefilled_tex[2]); T::InstancedSecondPassShader::getInstance()->setUniforms(args...); glDrawElementsIndirect(GL_TRIANGLES, GL_UNSIGNED_SHORT, @@ -1178,7 +1178,7 @@ void multidraw2ndPass(const std::vector &Handles, Args... args) if (SolidPassCmd::getInstance()->Size[T::MaterialType]) { HandleExpander::template - Expand(nulltex, T::SecondPassTextures, Handles[0], Handles[1], + expand(nulltex, T::SecondPassTextures, Handles[0], Handles[1], Handles[2]); T::InstancedSecondPassShader::getInstance()->setUniforms(args...); glMultiDrawElementsIndirect(GL_TRIANGLES, GL_UNSIGNED_SHORT, @@ -1269,7 +1269,7 @@ void GeometryPasses::renderSolidSecondPass( unsigned render_target_diffuse, if (SolidPassCmd::getInstance()->Size[GrassMat::MaterialType]) { HandleExpander - ::Expand(nulltex, GrassMat::SecondPassTextures, DiffuseHandle, + ::expand(nulltex, GrassMat::SecondPassTextures, DiffuseHandle, SpecularHandle, SSAOHandle, DepthHandle); GrassMat::InstancedSecondPassShader::getInstance()->setUniforms(m_wind_dir, irr_driver->getSunDirection()); @@ -1300,7 +1300,7 @@ void GeometryPasses::renderSolidSecondPass( unsigned render_target_diffuse, { GLMesh *mesh = meshes[i]; TexExpander - ::ExpandTex(*mesh, GrassMat::SecondPassTextures, DiffSpecSSAOTex[0], + ::expandTex(*mesh, GrassMat::SecondPassTextures, DiffSpecSSAOTex[0], DiffSpecSSAOTex[1], DiffSpecSSAOTex[2], irr_driver->getDepthStencilTexture()); GrassMat::InstancedSecondPassShader::getInstance() @@ -1552,9 +1552,9 @@ void renderShadow(unsigned cascade) if (!CVS->isARBBaseInstanceUsable()) glBindVertexArray(mesh->vao); if (CVS->isAZDOEnabled()) - HandleExpander::template Expand(mesh->TextureHandles, T::ShadowTextures); + HandleExpander::template expand(mesh->TextureHandles, T::ShadowTextures); else - TexExpander::template ExpandTex(*mesh, T::ShadowTextures); + TexExpander::template expandTex(*mesh, T::ShadowTextures); CustomUnrollArgs::template drawMesh(t.at(i), cascade); } // for i } // renderShadow @@ -1572,7 +1572,7 @@ void renderInstancedShadow(unsigned cascade, Args ...args) GLMesh *mesh = t[i]; TexExpander::template - ExpandTex(*mesh, T::ShadowTextures); + expandTex(*mesh, T::ShadowTextures); T::InstancedShadowPassShader::getInstance()->setUniforms(args..., cascade); size_t tmp = ShadowPassCmd::getInstance()->Offset[cascade][T::MaterialType] + i; glDrawElementsIndirect(GL_TRIANGLES, GL_UNSIGNED_SHORT, @@ -1700,9 +1700,9 @@ void drawRSM(const core::matrix4 & rsm_matrix) if (!CVS->isARBBaseInstanceUsable()) glBindVertexArray(mesh->vao); if (CVS->isAZDOEnabled()) - HandleExpander::template Expand(mesh->TextureHandles, T::RSMTextures); + HandleExpander::template expand(mesh->TextureHandles, T::RSMTextures); else - TexExpander::template ExpandTex(*mesh, T::RSMTextures); + TexExpander::template expandTex(*mesh, T::RSMTextures); CustomUnrollArgs::template drawMesh(t.at(i), rsm_matrix); } } // drawRSM @@ -1719,7 +1719,7 @@ void renderRSMShadow(Args ...args) std::vector Textures; GLMesh *mesh = t[i]; - TexExpander::template ExpandTex(*mesh, T::RSMTextures); + TexExpander::template expandTex(*mesh, T::RSMTextures); T::InstancedRSMShader::getInstance()->setUniforms(args...); glDrawElementsIndirect(GL_TRIANGLES, GL_UNSIGNED_SHORT, (const void*)((RSMPassCmd::getInstance()->Offset[T::MaterialType] + i)