summaryrefslogtreecommitdiff
path: root/indra/llappearance
diff options
context:
space:
mode:
authordolphin <dolphin@lindenlab.com>2013-06-19 09:58:43 -0700
committerdolphin <dolphin@lindenlab.com>2013-06-19 09:58:43 -0700
commitea40b3a37b0f9b7e09e999a2c6529905e251ecad (patch)
tree9cfb5603040efc7738bca633b902c190db28b0bf /indra/llappearance
parentebc604fa8d12fb08fda1ac55aae817ad0135bb6b (diff)
parent2655c7a17ae38a073dcf8f05b0127b68edc34c95 (diff)
Merge with viewer 3.6.0
Diffstat (limited to 'indra/llappearance')
-rw-r--r--indra/llappearance/llpolymorph.cpp16
1 files changed, 14 insertions, 2 deletions
diff --git a/indra/llappearance/llpolymorph.cpp b/indra/llappearance/llpolymorph.cpp
index 8a17819083..93c2f15a53 100644
--- a/indra/llappearance/llpolymorph.cpp
+++ b/indra/llappearance/llpolymorph.cpp
@@ -597,19 +597,31 @@ void LLPolyMorphTarget::apply( ESex avatar_sex )
norm.mul(delta_weight*maskWeight*NORMAL_SOFTEN_FACTOR);
scaled_normals[vert_index_mesh].add(norm);
norm = scaled_normals[vert_index_mesh];
+
+ // guard against degenerate input data before we create NaNs below!
+ //
norm.normalize3fast();
normals[vert_index_mesh] = norm;
// calculate new binormals
LLVector4a binorm = mMorphData->mBinormals[vert_index_morph];
+
+ // guard against degenerate input data before we create NaNs below!
+ //
+ if (!binorm.isFinite3() || (binorm.dot3(binorm).getF32() <= F_APPROXIMATELY_ZERO))
+ {
+ binorm.set(1,0,0,1);
+ }
+
binorm.mul(delta_weight*maskWeight*NORMAL_SOFTEN_FACTOR);
scaled_binormals[vert_index_mesh].add(binorm);
LLVector4a tangent;
tangent.setCross3(scaled_binormals[vert_index_mesh], norm);
LLVector4a& normalized_binormal = binormals[vert_index_mesh];
- normalized_binormal.setCross3(norm, tangent);
+
+ normalized_binormal.setCross3(norm, tangent);
normalized_binormal.normalize3fast();
-
+
tex_coords[vert_index_mesh] += mMorphData->mTexCoords[vert_index_morph] * delta_weight * maskWeight;
}