From a008439cde4f93ee469fb9bcdd23c1e57d890fb9 Mon Sep 17 00:00:00 2001 From: Lynix Date: Thu, 11 Sep 2014 00:10:24 +0200 Subject: [PATCH] Added depth sorting attribute to Material class Only works for billboards for now Former-commit-id: 50a46d3266a2e7fc6d75629103ad8b7193b13bf3 --- include/Nazara/Graphics/Material.hpp | 3 +++ src/Nazara/Graphics/ForwardRenderQueue.cpp | 2 +- src/Nazara/Graphics/Material.cpp | 11 +++++++++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/include/Nazara/Graphics/Material.hpp b/include/Nazara/Graphics/Material.hpp index 0f41e0f39..19767f690 100644 --- a/include/Nazara/Graphics/Material.hpp +++ b/include/Nazara/Graphics/Material.hpp @@ -53,6 +53,7 @@ class NAZARA_API NzMaterial : public NzResource void Enable(nzRendererParameter renderParameter, bool enable); void EnableAlphaTest(bool alphaTest); + void EnableDepthSorting(bool depthSorting); void EnableLighting(bool lighting); void EnableTransform(bool transform); @@ -88,6 +89,7 @@ class NAZARA_API NzMaterial : public NzResource bool HasSpecularMap() const; bool IsAlphaTestEnabled() const; + bool IsDepthSortingEnabled() const; bool IsEnabled(nzRendererParameter renderParameter) const; bool IsLightingEnabled() const; bool IsTransformEnabled() const; @@ -161,6 +163,7 @@ class NAZARA_API NzMaterial : public NzResource NzUberShaderConstRef m_uberShader; mutable ShaderInstance m_shaders[nzShaderFlags_Max+1]; bool m_alphaTestEnabled; + bool m_depthSortingEnabled; bool m_lightingEnabled; bool m_transformEnabled; float m_alphaThreshold; diff --git a/src/Nazara/Graphics/ForwardRenderQueue.cpp b/src/Nazara/Graphics/ForwardRenderQueue.cpp index cc0a4d0e1..1ecb307ea 100644 --- a/src/Nazara/Graphics/ForwardRenderQueue.cpp +++ b/src/Nazara/Graphics/ForwardRenderQueue.cpp @@ -434,7 +434,7 @@ void NzForwardRenderQueue::Sort(const NzAbstractViewer* viewer) const NzMaterial* mat = pair.first; auto& container = pair.second; - if (mat->IsEnabled(nzRendererParameter_Blend)) + if (mat->IsDepthSortingEnabled()) { std::sort(container.begin(), container.end(), [&viewerPos](const BillboardData& data1, const BillboardData& data2) { diff --git a/src/Nazara/Graphics/Material.cpp b/src/Nazara/Graphics/Material.cpp index 024a0efcf..3e6e600e9 100644 --- a/src/Nazara/Graphics/Material.cpp +++ b/src/Nazara/Graphics/Material.cpp @@ -152,6 +152,11 @@ void NzMaterial::EnableAlphaTest(bool alphaTest) InvalidateShaders(); } +void NzMaterial::EnableDepthSorting(bool depthSorting) +{ + m_depthSortingEnabled = depthSorting; +} + void NzMaterial::EnableLighting(bool lighting) { m_lightingEnabled = lighting; @@ -320,6 +325,11 @@ bool NzMaterial::IsAlphaTestEnabled() const return m_alphaTestEnabled; } +bool NzMaterial::IsDepthSortingEnabled() const +{ + return m_depthSortingEnabled; +} + bool NzMaterial::IsEnabled(nzRendererParameter parameter) const { #ifdef NAZARA_DEBUG @@ -376,6 +386,7 @@ void NzMaterial::Reset() m_alphaThreshold = 0.2f; m_alphaTestEnabled = false; m_ambientColor = NzColor(128, 128, 128); + m_depthSortingEnabled = false; m_diffuseColor = NzColor::White; m_diffuseSampler = NzTextureSampler(); m_lightingEnabled = true;