contact normal should point from B to A (to be consistent with Bullet 2.x)

stringify: pre-allocate bigger buffer (10MB, workaround)
This commit is contained in:
erwincoumans
2013-08-10 12:08:15 -07:00
parent d158507c03
commit ac23dbc4be
17 changed files with 220 additions and 209 deletions

View File

@@ -51,9 +51,10 @@ static const char* satClipKernelsCL= \
"typedef struct b3Contact4Data b3Contact4Data_t;\n"
"struct b3Contact4Data\n"
"{\n"
" b3Float4 m_worldPos[4];\n"
" b3Float4 m_worldPosB[4];\n"
"// b3Float4 m_localPosA[4];\n"
"// b3Float4 m_localPosB[4];\n"
" b3Float4 m_worldNormal; // w: m_nPoints\n"
" b3Float4 m_worldNormalOnB; // w: m_nPoints\n"
" unsigned short m_restituitionCoeffCmp;\n"
" unsigned short m_frictionCoeffCmp;\n"
" int m_batchIdx;\n"
@@ -63,15 +64,14 @@ static const char* satClipKernelsCL= \
" int m_childIndexB;\n"
" int m_unused1;\n"
" int m_unused2;\n"
"// b3Float4 m_localPosA;\n"
"};\n"
"inline int b3Contact4Data_getNumPoints(const struct b3Contact4Data* contact)\n"
"{\n"
" return (int)contact->m_worldNormal.w;\n"
" return (int)contact->m_worldNormalOnB.w;\n"
"};\n"
"inline void b3Contact4Data_setNumPoints(struct b3Contact4Data* contact, int numPoints)\n"
"{\n"
" contact->m_worldNormal.w = (float)numPoints;\n"
" contact->m_worldNormalOnB.w = (float)numPoints;\n"
"};\n"
"#endif //B3_CONTACT4DATA_H\n"
"///keep this in sync with btCollidable.h\n"
@@ -92,7 +92,7 @@ static const char* satClipKernelsCL= \
" int m_unused1;\n"
" int m_unused2;\n"
"} btGpuChildShape;\n"
"#define GET_NPOINTS(x) (x).m_worldNormal.w\n"
"#define GET_NPOINTS(x) (x).m_worldNormalOnB.w\n"
"typedef struct\n"
"{\n"
" float4 m_pos;\n"
@@ -821,7 +821,7 @@ static const char* satClipKernelsCL= \
" //if ((dstIdx+nContacts) < capacity)\n"
" {\n"
" __global struct b3Contact4Data* c = contactsOut + dstIdx;\n"
" c->m_worldNormal = normal;\n"
" c->m_worldNormalOnB = -normal;\n"
" c->m_restituitionCoeffCmp = (0.f*0xffff);c->m_frictionCoeffCmp = (0.7f*0xffff);\n"
" c->m_batchIdx = idx;\n"
" int bodyA = pairs[pairIndex].x;\n"
@@ -832,7 +832,7 @@ static const char* satClipKernelsCL= \
" c->m_childIndexB = -1;\n"
" for (int i=0;i<nContacts;i++)\n"
" {\n"
" c->m_worldPos[i] = localPoints[contactIdx[i]];\n"
" c->m_worldPosB[i] = localPoints[contactIdx[i]];\n"
" }\n"
" GET_NPOINTS(*c) = nContacts;\n"
" }\n"
@@ -919,7 +919,7 @@ static const char* satClipKernelsCL= \
" {\n"
" pairs[pairIndex].z = dstIdx;\n"
" __global struct b3Contact4Data* c = globalContactsOut+ dstIdx;\n"
" c->m_worldNormal = normal;\n"
" c->m_worldNormalOnB = -normal;\n"
" c->m_restituitionCoeffCmp = (0.f*0xffff);c->m_frictionCoeffCmp = (0.7f*0xffff);\n"
" c->m_batchIdx = pairIndex;\n"
" int bodyA = pairs[pairIndex].x;\n"
@@ -930,7 +930,7 @@ static const char* satClipKernelsCL= \
" c->m_childIndexB = -1;\n"
" for (int i=0;i<nReducedContacts;i++)\n"
" {\n"
" c->m_worldPos[i] = pointsIn[contactIdx[i]];\n"
" c->m_worldPosB[i] = pointsIn[contactIdx[i]];\n"
" }\n"
" GET_NPOINTS(*c) = nReducedContacts;\n"
" }\n"
@@ -1042,7 +1042,7 @@ static const char* satClipKernelsCL= \
" if ((dstIdx+nReducedContacts) < maxContactCapacity)\n"
" {\n"
" __global struct b3Contact4Data* c = globalContactsOut+ dstIdx;\n"
" c->m_worldNormal = normal;\n"
" c->m_worldNormalOnB = -normal;\n"
" c->m_restituitionCoeffCmp = (0.f*0xffff);c->m_frictionCoeffCmp = (0.7f*0xffff);\n"
" c->m_batchIdx = pairIndex;\n"
" int bodyA = gpuCompoundPairs[pairIndex].x;\n"
@@ -1053,7 +1053,7 @@ static const char* satClipKernelsCL= \
" c->m_childIndexB = childShapeIndexB;\n"
" for (int i=0;i<nReducedContacts;i++)\n"
" {\n"
" c->m_worldPos[i] = pointsIn[contactIdx[i]];\n"
" c->m_worldPosB[i] = pointsIn[contactIdx[i]];\n"
" }\n"
" GET_NPOINTS(*c) = nReducedContacts;\n"
" }\n"
@@ -1111,14 +1111,14 @@ static const char* satClipKernelsCL= \
" if (dstIdx < numPairs)\n"
" {\n"
" __global struct b3Contact4Data* c = &globalContactsOut[dstIdx];\n"
" c->m_worldNormal = normalOnSurfaceB;\n"
" c->m_worldNormalOnB = -normalOnSurfaceB;\n"
" c->m_restituitionCoeffCmp = (0.f*0xffff);c->m_frictionCoeffCmp = (0.7f*0xffff);\n"
" c->m_batchIdx = pairIndex;\n"
" int bodyA = pairs[pairIndex].x;\n"
" int bodyB = pairs[pairIndex].y;\n"
" c->m_bodyAPtrAndSignBit = rigidBodies[bodyA].m_invMass==0?-bodyA:bodyA;\n"
" c->m_bodyBPtrAndSignBit = rigidBodies[bodyB].m_invMass==0?-bodyB:bodyB;\n"
" c->m_worldPos[0] = contactPosB;\n"
" c->m_worldPosB[0] = contactPosB;\n"
" c->m_childIndexA = -1;\n"
" c->m_childIndexB = -1;\n"
" GET_NPOINTS(*c) = 1;\n"
@@ -1323,7 +1323,7 @@ static const char* satClipKernelsCL= \
" //if ((dstIdx+nReducedContacts) < capacity)\n"
" {\n"
" __global struct b3Contact4Data* c = globalContactsOut+ dstIdx;\n"
" c->m_worldNormal = normal;\n"
" c->m_worldNormalOnB = -normal;\n"
" c->m_restituitionCoeffCmp = (0.f*0xffff);c->m_frictionCoeffCmp = (0.7f*0xffff);\n"
" c->m_batchIdx = pairIndex;\n"
" int bodyA = concavePairsIn[pairIndex].x;\n"
@@ -1334,7 +1334,7 @@ static const char* satClipKernelsCL= \
" c->m_childIndexB = childShapeIndexB;\n"
" for (int i=0;i<nReducedContacts;i++)\n"
" {\n"
" c->m_worldPos[i] = pointsIn[contactIdx[i]];\n"
" c->m_worldPosB[i] = pointsIn[contactIdx[i]];\n"
" }\n"
" GET_NPOINTS(*c) = nReducedContacts;\n"
" }\n"
@@ -1714,7 +1714,7 @@ static const char* satClipKernelsCL= \
" if (dstIdx < numPairs)\n"
" {\n"
" __global struct b3Contact4Data* c = &globalContactsOut[dstIdx];\n"
" c->m_worldNormal = normal;\n"
" c->m_worldNormalOnB = -normal;\n"
" c->m_restituitionCoeffCmp = (0.f*0xffff);c->m_frictionCoeffCmp = (0.7f*0xffff);\n"
" c->m_batchIdx = pairIndex;\n"
" int bodyA = pairs[pairIndex].x;\n"
@@ -1727,13 +1727,13 @@ static const char* satClipKernelsCL= \
" switch (nReducedContacts)\n"
" {\n"
" case 4:\n"
" c->m_worldPos[3] = pointsIn[contactIdx.w];\n"
" c->m_worldPosB[3] = pointsIn[contactIdx.w];\n"
" case 3:\n"
" c->m_worldPos[2] = pointsIn[contactIdx.z];\n"
" c->m_worldPosB[2] = pointsIn[contactIdx.z];\n"
" case 2:\n"
" c->m_worldPos[1] = pointsIn[contactIdx.y];\n"
" c->m_worldPosB[1] = pointsIn[contactIdx.y];\n"
" case 1:\n"
" c->m_worldPos[0] = pointsIn[contactIdx.x];\n"
" c->m_worldPosB[0] = pointsIn[contactIdx.x];\n"
" default:\n"
" {\n"
" }\n"