summaryrefslogtreecommitdiff
path: root/indra/llprimitive/llmodel.h
diff options
context:
space:
mode:
Diffstat (limited to 'indra/llprimitive/llmodel.h')
-rw-r--r--indra/llprimitive/llmodel.h18
1 files changed, 17 insertions, 1 deletions
diff --git a/indra/llprimitive/llmodel.h b/indra/llprimitive/llmodel.h
index 35fdf3f3d6..90c1c252ed 100644
--- a/indra/llprimitive/llmodel.h
+++ b/indra/llprimitive/llmodel.h
@@ -218,13 +218,29 @@ public:
}
};
+
+ struct JointPositionalCompare
+ {
+ //Are the doubles the same w/in epsilon specified tolerance
+ bool areEqual( double a, double b )
+ {
+ const float epsilon = 1e-5f;
+ return (abs(a - b) > epsilon) && (a < b);
+ }
+ //Make sure that we return false for any values that are within the tolerance for equivalence
+ bool operator() ( const LLVector3& a, const LLVector3& b )
+ {
+ return ( areEqual( a[0],b[0]) && areEqual( a[1],b[1] ) && areEqual( a[2],b[2]) ) ? false : true;
+ }
+ };
+
//copy of position array for this model -- mPosition[idx].mV[X,Y,Z]
std::vector<LLVector3> mPosition;
//map of positions to skin weights --- mSkinWeights[pos].mV[0..4] == <joint_index>.<weight>
//joint_index corresponds to mJointList
typedef std::vector<JointWeight> weight_list;
- typedef std::map<LLVector3, weight_list > weight_map;
+ typedef std::map<LLVector3, weight_list, JointPositionalCompare > weight_map;
weight_map mSkinWeights;
//get list of weight influences closest to given position