summaryrefslogtreecommitdiff
path: root/indra/llprimitive/llmaterial.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/llprimitive/llmaterial.cpp')
-rw-r--r--indra/llprimitive/llmaterial.cpp14
1 files changed, 12 insertions, 2 deletions
diff --git a/indra/llprimitive/llmaterial.cpp b/indra/llprimitive/llmaterial.cpp
index 57ceb3e11b..e6d2790a5f 100644
--- a/indra/llprimitive/llmaterial.cpp
+++ b/indra/llprimitive/llmaterial.cpp
@@ -106,10 +106,16 @@ LLMaterial::LLMaterial()
, mEnvironmentIntensity(LLMaterial::DEFAULT_ENV_INTENSITY)
, mDiffuseAlphaMode(LLMaterial::DIFFUSE_ALPHA_MODE_BLEND)
, mAlphaMaskCutoff(0)
+ , mIsDiffuseAlphaInvalid(false)
+ , mIsNormalInvalid(false)
+ , mIsSpecularInvalid(false)
{
}
LLMaterial::LLMaterial(const LLSD& material_data)
+ : mIsDiffuseAlphaInvalid(false)
+ , mIsNormalInvalid(false)
+ , mIsSpecularInvalid(false)
{
fromLLSD(material_data);
}
@@ -199,13 +205,17 @@ U32 LLMaterial::getShaderMask(U32 alpha_mode)
{
ret = getDiffuseAlphaMode();
}
+ if (mIsDiffuseAlphaInvalid && ret != DIFFUSE_ALPHA_MODE_DEFAULT)
+ {
+ ret = alpha_mode != DIFFUSE_ALPHA_MODE_NONE;
+ }
llassert(ret < SHADER_COUNT);
//next bit is whether or not specular map is present
const U32 SPEC_BIT = 0x4;
- if (getSpecularID().notNull())
+ if (getSpecularID().notNull() && !mIsSpecularInvalid)
{
ret |= SPEC_BIT;
}
@@ -214,7 +224,7 @@ U32 LLMaterial::getShaderMask(U32 alpha_mode)
//next bit is whether or not normal map is present
const U32 NORM_BIT = 0x8;
- if (getNormalID().notNull())
+ if (getNormalID().notNull() && !mIsNormalInvalid)
{
ret |= NORM_BIT;
}