[dali_2.3.21] Merge branch 'devel/master'
[platform/core/uifw/dali-toolkit.git] / dali-physics / third-party / bullet3 / src / Bullet3Collision / NarrowPhaseCollision / shared / b3UpdateAabbs.h
1 #ifndef B3_UPDATE_AABBS_H
2 #define B3_UPDATE_AABBS_H
3
4 #include "Bullet3Collision/BroadPhaseCollision/shared/b3Aabb.h"
5 #include "Bullet3Collision/NarrowPhaseCollision/shared/b3Collidable.h"
6 #include "Bullet3Collision/NarrowPhaseCollision/shared/b3RigidBodyData.h"
7
8 void b3ComputeWorldAabb(int bodyId, __global const b3RigidBodyData_t* bodies, __global const b3Collidable_t* collidables, __global const b3Aabb_t* localShapeAABB, __global b3Aabb_t* worldAabbs)
9 {
10         __global const b3RigidBodyData_t* body = &bodies[bodyId];
11
12         b3Float4 position = body->m_pos;
13         b3Quat orientation = body->m_quat;
14
15         int collidableIndex = body->m_collidableIdx;
16         int shapeIndex = collidables[collidableIndex].m_shapeIndex;
17
18         if (shapeIndex >= 0)
19         {
20                 b3Aabb_t localAabb = localShapeAABB[collidableIndex];
21                 b3Aabb_t worldAabb;
22
23                 b3Float4 aabbAMinOut, aabbAMaxOut;
24                 float margin = 0.f;
25                 b3TransformAabb2(localAabb.m_minVec, localAabb.m_maxVec, margin, position, orientation, &aabbAMinOut, &aabbAMaxOut);
26
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;
32         }
33 }
34
35 #endif  //B3_UPDATE_AABBS_H