From b64d5809e7e3b832e2a011869db68e70b4b4e6fc Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Sun, 17 Jan 2016 21:35:32 +0100 Subject: Upgrade Bullet to version 2.83. I tried to carefully preserve all patches since the last upgrade. Improves T47195, cloth collision detection bug. Differential Revision: https://developer.blender.org/D1739 --- .../CollisionDispatch/btCollisionObject.h | 44 +++++++++++++++++----- 1 file changed, 34 insertions(+), 10 deletions(-) (limited to 'extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionObject.h') diff --git a/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionObject.h b/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionObject.h index 89cad168210..c68402418f7 100644 --- a/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionObject.h +++ b/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionObject.h @@ -92,11 +92,10 @@ protected: int m_internalType; ///users can point to their objects, m_userPointer is not used by Bullet, see setUserPointer/getUserPointer - union - { - void* m_userObjectPointer; - int m_userIndex; - }; + + void* m_userObjectPointer; + + int m_userIndex; ///time of impact calculation btScalar m_hitFraction; @@ -110,13 +109,11 @@ protected: /// If some object should have elaborate collision filtering by sub-classes int m_checkCollideWith; + btAlignedObjectArray m_objectsWithoutCollisionCheck; + ///internal update revision number. It will be increased when the object changes. This allows some subsystems to perform lazy evaluation. int m_updateRevision; - virtual bool checkCollideWithOverride(const btCollisionObject* /* co */) const - { - return true; - } public: @@ -225,7 +222,34 @@ public: return m_collisionShape; } - + void setIgnoreCollisionCheck(const btCollisionObject* co, bool ignoreCollisionCheck) + { + if (ignoreCollisionCheck) + { + //We don't check for duplicates. Is it ok to leave that up to the user of this API? + //int index = m_objectsWithoutCollisionCheck.findLinearSearch(co); + //if (index == m_objectsWithoutCollisionCheck.size()) + //{ + m_objectsWithoutCollisionCheck.push_back(co); + //} + } + else + { + m_objectsWithoutCollisionCheck.remove(co); + } + m_checkCollideWith = m_objectsWithoutCollisionCheck.size() > 0; + } + + virtual bool checkCollideWithOverride(const btCollisionObject* co) const + { + int index = m_objectsWithoutCollisionCheck.findLinearSearch(co); + if (index < m_objectsWithoutCollisionCheck.size()) + { + return false; + } + return true; + } + -- cgit v1.2.3