From 822c24e8678164ea632f725204bef913031824e6 Mon Sep 17 00:00:00 2001 From: Tigran Gasparian Date: Thu, 8 Aug 2019 09:50:32 +0200 Subject: [PATCH 1/3] Clears body and user data caches when syncBodyInfo and syncUserData are called --- examples/SharedMemory/PhysicsClientSharedMemory.cpp | 5 +++-- examples/SharedMemory/PhysicsDirect.cpp | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/examples/SharedMemory/PhysicsClientSharedMemory.cpp b/examples/SharedMemory/PhysicsClientSharedMemory.cpp index daebb7afd..20d6adade 100644 --- a/examples/SharedMemory/PhysicsClientSharedMemory.cpp +++ b/examples/SharedMemory/PhysicsClientSharedMemory.cpp @@ -1270,6 +1270,7 @@ const SharedMemoryStatus* PhysicsClientSharedMemory::processServerStatus() case CMD_SYNC_BODY_INFO_COMPLETED: { + m_data->m_bodyJointMap.clear(); break; } case CMD_STATE_LOGGING_START_COMPLETED: @@ -1553,6 +1554,8 @@ const SharedMemoryStatus* PhysicsClientSharedMemory::processServerStatus() { B3_PROFILE("CMD_SYNC_USER_DATA_COMPLETED"); // Remove all cached user data entries. + m_data->m_userDataMap.clear(); + m_data->m_userDataHandleLookup.clear(); for (int i = 0; i < m_data->m_bodyJointMap.size(); i++) { BodyJointInfoCache** bodyJointsPtr = m_data->m_bodyJointMap.getAtIndex(i); @@ -1560,8 +1563,6 @@ const SharedMemoryStatus* PhysicsClientSharedMemory::processServerStatus() { (*bodyJointsPtr)->m_userDataIds.clear(); } - m_data->m_userDataMap.clear(); - m_data->m_userDataHandleLookup.clear(); } const int numIdentifiers = serverCmd.m_syncUserDataArgs.m_numUserDataIdentifiers; if (numIdentifiers > 0) diff --git a/examples/SharedMemory/PhysicsDirect.cpp b/examples/SharedMemory/PhysicsDirect.cpp index d838cc7ba..69d4b4ff5 100644 --- a/examples/SharedMemory/PhysicsDirect.cpp +++ b/examples/SharedMemory/PhysicsDirect.cpp @@ -912,6 +912,7 @@ void PhysicsDirect::postProcessStatus(const struct SharedMemoryStatus& serverCmd break; } case CMD_SYNC_BODY_INFO_COMPLETED: + m_data->m_bodyJointMap.clear(); case CMD_MJCF_LOADING_COMPLETED: case CMD_SDF_LOADING_COMPLETED: { @@ -1193,6 +1194,8 @@ void PhysicsDirect::postProcessStatus(const struct SharedMemoryStatus& serverCmd { B3_PROFILE("CMD_SYNC_USER_DATA_COMPLETED"); // Remove all cached user data entries. + m_data->m_userDataMap.clear(); + m_data->m_userDataHandleLookup.clear(); for (int i = 0; i < m_data->m_bodyJointMap.size(); i++) { BodyJointInfoCache2** bodyJointsPtr = m_data->m_bodyJointMap.getAtIndex(i); @@ -1200,8 +1203,6 @@ void PhysicsDirect::postProcessStatus(const struct SharedMemoryStatus& serverCmd { (*bodyJointsPtr)->m_userDataIds.clear(); } - m_data->m_userDataMap.clear(); - m_data->m_userDataHandleLookup.clear(); } const int numIdentifiers = serverCmd.m_syncUserDataArgs.m_numUserDataIdentifiers; int* identifiers = new int[numIdentifiers]; From cf25b6183d6e48b67ff471b6e9c1aee8e2d66522 Mon Sep 17 00:00:00 2001 From: Tigran Gasparian Date: Thu, 8 Aug 2019 10:53:23 +0200 Subject: [PATCH 2/3] . --- .../PhysicsClientSharedMemory.cpp | 22 ++++++++++++------- .../SharedMemory/PhysicsClientSharedMemory.h | 1 + examples/SharedMemory/PhysicsDirect.cpp | 11 ++++++++-- examples/SharedMemory/PhysicsDirect.h | 2 ++ 4 files changed, 26 insertions(+), 10 deletions(-) diff --git a/examples/SharedMemory/PhysicsClientSharedMemory.cpp b/examples/SharedMemory/PhysicsClientSharedMemory.cpp index 20d6adade..0ea041808 100644 --- a/examples/SharedMemory/PhysicsClientSharedMemory.cpp +++ b/examples/SharedMemory/PhysicsClientSharedMemory.cpp @@ -282,11 +282,9 @@ void PhysicsClientSharedMemory::removeCachedBody(int bodyUniqueId) m_data->m_bodyJointMap.remove(bodyUniqueId); } } -void PhysicsClientSharedMemory::resetData() + +void PhysicsClientSharedMemory::clearCachedBodies() { - m_data->m_debugLinesFrom.clear(); - m_data->m_debugLinesTo.clear(); - m_data->m_debugLinesColor.clear(); for (int i = 0; i < m_data->m_bodyJointMap.size(); i++) { BodyJointInfoCache** bodyJointsPtr = m_data->m_bodyJointMap.getAtIndex(i); @@ -296,10 +294,18 @@ void PhysicsClientSharedMemory::resetData() } } m_data->m_bodyJointMap.clear(); - m_data->m_userConstraintInfoMap.clear(); m_data->m_userDataHandleLookup.clear(); m_data->m_userDataMap.clear(); } + +void PhysicsClientSharedMemory::resetData() +{ + m_data->m_debugLinesFrom.clear(); + m_data->m_debugLinesTo.clear(); + m_data->m_debugLinesColor.clear(); + m_data->m_userConstraintInfoMap.clear(); + clearCachedBodies(); +} void PhysicsClientSharedMemory::setSharedMemoryKey(int key) { m_data->m_sharedMemoryKey = key; @@ -1270,7 +1276,7 @@ const SharedMemoryStatus* PhysicsClientSharedMemory::processServerStatus() case CMD_SYNC_BODY_INFO_COMPLETED: { - m_data->m_bodyJointMap.clear(); + clearCachedBodies(); break; } case CMD_STATE_LOGGING_START_COMPLETED: @@ -1554,8 +1560,6 @@ const SharedMemoryStatus* PhysicsClientSharedMemory::processServerStatus() { B3_PROFILE("CMD_SYNC_USER_DATA_COMPLETED"); // Remove all cached user data entries. - m_data->m_userDataMap.clear(); - m_data->m_userDataHandleLookup.clear(); for (int i = 0; i < m_data->m_bodyJointMap.size(); i++) { BodyJointInfoCache** bodyJointsPtr = m_data->m_bodyJointMap.getAtIndex(i); @@ -1564,6 +1568,8 @@ const SharedMemoryStatus* PhysicsClientSharedMemory::processServerStatus() (*bodyJointsPtr)->m_userDataIds.clear(); } } + m_data->m_userDataMap.clear(); + m_data->m_userDataHandleLookup.clear(); const int numIdentifiers = serverCmd.m_syncUserDataArgs.m_numUserDataIdentifiers; if (numIdentifiers > 0) { diff --git a/examples/SharedMemory/PhysicsClientSharedMemory.h b/examples/SharedMemory/PhysicsClientSharedMemory.h index bee0549f9..0ba485b61 100644 --- a/examples/SharedMemory/PhysicsClientSharedMemory.h +++ b/examples/SharedMemory/PhysicsClientSharedMemory.h @@ -15,6 +15,7 @@ protected: void processBodyJointInfo(int bodyUniqueId, const struct SharedMemoryStatus& serverCmd); void resetData(); void removeCachedBody(int bodyUniqueId); + void clearCachedBodies(); virtual void renderSceneInternal(){}; public: diff --git a/examples/SharedMemory/PhysicsDirect.cpp b/examples/SharedMemory/PhysicsDirect.cpp index 69d4b4ff5..8cdaca31c 100644 --- a/examples/SharedMemory/PhysicsDirect.cpp +++ b/examples/SharedMemory/PhysicsDirect.cpp @@ -142,6 +142,12 @@ void PhysicsDirect::resetData() m_data->m_debugLinesFrom.clear(); m_data->m_debugLinesTo.clear(); m_data->m_debugLinesColor.clear(); + m_data->m_userConstraintInfoMap.clear(); + clearCachedBodies(); +} + +void PhysicsDirect::clearCachedBodies() +{ for (int i = 0; i < m_data->m_bodyJointMap.size(); i++) { BodyJointInfoCache2** bodyJointsPtr = m_data->m_bodyJointMap.getAtIndex(i); @@ -151,7 +157,8 @@ void PhysicsDirect::resetData() } } m_data->m_bodyJointMap.clear(); - m_data->m_userConstraintInfoMap.clear(); + m_data->m_userDataMap.clear(); + m_data->m_userDataHandleLookup.clear(); } // return true if connection succesfull, can also check 'isConnected' @@ -912,7 +919,7 @@ void PhysicsDirect::postProcessStatus(const struct SharedMemoryStatus& serverCmd break; } case CMD_SYNC_BODY_INFO_COMPLETED: - m_data->m_bodyJointMap.clear(); + clearCachedBodies(); case CMD_MJCF_LOADING_COMPLETED: case CMD_SDF_LOADING_COMPLETED: { diff --git a/examples/SharedMemory/PhysicsDirect.h b/examples/SharedMemory/PhysicsDirect.h index c5deec8ef..f0addbc11 100644 --- a/examples/SharedMemory/PhysicsDirect.h +++ b/examples/SharedMemory/PhysicsDirect.h @@ -34,6 +34,8 @@ protected: void removeCachedBody(int bodyUniqueId); + void clearCachedBodies(); + public: PhysicsDirect(class PhysicsCommandProcessorInterface* physSdk, bool passSdkOwnership); From ebe6d2df8641135248fd2762efb92ad3d6fe26bc Mon Sep 17 00:00:00 2001 From: Tigran Gasparian Date: Thu, 8 Aug 2019 13:20:44 +0200 Subject: [PATCH 3/3] Don't reset user data on SyncBodyInfo() --- examples/SharedMemory/PhysicsClientSharedMemory.cpp | 4 ++-- examples/SharedMemory/PhysicsDirect.cpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/SharedMemory/PhysicsClientSharedMemory.cpp b/examples/SharedMemory/PhysicsClientSharedMemory.cpp index 0ea041808..71e1a1985 100644 --- a/examples/SharedMemory/PhysicsClientSharedMemory.cpp +++ b/examples/SharedMemory/PhysicsClientSharedMemory.cpp @@ -294,8 +294,6 @@ void PhysicsClientSharedMemory::clearCachedBodies() } } m_data->m_bodyJointMap.clear(); - m_data->m_userDataHandleLookup.clear(); - m_data->m_userDataMap.clear(); } void PhysicsClientSharedMemory::resetData() @@ -304,6 +302,8 @@ void PhysicsClientSharedMemory::resetData() m_data->m_debugLinesTo.clear(); m_data->m_debugLinesColor.clear(); m_data->m_userConstraintInfoMap.clear(); + m_data->m_userDataMap.clear(); + m_data->m_userDataHandleLookup.clear(); clearCachedBodies(); } void PhysicsClientSharedMemory::setSharedMemoryKey(int key) diff --git a/examples/SharedMemory/PhysicsDirect.cpp b/examples/SharedMemory/PhysicsDirect.cpp index 8cdaca31c..ba0aa9508 100644 --- a/examples/SharedMemory/PhysicsDirect.cpp +++ b/examples/SharedMemory/PhysicsDirect.cpp @@ -143,6 +143,8 @@ void PhysicsDirect::resetData() m_data->m_debugLinesTo.clear(); m_data->m_debugLinesColor.clear(); m_data->m_userConstraintInfoMap.clear(); + m_data->m_userDataMap.clear(); + m_data->m_userDataHandleLookup.clear(); clearCachedBodies(); } @@ -157,8 +159,6 @@ void PhysicsDirect::clearCachedBodies() } } m_data->m_bodyJointMap.clear(); - m_data->m_userDataMap.clear(); - m_data->m_userDataHandleLookup.clear(); } // return true if connection succesfull, can also check 'isConnected'