summaryrefslogtreecommitdiff
path: root/thirdparty/bullet/src/Bullet3OpenCL/NarrowphaseCollision/b3ConvexHullContact.h
blob: e24c1579c6dce4ce8481675988cd88e1b88a2efd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118

#ifndef _CONVEX_HULL_CONTACT_H
#define _CONVEX_HULL_CONTACT_H

#include "Bullet3OpenCL/ParallelPrimitives/b3OpenCLArray.h"
#include "Bullet3Collision/NarrowPhaseCollision/shared/b3RigidBodyData.h"
#include "Bullet3Common/b3AlignedObjectArray.h"

#include "Bullet3Collision/NarrowPhaseCollision/shared/b3ConvexPolyhedronData.h"
#include "Bullet3Collision/NarrowPhaseCollision/shared/b3Collidable.h"
#include "Bullet3Collision/NarrowPhaseCollision/b3Contact4.h"
#include "Bullet3Common/shared/b3Int2.h"
#include "Bullet3Common/shared/b3Int4.h"
#include "b3OptimizedBvh.h"
#include "b3BvhInfo.h"
#include "Bullet3Collision/BroadPhaseCollision/shared/b3Aabb.h"

//#include "../../dynamics/basic_demo/Stubs/ChNarrowPhase.h"




struct GpuSatCollision
{
	cl_context				m_context;
	cl_device_id			m_device;
	cl_command_queue		m_queue;
	cl_kernel				m_findSeparatingAxisKernel;
	cl_kernel				m_mprPenetrationKernel;
	cl_kernel				m_findSeparatingAxisUnitSphereKernel;


	cl_kernel m_findSeparatingAxisVertexFaceKernel;
	cl_kernel m_findSeparatingAxisEdgeEdgeKernel;
	
	cl_kernel				m_findConcaveSeparatingAxisKernel;
    cl_kernel				m_findConcaveSeparatingAxisVertexFaceKernel;
    cl_kernel				m_findConcaveSeparatingAxisEdgeEdgeKernel;
 
    
    
    
	cl_kernel				m_findCompoundPairsKernel;
	cl_kernel				m_processCompoundPairsKernel;

	cl_kernel				m_clipHullHullKernel;
	cl_kernel				m_clipCompoundsHullHullKernel;
    
    cl_kernel               m_clipFacesAndFindContacts;
    cl_kernel               m_findClippingFacesKernel;
    
	cl_kernel				m_clipHullHullConcaveConvexKernel;
//	cl_kernel				m_extractManifoldAndAddContactKernel;
    cl_kernel               m_newContactReductionKernel;

	cl_kernel				m_bvhTraversalKernel;
	cl_kernel				m_primitiveContactsKernel;
	cl_kernel				m_findConcaveSphereContactsKernel;

	cl_kernel				m_processCompoundPairsPrimitivesKernel;
    
	b3OpenCLArray<b3Vector3> m_unitSphereDirections;

	b3OpenCLArray<int>		m_totalContactsOut;

	b3OpenCLArray<b3Vector3> m_sepNormals;
	b3OpenCLArray<float> m_dmins;

	b3OpenCLArray<int>		m_hasSeparatingNormals;
	b3OpenCLArray<b3Vector3> m_concaveSepNormals;
	b3OpenCLArray<int>		m_concaveHasSeparatingNormals;
	b3OpenCLArray<int>		m_numConcavePairsOut;
	b3OpenCLArray<b3CompoundOverlappingPair> m_gpuCompoundPairs;
	b3OpenCLArray<b3Vector3> m_gpuCompoundSepNormals;
	b3OpenCLArray<int>		m_gpuHasCompoundSepNormals;
	b3OpenCLArray<int>		m_numCompoundPairsOut;
	

	GpuSatCollision(cl_context ctx,cl_device_id device, cl_command_queue  q );
	virtual ~GpuSatCollision();
	

	void computeConvexConvexContactsGPUSAT( b3OpenCLArray<b3Int4>* pairs, int nPairs, 
			const b3OpenCLArray<b3RigidBodyData>* bodyBuf,
			b3OpenCLArray<b3Contact4>* contactOut, int& nContacts,
			const b3OpenCLArray<b3Contact4>* oldContacts,
			int maxContactCapacity,
			int compoundPairCapacity,
			const b3OpenCLArray<b3ConvexPolyhedronData>& hostConvexData,
			const b3OpenCLArray<b3Vector3>& vertices,
			const b3OpenCLArray<b3Vector3>& uniqueEdges,
			const b3OpenCLArray<b3GpuFace>& faces,
			const b3OpenCLArray<int>& indices,
			const b3OpenCLArray<b3Collidable>& gpuCollidables,
			const b3OpenCLArray<b3GpuChildShape>& gpuChildShapes,

			const b3OpenCLArray<b3Aabb>& clAabbsWorldSpace,
			const b3OpenCLArray<b3Aabb>& clAabbsLocalSpace,

           b3OpenCLArray<b3Vector3>& worldVertsB1GPU,
           b3OpenCLArray<b3Int4>& clippingFacesOutGPU,
           b3OpenCLArray<b3Vector3>& worldNormalsAGPU,
           b3OpenCLArray<b3Vector3>& worldVertsA1GPU,
           b3OpenCLArray<b3Vector3>& worldVertsB2GPU,
		   b3AlignedObjectArray<class b3OptimizedBvh*>& bvhData,
		   b3OpenCLArray<b3QuantizedBvhNode>*	treeNodesGPU,
			b3OpenCLArray<b3BvhSubtreeInfo>*	subTreesGPU,
			b3OpenCLArray<b3BvhInfo>*	bvhInfo,
			int numObjects,
			int maxTriConvexPairCapacity,
			b3OpenCLArray<b3Int4>& triangleConvexPairs,
			int& numTriConvexPairsOut
			);


};

#endif //_CONVEX_HULL_CONTACT_H