Skip to content

Commit

Permalink
Support getCachedReturnData for PhysicsLoopBack
Browse files Browse the repository at this point in the history
re-use existing code path for streaming plugin return data (work-in-progress)
  • Loading branch information
erwincoumans committed Oct 7, 2020
1 parent 954ceff commit bc51ac3
Show file tree
Hide file tree
Showing 6 changed files with 19 additions and 28 deletions.
2 changes: 1 addition & 1 deletion examples/SharedMemory/PhysicsClientC_API.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3069,7 +3069,7 @@ B3_SHARED_API void b3CustomCommandExecutePluginCommand(b3SharedMemoryCommandHand
{
command->m_updateFlags |= CMD_CUSTOM_COMMAND_EXECUTE_PLUGIN_COMMAND;
command->m_customCommandArgs.m_pluginUniqueId = pluginUniqueId;

command->m_customCommandArgs.m_startingReturnBytes = 0;
command->m_customCommandArgs.m_arguments.m_numInts = 0;
command->m_customCommandArgs.m_arguments.m_numFloats = 0;
command->m_customCommandArgs.m_arguments.m_text[0] = 0;
Expand Down
4 changes: 4 additions & 0 deletions examples/SharedMemory/PhysicsLoopBack.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,10 @@ void PhysicsLoopBack::getCachedMassMatrix(int dofCountCheck, double* massMatrix)
{
m_data->m_physicsClient->getCachedMassMatrix(dofCountCheck, massMatrix);
}
bool PhysicsLoopBack::getCachedReturnData(struct b3UserDataValue* returnData)
{
return m_data->m_physicsClient->getCachedReturnData(returnData);
}

void PhysicsLoopBack::setTimeOut(double timeOutInSeconds)
{
Expand Down
2 changes: 2 additions & 0 deletions examples/SharedMemory/PhysicsLoopBack.h
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,8 @@ class PhysicsLoopBack : public PhysicsClient

virtual void getCachedMassMatrix(int dofCountCheck, double* massMatrix);

virtual bool getCachedReturnData(struct b3UserDataValue* returnData);

virtual void setTimeOut(double timeOutInSeconds);
virtual double getTimeOut() const;

Expand Down
35 changes: 11 additions & 24 deletions examples/SharedMemory/PhysicsServerCommandProcessor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5759,6 +5759,8 @@ bool PhysicsServerCommandProcessor::processCustomCommand(const struct SharedMemo
serverCmd.m_type = CMD_CUSTOM_COMMAND_FAILED;
serverCmd.m_customCommandResultArgs.m_returnDataSizeInBytes = 0;
serverCmd.m_customCommandResultArgs.m_returnDataType = -1;
serverCmd.m_customCommandResultArgs.m_returnDataStart = 0;

serverCmd.m_customCommandResultArgs.m_pluginUniqueId = -1;

if (clientCmd.m_updateFlags & CMD_CUSTOM_COMMAND_LOAD_PLUGIN)
Expand All @@ -5783,43 +5785,28 @@ bool PhysicsServerCommandProcessor::processCustomCommand(const struct SharedMemo
m_data->m_pluginManager.unloadPlugin(clientCmd.m_customCommandArgs.m_pluginUniqueId);
serverCmd.m_type = CMD_CUSTOM_COMMAND_COMPLETED;
}
if (clientCmd.m_updateFlags & CMD_CUSTOM_COMMAND_STREAM_RETURN_DATA)

if (clientCmd.m_updateFlags & CMD_CUSTOM_COMMAND_EXECUTE_PLUGIN_COMMAND)
{
serverCmd.m_type = CMD_CUSTOM_COMMAND_STREAM_RETURN_DATA_FAILED;
const b3UserDataValue* returnData = m_data->m_pluginManager.getReturnData(clientCmd.m_customCommandArgs.m_pluginUniqueId);
if (returnData)
int startBytes = clientCmd.m_customCommandArgs.m_startingReturnBytes;
if (startBytes == 0)
{
int startBytes = clientCmd.m_customCommandArgs.m_startingReturnBytes;
if (startBytes >= 0 && startBytes < returnData->m_length)
{
int totalRemain = returnData->m_length - startBytes;
int numBytes = totalRemain <= bufferSizeInBytes ? totalRemain : bufferSizeInBytes;
serverStatusOut.m_numDataStreamBytes = numBytes;
for (int i = 0; i < numBytes; i++)
{
bufferServerToClient[i] = returnData->m_data1[i + startBytes];
}
serverCmd.m_customCommandResultArgs.m_returnDataSizeInBytes = returnData->m_length;
serverCmd.m_customCommandResultArgs.m_returnDataType = returnData->m_type;
serverCmd.m_type = CMD_CUSTOM_COMMAND_STREAM_RETURN_DATA_COMPLETED;
}
int result = m_data->m_pluginManager.executePluginCommand(clientCmd.m_customCommandArgs.m_pluginUniqueId, &clientCmd.m_customCommandArgs.m_arguments);
serverCmd.m_customCommandResultArgs.m_executeCommandResult = result;
}
}
if (clientCmd.m_updateFlags & CMD_CUSTOM_COMMAND_EXECUTE_PLUGIN_COMMAND)
{
int result = m_data->m_pluginManager.executePluginCommand(clientCmd.m_customCommandArgs.m_pluginUniqueId, &clientCmd.m_customCommandArgs.m_arguments);
serverCmd.m_customCommandResultArgs.m_executeCommandResult = result;
const b3UserDataValue* returnData = m_data->m_pluginManager.getReturnData(clientCmd.m_customCommandArgs.m_pluginUniqueId);
if (returnData)
{
int numBytes = returnData->m_length <= bufferSizeInBytes ? returnData->m_length : bufferSizeInBytes;
int totalRemain = returnData->m_length - startBytes;
int numBytes = totalRemain <= bufferSizeInBytes ? totalRemain : bufferSizeInBytes;
serverStatusOut.m_numDataStreamBytes = numBytes;
for (int i = 0; i < numBytes; i++)
{
bufferServerToClient[i] = returnData->m_data1[i];
}
serverCmd.m_customCommandResultArgs.m_returnDataSizeInBytes = returnData->m_length;
serverCmd.m_customCommandResultArgs.m_returnDataType = returnData->m_type;
serverCmd.m_customCommandResultArgs.m_returnDataStart = startBytes;
}
else
{
Expand Down
2 changes: 1 addition & 1 deletion examples/SharedMemory/SharedMemoryCommands.h
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,6 @@ enum CustomCommandEnum
CMD_CUSTOM_COMMAND_UNLOAD_PLUGIN = 2,
CMD_CUSTOM_COMMAND_EXECUTE_PLUGIN_COMMAND = 4,
CMD_CUSTOM_COMMAND_LOAD_PLUGIN_POSTFIX = 8,
CMD_CUSTOM_COMMAND_STREAM_RETURN_DATA = 16,
};

struct b3CustomCommand
Expand All @@ -142,6 +141,7 @@ struct b3CustomCommandResultArgs
int m_executeCommandResult;
int m_returnDataType;
int m_returnDataSizeInBytes;
int m_returnDataStart;
};

struct BulletDataStreamArgs
Expand Down
2 changes: 0 additions & 2 deletions examples/SharedMemory/SharedMemoryPublic.h
Original file line number Diff line number Diff line change
Expand Up @@ -239,8 +239,6 @@ enum EnumSharedMemoryServerStatus
CMD_REQUEST_MESH_DATA_COMPLETED,
CMD_REQUEST_MESH_DATA_FAILED,

CMD_CUSTOM_COMMAND_STREAM_RETURN_DATA_COMPLETED,
CMD_CUSTOM_COMMAND_STREAM_RETURN_DATA_FAILED,
//don't go beyond 'CMD_MAX_SERVER_COMMANDS!
CMD_MAX_SERVER_COMMANDS
};
Expand Down

0 comments on commit bc51ac3

Please sign in to comment.