added parallel solver (work in progress) and made modifications to demo/constraints to allow for getting the type without using virtual functions (needed on CELL SPU processors)

This commit is contained in:
ejcoumans
2007-08-12 17:27:33 +00:00
parent 37e2b3db0a
commit ec22825e65
22 changed files with 1878 additions and 1018 deletions

View File

@@ -19,16 +19,19 @@ subject to the following restrictions:
#include "btScalar.h"
#include "btSimdMinMax.h"
class btQuadWordStorage
{
protected:
btScalar m_x;
btScalar m_y;
btScalar m_z;
btScalar m_unusedW;
};
///btQuadWord is base-class for vectors, points
class btQuadWord
class btQuadWord : public btQuadWordStorage
{
protected:
btScalar m_x;
btScalar m_y;
btScalar m_z;
btScalar m_unusedW;
public:
// SIMD_FORCE_INLINE btScalar& operator[](int i) { return (&m_x)[i]; }
@@ -88,16 +91,19 @@ class btQuadWord
{
}
SIMD_FORCE_INLINE btQuadWord(const btScalar& x, const btScalar& y, const btScalar& z)
:m_x(x),m_y(y),m_z(z)
//todo, remove this in release/simd ?
,m_unusedW(btScalar(0.))
SIMD_FORCE_INLINE btQuadWord(const btQuadWordStorage& q)
{
*((btQuadWordStorage*)this) = q;
}
SIMD_FORCE_INLINE btQuadWord(const btScalar& x, const btScalar& y, const btScalar& z)
{
m_x = x, m_y = y, m_z = z, m_unusedW = 0.0f;
}
SIMD_FORCE_INLINE btQuadWord(const btScalar& x, const btScalar& y, const btScalar& z,const btScalar& w)
:m_x(x),m_y(y),m_z(z),m_unusedW(w)
{
m_x = x, m_y = y, m_z = z, m_unusedW = w;
}

View File

@@ -285,7 +285,7 @@ slerp(const btQuaternion& q1, const btQuaternion& q2, const btScalar& t)
}
SIMD_FORCE_INLINE btVector3
quatRotate(btQuaternion& rotation, btVector3& v)
quatRotate(const btQuaternion& rotation, const btVector3& v)
{
btQuaternion q = rotation * v;
q *= rotation.inverse();
@@ -293,7 +293,7 @@ quatRotate(btQuaternion& rotation, btVector3& v)
}
SIMD_FORCE_INLINE btQuaternion
shortestArcQuat(btVector3& v0,btVector3& v1) // Game Programming Gems 2.10. make sure v0,v1 are normalized
shortestArcQuat(const btVector3& v0, const btVector3& v1) // Game Programming Gems 2.10. make sure v0,v1 are normalized
{
btVector3 c = v0.cross(v1);
btScalar d = v0.dot(v1);
@@ -308,7 +308,7 @@ shortestArcQuat(btVector3& v0,btVector3& v1) // Game Programming Gems 2.10. make
}
SIMD_FORCE_INLINE btQuaternion
shortestArcQuatNormalize(btVector3& v0,btVector3& v1)
shortestArcQuatNormalize(btVector3 v0,btVector3 v1)
{
v0.normalize();
v1.normalize();

View File

@@ -27,6 +27,10 @@ class btVector3 : public btQuadWord {
public:
SIMD_FORCE_INLINE btVector3() {}
SIMD_FORCE_INLINE btVector3(const btQuadWordStorage& q)
: btQuadWord(q)
{
}
SIMD_FORCE_INLINE btVector3(const btScalar& x, const btScalar& y, const btScalar& z)