#ifndef _CONVEX_HULL_CONTACT_H #define _CONVEX_HULL_CONTACT_H #include "parallel_primitives/host/b3OpenCLArray.h" #include "Bullet3Collision/NarrowPhaseCollision/b3RigidBodyCL.h" #include "Bullet3Common/b3AlignedObjectArray.h" #include "b3ConvexUtility.h" #include "b3ConvexPolyhedronCL.h" #include "b3Collidable.h" #include "Bullet3Collision/NarrowPhaseCollision/b3Contact4.h" #include "parallel_primitives/host/b3Int2.h" #include "parallel_primitives/host/b3Int4.h" #include "b3OptimizedBvh.h" #include "b3BvhInfo.h" //#include "../../dynamics/basic_demo/Stubs/ChNarrowPhase.h" struct b3YetAnotherAabb { union { float m_min[4]; int m_minIndices[4]; }; union { float m_max[4]; //int m_signedMaxIndices[4]; //unsigned int m_unsignedMaxIndices[4]; }; }; struct GpuSatCollision { cl_context m_context; cl_device_id m_device; cl_command_queue m_queue; cl_kernel m_findSeparatingAxisKernel; cl_kernel m_findConcaveSeparatingAxisKernel; cl_kernel m_findCompoundPairsKernel; cl_kernel m_processCompoundPairsKernel; cl_kernel m_clipHullHullKernel; cl_kernel m_clipCompoundsHullHullKernel; cl_kernel m_clipFacesAndContactReductionKernel; 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 m_totalContactsOut; GpuSatCollision(cl_context ctx,cl_device_id device, cl_command_queue q ); virtual ~GpuSatCollision(); void computeConvexConvexContactsGPUSAT( const b3OpenCLArray* pairs, int nPairs, const b3OpenCLArray* bodyBuf, b3OpenCLArray* contactOut, int& nContacts, int maxContactCapacity, const b3OpenCLArray& hostConvexData, const b3OpenCLArray& vertices, const b3OpenCLArray& uniqueEdges, const b3OpenCLArray& faces, const b3OpenCLArray& indices, const b3OpenCLArray& gpuCollidables, const b3OpenCLArray& gpuChildShapes, const b3OpenCLArray& clAabbs, b3OpenCLArray& worldVertsB1GPU, b3OpenCLArray& clippingFacesOutGPU, b3OpenCLArray& worldNormalsAGPU, b3OpenCLArray& worldVertsA1GPU, b3OpenCLArray& worldVertsB2GPU, b3AlignedObjectArray& bvhData, b3OpenCLArray* treeNodesGPU, b3OpenCLArray* subTreesGPU, b3OpenCLArray* bvhInfo, int numObjects, int maxTriConvexPairCapacity, b3OpenCLArray& triangleConvexPairs, int& numTriConvexPairsOut ); }; #endif //_CONVEX_HULL_CONTACT_H