fixes for RemoteGUIHelper
This commit is contained in:
@@ -32,7 +32,7 @@ struct GUIHelperInterface
|
|||||||
virtual void createCollisionShapeGraphicsObject(btCollisionShape* collisionShape) = 0;
|
virtual void createCollisionShapeGraphicsObject(btCollisionShape* collisionShape) = 0;
|
||||||
|
|
||||||
virtual void syncPhysicsToGraphics(const btDiscreteDynamicsWorld* rbWorld) = 0;
|
virtual void syncPhysicsToGraphics(const btDiscreteDynamicsWorld* rbWorld) = 0;
|
||||||
|
virtual void syncPhysicsToGraphics2(const btDiscreteDynamicsWorld* rbWorld) {}
|
||||||
virtual void syncPhysicsToGraphics2(const GUISyncPosition* positions, int numPositions) {}
|
virtual void syncPhysicsToGraphics2(const GUISyncPosition* positions, int numPositions) {}
|
||||||
|
|
||||||
virtual void render(const btDiscreteDynamicsWorld* rbWorld) = 0;
|
virtual void render(const btDiscreteDynamicsWorld* rbWorld) = 0;
|
||||||
|
|||||||
@@ -116,6 +116,15 @@ project "App_BulletExampleBrowser"
|
|||||||
"../SharedMemory/SharedMemoryCommandProcessor.cpp",
|
"../SharedMemory/SharedMemoryCommandProcessor.cpp",
|
||||||
"../SharedMemory/SharedMemoryCommandProcessor.h",
|
"../SharedMemory/SharedMemoryCommandProcessor.h",
|
||||||
"../SharedMemory/SharedMemoryInProcessPhysicsC_API.cpp",
|
"../SharedMemory/SharedMemoryInProcessPhysicsC_API.cpp",
|
||||||
|
"../SharedMemory/GraphicsClientExample.cpp",
|
||||||
|
"../SharedMemory/GraphicsClientExample.h",
|
||||||
|
"../SharedMemory/GraphicsServerExample.cpp",
|
||||||
|
"../SharedMemory/GraphicsServerExample.h",
|
||||||
|
"../SharedMemory/GraphicsSharedMemoryBlock.h",
|
||||||
|
"../SharedMemory/GraphicsSharedMemoryCommands.h",
|
||||||
|
"../SharedMemory/GraphicsSharedMemoryPublic.h",
|
||||||
|
"../SharedMemory/RemoteGUIHelper.cpp",
|
||||||
|
"../SharedMemory/RemoteGUIHelper.h",
|
||||||
"../SharedMemory/PhysicsClient.cpp",
|
"../SharedMemory/PhysicsClient.cpp",
|
||||||
"../SharedMemory/PosixSharedMemory.cpp",
|
"../SharedMemory/PosixSharedMemory.cpp",
|
||||||
"../SharedMemory/Win32SharedMemory.cpp",
|
"../SharedMemory/Win32SharedMemory.cpp",
|
||||||
|
|||||||
@@ -7717,7 +7717,7 @@ bool PhysicsServerCommandProcessor::processForwardDynamicsCommand(const struct S
|
|||||||
}
|
}
|
||||||
serverCmd.m_type = CMD_STEP_FORWARD_SIMULATION_COMPLETED;
|
serverCmd.m_type = CMD_STEP_FORWARD_SIMULATION_COMPLETED;
|
||||||
|
|
||||||
syncPhysicsToGraphics();
|
syncPhysicsToGraphics2();
|
||||||
return hasStatus;
|
return hasStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -11569,6 +11569,13 @@ void PhysicsServerCommandProcessor::syncPhysicsToGraphics()
|
|||||||
m_data->m_guiHelper->syncPhysicsToGraphics(m_data->m_dynamicsWorld);
|
m_data->m_guiHelper->syncPhysicsToGraphics(m_data->m_dynamicsWorld);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PhysicsServerCommandProcessor::syncPhysicsToGraphics2()
|
||||||
|
{
|
||||||
|
m_data->m_guiHelper->syncPhysicsToGraphics2(m_data->m_dynamicsWorld);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void PhysicsServerCommandProcessor::renderScene(int renderFlags)
|
void PhysicsServerCommandProcessor::renderScene(int renderFlags)
|
||||||
{
|
{
|
||||||
if (m_data->m_guiHelper)
|
if (m_data->m_guiHelper)
|
||||||
|
|||||||
@@ -138,6 +138,7 @@ public:
|
|||||||
virtual void physicsDebugDraw(int debugDrawFlags);
|
virtual void physicsDebugDraw(int debugDrawFlags);
|
||||||
virtual void setGuiHelper(struct GUIHelperInterface* guiHelper);
|
virtual void setGuiHelper(struct GUIHelperInterface* guiHelper);
|
||||||
virtual void syncPhysicsToGraphics();
|
virtual void syncPhysicsToGraphics();
|
||||||
|
virtual void syncPhysicsToGraphics2();
|
||||||
|
|
||||||
//@todo(erwincoumans) Should we have shared memory commands for picking objects?
|
//@todo(erwincoumans) Should we have shared memory commands for picking objects?
|
||||||
///The pickBody method will try to pick the first body along a ray, return true if succeeds, false otherwise
|
///The pickBody method will try to pick the first body along a ray, return true if succeeds, false otherwise
|
||||||
|
|||||||
@@ -821,41 +821,11 @@ public:
|
|||||||
{
|
{
|
||||||
m_childGuiHelper->syncPhysicsToGraphics(rbWorld);
|
m_childGuiHelper->syncPhysicsToGraphics(rbWorld);
|
||||||
}
|
}
|
||||||
{
|
|
||||||
|
|
||||||
b3AlignedObjectArray<GUISyncPosition> updatedPositions;
|
|
||||||
|
|
||||||
int numCollisionObjects = rbWorld->getNumCollisionObjects();
|
|
||||||
{
|
|
||||||
B3_PROFILE("write all InstanceTransformToCPU2");
|
|
||||||
for (int i = 0; i < numCollisionObjects; i++)
|
|
||||||
{
|
|
||||||
//B3_PROFILE("writeSingleInstanceTransformToCPU");
|
|
||||||
btCollisionObject* colObj = rbWorld->getCollisionObjectArray()[i];
|
|
||||||
btCollisionShape* collisionShape = colObj->getCollisionShape();
|
|
||||||
|
|
||||||
btVector3 pos = colObj->getWorldTransform().getOrigin();
|
|
||||||
btQuaternion orn = colObj->getWorldTransform().getRotation();
|
|
||||||
int index = colObj->getUserIndex();
|
|
||||||
if (index >= 0)
|
|
||||||
{
|
|
||||||
GUISyncPosition p;
|
|
||||||
p.m_graphicsInstanceId = index;
|
|
||||||
for (int q = 0; q < 4; q++)
|
|
||||||
{
|
|
||||||
p.m_pos[q] = pos[q];
|
|
||||||
p.m_orn[q] = orn[q];
|
|
||||||
}
|
|
||||||
updatedPositions.push_back(p);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (updatedPositions.size())
|
virtual void syncPhysicsToGraphics2(const btDiscreteDynamicsWorld* rbWorld)
|
||||||
{
|
{
|
||||||
syncPhysicsToGraphics2(&updatedPositions[0], updatedPositions.size());
|
m_childGuiHelper->syncPhysicsToGraphics2(rbWorld);
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void syncPhysicsToGraphics2(const GUISyncPosition* positions, int numPositions)
|
virtual void syncPhysicsToGraphics2(const GUISyncPosition* positions, int numPositions)
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
#include "BulletCollision/CollisionDispatch/btCollisionObject.h"
|
#include "BulletCollision/CollisionDispatch/btCollisionObject.h"
|
||||||
#include "BulletCollision/CollisionShapes/btCollisionShape.h"
|
#include "BulletCollision/CollisionShapes/btCollisionShape.h"
|
||||||
#include "Bullet3Common/b3AlignedObjectArray.h"
|
#include "Bullet3Common/b3AlignedObjectArray.h"
|
||||||
|
#include "BulletDynamics/Dynamics/btDiscreteDynamicsWorld.h"
|
||||||
|
|
||||||
struct RemoteGUIHelperInternalData
|
struct RemoteGUIHelperInternalData
|
||||||
{
|
{
|
||||||
@@ -282,6 +283,44 @@ void RemoteGUIHelper::syncPhysicsToGraphics(const btDiscreteDynamicsWorld* rbWor
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RemoteGUIHelper::syncPhysicsToGraphics2(const btDiscreteDynamicsWorld* rbWorld)
|
||||||
|
{
|
||||||
|
b3AlignedObjectArray<GUISyncPosition> updatedPositions;
|
||||||
|
|
||||||
|
int numCollisionObjects = rbWorld->getNumCollisionObjects();
|
||||||
|
{
|
||||||
|
B3_PROFILE("write all InstanceTransformToCPU2");
|
||||||
|
for (int i = 0; i < numCollisionObjects; i++)
|
||||||
|
{
|
||||||
|
//B3_PROFILE("writeSingleInstanceTransformToCPU");
|
||||||
|
btCollisionObject* colObj = rbWorld->getCollisionObjectArray()[i];
|
||||||
|
btCollisionShape* collisionShape = colObj->getCollisionShape();
|
||||||
|
|
||||||
|
btVector3 pos = colObj->getWorldTransform().getOrigin();
|
||||||
|
btQuaternion orn = colObj->getWorldTransform().getRotation();
|
||||||
|
int index = colObj->getUserIndex();
|
||||||
|
if (index >= 0)
|
||||||
|
{
|
||||||
|
GUISyncPosition p;
|
||||||
|
p.m_graphicsInstanceId = index;
|
||||||
|
for (int q = 0; q < 4; q++)
|
||||||
|
{
|
||||||
|
p.m_pos[q] = pos[q];
|
||||||
|
p.m_orn[q] = orn[q];
|
||||||
|
}
|
||||||
|
updatedPositions.push_back(p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (updatedPositions.size())
|
||||||
|
{
|
||||||
|
syncPhysicsToGraphics2(&updatedPositions[0], updatedPositions.size());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void RemoteGUIHelper::syncPhysicsToGraphics2(const GUISyncPosition* positions, int numPositions)
|
void RemoteGUIHelper::syncPhysicsToGraphics2(const GUISyncPosition* positions, int numPositions)
|
||||||
{
|
{
|
||||||
uploadData((unsigned char*) positions, numPositions * sizeof(GUISyncPosition), 0);
|
uploadData((unsigned char*) positions, numPositions * sizeof(GUISyncPosition), 0);
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ struct RemoteGUIHelper : public GUIHelperInterface
|
|||||||
virtual void createCollisionShapeGraphicsObject(btCollisionShape* collisionShape);
|
virtual void createCollisionShapeGraphicsObject(btCollisionShape* collisionShape);
|
||||||
|
|
||||||
virtual void syncPhysicsToGraphics(const btDiscreteDynamicsWorld* rbWorld);
|
virtual void syncPhysicsToGraphics(const btDiscreteDynamicsWorld* rbWorld);
|
||||||
|
virtual void syncPhysicsToGraphics2(const class btDiscreteDynamicsWorld* rbWorld);
|
||||||
virtual void syncPhysicsToGraphics2(const GUISyncPosition* positions, int numPositions);
|
virtual void syncPhysicsToGraphics2(const GUISyncPosition* positions, int numPositions);
|
||||||
|
|
||||||
virtual void render(const btDiscreteDynamicsWorld* rbWorld);
|
virtual void render(const btDiscreteDynamicsWorld* rbWorld);
|
||||||
|
|||||||
@@ -41,6 +41,8 @@ myfiles =
|
|||||||
"GraphicsSharedMemoryBlock.h",
|
"GraphicsSharedMemoryBlock.h",
|
||||||
"GraphicsSharedMemoryCommands.h",
|
"GraphicsSharedMemoryCommands.h",
|
||||||
"GraphicsSharedMemoryPublic.h",
|
"GraphicsSharedMemoryPublic.h",
|
||||||
|
"RemoteGUIHelper.cpp",
|
||||||
|
"RemoteGUIHelper.h",
|
||||||
"SharedMemoryCommands.h",
|
"SharedMemoryCommands.h",
|
||||||
"SharedMemoryPublic.h",
|
"SharedMemoryPublic.h",
|
||||||
"PhysicsServer.cpp",
|
"PhysicsServer.cpp",
|
||||||
|
|||||||
@@ -104,7 +104,7 @@ def drawInertiaBox(parentUid, parentLinkIndex, color):
|
|||||||
|
|
||||||
toeConstraint = True
|
toeConstraint = True
|
||||||
useMaximalCoordinates = False
|
useMaximalCoordinates = False
|
||||||
useRealTime = 1
|
useRealTime = 0
|
||||||
|
|
||||||
#the fixedTimeStep and numSolverIterations are the most important parameters to trade-off quality versus performance
|
#the fixedTimeStep and numSolverIterations are the most important parameters to trade-off quality versus performance
|
||||||
fixedTimeStep = 1. / 100
|
fixedTimeStep = 1. / 100
|
||||||
@@ -123,7 +123,7 @@ kp = 1
|
|||||||
kd = .5
|
kd = .5
|
||||||
maxKneeForce = 1000
|
maxKneeForce = 1000
|
||||||
|
|
||||||
physId = p.connect(p.SHARED_MEMORY)
|
physId = p.connect(p.SHARED_MEMORY_GUI)
|
||||||
if (physId < 0):
|
if (physId < 0):
|
||||||
p.connect(p.GUI)
|
p.connect(p.GUI)
|
||||||
#p.resetSimulation()
|
#p.resetSimulation()
|
||||||
|
|||||||
@@ -124,6 +124,15 @@ if not _OPTIONS["no-enet"] then
|
|||||||
"../../examples/SharedMemory/PhysicsServer.h",
|
"../../examples/SharedMemory/PhysicsServer.h",
|
||||||
"../../examples/SharedMemory/PhysicsServerExample.cpp",
|
"../../examples/SharedMemory/PhysicsServerExample.cpp",
|
||||||
"../../examples/SharedMemory/PhysicsServerExampleBullet2.cpp",
|
"../../examples/SharedMemory/PhysicsServerExampleBullet2.cpp",
|
||||||
|
"../SharedMemory/GraphicsClientExample.cpp",
|
||||||
|
"../SharedMemory/GraphicsClientExample.h",
|
||||||
|
"../SharedMemory/GraphicsServerExample.cpp",
|
||||||
|
"../SharedMemory/GraphicsServerExample.h",
|
||||||
|
"../SharedMemory/GraphicsSharedMemoryBlock.h",
|
||||||
|
"../SharedMemory/GraphicsSharedMemoryCommands.h",
|
||||||
|
"../SharedMemory/GraphicsSharedMemoryPublic.h",
|
||||||
|
"../SharedMemory/RemoteGUIHelper.cpp",
|
||||||
|
"../SharedMemory/RemoteGUIHelper.h",
|
||||||
"../../examples/SharedMemory/SharedMemoryInProcessPhysicsC_API.cpp",
|
"../../examples/SharedMemory/SharedMemoryInProcessPhysicsC_API.cpp",
|
||||||
"../../examples/SharedMemory/PhysicsServerSharedMemory.cpp",
|
"../../examples/SharedMemory/PhysicsServerSharedMemory.cpp",
|
||||||
"../../examples/SharedMemory/PhysicsServerSharedMemory.h",
|
"../../examples/SharedMemory/PhysicsServerSharedMemory.h",
|
||||||
|
|||||||
2
setup.py
2
setup.py
@@ -117,6 +117,8 @@ sources = ["examples/pybullet/pybullet.c"]\
|
|||||||
+["examples/SharedMemory/InProcessMemory.cpp"]\
|
+["examples/SharedMemory/InProcessMemory.cpp"]\
|
||||||
+["examples/SharedMemory/PhysicsClient.cpp"]\
|
+["examples/SharedMemory/PhysicsClient.cpp"]\
|
||||||
+["examples/SharedMemory/PhysicsServer.cpp"]\
|
+["examples/SharedMemory/PhysicsServer.cpp"]\
|
||||||
|
+["examples/SharedMemory/GraphicsClientExample.cpp"]\
|
||||||
|
+["examples/SharedMemory/RemoteGUIHelper.cpp"]\
|
||||||
+["examples/SharedMemory/PhysicsServerExample.cpp"]\
|
+["examples/SharedMemory/PhysicsServerExample.cpp"]\
|
||||||
+["examples/SharedMemory/PhysicsServerExampleBullet2.cpp"]\
|
+["examples/SharedMemory/PhysicsServerExampleBullet2.cpp"]\
|
||||||
+["examples/SharedMemory/SharedMemoryInProcessPhysicsC_API.cpp"]\
|
+["examples/SharedMemory/SharedMemoryInProcessPhysicsC_API.cpp"]\
|
||||||
|
|||||||
Reference in New Issue
Block a user