store mass matrix in streaming part of shared memory (no support for unlimited mass matrix sizes at the moment)
This commit is contained in:
@@ -40,7 +40,7 @@ struct PhysicsDirectInternalData
|
||||
btHashMap<btHashInt,b3UserConstraint> m_userConstraintInfoMap;
|
||||
|
||||
char m_bulletStreamDataServerToClient[SHARED_MEMORY_MAX_STREAM_CHUNK_SIZE];
|
||||
|
||||
btAlignedObjectArray<double> m_cachedMassMatrix;
|
||||
int m_cachedCameraPixelsWidth;
|
||||
int m_cachedCameraPixelsHeight;
|
||||
btAlignedObjectArray<unsigned char> m_cachedCameraPixelsRGBA;
|
||||
@@ -951,6 +951,21 @@ void PhysicsDirect::postProcessStatus(const struct SharedMemoryStatus& serverCmd
|
||||
b3Warning("jacobian calculation failed");
|
||||
break;
|
||||
}
|
||||
case CMD_CALCULATED_MASS_MATRIX_FAILED:
|
||||
{
|
||||
b3Warning("calculate mass matrix failed");
|
||||
break;
|
||||
}
|
||||
case CMD_CALCULATED_MASS_MATRIX_COMPLETED:
|
||||
{
|
||||
double* matrixData = (double*)&m_data->m_bulletStreamDataServerToClient[0];
|
||||
m_data->m_cachedMassMatrix.resize(serverCmd.m_massMatrixResultArgs.m_dofCount*serverCmd.m_massMatrixResultArgs.m_dofCount);
|
||||
for (int i=0;i<serverCmd.m_massMatrixResultArgs.m_dofCount*serverCmd.m_massMatrixResultArgs.m_dofCount;i++)
|
||||
{
|
||||
m_data->m_cachedMassMatrix[i] = matrixData[i];
|
||||
}
|
||||
break;
|
||||
}
|
||||
case CMD_ACTUAL_STATE_UPDATE_COMPLETED:
|
||||
{
|
||||
break;
|
||||
@@ -1220,6 +1235,18 @@ void PhysicsDirect::getCachedRaycastHits(struct b3RaycastInformation* raycastHit
|
||||
raycastHits->m_rayHits = raycastHits->m_numRayHits? &m_data->m_raycastHits[0] : 0;
|
||||
}
|
||||
|
||||
void PhysicsDirect::getCachedMassMatrix(int dofCountCheck, double* massMatrix)
|
||||
{
|
||||
int sz = dofCountCheck*dofCountCheck;
|
||||
if (sz == m_data->m_cachedMassMatrix.size())
|
||||
{
|
||||
for (int i=0;i<sz;i++)
|
||||
{
|
||||
massMatrix[i] = m_data->m_cachedMassMatrix[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void PhysicsDirect::setTimeOut(double timeOutInSeconds)
|
||||
{
|
||||
m_data->m_timeOutInSeconds = timeOutInSeconds;
|
||||
|
||||
Reference in New Issue
Block a user