re-create debug drawer after 'resetSimulation', also avoid memory leak after doing so.
this fixes wireframe. Also use <CTRL>+hotkey, to avoid conflicts with user-specified keyboard functions.
This commit is contained in:
@@ -201,96 +201,99 @@ void MyKeyboardCallback(int key, int state)
|
|||||||
//if (handled)
|
//if (handled)
|
||||||
// return;
|
// return;
|
||||||
|
|
||||||
if (key=='a' && state)
|
if (s_window && s_window->isModifierKeyPressed(B3G_CONTROL))
|
||||||
{
|
{
|
||||||
gDebugDrawFlags ^= btIDebugDraw::DBG_DrawAabb;
|
if (key=='a' && state)
|
||||||
}
|
|
||||||
if (key=='c' && state)
|
|
||||||
{
|
|
||||||
gDebugDrawFlags ^= btIDebugDraw::DBG_DrawContactPoints;
|
|
||||||
}
|
|
||||||
if (key == 'd' && state)
|
|
||||||
{
|
|
||||||
gDebugDrawFlags ^= btIDebugDraw::DBG_NoDeactivation;
|
|
||||||
gDisableDeactivation = ((gDebugDrawFlags & btIDebugDraw::DBG_NoDeactivation) != 0);
|
|
||||||
}
|
|
||||||
if (key == 'k' && state)
|
|
||||||
{
|
|
||||||
gDebugDrawFlags ^= btIDebugDraw::DBG_DrawConstraints;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (key=='l' && state)
|
|
||||||
{
|
|
||||||
gDebugDrawFlags ^= btIDebugDraw::DBG_DrawConstraintLimits;
|
|
||||||
}
|
|
||||||
if (key=='w' && state)
|
|
||||||
{
|
|
||||||
visualWireframe=!visualWireframe;
|
|
||||||
gDebugDrawFlags ^= btIDebugDraw::DBG_DrawWireframe;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (key=='v' && state)
|
|
||||||
{
|
|
||||||
renderVisualGeometry = !renderVisualGeometry;
|
|
||||||
}
|
|
||||||
if (key=='g' && state)
|
|
||||||
{
|
|
||||||
renderGrid = !renderGrid;
|
|
||||||
renderGui = !renderGui;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (key=='i' && state)
|
|
||||||
{
|
|
||||||
pauseSimulation = !pauseSimulation;
|
|
||||||
}
|
|
||||||
if (key == 'o' && state)
|
|
||||||
{
|
|
||||||
singleStepSimulation = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (key=='p')
|
|
||||||
{
|
|
||||||
#ifndef BT_NO_PROFILE
|
|
||||||
if (state)
|
|
||||||
{
|
{
|
||||||
b3ChromeUtilsStartTimings();
|
gDebugDrawFlags ^= btIDebugDraw::DBG_DrawAabb;
|
||||||
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
b3ChromeUtilsStopTimingsAndWriteJsonFile();
|
|
||||||
}
|
}
|
||||||
#endif //BT_NO_PROFILE
|
if (key=='c' && state)
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef NO_OPENGL3
|
|
||||||
if (key=='s' && state)
|
|
||||||
{
|
|
||||||
useShadowMap=!useShadowMap;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
if (key==B3G_F1)
|
|
||||||
{
|
|
||||||
static int count=0;
|
|
||||||
if (state)
|
|
||||||
{
|
{
|
||||||
b3Printf("F1 pressed %d", count++);
|
gDebugDrawFlags ^= btIDebugDraw::DBG_DrawContactPoints;
|
||||||
|
}
|
||||||
|
if (key == 'd' && state)
|
||||||
|
{
|
||||||
|
gDebugDrawFlags ^= btIDebugDraw::DBG_NoDeactivation;
|
||||||
|
gDisableDeactivation = ((gDebugDrawFlags & btIDebugDraw::DBG_NoDeactivation) != 0);
|
||||||
|
}
|
||||||
|
if (key == 'k' && state)
|
||||||
|
{
|
||||||
|
gDebugDrawFlags ^= btIDebugDraw::DBG_DrawConstraints;
|
||||||
|
}
|
||||||
|
|
||||||
if (gPngFileName)
|
if (key=='l' && state)
|
||||||
|
{
|
||||||
|
gDebugDrawFlags ^= btIDebugDraw::DBG_DrawConstraintLimits;
|
||||||
|
}
|
||||||
|
if (key=='w' && state)
|
||||||
|
{
|
||||||
|
visualWireframe=!visualWireframe;
|
||||||
|
gDebugDrawFlags ^= btIDebugDraw::DBG_DrawWireframe;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (key=='v' && state)
|
||||||
|
{
|
||||||
|
renderVisualGeometry = !renderVisualGeometry;
|
||||||
|
}
|
||||||
|
if (key=='g' && state)
|
||||||
|
{
|
||||||
|
renderGrid = !renderGrid;
|
||||||
|
renderGui = !renderGui;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (key=='i' && state)
|
||||||
|
{
|
||||||
|
pauseSimulation = !pauseSimulation;
|
||||||
|
}
|
||||||
|
if (key == 'o' && state)
|
||||||
|
{
|
||||||
|
singleStepSimulation = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (key=='p')
|
||||||
|
{
|
||||||
|
#ifndef BT_NO_PROFILE
|
||||||
|
if (state)
|
||||||
{
|
{
|
||||||
b3Printf("disable image dump");
|
b3ChromeUtilsStartTimings();
|
||||||
|
|
||||||
gPngFileName=0;
|
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
gPngFileName = gAllExamples->getExampleName(sCurrentDemoIndex);
|
b3ChromeUtilsStopTimingsAndWriteJsonFile();
|
||||||
b3Printf("enable image dump %s",gPngFileName);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
} else
|
#endif //BT_NO_PROFILE
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifndef NO_OPENGL3
|
||||||
|
if (key=='s' && state)
|
||||||
{
|
{
|
||||||
b3Printf("F1 released %d",count++);
|
useShadowMap=!useShadowMap;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
if (key==B3G_F1)
|
||||||
|
{
|
||||||
|
static int count=0;
|
||||||
|
if (state)
|
||||||
|
{
|
||||||
|
b3Printf("F1 pressed %d", count++);
|
||||||
|
|
||||||
|
if (gPngFileName)
|
||||||
|
{
|
||||||
|
b3Printf("disable image dump");
|
||||||
|
|
||||||
|
gPngFileName=0;
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
gPngFileName = gAllExamples->getExampleName(sCurrentDemoIndex);
|
||||||
|
b3Printf("enable image dump %s",gPngFileName);
|
||||||
|
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
b3Printf("F1 released %d",count++);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (key==B3G_ESCAPE && s_window)
|
if (key==B3G_ESCAPE && s_window)
|
||||||
|
|||||||
@@ -338,6 +338,12 @@ void OpenGLGuiHelper::render(const btDiscreteDynamicsWorld* rbWorld)
|
|||||||
void OpenGLGuiHelper::createPhysicsDebugDrawer(btDiscreteDynamicsWorld* rbWorld)
|
void OpenGLGuiHelper::createPhysicsDebugDrawer(btDiscreteDynamicsWorld* rbWorld)
|
||||||
{
|
{
|
||||||
btAssert(rbWorld);
|
btAssert(rbWorld);
|
||||||
|
if (m_data->m_debugDraw)
|
||||||
|
{
|
||||||
|
delete m_data->m_debugDraw;
|
||||||
|
m_data->m_debugDraw = 0;
|
||||||
|
}
|
||||||
|
|
||||||
m_data->m_debugDraw = new MyDebugDrawer(m_data->m_glApp);
|
m_data->m_debugDraw = new MyDebugDrawer(m_data->m_glApp);
|
||||||
rbWorld->setDebugDrawer(m_data->m_debugDraw );
|
rbWorld->setDebugDrawer(m_data->m_debugDraw );
|
||||||
|
|
||||||
|
|||||||
@@ -1515,7 +1515,10 @@ void PhysicsServerCommandProcessor::createEmptyDynamicsWorld()
|
|||||||
// m_data->m_dynamicsWorld->getSolverInfo().m_minimumSolverBatchSize = 2;
|
// m_data->m_dynamicsWorld->getSolverInfo().m_minimumSolverBatchSize = 2;
|
||||||
//todo: islands/constraints are buggy in btMultiBodyDynamicsWorld! (performance + see slipping grasp)
|
//todo: islands/constraints are buggy in btMultiBodyDynamicsWorld! (performance + see slipping grasp)
|
||||||
|
|
||||||
|
if (m_data->m_guiHelper)
|
||||||
|
{
|
||||||
|
m_data->m_guiHelper->createPhysicsDebugDrawer(m_data->m_dynamicsWorld);
|
||||||
|
}
|
||||||
m_data->m_dynamicsWorld->setInternalTickCallback(logCallback,this);
|
m_data->m_dynamicsWorld->setInternalTickCallback(logCallback,this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user