summaryrefslogtreecommitdiff
path: root/indra/llappearance/llpolymorph.cpp
diff options
context:
space:
mode:
authorRichard Linden <none@none>2013-06-21 11:00:47 -0700
committerRichard Linden <none@none>2013-06-21 11:00:47 -0700
commit090fa057b5ff17170d846473a2bc9ebc315c99d3 (patch)
tree781dff230ab8d1fc651e453cdd568df5aff8487a /indra/llappearance/llpolymorph.cpp
parent5de2f0a8970244866dc8b511caa3c8626955264f (diff)
parenta2a6bf20d71f923e9a5e43f71213fffbfea5a2a6 (diff)
merge
Diffstat (limited to 'indra/llappearance/llpolymorph.cpp')
-rw-r--r--indra/llappearance/llpolymorph.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/indra/llappearance/llpolymorph.cpp b/indra/llappearance/llpolymorph.cpp
index d40dfadfc8..6bda38bd97 100644
--- a/indra/llappearance/llpolymorph.cpp
+++ b/indra/llappearance/llpolymorph.cpp
@@ -598,16 +598,28 @@ 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.normalize3fast();