ciao.
Ho le seguenti funzioni:
e questa chiamata dalla precedente: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; } }
il problema è che queste due funzioni mi generano un sacco di leack.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); } } }
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.

Rispondi quotando