Stop crashing on bad meshes like it's the end of the world

Pushing this on behalf of savis
This commit is contained in:
rtw1x1
2025-12-31 09:05:58 +00:00
parent e7a113885a
commit b201fd6dd6
3 changed files with 27 additions and 3 deletions

View File

@@ -14,16 +14,33 @@ const CGrannyModel::TMeshNode* CGrannyModel::GetMeshNodeList(CGrannyMesh::EType
CGrannyMesh * CGrannyModel::GetMeshPointer(int iMesh)
{
assert(CheckMeshIndex(iMesh));
if (!CheckMeshIndex(iMesh))
assert(m_meshs != NULL);
{
TraceError("CGrannyModel::GetMeshPointer - Invalid mesh index: %d (max: %d)", iMesh, m_meshNodeSize);
return nullptr;
}
if (m_meshs == NULL)
{
TraceError("CGrannyModel::GetMeshPointer - m_meshs is NULL");
return nullptr;
}
return m_meshs + iMesh;
}
const CGrannyMesh* CGrannyModel::GetMeshPointer(int iMesh) const
{
assert(CheckMeshIndex(iMesh));
assert(m_meshs != NULL);
if (!CheckMeshIndex(iMesh))
{
TraceError("CGrannyModel::GetMeshPointer(const) - Invalid mesh index: %d (max: %d)", iMesh, m_meshNodeSize);
return nullptr;
}
if (m_meshs == NULL)
{
TraceError("CGrannyModel::GetMeshPointer(const) - m_meshs is NULL");
return nullptr;
}
return m_meshs + iMesh;
}

View File

@@ -101,6 +101,10 @@ bool CGrannyModelInstance::Intersect(const D3DXMATRIX * c_pMatrix,
granny_matrix_4x4* pgrnMatCompositeBuffer = GrannyGetWorldPoseComposite4x4Array(m_pgrnWorldPose);
const CGrannyMesh* c_pMesh = m_pModel->GetMeshPointer(rcurBoundBox.meshIndex);
if (!c_pMesh)
continue;
const granny_mesh* c_pgrnMesh = c_pMesh->GetGrannyMeshPointer();
if (!GrannyMeshIsRigid(c_pgrnMesh))

View File

@@ -177,6 +177,9 @@ void CGrannyModelInstance::UpdateWorldMatrices(const D3DXMATRIX* c_pWorldMatrix)
const CGrannyMesh * pMesh = m_pModel->GetMeshPointer(i);
if (!pMesh)
continue;
// WORK
int * boneIndices = __GetMeshBoneIndices(i);
// END_OF_WORK