Back out 95717cf8bf82 as matrix array length is properly checked in a following step already and modified llfloatermodelpreview.cpp accordingly

Ansariel 2014-08-26 16:12:12 +02:00
parent c291b53073
commit a5baa68caa
2 changed files with 11 additions and 11 deletions

View File

@ -118,6 +118,9 @@
// </AW: opensim-limits>
#include "nd/ndboolswitch.h" // <FS:ND/> To toggle LLRender::sGLCoreProfile
// <FS:Ansariel> Proper matrix array length for fitted mesh
#define JOINT_COUNT 52
const S32 SLM_SUPPORTED_VERSION = 3;
//static
@ -5611,8 +5614,8 @@ BOOL LLModelPreview::render()
// <FS:Ansariel> Proper matrix array length for fitted mesh
//LLMatrix4 mat[64];
//for (U32 j = 0; j < model->mSkinInfo.mJointNames.size(); ++j)
LLMatrix4 mat[52];
U32 count = llmin((U32) model->mSkinInfo.mJointNames.size(), (U32) 52);
LLMatrix4 mat[JOINT_COUNT];
U32 count = llmin((U32) model->mSkinInfo.mJointNames.size(), (U32) JOINT_COUNT);
for (U32 j = 0; j < count; ++j)
// </FS:Ansariel>
{
@ -5637,10 +5640,7 @@ BOOL LLModelPreview::render()
{
F32 w = weight[j].mV[k];
// <FS:Ansariel> Proper matrix array length for fitted mesh
//idx[k] = (S32) floorf(w);
idx[k] = llclamp((S32) floorf(w), 0, 51);
// </FS:Ansariel>
idx[k] = (S32) floorf(w);
wght.mV[k] = w - floorf(w);
scale += wght.mV[k];
}
@ -5649,7 +5649,10 @@ BOOL LLModelPreview::render()
for (U32 k = 0; k < 4; k++)
{
F32* src = (F32*) mat[idx[k]].mMatrix;
// <FS:Ansariel> Proper matrix array length for fitted mesh
//F32* src = (F32*) mat[idx[k]].mMatrix;
F32* src = (F32*) mat[idx[(k < JOINT_COUNT) ? k : 0]].mMatrix;
// </FS:Ansariel>
F32* dst = (F32*) final_mat.mMatrix;
F32 w = wght.mV[k];

View File

@ -4087,10 +4087,7 @@ void LLRiggedVolume::update(const LLMeshSkinInfo* skin, LLVOAvatar* avatar, cons
{
F32 w = weight[j][k];
// <FS:Ansariel> Proper matrix array length for fitted mesh
//idx[k] = (S32) floorf(w);
idx[k] = llclamp((S32) floorf(w), 0, (S32)kMaxJoints - 1);
// </FS:Ansariel>
idx[k] = (S32) floorf(w);
wght[k] = w - floorf(w);
scale += wght[k];
}