diff options
| author | Brad Payne (Vir Linden) <vir@lindenlab.com> | 2015-09-14 17:35:28 -0400 | 
|---|---|---|
| committer | Brad Payne (Vir Linden) <vir@lindenlab.com> | 2015-09-14 17:35:28 -0400 | 
| commit | ec0804a5f722d2cd9ef74eed96723a78d1cf4341 (patch) | |
| tree | 5d103fe842753867e1d5305467416b50b309c056 /indra/llmath | |
| parent | 1d58d69d1e0bf5bf7f686d3764362b90fd79bfa7 (diff) | |
| parent | 6b2c1d5f104047af8aa71d01b7d8fbe9a0ad3493 (diff) | |
merge
Diffstat (limited to 'indra/llmath')
| -rwxr-xr-x | indra/llmath/llvolume.cpp | 18 | 
1 files changed, 15 insertions, 3 deletions
| diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 41ee3941ac..79c134da30 100755 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -2536,6 +2536,8 @@ bool LLVolume::unpackVolumeFaces(std::istream& is, S32 size)  					U32 cur_influence = 0;  					LLVector4 wght(0,0,0,0); +                    U32 joints[4] = {0,0,0,0}; +					LLVector4 joints_with_weights(0,0,0,0);  					while (joint != END_INFLUENCES && idx < weights.size())  					{ @@ -2543,7 +2545,9 @@ bool LLVolume::unpackVolumeFaces(std::istream& is, S32 size)  						influence |= ((U16) weights[idx++] << 8);  						F32 w = llclamp((F32) influence / 65535.f, 0.f, 0.99999f); -						wght.mV[cur_influence++] = (F32) joint + w; +						wght.mV[cur_influence] = w; +						joints[cur_influence] = joint; +						cur_influence++;  						if (cur_influence >= 4)  						{ @@ -2554,8 +2558,16 @@ bool LLVolume::unpackVolumeFaces(std::istream& is, S32 size)  							joint = weights[idx++];  						}  					} - -					face.mWeights[cur_vertex].loadua(wght.mV); +                    F32 wsum = wght.mV[VX] + wght.mV[VY] + wght.mV[VZ] + wght.mV[VW]; +                    if (wsum <= 0.f) +                    { +                        wght = LLVector4(0.99999f,0.f,0.f,0.f); +                    } +                    for (U32 k=0; k<4; k++) +                    { +                        joints_with_weights[k] = (F32) joints[k] + wght[k]; +                    } +					face.mWeights[cur_vertex].loadua(joints_with_weights.mV);  					cur_vertex++;  				} | 
