From aeec8ee0f426af55cf259b5ac7f5030546b258a1 Mon Sep 17 00:00:00 2001 From: Lynix Date: Mon, 1 Sep 2014 16:00:54 +0200 Subject: [PATCH] Enabled new shader flags Former-commit-id: df06f4faf4c7275c702338eee1ed14a2445662a1 --- include/Nazara/Graphics/Enums.hpp | 8 +++++--- src/Nazara/Graphics/Material.cpp | 13 ++++++++----- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/include/Nazara/Graphics/Enums.hpp b/include/Nazara/Graphics/Enums.hpp index 6f9cc9814..4865f586b 100644 --- a/include/Nazara/Graphics/Enums.hpp +++ b/include/Nazara/Graphics/Enums.hpp @@ -121,10 +121,12 @@ enum nzShaderFlags { nzShaderFlags_None = 0, - nzShaderFlags_Deferred = 0x1, - nzShaderFlags_Instancing = 0x2, + nzShaderFlags_Billboard = 0x1, + nzShaderFlags_Deferred = 0x2, + nzShaderFlags_Instancing = 0x4, + nzShaderFlags_VertexColor = 0x8, - nzShaderFlags_Max = nzShaderFlags_Instancing*2-1 + nzShaderFlags_Max = nzShaderFlags_VertexColor*2-1 }; #endif // NAZARA_ENUMS_GRAPHICS_HPP diff --git a/src/Nazara/Graphics/Material.cpp b/src/Nazara/Graphics/Material.cpp index 123db7ffc..024a0efcf 100644 --- a/src/Nazara/Graphics/Material.cpp +++ b/src/Nazara/Graphics/Material.cpp @@ -248,10 +248,11 @@ const NzUberShader* NzMaterial::GetShader() const const NzUberShaderInstance* NzMaterial::GetShaderInstance(nzUInt32 flags) const { - if (!m_shaders[flags].uberInstance) + const ShaderInstance& instance = m_shaders[flags]; + if (!instance.uberInstance) GenerateShader(flags); - return m_shaders[flags].uberInstance; + return instance.uberInstance; } float NzMaterial::GetShininess() const @@ -690,8 +691,10 @@ void NzMaterial::GenerateShader(nzUInt32 flags) const m_normalMap.IsValid() || m_heightMap.IsValid() || m_specularMap.IsValid()); list.SetParameter("TRANSFORM", m_transformEnabled); + list.SetParameter("FLAG_BILLBOARD", static_cast(flags & nzShaderFlags_Billboard)); list.SetParameter("FLAG_DEFERRED", static_cast(flags & nzShaderFlags_Deferred)); list.SetParameter("FLAG_INSTANCING", static_cast(flags & nzShaderFlags_Instancing)); + list.SetParameter("FLAG_VERTEXCOLOR", static_cast(flags & nzShaderFlags_VertexColor)); ShaderInstance& instance = m_shaders[flags]; instance.uberInstance = m_uberShader->Get(list); @@ -759,7 +762,7 @@ bool NzMaterial::Initialize() } uberShader->SetShader(nzShaderStage_Fragment, fragmentShader, "ALPHA_MAPPING ALPHA_TEST AUTO_TEXCOORDS DIFFUSE_MAPPING"); - uberShader->SetShader(nzShaderStage_Vertex, vertexShader, "FLAG_INSTANCING TEXTURE_MAPPING TRANSFORM UNIFORM_VERTEX_DEPTH"); + uberShader->SetShader(nzShaderStage_Vertex, vertexShader, "FLAG_BILLBOARD FLAG_INSTANCING FLAG_VERTEXCOLOR TEXTURE_MAPPING TRANSFORM UNIFORM_VERTEX_DEPTH"); NzUberShaderLibrary::Register("Basic", uberShader.get()); uberShader.release(); @@ -799,8 +802,8 @@ bool NzMaterial::Initialize() vertexShader.Set(reinterpret_cast(compatibilityVertexShader), sizeof(compatibilityVertexShader)); } - uberShader->SetShader(nzShaderStage_Fragment, fragmentShader, "FLAG_DEFERRED ALPHA_MAPPING ALPHA_TEST DIFFUSE_MAPPING EMISSIVE_MAPPING LIGHTING NORMAL_MAPPING PARALLAX_MAPPING SPECULAR_MAPPING"); - uberShader->SetShader(nzShaderStage_Vertex, vertexShader, "FLAG_DEFERRED FLAG_INSTANCING COMPUTE_TBNMATRIX LIGHTING PARALLAX_MAPPING TEXTURE_MAPPING TRANSFORM UNIFORM_VERTEX_DEPTH"); + uberShader->SetShader(nzShaderStage_Fragment, fragmentShader, "FLAG_DEFERRED ALPHA_MAPPING ALPHA_TEST AUTO_TEXCOORDS DIFFUSE_MAPPING EMISSIVE_MAPPING LIGHTING NORMAL_MAPPING PARALLAX_MAPPING SPECULAR_MAPPING"); + uberShader->SetShader(nzShaderStage_Vertex, vertexShader, "FLAG_BILLBOARD FLAG_DEFERRED FLAG_INSTANCING FLAG_VERTEXCOLOR COMPUTE_TBNMATRIX LIGHTING PARALLAX_MAPPING TEXTURE_MAPPING TRANSFORM UNIFORM_VERTEX_DEPTH"); NzUberShaderLibrary::Register("PhongLighting", uberShader.get()); uberShader.release();