Blender V4.3
btCollisionDispatcher.h
Go to the documentation of this file.
1/*
2Bullet Continuous Collision Detection and Physics Library
3Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
4
5This software is provided 'as-is', without any express or implied warranty.
6In no event will the authors be held liable for any damages arising from the use of this software.
7Permission is granted to anyone to use this software for any purpose,
8including commercial applications, and to alter it and redistribute it freely,
9subject to the following restrictions:
10
111. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
122. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
133. This notice may not be removed or altered from any source distribution.
14*/
15
16#ifndef BT_COLLISION__DISPATCHER_H
17#define BT_COLLISION__DISPATCHER_H
18
21
23
26
27class btIDebugDraw;
29class btPoolAllocator;
31
33
34#define USE_DISPATCH_REGISTRY_ARRAY 1
35
38typedef void (*btNearCallback)(btBroadphasePair& collisionPair, btCollisionDispatcher& dispatcher, const btDispatcherInfo& dispatchInfo);
39
43{
44protected:
46
48
50
52
54
56
58
60
61public:
68
70 {
71 return m_dispatcherFlags;
72 }
73
74 void setDispatcherFlags(int flags)
75 {
76 m_dispatcherFlags = flags;
77 }
78
80 void registerCollisionCreateFunc(int proxyType0, int proxyType1, btCollisionAlgorithmCreateFunc* createFunc);
81
82 void registerClosestPointsCreateFunc(int proxyType0, int proxyType1, btCollisionAlgorithmCreateFunc* createFunc);
83
84 int getNumManifolds() const
85 {
86 return int(m_manifoldsPtr.size());
87 }
88
93
95 {
96 btAssert(index>=0);
98 return m_manifoldsPtr[index];
99 }
100
102 {
103 btAssert(index>=0);
105 return m_manifoldsPtr[index];
106 }
107
108 btCollisionDispatcher(btCollisionConfiguration* collisionConfiguration);
109
110 virtual ~btCollisionDispatcher();
111
112 virtual btPersistentManifold* getNewManifold(const btCollisionObject* b0, const btCollisionObject* b1);
113
114 virtual void releaseManifold(btPersistentManifold* manifold);
115
116 virtual void clearManifold(btPersistentManifold* manifold);
117
119
120 virtual bool needsCollision(const btCollisionObject* body0, const btCollisionObject* body1);
121
122 virtual bool needsResponse(const btCollisionObject* body0, const btCollisionObject* body1);
123
124 virtual void dispatchAllCollisionPairs(btOverlappingPairCache* pairCache, const btDispatcherInfo& dispatchInfo, btDispatcher* dispatcher);
125
127 {
128 m_nearCallback = nearCallback;
129 }
130
132 {
133 return m_nearCallback;
134 }
135
136 //by default, Bullet will use this near callback
137 static void defaultNearCallback(btBroadphasePair& collisionPair, btCollisionDispatcher& dispatcher, const btDispatcherInfo& dispatchInfo);
138
139 virtual void* allocateCollisionAlgorithm(int size);
140
141 virtual void freeCollisionAlgorithm(void* ptr);
142
147
152
157
162
164 {
166 }
167};
168
169#endif //BT_COLLISION__DISPATCHER_H
@ MAX_BROADPHASE_COLLISION_TYPES
btBroadphasePair
void(* btNearCallback)(btBroadphasePair &collisionPair, btCollisionDispatcher &dispatcher, const btDispatcherInfo &dispatchInfo)
user can override this nearcallback for collision filtering and more finegrained control over collisi...
ebtDispatcherQueryType
SIMD_FORCE_INLINE void clearManifold()
btPersistentManifold()
#define btAssert(x)
Definition btScalar.h:295
SIMD_FORCE_INLINE int size() const
return the number of elements in the array
btCollisionAlgorithmCreateFunc * m_doubleDispatchClosestPoints[MAX_BROADPHASE_COLLISION_TYPES][MAX_BROADPHASE_COLLISION_TYPES]
const btPersistentManifold * getManifoldByIndexInternal(int index) const
virtual const btPoolAllocator * getInternalManifoldPool() const
virtual void releaseManifold(btPersistentManifold *manifold)
void registerClosestPointsCreateFunc(int proxyType0, int proxyType1, btCollisionAlgorithmCreateFunc *createFunc)
btCollisionConfiguration * m_collisionConfiguration
virtual bool needsCollision(const btCollisionObject *body0, const btCollisionObject *body1)
btCollisionConfiguration * getCollisionConfiguration()
void setCollisionConfiguration(btCollisionConfiguration *config)
btPersistentManifold ** getInternalManifoldPointer()
btCollisionDispatcher(btCollisionConfiguration *collisionConfiguration)
btNearCallback getNearCallback() const
void setNearCallback(btNearCallback nearCallback)
virtual btPersistentManifold * getNewManifold(const btCollisionObject *b0, const btCollisionObject *b1)
virtual void freeCollisionAlgorithm(void *ptr)
btCollisionAlgorithmCreateFunc * m_doubleDispatchContactPoints[MAX_BROADPHASE_COLLISION_TYPES][MAX_BROADPHASE_COLLISION_TYPES]
static void defaultNearCallback(btBroadphasePair &collisionPair, btCollisionDispatcher &dispatcher, const btDispatcherInfo &dispatchInfo)
virtual void dispatchAllCollisionPairs(btOverlappingPairCache *pairCache, const btDispatcherInfo &dispatchInfo, btDispatcher *dispatcher)
btPoolAllocator * m_collisionAlgorithmPoolAllocator
virtual bool needsResponse(const btCollisionObject *body0, const btCollisionObject *body1)
btCollisionAlgorithm * findAlgorithm(const btCollisionObjectWrapper *body0Wrap, const btCollisionObjectWrapper *body1Wrap, btPersistentManifold *sharedManifold, ebtDispatcherQueryType queryType)
virtual void * allocateCollisionAlgorithm(int size)
const btCollisionConfiguration * getCollisionConfiguration() const
btAlignedObjectArray< btPersistentManifold * > m_manifoldsPtr
btPersistentManifold * getManifoldByIndexInternal(int index)
btPoolAllocator * m_persistentManifoldPoolAllocator
void registerCollisionCreateFunc(int proxyType0, int proxyType1, btCollisionAlgorithmCreateFunc *createFunc)
registerCollisionCreateFunc allows registration of custom/alternative collision create functions
void setDispatcherFlags(int flags)
virtual btPoolAllocator * getInternalManifoldPool()
The btPoolAllocator class allows to efficiently allocate a large pool of objects, instead of dynamica...
draw_view push_constant(Type::INT, "radiance_src") .push_constant(Type capture_info_buf storage_buf(1, Qualifier::READ, "ObjectBounds", "bounds_buf[]") .push_constant(Type draw_view int
Used by the btCollisionDispatcher to register and create instances for btCollisionAlgorithm.
PointerRNA * ptr
Definition wm_files.cc:4126