1 #ifndef B3_UPDATE_AABBS_H
2 #define B3_UPDATE_AABBS_H
4 #include "Bullet3Collision/BroadPhaseCollision/shared/b3Aabb.h"
5 #include "Bullet3Collision/NarrowPhaseCollision/shared/b3Collidable.h"
6 #include "Bullet3Collision/NarrowPhaseCollision/shared/b3RigidBodyData.h"
8 void b3ComputeWorldAabb(int bodyId, __global const b3RigidBodyData_t* bodies, __global const b3Collidable_t* collidables, __global const b3Aabb_t* localShapeAABB, __global b3Aabb_t* worldAabbs)
10 __global const b3RigidBodyData_t* body = &bodies[bodyId];
12 b3Float4 position = body->m_pos;
13 b3Quat orientation = body->m_quat;
15 int collidableIndex = body->m_collidableIdx;
16 int shapeIndex = collidables[collidableIndex].m_shapeIndex;
20 b3Aabb_t localAabb = localShapeAABB[collidableIndex];
23 b3Float4 aabbAMinOut, aabbAMaxOut;
25 b3TransformAabb2(localAabb.m_minVec, localAabb.m_maxVec, margin, position, orientation, &aabbAMinOut, &aabbAMaxOut);
27 worldAabb.m_minVec = aabbAMinOut;
28 worldAabb.m_minIndices[3] = bodyId;
29 worldAabb.m_maxVec = aabbAMaxOut;
30 worldAabb.m_signedMaxIndices[3] = body[bodyId].m_invMass == 0.f ? 0 : 1;
31 worldAabbs[bodyId] = worldAabb;
35 #endif //B3_UPDATE_AABBS_H