summaryrefslogtreecommitdiff
path: root/indra/llappearance
diff options
context:
space:
mode:
authorNyx Linden <nyx@lindenlab.com>2013-02-06 18:38:17 -0500
committerNyx Linden <nyx@lindenlab.com>2013-02-06 18:38:17 -0500
commit1cf611b0592b1f91979bfbac7870b64f3623eef9 (patch)
tree6031f13bf2053b34c57a65603053ac47619299cf /indra/llappearance
parent12f5f0669c1195ca7d76f3112e1409b6a06bc496 (diff)
SH-3651 FIX Beard edits not applying on server bakes
Despite incrementing the COF version, beard edits were not updating the head hash. We were not applying layers/parameters to the baked texture hashes for layers that did not contain a user-defined image. However, many layers have standard morph masks, etc that are affected by wearable parameters. Edited the LLTexLayerInterface::getWearable() method to return the proper wearable type if there is no associated local texture index, and all parameters in the wearable refer to a particular wearable type. Should be safe even if some (but not all) params have no wearable type defined.
Diffstat (limited to 'indra/llappearance')
-rw-r--r--indra/llappearance/lltexlayer.cpp40
1 files changed, 39 insertions, 1 deletions
diff --git a/indra/llappearance/lltexlayer.cpp b/indra/llappearance/lltexlayer.cpp
index 15d531259f..3c23f5f293 100644
--- a/indra/llappearance/lltexlayer.cpp
+++ b/indra/llappearance/lltexlayer.cpp
@@ -932,7 +932,45 @@ LLWearableType::EType LLTexLayerInterface::getWearableType() const
ETextureIndex te = getLocalTextureIndex();
if (TEX_INVALID == te)
{
- return LLWearableType::WT_INVALID;
+ LLWearableType::EType type = LLWearableType::WT_INVALID;
+ param_color_list_t::const_iterator color_iter = mParamColorList.begin();
+ param_alpha_list_t::const_iterator alpha_iter = mParamAlphaList.begin();
+
+ for (; color_iter != mParamColorList.end(); color_iter++)
+ {
+ LLTexLayerParamColor* param = *color_iter;
+ if (param)
+ {
+ LLWearableType::EType new_type = (LLWearableType::EType)param->getWearableType();
+ if (new_type != LLWearableType::WT_INVALID && new_type != type)
+ {
+ if (type != LLWearableType::WT_INVALID)
+ {
+ return LLWearableType::WT_INVALID;
+ }
+ type = new_type;
+ }
+ }
+ }
+
+ for (; alpha_iter != mParamAlphaList.end(); alpha_iter++)
+ {
+ LLTexLayerParamAlpha* param = *alpha_iter;
+ if (param)
+ {
+ LLWearableType::EType new_type = (LLWearableType::EType)param->getWearableType();
+ if (new_type != LLWearableType::WT_INVALID && new_type != type)
+ {
+ if (type != LLWearableType::WT_INVALID)
+ {
+ return LLWearableType::WT_INVALID;
+ }
+ type = new_type;
+ }
+ }
+ }
+
+ return type;
}
return LLAvatarAppearanceDictionary::getTEWearableType(te);
}