MCPcopy Create free account
hub / github.com/bulletphysics/bullet3 / syncPhysicsToGraphics

Method syncPhysicsToGraphics

examples/ExampleBrowser/OpenGLGuiHelper.cpp:1050–1108  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1048 }
1049}
1050void OpenGLGuiHelper::syncPhysicsToGraphics(const btDiscreteDynamicsWorld* rbWorld)
1051{
1052 //in VR mode, we skip the synchronization for the second eye
1053 if (m_data->m_vrMode && m_data->m_vrSkipShadowPass == 1)
1054 return;
1055
1056 int numCollisionObjects = rbWorld->getNumCollisionObjects();
1057 {
1058 B3_PROFILE("write all InstanceTransformToCPU");
1059 for (int i = 0; i < numCollisionObjects; i++)
1060 {
1061 //B3_PROFILE("writeSingleInstanceTransformToCPU");
1062 btCollisionObject* colObj = rbWorld->getCollisionObjectArray()[i];
1063 btCollisionShape* collisionShape = colObj->getCollisionShape();
1064 if (collisionShape->getShapeType() == SOFTBODY_SHAPE_PROXYTYPE && collisionShape->getUserIndex() >= 0)
1065 {
1066 const btSoftBody* psb = (const btSoftBody*)colObj;
1067 btAlignedObjectArray<GLInstanceVertex> gfxVertices;
1068
1069 if (psb->m_renderNodes.size() > 0)
1070 {
1071
1072 gfxVertices.resize(psb->m_renderNodes.size());
1073 for (int i = 0; i < psb->m_renderNodes.size(); i++) // Foreach face
1074 {
1075 gfxVertices[i].xyzw[0] = psb->m_renderNodes[i].m_x[0];
1076 gfxVertices[i].xyzw[1] = psb->m_renderNodes[i].m_x[1];
1077 gfxVertices[i].xyzw[2] = psb->m_renderNodes[i].m_x[2];
1078 gfxVertices[i].xyzw[3] = psb->m_renderNodes[i].m_x[3];
1079 gfxVertices[i].uv[0] = psb->m_renderNodes[i].m_uv1[0];
1080 gfxVertices[i].uv[1] = psb->m_renderNodes[i].m_uv1[1];
1081 //gfxVertices[i].normal[0] = psb->m_renderNodes[i].
1082 gfxVertices[i].normal[0] = psb->m_renderNodes[i].m_normal[0];
1083 gfxVertices[i].normal[1] = psb->m_renderNodes[i].m_normal[1];
1084 gfxVertices[i].normal[2] = psb->m_renderNodes[i].m_normal[2];
1085 }
1086 }
1087 else
1088 {
1089 btAlignedObjectArray<int> indices;
1090 computeSoftBodyVertices(collisionShape, gfxVertices, indices);
1091 }
1092 m_data->m_glApp->m_renderer->updateShape(collisionShape->getUserIndex(), &gfxVertices[0].xyzw[0], gfxVertices.size());
1093 continue;
1094 }
1095 btVector3 pos = colObj->getWorldTransform().getOrigin();
1096 btQuaternion orn = colObj->getWorldTransform().getRotation();
1097 int index = colObj->getUserIndex();
1098 if (index >= 0)
1099 {
1100 m_data->m_glApp->m_renderer->writeSingleInstanceTransformToCPU(pos, orn, index);
1101 }
1102 }
1103 }
1104 {
1105 B3_PROFILE("writeTransforms");
1106 m_data->m_glApp->m_renderer->writeTransforms();
1107 }

Callers

nothing calls this directly

Calls 9

getRotationMethod · 0.80
getCollisionShapeMethod · 0.45
getShapeTypeMethod · 0.45
sizeMethod · 0.45
resizeMethod · 0.45
updateShapeMethod · 0.45
writeTransformsMethod · 0.45

Tested by

no test coverage detected