avoid MT crash in VR/physics server due to printf from separate thread.

add fps display in VR
use 1./240. internal substep for real-time physics sim in VR/physics server for more accurate robotics sim.
This commit is contained in:
erwin coumans
2016-08-18 21:43:43 -07:00
parent 91839cb274
commit a68c9ca845
3 changed files with 20 additions and 5 deletions

View File

@@ -490,7 +490,7 @@ void MyComboBoxCallback(int comboId, const char* item)
void MyGuiPrintf(const char* msg) void MyGuiPrintf(const char* msg)
{ {
printf("b3Printf: %s\n",msg); printf("b3Printf: %s\n",msg);
if (gui2) if (!gDisableDemoSelection)
{ {
gui2->textOutput(msg); gui2->textOutput(msg);
gui2->forceUpdateScrollBars(); gui2->forceUpdateScrollBars();
@@ -502,7 +502,7 @@ void MyGuiPrintf(const char* msg)
void MyStatusBarPrintf(const char* msg) void MyStatusBarPrintf(const char* msg)
{ {
printf("b3Printf: %s\n", msg); printf("b3Printf: %s\n", msg);
if (gui2) if (!gDisableDemoSelection)
{ {
bool isLeft = true; bool isLeft = true;
gui2->setStatusBarMessage(msg,isLeft); gui2->setStatusBarMessage(msg,isLeft);
@@ -513,7 +513,7 @@ void MyStatusBarPrintf(const char* msg)
void MyStatusBarError(const char* msg) void MyStatusBarError(const char* msg)
{ {
printf("Warning: %s\n", msg); printf("Warning: %s\n", msg);
if (gui2) if (!gDisableDemoSelection)
{ {
bool isLeft = false; bool isLeft = false;
gui2->setStatusBarMessage(msg,isLeft); gui2->setStatusBarMessage(msg,isLeft);

View File

@@ -2445,7 +2445,7 @@ void PhysicsServerCommandProcessor::stepSimulationRealTime(double dtInSec)
loadUrdf("plane.urdf", btVector3(0, 0, 0), btQuaternion(0, 0, 0, 1), true, true, &bodyId, &bufferServerToClient[0], bufferServerToClient.size()); loadUrdf("plane.urdf", btVector3(0, 0, 0), btQuaternion(0, 0, 0, 1), true, true, &bodyId, &bufferServerToClient[0], bufferServerToClient.size());
} }
m_data->m_dynamicsWorld->stepSimulation(dtInSec); m_data->m_dynamicsWorld->stepSimulation(dtInSec,10,1./240.);
} }
} }

View File

@@ -872,7 +872,22 @@ void PhysicsServerExample::renderScene()
static int frameCount=0; static int frameCount=0;
frameCount++; frameCount++;
char bla[1024]; char bla[1024];
sprintf(bla,"VR sub-title text test, frame %d", frameCount/2);
static btScalar prevTime = m_clock.getTimeSeconds();
btScalar curTime = m_clock.getTimeSeconds();
static btScalar deltaTime = 0.f;
static int count = 10;
if (count-- < 0)
{
count = 10;
deltaTime = curTime - prevTime;
}
if (deltaTime == 0)
deltaTime = 1000;
prevTime = curTime;
sprintf(bla,"VR sub-title text test,fps = %f, frame %d", 1./deltaTime, frameCount/2);
float pos[4]; float pos[4];
m_guiHelper->getAppInterface()->m_renderer->getActiveCamera()->getCameraTargetPosition(pos); m_guiHelper->getAppInterface()->m_renderer->getActiveCamera()->getCameraTargetPosition(pos);
btTransform viewTr; btTransform viewTr;