| 1048 | } |
| 1049 | } |
| 1050 | void 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 | } |
nothing calls this directly
no test coverage detected