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)
{
printf("b3Printf: %s\n",msg);
if (gui2)
if (!gDisableDemoSelection)
{
gui2->textOutput(msg);
gui2->forceUpdateScrollBars();
@@ -502,7 +502,7 @@ void MyGuiPrintf(const char* msg)
void MyStatusBarPrintf(const char* msg)
{
printf("b3Printf: %s\n", msg);
if (gui2)
if (!gDisableDemoSelection)
{
bool isLeft = true;
gui2->setStatusBarMessage(msg,isLeft);
@@ -513,7 +513,7 @@ void MyStatusBarPrintf(const char* msg)
void MyStatusBarError(const char* msg)
{
printf("Warning: %s\n", msg);
if (gui2)
if (!gDisableDemoSelection)
{
bool isLeft = false;
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());
}
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;
frameCount++;
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];
m_guiHelper->getAppInterface()->m_renderer->getActiveCamera()->getCameraTargetPosition(pos);
btTransform viewTr;