FIRE-14261: More fixing of crashes due to broken meshes

Ansariel 2015-01-21 14:48:11 +01:00
parent 6e858e2494
commit a07a1a98bf
1 changed files with 16 additions and 1 deletions

View File

@ -1681,6 +1681,7 @@ void LLDrawPoolAvatar::updateRiggedFaceVertexBuffer(LLVOAvatar* avatar, LLFace*
{
LLPointer<LLVertexBuffer> cur_buffer = facep->getVertexBuffer();
const LLVolumeFace& cur_vol_face = volume->getVolumeFace(i);
// <FS:ND> FIRE-14261 try to skip broken or out of bounds faces
if( cur_vol_face.mNumVertices > 0x10000 || cur_vol_face.mNumVertices < 0 || cur_vol_face.mNumIndices < 0 )
{
LL_WARNS() << "Skipping face " << i
@ -1689,6 +1690,7 @@ void LLDrawPoolAvatar::updateRiggedFaceVertexBuffer(LLVOAvatar* avatar, LLFace*
<< LL_ENDL;
continue;
}
// </FS:ND>
getRiggedGeometry(facep, cur_buffer, face_data_mask, skin, volume, cur_vol_face);
}
}
@ -1698,7 +1700,20 @@ void LLDrawPoolAvatar::updateRiggedFaceVertexBuffer(LLVOAvatar* avatar, LLFace*
}
else
{ //just rebuild this face
getRiggedGeometry(face, buffer, data_mask, skin, volume, vol_face);
// <FS:Ansariel> FIRE-14261 try to skip broken or out of bounds faces
//getRiggedGeometry(face, buffer, data_mask, skin, volume, vol_face);
if (vol_face.mNumVertices <= 0x10000 && vol_face.mNumVertices >= 0 && vol_face.mNumIndices >= 0)
{
getRiggedGeometry(face, buffer, data_mask, skin, volume, vol_face);
}
else
{
LL_WARNS() << "Skipping face - "
<< " vertices " << vol_face.mNumVertices << " indices " << vol_face.mNumIndices
<< " face is possibly corrupted"
<< LL_ENDL;
}
// </FS:Ansariel>
}
}