From eceae8be5c4632b84c366b8d7e439d235c26430a Mon Sep 17 00:00:00 2001 From: Ykkrosh Date: Sun, 29 Sep 2013 14:02:47 +0000 Subject: [PATCH] Fix crash when setting rally point This was SVN commit r13908. --- source/graphics/Decal.cpp | 1 + source/graphics/Material.h | 3 +++ source/graphics/Model.cpp | 4 ++++ 3 files changed, 8 insertions(+) diff --git a/source/graphics/Decal.cpp b/source/graphics/Decal.cpp index b86aff004b..17660d3dd0 100644 --- a/source/graphics/Decal.cpp +++ b/source/graphics/Decal.cpp @@ -111,4 +111,5 @@ void CModelDecal::SetTransform(const CMatrix3D& transform) void CModelDecal::RemoveShadows() { m_Decal.m_Material.AddShaderDefine(str_DISABLE_RECEIVE_SHADOWS, str_1); + m_Decal.m_Material.RecomputeCombinedShaderDefines(); } diff --git a/source/graphics/Material.h b/source/graphics/Material.h index f4f53bdc38..844a199fae 100644 --- a/source/graphics/Material.h +++ b/source/graphics/Material.h @@ -52,6 +52,7 @@ public: void SetShaderEffect(const CStr& effect); CStrIntern GetShaderEffect() const { return m_ShaderEffect; } + // Must call RecomputeCombinedShaderDefines after this, before rendering with this material void AddShaderDefine(CStrIntern key, CStrIntern value); // conditionFlags is a bitmask representing which indexes of the @@ -59,7 +60,9 @@ public: // Use 0 if you don't care about conditional defines. const CShaderDefines& GetShaderDefines(uint32_t conditionFlags) const { return m_CombinedShaderDefines.at(conditionFlags); } + // Must call RecomputeCombinedShaderDefines after this, before rendering with this material void AddConditionalDefine(const char* defname, const char* defvalue, int type, std::vector &args); + const CShaderConditionalDefines& GetConditionalDefines() const { return m_ConditionalDefines; } void AddStaticUniform(const char* key, const CVector4D& value); diff --git a/source/graphics/Model.cpp b/source/graphics/Model.cpp index bec181aaa3..d9dc265d3b 100644 --- a/source/graphics/Model.cpp +++ b/source/graphics/Model.cpp @@ -626,7 +626,10 @@ void CModel::AddFlagsRec(int flags) m_Flags |= flags; if (flags & MODELFLAG_IGNORE_LOS) + { m_Material.AddShaderDefine(str_IGNORE_LOS, str_1); + m_Material.RecomputeCombinedShaderDefines(); + } for (size_t i = 0; i < m_Props.size(); ++i) if (m_Props[i].m_Model->ToCModel()) @@ -638,6 +641,7 @@ void CModel::RemoveShadowsRec() m_Flags &= ~MODELFLAG_CASTSHADOWS; m_Material.AddShaderDefine(str_DISABLE_RECEIVE_SHADOWS, str_1); + m_Material.RecomputeCombinedShaderDefines(); for (size_t i = 0; i < m_Props.size(); ++i) {