summaryrefslogtreecommitdiff
path: root/thirdparty/bullet/src/Bullet3Common/shared
diff options
context:
space:
mode:
Diffstat (limited to 'thirdparty/bullet/src/Bullet3Common/shared')
-rw-r--r--thirdparty/bullet/src/Bullet3Common/shared/b3Float4.h97
-rw-r--r--thirdparty/bullet/src/Bullet3Common/shared/b3Int2.h64
-rw-r--r--thirdparty/bullet/src/Bullet3Common/shared/b3Int4.h68
-rw-r--r--thirdparty/bullet/src/Bullet3Common/shared/b3Mat3x3.h179
-rw-r--r--thirdparty/bullet/src/Bullet3Common/shared/b3PlatformDefinitions.h41
-rw-r--r--thirdparty/bullet/src/Bullet3Common/shared/b3Quat.h103
6 files changed, 552 insertions, 0 deletions
diff --git a/thirdparty/bullet/src/Bullet3Common/shared/b3Float4.h b/thirdparty/bullet/src/Bullet3Common/shared/b3Float4.h
new file mode 100644
index 0000000000..5e4b95bcee
--- /dev/null
+++ b/thirdparty/bullet/src/Bullet3Common/shared/b3Float4.h
@@ -0,0 +1,97 @@
+#ifndef B3_FLOAT4_H
+#define B3_FLOAT4_H
+
+#include "Bullet3Common/shared/b3PlatformDefinitions.h"
+
+#ifdef __cplusplus
+ #include "Bullet3Common/b3Vector3.h"
+ #define b3Float4 b3Vector3
+ #define b3Float4ConstArg const b3Vector3&
+ #define b3Dot3F4 b3Dot
+ #define b3Cross3 b3Cross
+ #define b3MakeFloat4 b3MakeVector3
+ inline b3Vector3 b3Normalized(const b3Vector3& vec)
+ {
+ return vec.normalized();
+ }
+
+ inline b3Float4 b3FastNormalized3(b3Float4ConstArg v)
+ {
+ return v.normalized();
+ }
+
+ inline b3Float4 b3MaxFloat4 (const b3Float4& a, const b3Float4& b)
+ {
+ b3Float4 tmp = a;
+ tmp.setMax(b);
+ return tmp;
+ }
+ inline b3Float4 b3MinFloat4 (const b3Float4& a, const b3Float4& b)
+ {
+ b3Float4 tmp = a;
+ tmp.setMin(b);
+ return tmp;
+ }
+
+
+
+#else
+ typedef float4 b3Float4;
+ #define b3Float4ConstArg const b3Float4
+ #define b3MakeFloat4 (float4)
+ float b3Dot3F4(b3Float4ConstArg v0,b3Float4ConstArg v1)
+ {
+ float4 a1 = b3MakeFloat4(v0.xyz,0.f);
+ float4 b1 = b3MakeFloat4(v1.xyz,0.f);
+ return dot(a1, b1);
+ }
+ b3Float4 b3Cross3(b3Float4ConstArg v0,b3Float4ConstArg v1)
+ {
+ float4 a1 = b3MakeFloat4(v0.xyz,0.f);
+ float4 b1 = b3MakeFloat4(v1.xyz,0.f);
+ return cross(a1, b1);
+ }
+ #define b3MinFloat4 min
+ #define b3MaxFloat4 max
+
+ #define b3Normalized(a) normalize(a)
+
+#endif
+
+
+
+inline bool b3IsAlmostZero(b3Float4ConstArg v)
+{
+ if(b3Fabs(v.x)>1e-6 || b3Fabs(v.y)>1e-6 || b3Fabs(v.z)>1e-6)
+ return false;
+ return true;
+}
+
+
+inline int b3MaxDot( b3Float4ConstArg vec, __global const b3Float4* vecArray, int vecLen, float* dotOut )
+{
+ float maxDot = -B3_INFINITY;
+ int i = 0;
+ int ptIndex = -1;
+ for( i = 0; i < vecLen; i++ )
+ {
+ float dot = b3Dot3F4(vecArray[i],vec);
+
+ if( dot > maxDot )
+ {
+ maxDot = dot;
+ ptIndex = i;
+ }
+ }
+ b3Assert(ptIndex>=0);
+ if (ptIndex<0)
+ {
+ ptIndex = 0;
+ }
+ *dotOut = maxDot;
+ return ptIndex;
+}
+
+
+
+#endif //B3_FLOAT4_H
diff --git a/thirdparty/bullet/src/Bullet3Common/shared/b3Int2.h b/thirdparty/bullet/src/Bullet3Common/shared/b3Int2.h
new file mode 100644
index 0000000000..f1d01f81a5
--- /dev/null
+++ b/thirdparty/bullet/src/Bullet3Common/shared/b3Int2.h
@@ -0,0 +1,64 @@
+/*
+Bullet Continuous Collision Detection and Physics Library
+Copyright (c) 2003-2013 Erwin Coumans http://bulletphysics.org
+
+This software is provided 'as-is', without any express or implied warranty.
+In no event will the authors be held liable for any damages arising from the use of this software.
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute it freely,
+subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
+2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
+3. This notice may not be removed or altered from any source distribution.
+*/
+
+#ifndef B3_INT2_H
+#define B3_INT2_H
+
+#ifdef __cplusplus
+
+struct b3UnsignedInt2
+{
+ union
+ {
+ struct
+ {
+ unsigned int x,y;
+ };
+ struct
+ {
+ unsigned int s[2];
+ };
+ };
+};
+
+struct b3Int2
+{
+ union
+ {
+ struct
+ {
+ int x,y;
+ };
+ struct
+ {
+ int s[2];
+ };
+ };
+};
+
+inline b3Int2 b3MakeInt2(int x, int y)
+{
+ b3Int2 v;
+ v.s[0] = x; v.s[1] = y;
+ return v;
+}
+#else
+
+#define b3UnsignedInt2 uint2
+#define b3Int2 int2
+#define b3MakeInt2 (int2)
+
+#endif //__cplusplus
+#endif \ No newline at end of file
diff --git a/thirdparty/bullet/src/Bullet3Common/shared/b3Int4.h b/thirdparty/bullet/src/Bullet3Common/shared/b3Int4.h
new file mode 100644
index 0000000000..aa02d6beef
--- /dev/null
+++ b/thirdparty/bullet/src/Bullet3Common/shared/b3Int4.h
@@ -0,0 +1,68 @@
+#ifndef B3_INT4_H
+#define B3_INT4_H
+
+#ifdef __cplusplus
+
+#include "Bullet3Common/b3Scalar.h"
+
+
+B3_ATTRIBUTE_ALIGNED16(struct) b3UnsignedInt4
+{
+ B3_DECLARE_ALIGNED_ALLOCATOR();
+
+ union
+ {
+ struct
+ {
+ unsigned int x,y,z,w;
+ };
+ struct
+ {
+ unsigned int s[4];
+ };
+ };
+};
+
+B3_ATTRIBUTE_ALIGNED16(struct) b3Int4
+{
+ B3_DECLARE_ALIGNED_ALLOCATOR();
+
+ union
+ {
+ struct
+ {
+ int x,y,z,w;
+ };
+ struct
+ {
+ int s[4];
+ };
+ };
+};
+
+B3_FORCE_INLINE b3Int4 b3MakeInt4(int x, int y, int z, int w = 0)
+{
+ b3Int4 v;
+ v.s[0] = x; v.s[1] = y; v.s[2] = z; v.s[3] = w;
+ return v;
+}
+
+B3_FORCE_INLINE b3UnsignedInt4 b3MakeUnsignedInt4(unsigned int x, unsigned int y, unsigned int z, unsigned int w = 0)
+{
+ b3UnsignedInt4 v;
+ v.s[0] = x; v.s[1] = y; v.s[2] = z; v.s[3] = w;
+ return v;
+}
+
+#else
+
+
+#define b3UnsignedInt4 uint4
+#define b3Int4 int4
+#define b3MakeInt4 (int4)
+#define b3MakeUnsignedInt4 (uint4)
+
+
+#endif //__cplusplus
+
+#endif //B3_INT4_H
diff --git a/thirdparty/bullet/src/Bullet3Common/shared/b3Mat3x3.h b/thirdparty/bullet/src/Bullet3Common/shared/b3Mat3x3.h
new file mode 100644
index 0000000000..7b1fef32f8
--- /dev/null
+++ b/thirdparty/bullet/src/Bullet3Common/shared/b3Mat3x3.h
@@ -0,0 +1,179 @@
+
+#ifndef B3_MAT3x3_H
+#define B3_MAT3x3_H
+
+#include "Bullet3Common/shared/b3Quat.h"
+
+
+#ifdef __cplusplus
+
+#include "Bullet3Common/b3Matrix3x3.h"
+
+#define b3Mat3x3 b3Matrix3x3
+#define b3Mat3x3ConstArg const b3Matrix3x3&
+
+inline b3Mat3x3 b3QuatGetRotationMatrix(b3QuatConstArg quat)
+{
+ return b3Mat3x3(quat);
+}
+
+inline b3Mat3x3 b3AbsoluteMat3x3(b3Mat3x3ConstArg mat)
+{
+ return mat.absolute();
+}
+
+#define b3GetRow(m,row) m.getRow(row)
+
+__inline
+b3Float4 mtMul3(b3Float4ConstArg a, b3Mat3x3ConstArg b)
+{
+ return b*a;
+}
+
+
+#else
+
+typedef struct
+{
+ b3Float4 m_row[3];
+}b3Mat3x3;
+
+#define b3Mat3x3ConstArg const b3Mat3x3
+#define b3GetRow(m,row) (m.m_row[row])
+
+inline b3Mat3x3 b3QuatGetRotationMatrix(b3Quat quat)
+{
+ b3Float4 quat2 = (b3Float4)(quat.x*quat.x, quat.y*quat.y, quat.z*quat.z, 0.f);
+ b3Mat3x3 out;
+
+ out.m_row[0].x=1-2*quat2.y-2*quat2.z;
+ out.m_row[0].y=2*quat.x*quat.y-2*quat.w*quat.z;
+ out.m_row[0].z=2*quat.x*quat.z+2*quat.w*quat.y;
+ out.m_row[0].w = 0.f;
+
+ out.m_row[1].x=2*quat.x*quat.y+2*quat.w*quat.z;
+ out.m_row[1].y=1-2*quat2.x-2*quat2.z;
+ out.m_row[1].z=2*quat.y*quat.z-2*quat.w*quat.x;
+ out.m_row[1].w = 0.f;
+
+ out.m_row[2].x=2*quat.x*quat.z-2*quat.w*quat.y;
+ out.m_row[2].y=2*quat.y*quat.z+2*quat.w*quat.x;
+ out.m_row[2].z=1-2*quat2.x-2*quat2.y;
+ out.m_row[2].w = 0.f;
+
+ return out;
+}
+
+inline b3Mat3x3 b3AbsoluteMat3x3(b3Mat3x3ConstArg matIn)
+{
+ b3Mat3x3 out;
+ out.m_row[0] = fabs(matIn.m_row[0]);
+ out.m_row[1] = fabs(matIn.m_row[1]);
+ out.m_row[2] = fabs(matIn.m_row[2]);
+ return out;
+}
+
+
+__inline
+b3Mat3x3 mtZero();
+
+__inline
+b3Mat3x3 mtIdentity();
+
+__inline
+b3Mat3x3 mtTranspose(b3Mat3x3 m);
+
+__inline
+b3Mat3x3 mtMul(b3Mat3x3 a, b3Mat3x3 b);
+
+__inline
+b3Float4 mtMul1(b3Mat3x3 a, b3Float4 b);
+
+__inline
+b3Float4 mtMul3(b3Float4 a, b3Mat3x3 b);
+
+__inline
+b3Mat3x3 mtZero()
+{
+ b3Mat3x3 m;
+ m.m_row[0] = (b3Float4)(0.f);
+ m.m_row[1] = (b3Float4)(0.f);
+ m.m_row[2] = (b3Float4)(0.f);
+ return m;
+}
+
+__inline
+b3Mat3x3 mtIdentity()
+{
+ b3Mat3x3 m;
+ m.m_row[0] = (b3Float4)(1,0,0,0);
+ m.m_row[1] = (b3Float4)(0,1,0,0);
+ m.m_row[2] = (b3Float4)(0,0,1,0);
+ return m;
+}
+
+__inline
+b3Mat3x3 mtTranspose(b3Mat3x3 m)
+{
+ b3Mat3x3 out;
+ out.m_row[0] = (b3Float4)(m.m_row[0].x, m.m_row[1].x, m.m_row[2].x, 0.f);
+ out.m_row[1] = (b3Float4)(m.m_row[0].y, m.m_row[1].y, m.m_row[2].y, 0.f);
+ out.m_row[2] = (b3Float4)(m.m_row[0].z, m.m_row[1].z, m.m_row[2].z, 0.f);
+ return out;
+}
+
+__inline
+b3Mat3x3 mtMul(b3Mat3x3 a, b3Mat3x3 b)
+{
+ b3Mat3x3 transB;
+ transB = mtTranspose( b );
+ b3Mat3x3 ans;
+ // why this doesn't run when 0ing in the for{}
+ a.m_row[0].w = 0.f;
+ a.m_row[1].w = 0.f;
+ a.m_row[2].w = 0.f;
+ for(int i=0; i<3; i++)
+ {
+// a.m_row[i].w = 0.f;
+ ans.m_row[i].x = b3Dot3F4(a.m_row[i],transB.m_row[0]);
+ ans.m_row[i].y = b3Dot3F4(a.m_row[i],transB.m_row[1]);
+ ans.m_row[i].z = b3Dot3F4(a.m_row[i],transB.m_row[2]);
+ ans.m_row[i].w = 0.f;
+ }
+ return ans;
+}
+
+__inline
+b3Float4 mtMul1(b3Mat3x3 a, b3Float4 b)
+{
+ b3Float4 ans;
+ ans.x = b3Dot3F4( a.m_row[0], b );
+ ans.y = b3Dot3F4( a.m_row[1], b );
+ ans.z = b3Dot3F4( a.m_row[2], b );
+ ans.w = 0.f;
+ return ans;
+}
+
+__inline
+b3Float4 mtMul3(b3Float4 a, b3Mat3x3 b)
+{
+ b3Float4 colx = b3MakeFloat4(b.m_row[0].x, b.m_row[1].x, b.m_row[2].x, 0);
+ b3Float4 coly = b3MakeFloat4(b.m_row[0].y, b.m_row[1].y, b.m_row[2].y, 0);
+ b3Float4 colz = b3MakeFloat4(b.m_row[0].z, b.m_row[1].z, b.m_row[2].z, 0);
+
+ b3Float4 ans;
+ ans.x = b3Dot3F4( a, colx );
+ ans.y = b3Dot3F4( a, coly );
+ ans.z = b3Dot3F4( a, colz );
+ return ans;
+}
+
+
+#endif
+
+
+
+
+
+
+#endif //B3_MAT3x3_H
diff --git a/thirdparty/bullet/src/Bullet3Common/shared/b3PlatformDefinitions.h b/thirdparty/bullet/src/Bullet3Common/shared/b3PlatformDefinitions.h
new file mode 100644
index 0000000000..1c133fb088
--- /dev/null
+++ b/thirdparty/bullet/src/Bullet3Common/shared/b3PlatformDefinitions.h
@@ -0,0 +1,41 @@
+#ifndef B3_PLATFORM_DEFINITIONS_H
+#define B3_PLATFORM_DEFINITIONS_H
+
+struct MyTest
+{
+ int bla;
+};
+
+#ifdef __cplusplus
+//#define b3ConstArray(a) const b3AlignedObjectArray<a>&
+#define b3ConstArray(a) const a*
+#define b3AtomicInc(a) ((*a)++)
+
+inline int b3AtomicAdd (volatile int *p, int val)
+{
+ int oldValue = *p;
+ int newValue = oldValue+val;
+ *p = newValue;
+ return oldValue;
+}
+
+#define __global
+
+#define B3_STATIC static
+#else
+//keep B3_LARGE_FLOAT*B3_LARGE_FLOAT < FLT_MAX
+#define B3_LARGE_FLOAT 1e18f
+#define B3_INFINITY 1e18f
+#define b3Assert(a)
+#define b3ConstArray(a) __global const a*
+#define b3AtomicInc atomic_inc
+#define b3AtomicAdd atomic_add
+#define b3Fabs fabs
+#define b3Sqrt native_sqrt
+#define b3Sin native_sin
+#define b3Cos native_cos
+
+#define B3_STATIC
+#endif
+
+#endif
diff --git a/thirdparty/bullet/src/Bullet3Common/shared/b3Quat.h b/thirdparty/bullet/src/Bullet3Common/shared/b3Quat.h
new file mode 100644
index 0000000000..f262d5e08f
--- /dev/null
+++ b/thirdparty/bullet/src/Bullet3Common/shared/b3Quat.h
@@ -0,0 +1,103 @@
+#ifndef B3_QUAT_H
+#define B3_QUAT_H
+
+#include "Bullet3Common/shared/b3PlatformDefinitions.h"
+#include "Bullet3Common/shared/b3Float4.h"
+
+#ifdef __cplusplus
+ #include "Bullet3Common/b3Quaternion.h"
+ #include "Bullet3Common/b3Transform.h"
+
+ #define b3Quat b3Quaternion
+ #define b3QuatConstArg const b3Quaternion&
+ inline b3Quat b3QuatInverse(b3QuatConstArg orn)
+ {
+ return orn.inverse();
+ }
+
+ inline b3Float4 b3TransformPoint(b3Float4ConstArg point, b3Float4ConstArg translation, b3QuatConstArg orientation)
+ {
+ b3Transform tr;
+ tr.setOrigin(translation);
+ tr.setRotation(orientation);
+ return tr(point);
+ }
+
+#else
+ typedef float4 b3Quat;
+ #define b3QuatConstArg const b3Quat
+
+
+inline float4 b3FastNormalize4(float4 v)
+{
+ v = (float4)(v.xyz,0.f);
+ return fast_normalize(v);
+}
+
+inline b3Quat b3QuatMul(b3Quat a, b3Quat b);
+inline b3Quat b3QuatNormalized(b3QuatConstArg in);
+inline b3Quat b3QuatRotate(b3QuatConstArg q, b3QuatConstArg vec);
+inline b3Quat b3QuatInvert(b3QuatConstArg q);
+inline b3Quat b3QuatInverse(b3QuatConstArg q);
+
+inline b3Quat b3QuatMul(b3QuatConstArg a, b3QuatConstArg b)
+{
+ b3Quat ans;
+ ans = b3Cross3( a, b );
+ ans += a.w*b+b.w*a;
+// ans.w = a.w*b.w - (a.x*b.x+a.y*b.y+a.z*b.z);
+ ans.w = a.w*b.w - b3Dot3F4(a, b);
+ return ans;
+}
+
+inline b3Quat b3QuatNormalized(b3QuatConstArg in)
+{
+ b3Quat q;
+ q=in;
+ //return b3FastNormalize4(in);
+ float len = native_sqrt(dot(q, q));
+ if(len > 0.f)
+ {
+ q *= 1.f / len;
+ }
+ else
+ {
+ q.x = q.y = q.z = 0.f;
+ q.w = 1.f;
+ }
+ return q;
+}
+inline float4 b3QuatRotate(b3QuatConstArg q, b3QuatConstArg vec)
+{
+ b3Quat qInv = b3QuatInvert( q );
+ float4 vcpy = vec;
+ vcpy.w = 0.f;
+ float4 out = b3QuatMul(b3QuatMul(q,vcpy),qInv);
+ return out;
+}
+
+
+
+inline b3Quat b3QuatInverse(b3QuatConstArg q)
+{
+ return (b3Quat)(-q.xyz, q.w);
+}
+
+inline b3Quat b3QuatInvert(b3QuatConstArg q)
+{
+ return (b3Quat)(-q.xyz, q.w);
+}
+
+inline float4 b3QuatInvRotate(b3QuatConstArg q, b3QuatConstArg vec)
+{
+ return b3QuatRotate( b3QuatInvert( q ), vec );
+}
+
+inline b3Float4 b3TransformPoint(b3Float4ConstArg point, b3Float4ConstArg translation, b3QuatConstArg orientation)
+{
+ return b3QuatRotate( orientation, point ) + (translation);
+}
+
+#endif
+
+#endif //B3_QUAT_H