ciao.
Ho le seguenti funzioni:
codice:
void CMaterialSkin::UpdateAnimation(long nTime)
{
D3DXVECTOR4* pmatrices = new D3DXVECTOR4[MAXBONES*3];
m_pSkeleton->updateAnimation(nTime, pmatrices);
int nCountvfloat4 = sizeof(*pmatrices)/sizeof(*pmatrices[0]);;
HRESULT hr = m_pMatrices->SetRawValue(*pmatrices, 0, MAXBONES*3* sizeof(D3DXVECTOR4));
delete[] pmatrices;
}
}
e questa chiamata dalla precedente:
codice:
void CSkeleton::updateAnimation(int frame, D3DXVECTOR4* pmatrices)
{
for(int i = 0 ; i < GetBoneCount(); i++)
{
CBone* pb = GetBone(i);
CBone* pbParent = GetBone(pb->m_nIdParent);
D3DXMATRIX pmxAnimation = pb->getAnimationMatrix(0, 0);
if(D3DXMatrixIsIdentity(&pmxAnimation))
pmxAnimation *= pb->getMatrixLocal();
pb->SetFinalMatrix( pmxAnimation /** pb->getMatrixLocal()*/);
if (pb->m_nIdParent >= 0)
pb->SetFinalMatrix(pb->getBoneFinalMatrix() * pbParent->getBoneFinalMatrix());
}
for(int i = 0 ; i < GetBoneCount(); i++)
{
CBone* pb = GetBone(i);
CBone* pbParent = GetBone(pb->m_nIdParent);
if(pbParent != NULL)
{
pb->SetFinalMatrix(pb->getInvBinMatrix() * pb->getBoneFinalMatrix()* pbParent->getBoneFinalMatrix());
D3DXMATRIX m = pb->getBoneFinalMatrix();
pmatrices[i*3 +0] = D3DXVECTOR4(m._11, m._21,m._31, m._41);
pmatrices[i*3 +1] = D3DXVECTOR4(m._12, m._22, m._32, m._42);
pmatrices[i*3 +2] = D3DXVECTOR4(m._13, m._23, m._33, m._43);
}
else
{
pb->SetFinalMatrix( pb->getInvBinMatrix() * pb->getBoneFinalMatrix());
D3DXMATRIX m = pb->getBoneFinalMatrix();
pmatrices[i*3 +0] = D3DXVECTOR4(m._11, m._21,m._31, m._41);
pmatrices[i*3 +1] = D3DXVECTOR4(m._12, m._22, m._32, m._42);
pmatrices[i*3 +2] = D3DXVECTOR4(m._13, m._23, m._33, m._43);
}
}
}
il problema è che queste due funzioni mi generano un sacco di leack.
Non riesco a capire cosa devo cancellare col delete e sono sicuro che il problema è in queste due funzioni perchè eliminandole non vengono generate schifezze.
grazie.