tesseract_collision_configuration.cpp
Go to the documentation of this file.
1 
44 #include <BulletCollision/CollisionDispatch/btConvexConcaveCollisionAlgorithm.h>
45 #include <LinearMath/btPoolAllocator.h>
47 
52 
54 {
56  bool share_pool_allocators)
57  : share_pool_allocators_(share_pool_allocators)
58 {
59  if (create_pool_allocators)
61 }
62 
64 {
65  if (persistent_manifold_pool_ == nullptr || collision_algorithm_pool_ == nullptr)
66  throw std::runtime_error("Pool allocators have not been setup!");
67 
69  return *this;
70 
72  copy.createPoolAllocators();
73 
77 
78  return copy;
79 }
80 
82 {
84  std::make_shared<btPoolAllocator>(sizeof(btPersistentManifold), m_defaultMaxPersistentManifoldPoolSize);
85  m_persistentManifoldPool = persistent_manifold_pool_.get();
86 
88  int maxSize = sizeof(TesseractConvexConvexAlgorithm);
89  int maxSize2 = sizeof(btConvexConcaveCollisionAlgorithm);
90  int maxSize3 = sizeof(TesseractCompoundCollisionAlgorithm);
91  int maxSize4 = sizeof(TesseractCompoundCompoundCollisionAlgorithm);
92 
93  int collisionAlgorithmMaxElementSize = btMax(maxSize, m_customCollisionAlgorithmMaxElementSize);
94  collisionAlgorithmMaxElementSize = btMax(collisionAlgorithmMaxElementSize, maxSize2);
95  collisionAlgorithmMaxElementSize = btMax(collisionAlgorithmMaxElementSize, maxSize3);
96  collisionAlgorithmMaxElementSize = btMax(collisionAlgorithmMaxElementSize, maxSize4);
97 
99  collisionAlgorithmMaxElementSize = (collisionAlgorithmMaxElementSize + 16) & 0xffffffffffff0; // NOLINT
101 
103  std::make_shared<btPoolAllocator>(collisionAlgorithmMaxElementSize, m_defaultMaxCollisionAlgorithmPoolSize);
104  m_collisionAlgorithmPool = collision_algorithm_pool_.get();
105 }
106 
108  : btDefaultCollisionConfiguration(config_info)
109 {
110  assert(config_info.m_collisionAlgorithmPool != nullptr);
111  assert(config_info.m_persistentManifoldPool != nullptr);
112  assert(m_ownsCollisionAlgorithmPool == false);
113  assert(m_ownsPersistentManifoldPool == false);
114 
115  void* mem = nullptr;
116 
117  m_compoundCreateFunc->~btCollisionAlgorithmCreateFunc();
118  btAlignedFree(m_compoundCreateFunc);
119 
120  m_compoundCompoundCreateFunc->~btCollisionAlgorithmCreateFunc();
121  btAlignedFree(m_compoundCompoundCreateFunc);
122 
123  m_swappedCompoundCreateFunc->~btCollisionAlgorithmCreateFunc();
124  btAlignedFree(m_swappedCompoundCreateFunc);
125 
126  m_convexConvexCreateFunc->~btCollisionAlgorithmCreateFunc();
127  btAlignedFree(m_convexConvexCreateFunc);
128 
129  if (m_ownsCollisionAlgorithmPool)
130  {
131  m_collisionAlgorithmPool->~btPoolAllocator();
132  btAlignedFree(m_collisionAlgorithmPool);
133  }
134  if (m_ownsPersistentManifoldPool)
135  {
136  m_persistentManifoldPool->~btPoolAllocator();
137  btAlignedFree(m_persistentManifoldPool);
138  }
139 
140  mem = btAlignedAlloc(sizeof(TesseractConvexConvexAlgorithm::CreateFunc), 16);
141  m_convexConvexCreateFunc = new (mem) TesseractConvexConvexAlgorithm::CreateFunc(m_pdSolver); // NOLINT
142 
143  mem = btAlignedAlloc(sizeof(TesseractCompoundCollisionAlgorithm::CreateFunc), 16);
144  m_compoundCreateFunc = new (mem) TesseractCompoundCollisionAlgorithm::CreateFunc; // NOLINT
145 
146  mem = btAlignedAlloc(sizeof(TesseractCompoundCompoundCollisionAlgorithm::CreateFunc), 16);
147  m_compoundCompoundCreateFunc = new (mem) TesseractCompoundCompoundCollisionAlgorithm::CreateFunc; // NOLINT
148 
149  mem = btAlignedAlloc(sizeof(TesseractCompoundCollisionAlgorithm::SwappedCreateFunc), 16);
150  m_swappedCompoundCreateFunc = new (mem) TesseractCompoundCollisionAlgorithm::SwappedCreateFunc; // NOLINT
151 }
152 
153 } // namespace tesseract_collision::tesseract_collision_bullet
tesseract_collision::tesseract_collision_bullet
Definition: bullet_cast_bvh_manager.h:48
tesseract_collision::tesseract_collision_bullet::TesseractCollisionConfigurationInfo
Definition: tesseract_collision_configuration.h:52
tesseract_compound_collision_algorithm.h
tesseract_collision::tesseract_collision_bullet::TesseractCompoundCompoundCollisionAlgorithm::CreateFunc
Definition: tesseract_compound_compound_collision_algorithm.h:89
tesseract_collision::tesseract_collision_bullet::TesseractCollisionConfigurationInfo::collision_algorithm_pool_
std::shared_ptr< btPoolAllocator > collision_algorithm_pool_
Definition: tesseract_collision_configuration.h:70
tesseract_compound_compound_collision_algorithm.h
tesseract_collision_configuration.h
Modified bullet collision configuration.
tesseract_collision::tesseract_collision_bullet::TesseractCollisionConfigurationInfo::TesseractCollisionConfigurationInfo
TesseractCollisionConfigurationInfo(bool create_pool_allocators=true, bool share_pool_allocators=false)
TesseractCollisionConfigurationInfo.
Definition: tesseract_collision_configuration.cpp:55
tesseract_collision::tesseract_collision_bullet::TesseractCollisionConfigurationInfo::clone
TesseractCollisionConfigurationInfo clone() const
Clone the collision configuration information.
Definition: tesseract_collision_configuration.cpp:63
tesseract_collision::tesseract_collision_bullet::TesseractCompoundCompoundCollisionAlgorithm
Supports collision between two btCompoundCollisionShape shapes.
Definition: tesseract_compound_compound_collision_algorithm.h:55
TESSERACT_COMMON_IGNORE_WARNINGS_PUSH
#define TESSERACT_COMMON_IGNORE_WARNINGS_PUSH
tesseract_collision::tesseract_collision_bullet::TesseractConvexConvexAlgorithm
This is a modifed Convex to Convex collision algorithm.
Definition: tesseract_convex_convex_algorithm.h:65
tesseract_collision::tesseract_collision_bullet::TesseractCollisionConfigurationInfo::share_pool_allocators_
bool share_pool_allocators_
Definition: tesseract_collision_configuration.h:68
tesseract_collision::tesseract_collision_bullet::TesseractCollisionConfigurationInfo::persistent_manifold_pool_
std::shared_ptr< btPoolAllocator > persistent_manifold_pool_
Definition: tesseract_collision_configuration.h:69
tesseract_collision::tesseract_collision_bullet::TesseractCompoundCollisionAlgorithm::SwappedCreateFunc
Definition: tesseract_compound_collision_algorithm.h:114
tesseract_collision::tesseract_collision_bullet::TesseractCollisionConfiguration::TesseractCollisionConfiguration
TesseractCollisionConfiguration(const TesseractCollisionConfigurationInfo &config_info=TesseractCollisionConfigurationInfo())
Definition: tesseract_collision_configuration.cpp:107
TESSERACT_COMMON_IGNORE_WARNINGS_POP
Definition: create_convex_hull.cpp:37
tesseract_convex_convex_algorithm.h
tesseract_collision::tesseract_collision_bullet::TesseractCompoundCollisionAlgorithm::CreateFunc
Definition: tesseract_compound_collision_algorithm.h:103
tesseract_collision::tesseract_collision_bullet::TesseractConvexConvexAlgorithm::CreateFunc
Definition: tesseract_convex_convex_algorithm.h:122
tesseract_collision::tesseract_collision_bullet::TesseractCollisionConfigurationInfo::createPoolAllocators
void createPoolAllocators()
Create pool allocators.
Definition: tesseract_collision_configuration.cpp:81
macros.h
tesseract_collision::tesseract_collision_bullet::TesseractCompoundCollisionAlgorithm
Supports collision between CompoundCollisionShapes and other collision shapes.
Definition: tesseract_compound_collision_algorithm.h:52


tesseract_collision
Author(s): Levi Armstrong
autogenerated on Sun May 18 2025 03:01:52