From 41e2d3e448201ed34c12841eeea3578a315c844d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Leclercq?= Date: Fri, 15 Jun 2018 14:13:18 +0200 Subject: [PATCH] Graphics/Material: Add EnableVertexColor temporary --- include/Nazara/Graphics/Material.hpp | 2 ++ include/Nazara/Graphics/Material.inl | 28 ++++++++++++++++++++ include/Nazara/Graphics/MaterialPipeline.hpp | 1 + include/Nazara/Graphics/MaterialPipeline.inl | 2 ++ src/Nazara/Graphics/MaterialPipeline.cpp | 2 +- 5 files changed, 34 insertions(+), 1 deletion(-) diff --git a/include/Nazara/Graphics/Material.hpp b/include/Nazara/Graphics/Material.hpp index 8baab7e62..9903553a5 100644 --- a/include/Nazara/Graphics/Material.hpp +++ b/include/Nazara/Graphics/Material.hpp @@ -83,6 +83,7 @@ namespace Nz inline void EnableShadowCasting(bool castShadows); inline void EnableShadowReceive(bool receiveShadows); inline void EnableStencilTest(bool stencilTest); + inline void EnableVertexColor(bool vertexColor); inline void EnsurePipelineUpdate() const; @@ -121,6 +122,7 @@ namespace Nz inline bool HasHeightMap() const; inline bool HasNormalMap() const; inline bool HasSpecularMap() const; + inline bool HasVertexColor() const; inline bool IsAlphaTestEnabled() const; inline bool IsBlendingEnabled() const; diff --git a/include/Nazara/Graphics/Material.inl b/include/Nazara/Graphics/Material.inl index 3831519a2..c6e56db84 100644 --- a/include/Nazara/Graphics/Material.inl +++ b/include/Nazara/Graphics/Material.inl @@ -392,6 +392,25 @@ namespace Nz InvalidatePipeline(); } + /*! + * \brief Enable/Disable vertex coloring on this material + * + * This is a temporary option, until the new material pipeline system is ready, allowing to enable vertex coloring. + * This option only works with meshes using vertex colors. + * + * \param vertexColor Defines if this material will use vertex color or not + * + * \remark Invalidates the pipeline + * + * \see HasVertexColor + */ + inline void Material::EnableVertexColor(bool vertexColor) + { + m_pipelineInfo.hasVertexColor = vertexColor; + + InvalidatePipeline(); + } + /*! * \brief Ensures the pipeline gets updated * @@ -756,6 +775,15 @@ namespace Nz return m_specularMap.IsValid(); } + /*! + * \brief Checks whether this material uses vertex coloring + * \return true If it is the case + */ + inline bool Material::HasVertexColor() const + { + return m_pipelineInfo.hasVertexColor; + } + /*! * \brief Checks whether this material has alpha test enabled * \return true If it is the case diff --git a/include/Nazara/Graphics/MaterialPipeline.hpp b/include/Nazara/Graphics/MaterialPipeline.hpp index 75e5731e0..ef3e1eafb 100644 --- a/include/Nazara/Graphics/MaterialPipeline.hpp +++ b/include/Nazara/Graphics/MaterialPipeline.hpp @@ -26,6 +26,7 @@ namespace Nz bool hasHeightMap = false; bool hasNormalMap = false; bool hasSpecularMap = false; + bool hasVertexColor = false; bool reflectionMapping = false; bool shadowReceive = true; diff --git a/include/Nazara/Graphics/MaterialPipeline.inl b/include/Nazara/Graphics/MaterialPipeline.inl index bc7ca1b72..2df585e28 100644 --- a/include/Nazara/Graphics/MaterialPipeline.inl +++ b/include/Nazara/Graphics/MaterialPipeline.inl @@ -71,6 +71,7 @@ namespace Nz NazaraPipelineBoolMember(hasHeightMap); NazaraPipelineBoolMember(hasNormalMap); NazaraPipelineBoolMember(hasSpecularMap); + NazaraPipelineBoolMember(hasVertexColor); NazaraPipelineBoolMember(reflectionMapping); NazaraPipelineBoolMember(shadowReceive); @@ -127,6 +128,7 @@ namespace std NazaraPipelineBoolMember(hasHeightMap); NazaraPipelineBoolMember(hasNormalMap); NazaraPipelineBoolMember(hasSpecularMap); + NazaraPipelineBoolMember(hasVertexColor); NazaraPipelineBoolMember(reflectionMapping); NazaraPipelineBoolMember(shadowReceive); diff --git a/src/Nazara/Graphics/MaterialPipeline.cpp b/src/Nazara/Graphics/MaterialPipeline.cpp index 6f2d5f173..743984783 100644 --- a/src/Nazara/Graphics/MaterialPipeline.cpp +++ b/src/Nazara/Graphics/MaterialPipeline.cpp @@ -98,7 +98,7 @@ namespace Nz list.SetParameter("FLAG_DEFERRED", static_cast((flags & ShaderFlags_Deferred) != 0)); list.SetParameter("FLAG_INSTANCING", static_cast((flags & ShaderFlags_Instancing) != 0)); list.SetParameter("FLAG_TEXTUREOVERLAY", static_cast((flags & ShaderFlags_TextureOverlay) != 0)); - list.SetParameter("FLAG_VERTEXCOLOR", static_cast((flags & ShaderFlags_VertexColor) != 0)); + list.SetParameter("FLAG_VERTEXCOLOR", m_pipelineInfo.hasVertexColor || static_cast((flags & ShaderFlags_VertexColor) != 0)); Instance& instance = m_instances[flags]; instance.uberInstance = m_pipelineInfo.uberShader->Get(list);