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