From c7d9afac1ec3aee4be74f9f3c894ef0b65eb808c Mon Sep 17 00:00:00 2001 From: erwincoumans Date: Tue, 1 May 2018 09:23:08 -0700 Subject: [PATCH] fix SoftDemo crash, due to changes in OpenGLGuiHelper rendering fixes Issue #1655 --- examples/ExampleBrowser/OpenGLGuiHelper.cpp | 19 +++++++++++++++---- examples/SoftDemo/SoftDemo.cpp | 2 +- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/examples/ExampleBrowser/OpenGLGuiHelper.cpp b/examples/ExampleBrowser/OpenGLGuiHelper.cpp index b21aae329..536843450 100644 --- a/examples/ExampleBrowser/OpenGLGuiHelper.cpp +++ b/examples/ExampleBrowser/OpenGLGuiHelper.cpp @@ -433,10 +433,14 @@ void OpenGLGuiHelper::createCollisionShapeGraphicsObject(btCollisionShape* colli if (collisionShape->getShapeType() == SOFTBODY_SHAPE_PROXYTYPE) { computeSoftBodyVertices(collisionShape, gfxVertices, indices); - int shapeId = registerGraphicsShape(&gfxVertices[0].xyzw[0], gfxVertices.size(), &indices[0], indices.size(), B3_GL_TRIANGLES, - m_data->m_checkedTexture); - b3Assert(shapeId >= 0); - collisionShape->setUserIndex(shapeId); + if (gfxVertices.size() && indices.size()) + { + int shapeId = registerGraphicsShape(&gfxVertices[0].xyzw[0], gfxVertices.size(), &indices[0], indices.size(), B3_GL_TRIANGLES, + m_data->m_checkedTexture); + + b3Assert(shapeId >= 0); + collisionShape->setUserIndex(shapeId); + } } if (collisionShape->getShapeType()==MULTI_SPHERE_SHAPE_PROXYTYPE) { @@ -1265,6 +1269,11 @@ void OpenGLGuiHelper::autogenerateGraphicsObjects(btDiscreteDynamicsWorld* rbWor btCollisionObject* colObj = sortedObjects[i]; //btRigidBody* body = btRigidBody::upcast(colObj); //does this also work for btMultiBody/btMultiBodyLinkCollider? + btSoftBody* sb = btSoftBody::upcast(colObj); + if (sb) + { + colObj->getCollisionShape()->setUserPointer(sb); + } createCollisionShapeGraphicsObject(colObj->getCollisionShape()); int colorIndex = colObj->getBroadphaseHandle()->getUid() & 3; @@ -1313,6 +1322,8 @@ void OpenGLGuiHelper::computeSoftBodyVertices(btCollisionShape* collisionShape, btAlignedObjectArray& gfxVertices, btAlignedObjectArray& indices) { + if (collisionShape->getUserPointer()==0) + return; b3Assert(collisionShape->getUserPointer()); btSoftBody* psb = (btSoftBody*)collisionShape->getUserPointer(); gfxVertices.resize(psb->m_faces.size() * 3); diff --git a/examples/SoftDemo/SoftDemo.cpp b/examples/SoftDemo/SoftDemo.cpp index c1e58dfd7..9b09adafe 100644 --- a/examples/SoftDemo/SoftDemo.cpp +++ b/examples/SoftDemo/SoftDemo.cpp @@ -169,7 +169,7 @@ public: for ( int i=0;igetSoftBodyArray().size();i++) { btSoftBody* psb=(btSoftBody*)softWorld->getSoftBodyArray()[i]; - if (softWorld->getDebugDrawer() && !(softWorld->getDebugDrawer()->getDebugMode() & (btIDebugDraw::DBG_DrawWireframe))) + //if (softWorld->getDebugDrawer() && !(softWorld->getDebugDrawer()->getDebugMode() & (btIDebugDraw::DBG_DrawWireframe))) { btSoftBodyHelpers::DrawFrame(psb,softWorld->getDebugDrawer()); btSoftBodyHelpers::Draw(psb,softWorld->getDebugDrawer(),softWorld->getDrawFlags());