Small modifications

This commit is contained in:
Daniel Chappuis 2015-02-09 22:37:36 +01:00
parent 0b3abacb3c
commit c56557898f
7 changed files with 35 additions and 47 deletions

View File

@ -158,10 +158,8 @@ inline int Shader::getUniformLocation(const std::string& variableName) const {
// Clear the shader
inline void Shader::destroy() {
if (mProgramObjectID != 0) {
glDeleteShader(mProgramObjectID);
mProgramObjectID = 0;
}
glDeleteProgram(mProgramObjectID);
mProgramObjectID = 0;
}
// Set a float uniform value to this shader (be careful if the uniform is not

View File

@ -145,8 +145,6 @@ void CollisionBody::removeCollisionShape(const ProxyShape* proxyShape) {
// Remove all the collision shapes
void CollisionBody::removeAllCollisionShapes() {
// TODO : Remove all the contact manifolds at the end of this call
ProxyShape* current = mProxyCollisionShapes;
// Look for the proxy shape that contains the collision shape in parameter

View File

@ -134,7 +134,7 @@ void CollisionDetection::reportCollisionBetweenShapes(CollisionCallback* callbac
// Delete and remove the contact info from the memory allocator
contactInfo->~ContactPointInfo();
mWorld->mMemoryAllocator.release(contactInfo, sizeof(ContactPointInfo));
mWorld->mMemoryAllocator.release(contactInfo, sizeof(ContactPointInfo));
}
}
}
@ -181,6 +181,8 @@ void CollisionDetection::computeNarrowPhase() {
std::map<overlappingpairid, OverlappingPair*>::iterator itToRemove = it;
++it;
// TODO : Remove all the contact manifold of the overlapping pair from the contact manifolds list of the two bodies involved
// Destroy the overlapping pair
itToRemove->second->~OverlappingPair();
mWorld->mMemoryAllocator.release(itToRemove->second, sizeof(OverlappingPair));
@ -287,6 +289,8 @@ void CollisionDetection::computeNarrowPhaseBetweenShapes(CollisionCallback* call
std::map<overlappingpairid, OverlappingPair*>::iterator itToRemove = it;
++it;
// TODO : Remove all the contact manifold of the overlapping pair from the contact manifolds list of the two bodies involved
// Destroy the overlapping pair
itToRemove->second->~OverlappingPair();
mWorld->mMemoryAllocator.release(itToRemove->second, sizeof(OverlappingPair));
@ -380,6 +384,8 @@ void CollisionDetection::removeProxyCollisionShape(ProxyShape* proxyShape) {
std::map<overlappingpairid, OverlappingPair*>::iterator itToRemove = it;
++it;
// TODO : Remove all the contact manifold of the overlapping pair from the contact manifolds list of the two bodies involved
// Destroy the overlapping pair
itToRemove->second->~OverlappingPair();
mWorld->mMemoryAllocator.release(itToRemove->second, sizeof(OverlappingPair));

View File

@ -37,19 +37,19 @@ BroadPhaseAlgorithm::BroadPhaseAlgorithm(CollisionDetection& collisionDetection)
mNbNonUsedMovedShapes(0), mNbPotentialPairs(0), mNbAllocatedPotentialPairs(8),
mCollisionDetection(collisionDetection) {
// Allocate memory for the array of non-static bodies IDs
// Allocate memory for the array of non-static proxy shapes IDs
mMovedShapes = (int*) malloc(mNbAllocatedMovedShapes * sizeof(int));
assert(mMovedShapes != NULL);
// Allocate memory for the array of potential overlapping pairs
mPotentialPairs = (BroadPair*) malloc(mNbAllocatedPotentialPairs * sizeof(BroadPair));
mPotentialPairs = (BroadPhasePair*) malloc(mNbAllocatedPotentialPairs * sizeof(BroadPhasePair));
assert(mPotentialPairs != NULL);
}
// Destructor
BroadPhaseAlgorithm::~BroadPhaseAlgorithm() {
// Release the memory for the array of non-static bodies IDs
// Release the memory for the array of non-static proxy shapes IDs
free(mMovedShapes);
// Release the memory for the array of potential overlapping pairs
@ -60,7 +60,7 @@ BroadPhaseAlgorithm::~BroadPhaseAlgorithm() {
// and that need to be tested again for broad-phase overlapping.
void BroadPhaseAlgorithm::addMovedCollisionShape(int broadPhaseID) {
// Allocate more elements in the array of bodies that have moved if necessary
// Allocate more elements in the array of shapes that have moved if necessary
if (mNbAllocatedMovedShapes == mNbMovedShapes) {
mNbAllocatedMovedShapes *= 2;
int* oldArray = mMovedShapes;
@ -70,7 +70,7 @@ void BroadPhaseAlgorithm::addMovedCollisionShape(int broadPhaseID) {
free(oldArray);
}
// Store the broad-phase ID into the array of bodies that have moved
// Store the broad-phase ID into the array of shapes that have moved
assert(mNbMovedShapes < mNbAllocatedMovedShapes);
assert(mMovedShapes != NULL);
mMovedShapes[mNbMovedShapes] = broadPhaseID;
@ -83,7 +83,7 @@ void BroadPhaseAlgorithm::removeMovedCollisionShape(int broadPhaseID) {
assert(mNbNonUsedMovedShapes <= mNbMovedShapes);
// If less than the quarter of allocated elements of the non-static bodies IDs array
// If less than the quarter of allocated elements of the non-static shapes IDs array
// are used, we release some allocated memory
if ((mNbMovedShapes - mNbNonUsedMovedShapes) < mNbAllocatedMovedShapes / 4 &&
mNbAllocatedMovedShapes > 8) {
@ -133,7 +133,7 @@ void BroadPhaseAlgorithm::removeProxyCollisionShape(ProxyShape* proxyShape) {
// Remove the collision shape from the dynamic AABB tree
mDynamicAABBTree.removeObject(broadPhaseID);
// Remove the collision shape into the array of bodies that have moved (or have been created)
// Remove the collision shape into the array of shapes that have moved (or have been created)
// during the last simulation step
removeMovedCollisionShape(broadPhaseID);
}
@ -153,7 +153,7 @@ void BroadPhaseAlgorithm::updateProxyCollisionShape(ProxyShape* proxyShape, cons
// into the tree).
if (hasBeenReInserted) {
// Add the collision shape into the array of bodies that have moved (or have been created)
// Add the collision shape into the array of shapes that have moved (or have been created)
// during the last simulation step
addMovedCollisionShape(broadPhaseID);
}
@ -186,7 +186,7 @@ void BroadPhaseAlgorithm::computeOverlappingPairs() {
mNbMovedShapes = 0;
// Sort the array of potential overlapping pairs in order to remove duplicate pairs
std::sort(mPotentialPairs, mPotentialPairs + mNbPotentialPairs, BroadPair::smallerThan);
std::sort(mPotentialPairs, mPotentialPairs + mNbPotentialPairs, BroadPhasePair::smallerThan);
// Check all the potential overlapping pairs avoiding duplicates to report unique
// overlapping pairs
@ -194,7 +194,7 @@ void BroadPhaseAlgorithm::computeOverlappingPairs() {
while (i < mNbPotentialPairs) {
// Get a potential overlapping pair
BroadPair* pair = mPotentialPairs + i;
BroadPhasePair* pair = mPotentialPairs + i;
i++;
// Get the two collision shapes of the pair
@ -208,7 +208,7 @@ void BroadPhaseAlgorithm::computeOverlappingPairs() {
while (i < mNbPotentialPairs) {
// Get the next pair
BroadPair* nextPair = mPotentialPairs + i;
BroadPhasePair* nextPair = mPotentialPairs + i;
// If the next pair is different from the previous one, we stop skipping pairs
if (nextPair->collisionShape1ID != pair->collisionShape1ID ||
@ -224,11 +224,11 @@ void BroadPhaseAlgorithm::computeOverlappingPairs() {
if (mNbPotentialPairs < mNbAllocatedPotentialPairs / 4 && mNbPotentialPairs > 8) {
// Reduce the number of allocated potential overlapping pairs
BroadPair* oldPairs = mPotentialPairs;
BroadPhasePair* oldPairs = mPotentialPairs;
mNbAllocatedPotentialPairs /= 2;
mPotentialPairs = (BroadPair*) malloc(mNbAllocatedPotentialPairs * sizeof(BroadPair));
mPotentialPairs = (BroadPhasePair*) malloc(mNbAllocatedPotentialPairs * sizeof(BroadPhasePair));
assert(mPotentialPairs);
memcpy(mPotentialPairs, oldPairs, mNbPotentialPairs * sizeof(BroadPair));
memcpy(mPotentialPairs, oldPairs, mNbPotentialPairs * sizeof(BroadPhasePair));
free(oldPairs);
}
}
@ -243,11 +243,11 @@ void BroadPhaseAlgorithm::notifyOverlappingPair(int node1ID, int node2ID) {
if (mNbPotentialPairs == mNbAllocatedPotentialPairs) {
// Allocate more memory for the array of potential pairs
BroadPair* oldPairs = mPotentialPairs;
BroadPhasePair* oldPairs = mPotentialPairs;
mNbAllocatedPotentialPairs *= 2;
mPotentialPairs = (BroadPair*) malloc(mNbAllocatedPotentialPairs * sizeof(BroadPair));
mPotentialPairs = (BroadPhasePair*) malloc(mNbAllocatedPotentialPairs * sizeof(BroadPhasePair));
assert(mPotentialPairs);
memcpy(mPotentialPairs, oldPairs, mNbPotentialPairs * sizeof(BroadPair));
memcpy(mPotentialPairs, oldPairs, mNbPotentialPairs * sizeof(BroadPhasePair));
free(oldPairs);
}

View File

@ -38,20 +38,12 @@ namespace reactphysics3d {
// Declarations
class CollisionDetection;
// TODO : Check that when a kinematic or static body is manually moved, the dynamic aabb tree
// is correctly updated
// TODO : Replace the names "body, bodies" by "collision shapes"
// TODO : Remove the pair manager
// TODO : RENAME THIS
// Structure BroadPair
// Structure BroadPhasePair
/**
* This structure represent a potential overlapping pair during the broad-phase collision
* detection.
* This structure represent a potential overlapping pair during the
* broad-phase collision detection.
*/
struct BroadPair {
struct BroadPhasePair {
// -------------------- Attributes -------------------- //
@ -64,13 +56,13 @@ struct BroadPair {
// -------------------- Methods -------------------- //
/// Method used to compare two pairs for sorting algorithm
static bool smallerThan(const BroadPair& pair1, const BroadPair& pair2);
static bool smallerThan(const BroadPhasePair& pair1, const BroadPhasePair& pair2);
};
// Class BroadPhaseAlgorithm
/**
* This class represents the broad-phase collision detection. The
* goal of the broad-phase collision detection is to compute the pairs of bodies
* goal of the broad-phase collision detection is to compute the pairs of proxy shapes
* that have their AABBs overlapping. Only those pairs of bodies will be tested
* later for collision during the narrow-phase collision detection. A dynamic AABB
* tree data structure is used for fast broad-phase collision detection.
@ -102,7 +94,7 @@ class BroadPhaseAlgorithm {
uint mNbNonUsedMovedShapes;
/// Temporary array of potential overlapping pairs (with potential duplicates)
BroadPair* mPotentialPairs;
BroadPhasePair* mPotentialPairs;
/// Number of potential overlapping pairs
uint mNbPotentialPairs;
@ -164,7 +156,7 @@ class BroadPhaseAlgorithm {
};
// Method used to compare two pairs for sorting algorithm
inline bool BroadPair::smallerThan(const BroadPair& pair1, const BroadPair& pair2) {
inline bool BroadPhasePair::smallerThan(const BroadPhasePair& pair1, const BroadPhasePair& pair2) {
if (pair1.collisionShape1ID < pair2.collisionShape1ID) return true;
if (pair1.collisionShape1ID == pair2.collisionShape1ID) {
@ -185,8 +177,7 @@ inline bool BroadPhaseAlgorithm::testOverlappingShapes(const ProxyShape* shape1,
}
// Ray casting method
inline void BroadPhaseAlgorithm::raycast(const Ray& ray,
RaycastTest& raycastTest,
inline void BroadPhaseAlgorithm::raycast(const Ray& ray, RaycastTest& raycastTest,
unsigned short raycastWithCategoryMaskBits) const {
mDynamicAABBTree.raycast(ray, raycastTest, raycastWithCategoryMaskBits);
}

View File

@ -190,10 +190,6 @@ void DynamicsWorld::integrateRigidBodiesPositions() {
mConstrainedOrientations[indexArray] = currentOrientation +
Quaternion(0, newAngVelocity) *
currentOrientation * decimal(0.5) * dt;
// TODO : DELETE THIS
Vector3 newPos = mConstrainedPositions[indexArray];
Quaternion newOrientation = mConstrainedOrientations[indexArray];
}
}
}

View File

@ -97,7 +97,6 @@ class OverlappingPair {
Vector3 getCachedSeparatingAxis() const;
/// Set the cached separating axis
// TODO : Check that this variable is correctly used allong the collision detection process
void setCachedSeparatingAxis(const Vector3& axis);
/// Return the number of contacts in the cache