mirror of
https://github.com/bulletphysics/bullet3
synced 2024-12-13 21:30:09 +00:00
report when compound pair capacity is exceeded (and avoid crash)
add tetrahedron, reorganized demos
This commit is contained in:
parent
2793a174c6
commit
1c0fc6bc2d
@ -106,16 +106,12 @@ GpuDemo::CreateFunc* allDemos[]=
|
||||
|
||||
|
||||
|
||||
ConcaveScene::MyCreateFunc,
|
||||
|
||||
|
||||
ConcaveSphereScene::MyCreateFunc,
|
||||
|
||||
ConcaveCompoundScene::MyCreateFunc,
|
||||
|
||||
// GpuCompoundPlaneScene::MyCreateFunc,
|
||||
|
||||
|
||||
GpuConstraintsDemo::MyCreateFunc,
|
||||
GpuCompoundPlaneScene::MyCreateFunc,
|
||||
|
||||
GpuTetraScene::MyCreateFunc,
|
||||
|
||||
|
@ -680,7 +680,7 @@ b3Vector3 childPositions[3] = {
|
||||
{
|
||||
float mass = 1;//j==0? 0.f : 1.f;
|
||||
|
||||
b3Vector3 position(i*ci.gapX,50+j*ci.gapY,k*ci.gapZ);
|
||||
b3Vector3 position((-ci.arraySizeX/2+i)*ci.gapX,50+j*ci.gapY,(-ci.arraySizeZ/2+k)*ci.gapZ);
|
||||
//b3Quaternion orn(0,0,0,1);
|
||||
b3Quaternion orn(b3Vector3(1,0,0),0.7);
|
||||
|
||||
|
@ -12,7 +12,7 @@ public:
|
||||
virtual ~ConcaveScene(){}
|
||||
virtual const char* getName()
|
||||
{
|
||||
return "GRBConcave";
|
||||
return "BoxTrimesh";
|
||||
}
|
||||
|
||||
static GpuDemo* MyCreateFunc()
|
||||
@ -38,7 +38,7 @@ public:
|
||||
virtual ~ConcaveSphereScene(){}
|
||||
virtual const char* getName()
|
||||
{
|
||||
return "ConcaveSphere";
|
||||
return "SphereTrimesh";
|
||||
}
|
||||
|
||||
static GpuDemo* MyCreateFunc()
|
||||
@ -62,7 +62,7 @@ public:
|
||||
virtual ~ConcaveCompoundScene(){}
|
||||
virtual const char* getName()
|
||||
{
|
||||
return "GRBConcaveCompound";
|
||||
return "CompoundConcave";
|
||||
}
|
||||
|
||||
static GpuDemo* MyCreateFunc()
|
||||
|
@ -11,7 +11,7 @@ public:
|
||||
virtual ~GpuCompoundScene(){}
|
||||
virtual const char* getName()
|
||||
{
|
||||
return "GpuCompound";
|
||||
return "CompoundOnSphere";
|
||||
}
|
||||
|
||||
static GpuDemo* MyCreateFunc()
|
||||
@ -35,7 +35,7 @@ public:
|
||||
virtual ~GpuCompoundPlaneScene(){}
|
||||
virtual const char* getName()
|
||||
{
|
||||
return "GpuCompoundPlane";
|
||||
return "CompoundOnPlane";
|
||||
}
|
||||
|
||||
static GpuDemo* MyCreateFunc()
|
||||
|
@ -20,7 +20,7 @@ public:
|
||||
virtual ~GpuConvexScene(){}
|
||||
virtual const char* getName()
|
||||
{
|
||||
return "GRBConvex";
|
||||
return "Tetrahedra";
|
||||
}
|
||||
|
||||
static GpuDemo* MyCreateFunc()
|
||||
@ -50,7 +50,7 @@ public:
|
||||
virtual ~GpuConvexPlaneScene(){}
|
||||
virtual const char* getName()
|
||||
{
|
||||
return "GRBConvexPlane";
|
||||
return "ConvexOnPlane";
|
||||
}
|
||||
|
||||
static GpuDemo* MyCreateFunc()
|
||||
@ -72,7 +72,7 @@ public:
|
||||
virtual ~GpuBoxPlaneScene(){}
|
||||
virtual const char* getName()
|
||||
{
|
||||
return "GRBBoxPlane";
|
||||
return "BoxPlane";
|
||||
}
|
||||
|
||||
static GpuDemo* MyCreateFunc()
|
||||
@ -97,7 +97,7 @@ void createFromTetGenData(const char* ele,
|
||||
public:
|
||||
virtual const char* getName()
|
||||
{
|
||||
return "GpuTetraScene";
|
||||
return "TetraBreakable";
|
||||
}
|
||||
|
||||
static GpuDemo* MyCreateFunc()
|
||||
|
@ -11,7 +11,7 @@ public:
|
||||
virtual ~GpuSphereScene(){}
|
||||
virtual const char* getName()
|
||||
{
|
||||
return "GRBSphere";
|
||||
return "BoxOnSphere";
|
||||
}
|
||||
|
||||
static GpuDemo* MyCreateFunc()
|
||||
|
@ -263,7 +263,7 @@ static const int quad_indices[]=
|
||||
|
||||
|
||||
|
||||
static const float tetra_vertices[] =
|
||||
static const float pyramid_vertices[] =
|
||||
{
|
||||
-1.f, 0, -1.f, 0.5f, 0, 1,0, 0,0,
|
||||
-1.f, 0, 1.f, 0.5f, 0, 1,0, 1,0,
|
||||
@ -275,13 +275,35 @@ static const float tetra_vertices[] =
|
||||
|
||||
|
||||
|
||||
static const int tetra_indices[]=
|
||||
static const int pyramid_indices[]=
|
||||
{
|
||||
0,1,2,0,2,3,//ground face
|
||||
4,1,2,4,2,3,
|
||||
4,3,0,4,0,1
|
||||
};
|
||||
|
||||
static const float tetra_vertices[] =
|
||||
{
|
||||
1.f, 1.f, 1.f, 0.5f, 0, 1,0, 0,0,
|
||||
1.f, -1.f, -1.f, 0.5f, 0, 1,0, 1,0,
|
||||
-1.f, 1.f, -1.f, 0.5f, 0, 1,0, 1,1,
|
||||
-1.f, -1, 1.f, 0.5f, 0, 1,0, 0,1
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
static const int tetra_indices[]=
|
||||
{
|
||||
0,1,2,//ground face
|
||||
3,1,2,
|
||||
3,0,1,
|
||||
3,2,0
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
static const float detailed_sphere_vertices[] =
|
||||
{
|
||||
0.000000,-0.183479,-0.983024,0.000000,0.000000,-0.183479,-0.983024,0.500000,0.408260,
|
||||
|
@ -99,10 +99,13 @@
|
||||
|
||||
language "C++"
|
||||
|
||||
if not _OPTIONS["ios"] then
|
||||
|
||||
include "../Demos3/GpuDemos"
|
||||
include "../Demos3/Wavefront"
|
||||
include "../btgui/MultiThreading"
|
||||
|
||||
if not _OPTIONS["ios"] then
|
||||
|
||||
-- include "../demo/gpudemo"
|
||||
-- include "../btgui/MidiTest"
|
||||
-- include "../opencl/vector_add_simplified"
|
||||
@ -126,7 +129,7 @@
|
||||
include "../src/Bullet3Serialize/Bullet2FileLoader"
|
||||
|
||||
include "../src/Bullet3OpenCL"
|
||||
include "../Demos3/GpuDemos"
|
||||
|
||||
|
||||
|
||||
-- include "../demo/gpu_initialize"
|
||||
|
Binary file not shown.
BIN
data/testFileFracture.bullet
Normal file
BIN
data/testFileFracture.bullet
Normal file
Binary file not shown.
@ -1685,6 +1685,7 @@ void GpuSatCollision::computeConvexConvexContactsGPUSAT( const b3OpenCLArray<b3I
|
||||
const b3OpenCLArray<b3RigidBodyCL>* bodyBuf,
|
||||
b3OpenCLArray<b3Contact4>* contactOut, int& nContacts,
|
||||
int maxContactCapacity,
|
||||
int compoundPairCapacity,
|
||||
const b3OpenCLArray<b3ConvexPolyhedronCL>& convexData,
|
||||
const b3OpenCLArray<b3Vector3>& gpuVertices,
|
||||
const b3OpenCLArray<b3Vector3>& gpuUniqueEdges,
|
||||
@ -1884,7 +1885,7 @@ void GpuSatCollision::computeConvexConvexContactsGPUSAT( const b3OpenCLArray<b3I
|
||||
m_numConcavePairsOut.resize(0);
|
||||
m_numConcavePairsOut.push_back(0);
|
||||
|
||||
int compoundPairCapacity=65536*10;
|
||||
|
||||
m_gpuCompoundPairs.resize(compoundPairCapacity);
|
||||
|
||||
m_gpuCompoundSepNormals.resize(compoundPairCapacity);
|
||||
@ -1965,7 +1966,7 @@ void GpuSatCollision::computeConvexConvexContactsGPUSAT( const b3OpenCLArray<b3I
|
||||
if (numConcavePairs > maxTriConvexPairCapacity)
|
||||
{
|
||||
static int exceeded_maxTriConvexPairCapacity_count = 0;
|
||||
printf("Rxceeded %d times the maxTriConvexPairCapacity (found %d but max is %d)\n", exceeded_maxTriConvexPairCapacity_count++,
|
||||
b3Error("Rxceeded %d times the maxTriConvexPairCapacity (found %d but max is %d)\n", exceeded_maxTriConvexPairCapacity_count++,
|
||||
numConcavePairs,maxTriConvexPairCapacity);
|
||||
numConcavePairs = maxTriConvexPairCapacity;
|
||||
}
|
||||
@ -2043,7 +2044,10 @@ void GpuSatCollision::computeConvexConvexContactsGPUSAT( const b3OpenCLArray<b3I
|
||||
numCompoundPairs = m_numCompoundPairsOut.at(0);
|
||||
//printf("numCompoundPairs =%d\n",numCompoundPairs );
|
||||
if (numCompoundPairs > compoundPairCapacity)
|
||||
{
|
||||
b3Error("Exceeded compound pair capacity (%d/%d)\n", numCompoundPairs, compoundPairCapacity);
|
||||
numCompoundPairs = compoundPairCapacity;
|
||||
}
|
||||
|
||||
m_gpuCompoundPairs.resize(numCompoundPairs);
|
||||
m_gpuHasCompoundSepNormals.resize(numCompoundPairs);
|
||||
@ -2079,6 +2083,12 @@ void GpuSatCollision::computeConvexConvexContactsGPUSAT( const b3OpenCLArray<b3I
|
||||
launcher.launch1D( num);
|
||||
clFinish(m_queue);
|
||||
nContacts = m_totalContactsOut.at(0);
|
||||
if (nContacts>maxContactCapacity)
|
||||
{
|
||||
|
||||
b3Error("Error: contacts exceeds capacity (%d/%d)\n", nContacts, maxContactCapacity);
|
||||
nContacts = maxContactCapacity;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -2159,6 +2169,11 @@ void GpuSatCollision::computeConvexConvexContactsGPUSAT( const b3OpenCLArray<b3I
|
||||
launcher.launch1D( num);
|
||||
clFinish(m_queue);
|
||||
nContacts = m_totalContactsOut.at(0);
|
||||
if (nContacts >= maxContactCapacity)
|
||||
{
|
||||
b3Error("Error: contacts exceeds capacity (%d/%d)\n", nContacts, maxContactCapacity);
|
||||
nContacts = maxContactCapacity;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -2424,6 +2439,12 @@ void GpuSatCollision::computeConvexConvexContactsGPUSAT( const b3OpenCLArray<b3I
|
||||
clFinish(m_queue);
|
||||
|
||||
nContacts = m_totalContactsOut.at(0);
|
||||
if (nContacts>maxContactCapacity)
|
||||
{
|
||||
|
||||
b3Error("Error: contacts exceeds capacity (%d/%d)\n", nContacts, maxContactCapacity);
|
||||
nContacts = maxContactCapacity;
|
||||
}
|
||||
contactOut->resize(nContacts);
|
||||
}
|
||||
}
|
||||
|
@ -79,6 +79,7 @@ struct GpuSatCollision
|
||||
const b3OpenCLArray<b3RigidBodyCL>* bodyBuf,
|
||||
b3OpenCLArray<b3Contact4>* contactOut, int& nContacts,
|
||||
int maxContactCapacity,
|
||||
int compoundPairCapacity,
|
||||
const b3OpenCLArray<b3ConvexPolyhedronCL>& hostConvexData,
|
||||
const b3OpenCLArray<b3Vector3>& vertices,
|
||||
const b3OpenCLArray<b3Vector3>& uniqueEdges,
|
||||
|
@ -7,6 +7,7 @@ struct b3Config
|
||||
int m_maxConvexShapes;
|
||||
int m_maxBroadphasePairs;
|
||||
int m_maxContactCapacity;
|
||||
int m_compoundPairCapacity;
|
||||
|
||||
int m_maxVerticesPerFace;
|
||||
int m_maxFacesPerShape;
|
||||
@ -31,6 +32,7 @@ struct b3Config
|
||||
m_maxConvexShapes = m_maxConvexBodies;
|
||||
m_maxBroadphasePairs = 16*m_maxConvexBodies;
|
||||
m_maxContactCapacity = m_maxBroadphasePairs;
|
||||
m_compoundPairCapacity = 1524*1024;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -738,6 +738,7 @@ void b3GpuNarrowPhase::computeContacts(cl_mem broadphasePairs, int numBroadphase
|
||||
m_data->m_pBufContactOutGPU,
|
||||
nContactOut,
|
||||
m_data->m_config.m_maxContactCapacity,
|
||||
m_data->m_config.m_compoundPairCapacity,
|
||||
*m_data->m_convexPolyhedraGPU,
|
||||
*m_data->m_convexVerticesGPU,
|
||||
*m_data->m_uniqueEdgesGPU,
|
||||
|
Loading…
Reference in New Issue
Block a user