From 88d3ec1ad181637b4dfac939830b18f15fa182cc Mon Sep 17 00:00:00 2001 From: Lynix Date: Tue, 18 Jun 2013 00:37:40 +0200 Subject: [PATCH] Refactored Material interface Former-commit-id: 9a00be1b73b2c879fc77c9fdddc0192baa241fda --- include/Nazara/Renderer/Material.hpp | 20 ++--- src/Nazara/Graphics/ForwardRenderQueue.cpp | 2 +- src/Nazara/Renderer/Material.cpp | 87 ++++++++++------------ 3 files changed, 50 insertions(+), 59 deletions(-) diff --git a/include/Nazara/Renderer/Material.hpp b/include/Nazara/Renderer/Material.hpp index e72750e92..7e6f041b3 100644 --- a/include/Nazara/Renderer/Material.hpp +++ b/include/Nazara/Renderer/Material.hpp @@ -45,15 +45,13 @@ class NAZARA_API NzMaterial : public NzResource void Apply(const NzShader* shader) const; - void EnableAlphaBlending(bool blending); - void EnableFaceCulling(bool faceCulling); + void Enable(nzRendererParameter renderParameter, bool enable); void EnableLighting(bool lighting); - void EnableZBuffer(bool zBuffer); - void EnableZWrite(bool zWrite); - NzColor GetAmbientColor() const; NzTexture* GetAlphaMap() const; + NzColor GetAmbientColor() const; const NzShader* GetCustomShader() const; + nzRendererComparison GetDepthFunc() const; NzColor GetDiffuseColor() const; NzTexture* GetDiffuseMap() const; NzTextureSampler& GetDiffuseSampler(); @@ -64,6 +62,7 @@ class NAZARA_API NzMaterial : public NzResource nzFaceFilling GetFaceFilling() const; NzTexture* GetHeightMap() const; NzTexture* GetNormalMap() const; + const NzRenderStates& GetRenderStates() const; nzUInt32 GetShaderFlags() const; float GetShininess() const; NzColor GetSpecularColor() const; @@ -71,15 +70,11 @@ class NAZARA_API NzMaterial : public NzResource NzTextureSampler& GetSpecularSampler(); const NzTextureSampler& GetSpecularSampler() const; nzBlendFunc GetSrcBlend() const; - nzRendererComparison GetZTestCompare() const; bool HasCustomShader() const; - bool IsAlphaBlendingEnabled() const; - bool IsFaceCullingEnabled() const; + bool IsEnabled(nzRendererParameter renderParameter) const; bool IsLightingEnabled() const; - bool IsZBufferEnabled() const; - bool IsZWriteEnabled() const; bool LoadFromFile(const NzString& filePath, const NzMaterialParams& params = NzMaterialParams()); bool LoadFromMemory(const void* data, std::size_t size, const NzMaterialParams& params = NzMaterialParams()); @@ -90,6 +85,8 @@ class NAZARA_API NzMaterial : public NzResource bool SetAlphaMap(const NzString& texturePath); void SetAlphaMap(NzTexture* map); void SetAmbientColor(const NzColor& ambient); + void SetCustomShader(const NzShader* shader); + void SetDepthFunc(nzRendererComparison depthFunc); void SetDiffuseColor(const NzColor& diffuse); bool SetDiffuseMap(const NzString& texturePath); void SetDiffuseMap(NzTexture* map); @@ -103,14 +100,13 @@ class NAZARA_API NzMaterial : public NzResource void SetHeightMap(NzTexture* map); bool SetNormalMap(const NzString& texturePath); void SetNormalMap(NzTexture* map); - void SetCustomShader(const NzShader* shader); + void SetRenderStates(const NzRenderStates& states); void SetShininess(float shininess); void SetSpecularColor(const NzColor& specular); bool SetSpecularMap(const NzString& texturePath); void SetSpecularMap(NzTexture* map); void SetSpecularSampler(const NzTextureSampler& sampler); void SetSrcBlend(nzBlendFunc func); - void SetZTestCompare(nzRendererComparison compareFunc); NzMaterial& operator=(const NzMaterial& material); NzMaterial& operator=(NzMaterial&& material); diff --git a/src/Nazara/Graphics/ForwardRenderQueue.cpp b/src/Nazara/Graphics/ForwardRenderQueue.cpp index f892bfc98..f5f0dfce4 100644 --- a/src/Nazara/Graphics/ForwardRenderQueue.cpp +++ b/src/Nazara/Graphics/ForwardRenderQueue.cpp @@ -101,7 +101,7 @@ void NzForwardRenderQueue::AddModel(const NzModel* model) case nzAnimationType_Static: { NzStaticMesh* staticMesh = static_cast(subMesh); - if (material->IsAlphaBlendingEnabled()) + if (material->IsEnabled(nzRendererParameter_Blend)) { unsigned int index = transparentStaticModels.size(); transparentStaticModels.resize(index+1); diff --git a/src/Nazara/Renderer/Material.cpp b/src/Nazara/Renderer/Material.cpp index 9da4416e9..995bad685 100644 --- a/src/Nazara/Renderer/Material.cpp +++ b/src/Nazara/Renderer/Material.cpp @@ -140,14 +140,17 @@ void NzMaterial::Apply(const NzShader* shader) const NzRenderer::SetRenderStates(m_states); } -void NzMaterial::EnableAlphaBlending(bool blending) +void NzMaterial::Enable(nzRendererParameter renderParameter, bool enable) { - m_states.parameters[nzRendererParameter_Blend] = blending; -} + #ifdef NAZARA_DEBUG + if (renderParameter > nzRendererParameter_Max) + { + NazaraError("Renderer parameter out of enum"); + return; + } + #endif -void NzMaterial::EnableFaceCulling(bool faceCulling) -{ - m_states.parameters[nzRendererParameter_FaceCulling] = faceCulling; + m_states.parameters[renderParameter] = enable; } void NzMaterial::EnableLighting(bool lighting) @@ -159,14 +162,9 @@ void NzMaterial::EnableLighting(bool lighting) m_shaderFlags &= ~nzShaderFlags_Lighting; } -void NzMaterial::EnableZBuffer(bool zBuffer) +NzTexture* NzMaterial::GetAlphaMap() const { - m_states.parameters[nzRendererParameter_DepthBuffer] = zBuffer; -} - -void NzMaterial::EnableZWrite(bool zWrite) -{ - m_states.parameters[nzRendererParameter_DepthWrite] = zWrite; + return m_alphaMap; } NzColor NzMaterial::GetAmbientColor() const @@ -174,16 +172,16 @@ NzColor NzMaterial::GetAmbientColor() const return m_ambientColor; } -NzTexture* NzMaterial::GetAlphaMap() const -{ - return m_alphaMap; -} - const NzShader* NzMaterial::GetCustomShader() const { return m_customShader; } +nzRendererComparison NzMaterial::GetDepthFunc() const +{ + return m_states.depthFunc; +} + NzColor NzMaterial::GetDiffuseColor() const { return m_diffuseColor; @@ -234,6 +232,11 @@ NzTexture* NzMaterial::GetNormalMap() const return m_normalMap; } +const NzRenderStates& NzMaterial::GetRenderStates() const +{ + return m_states; +} + nzUInt32 NzMaterial::GetShaderFlags() const { return m_shaderFlags; @@ -269,24 +272,22 @@ nzBlendFunc NzMaterial::GetSrcBlend() const return m_states.srcBlend; } -nzRendererComparison NzMaterial::GetZTestCompare() const -{ - return m_states.depthFunc; -} - bool NzMaterial::HasCustomShader() const { return m_customShader != nullptr; } -bool NzMaterial::IsAlphaBlendingEnabled() const +bool NzMaterial::IsEnabled(nzRendererParameter parameter) const { - return m_states.parameters[nzRendererParameter_Blend]; -} + #ifdef NAZARA_DEBUG + if (parameter > nzRendererParameter_Max) + { + NazaraError("Renderer parameter out of enum"); + return false; + } + #endif -bool NzMaterial::IsFaceCullingEnabled() const -{ - return m_states.parameters[nzRendererParameter_FaceCulling]; + return m_states.parameters[parameter]; } bool NzMaterial::IsLightingEnabled() const @@ -294,16 +295,6 @@ bool NzMaterial::IsLightingEnabled() const return m_lightingEnabled; } -bool NzMaterial::IsZBufferEnabled() const -{ - return m_states.parameters[nzRendererParameter_DepthBuffer]; -} - -bool NzMaterial::IsZWriteEnabled() const -{ - return m_states.parameters[nzRendererParameter_DepthWrite]; -} - bool NzMaterial::LoadFromFile(const NzString& filePath, const NzMaterialParams& params) { return NzMaterialLoader::LoadFromFile(this, filePath, params); @@ -378,6 +369,11 @@ void NzMaterial::SetCustomShader(const NzShader* shader) m_customShader = shader; } +void NzMaterial::SetDepthFunc(nzRendererComparison depthFunc) +{ + m_states.depthFunc = depthFunc; +} + void NzMaterial::SetDiffuseColor(const NzColor& diffuse) { m_diffuseColor = diffuse; @@ -503,6 +499,11 @@ void NzMaterial::SetNormalMap(NzTexture* map) m_shaderFlags &= ~nzShaderFlags_NormalMapping; } +void NzMaterial::SetRenderStates(const NzRenderStates& states) +{ + m_states = states; +} + void NzMaterial::SetShininess(float shininess) { m_shininess = shininess; @@ -549,11 +550,6 @@ void NzMaterial::SetSrcBlend(nzBlendFunc func) m_states.srcBlend = func; } -void NzMaterial::SetZTestCompare(nzRendererComparison compareFunc) -{ - m_states.depthFunc = compareFunc; -} - NzMaterial& NzMaterial::operator=(const NzMaterial& material) { Copy(material); @@ -584,10 +580,9 @@ NzMaterial* NzMaterial::GetDefault() if (!initialized) { - defaultMaterial.EnableFaceCulling(false); defaultMaterial.EnableLighting(false); - defaultMaterial.SetFaceFilling(nzFaceFilling_Line); defaultMaterial.SetDiffuseColor(NzColor::White); + defaultMaterial.SetFaceFilling(nzFaceFilling_Line); initialized = true; }