From e1c66eb14509c9f6f4c59edd8a541e3d49d90cef Mon Sep 17 00:00:00 2001 From: Erwin Coumans Date: Mon, 28 Nov 2005 06:51:54 +0000 Subject: [PATCH] applied the 64-bit pointer patch submitted by Ken Hughes --- source/gameengine/Expressions/KX_HashedPtr.cpp | 15 ++++++++++----- source/gameengine/Expressions/KX_HashedPtr.h | 2 +- .../Ketsji/KX_CameraIpoSGController.cpp | 14 ++++++++++---- source/gameengine/Ketsji/KX_GameObject.cpp | 12 +++++++++--- source/gameengine/Ketsji/KX_IPO_SGController.cpp | 14 ++++++++++---- .../gameengine/Ketsji/KX_LightIpoSGController.cpp | 14 ++++++++++---- .../Ketsji/KX_ObColorIpoSGController.cpp | 15 +++++++++++---- .../gameengine/Ketsji/KX_PyConstraintBinding.cpp | 12 ++++++++---- .../gameengine/Ketsji/KX_WorldIpoController.cpp | 14 ++++++++++---- .../Physics/BlOde/OdePhysicsEnvironment.h | 2 +- .../Physics/Bullet/CcdPhysicsEnvironment.cpp | 12 +++++------- .../Physics/Bullet/CcdPhysicsEnvironment.h | 2 +- .../Physics/Dummy/DummyPhysicsEnvironment.cpp | 2 +- .../Physics/Dummy/DummyPhysicsEnvironment.h | 2 +- .../Physics/Sumo/SumoPhysicsEnvironment.cpp | 2 +- .../Physics/Sumo/SumoPhysicsEnvironment.h | 2 +- .../Physics/common/PHY_IPhysicsEnvironment.h | 2 +- 17 files changed, 91 insertions(+), 47 deletions(-) diff --git a/source/gameengine/Expressions/KX_HashedPtr.cpp b/source/gameengine/Expressions/KX_HashedPtr.cpp index d01ff1626d7..b1eeff20766 100644 --- a/source/gameengine/Expressions/KX_HashedPtr.cpp +++ b/source/gameengine/Expressions/KX_HashedPtr.cpp @@ -35,18 +35,23 @@ #include #endif -unsigned int KX_Hash(unsigned int inDWord) +unsigned int KX_Hash(void * inDWord) { - unsigned int key = inDWord; +#if defined(_WIN64) + unsigned __int64 key = (unsigned __int64)inDWord; +#else + unsigned long key = (unsigned long)inDWord; +#endif + key += ~(key << 16); key ^= (key >> 5); key += (key << 3); key ^= (key >> 13); key += ~(key << 9); key ^= (key >> 17); - return key; -}; + return (unsigned int)(key & 0xffffffff); +} CHashedPtr::CHashedPtr(void* val) : m_valptr(val) @@ -57,5 +62,5 @@ CHashedPtr::CHashedPtr(void* val) : m_valptr(val) unsigned int CHashedPtr::hash() const { - return KX_Hash((unsigned int) m_valptr); + return KX_Hash(m_valptr); } diff --git a/source/gameengine/Expressions/KX_HashedPtr.h b/source/gameengine/Expressions/KX_HashedPtr.h index 18d183c2ae8..06e86854d82 100644 --- a/source/gameengine/Expressions/KX_HashedPtr.h +++ b/source/gameengine/Expressions/KX_HashedPtr.h @@ -32,7 +32,7 @@ #ifndef __KX_HASHEDPTR #define __KX_HASHEDPTR -unsigned int KX_Hash(unsigned int inDWord); +unsigned int KX_Hash(void * inDWord); class CHashedPtr { diff --git a/source/gameengine/Ketsji/KX_CameraIpoSGController.cpp b/source/gameengine/Ketsji/KX_CameraIpoSGController.cpp index 425493dbe7e..38064739ff0 100644 --- a/source/gameengine/Ketsji/KX_CameraIpoSGController.cpp +++ b/source/gameengine/Ketsji/KX_CameraIpoSGController.cpp @@ -38,6 +38,12 @@ #include #endif +#if defined(_WIN64) +typedef unsigned __int64 uint_ptr; +#else +typedef unsigned long uint_ptr; +#endif + bool KX_CameraIpoSGController::Update(double currentTime) { if (m_modified) @@ -92,10 +98,10 @@ SG_Controller* KX_CameraIpoSGController::GetReplica(class SG_Node* destnode) iporeplica->AddInterpolator(copyipo); MT_Scalar* scaal = ((KX_ScalarInterpolator*)*i)->GetTarget(); - int orgbase = (int)this; - int orgloc = (int)scaal; - int offset = orgloc-orgbase; - int newaddrbase = (int)iporeplica + offset; + uint_ptr orgbase = (uint_ptr)this; + uint_ptr orgloc = (uint_ptr)scaal; + uint_ptr offset = orgloc-orgbase; + uint_ptr newaddrbase = (uint_ptr)iporeplica + offset; MT_Scalar* blaptr = (MT_Scalar*) newaddrbase; copyipo->SetNewTarget((MT_Scalar*)blaptr); } diff --git a/source/gameengine/Ketsji/KX_GameObject.cpp b/source/gameengine/Ketsji/KX_GameObject.cpp index da81439fccb..93917151932 100644 --- a/source/gameengine/Ketsji/KX_GameObject.cpp +++ b/source/gameengine/Ketsji/KX_GameObject.cpp @@ -35,6 +35,12 @@ #include #endif +#if defined(_WIN64) +typedef unsigned __int64 uint_ptr; +#else +typedef unsigned long uint_ptr; +#endif + #ifdef WIN32 // This warning tells us about truncation of __long__ stl-generated names. // It can occasionally cause DevStudio to have internal compiler warnings. @@ -1068,12 +1074,12 @@ PyObject* KX_GameObject::PyGetPhysicsId(PyObject* self, PyObject* kwds) { KX_IPhysicsController* ctrl = GetPhysicsController(); - int physid=0; + uint_ptr physid=0; if (ctrl) { - physid= (int)ctrl->GetUserData(); + physid= (uint_ptr)ctrl->GetUserData(); } - return PyInt_FromLong(physid); + return PyInt_FromLong((long)physid); } KX_PYMETHODDEF_DOC(KX_GameObject, getDistanceTo, diff --git a/source/gameengine/Ketsji/KX_IPO_SGController.cpp b/source/gameengine/Ketsji/KX_IPO_SGController.cpp index e54fb11dc14..920a65be0fb 100644 --- a/source/gameengine/Ketsji/KX_IPO_SGController.cpp +++ b/source/gameengine/Ketsji/KX_IPO_SGController.cpp @@ -35,6 +35,12 @@ #include #endif +#if defined(_WIN64) +typedef unsigned __int64 uint_ptr; +#else +typedef unsigned long uint_ptr; +#endif + #ifdef WIN32 // This warning tells us about truncation of __long__ stl-generated names. // It can occasionally cause DevStudio to have internal compiler warnings. @@ -168,10 +174,10 @@ SG_Controller* KX_IpoSGController::GetReplica(class SG_Node* destnode) iporeplica->AddInterpolator(copyipo); MT_Scalar* scaal = ((KX_ScalarInterpolator*)*i)->GetTarget(); - int orgbase = (int)&m_ipo_xform; - int orgloc = (int)scaal; - int offset = orgloc-orgbase; - int newaddrbase = (int)&iporeplica->m_ipo_xform; + uint_ptr orgbase = (uint_ptr)&m_ipo_xform; + uint_ptr orgloc = (uint_ptr)scaal; + uint_ptr offset = orgloc-orgbase; + uint_ptr newaddrbase = (uint_ptr)&iporeplica->m_ipo_xform; newaddrbase += offset; MT_Scalar* blaptr = (MT_Scalar*) newaddrbase; copyipo->SetNewTarget((MT_Scalar*)blaptr); diff --git a/source/gameengine/Ketsji/KX_LightIpoSGController.cpp b/source/gameengine/Ketsji/KX_LightIpoSGController.cpp index e1bb3329ca8..45865b7a682 100644 --- a/source/gameengine/Ketsji/KX_LightIpoSGController.cpp +++ b/source/gameengine/Ketsji/KX_LightIpoSGController.cpp @@ -38,6 +38,12 @@ #include #endif +#if defined(_WIN64) +typedef unsigned __int64 uint_ptr; +#else +typedef unsigned long uint_ptr; +#endif + bool KX_LightIpoSGController::Update(double currentTime) { if (m_modified) @@ -97,10 +103,10 @@ SG_Controller* KX_LightIpoSGController::GetReplica(class SG_Node* destnode) iporeplica->AddInterpolator(copyipo); MT_Scalar* scaal = ((KX_ScalarInterpolator*)*i)->GetTarget(); - int orgbase = (int)this; - int orgloc = (int)scaal; - int offset = orgloc-orgbase; - int newaddrbase = (int)iporeplica + offset; + uint_ptr orgbase = (uint_ptr)this; + uint_ptr orgloc = (uint_ptr)scaal; + uint_ptr offset = orgloc-orgbase; + uint_ptr newaddrbase = (uint_ptr)iporeplica + offset; MT_Scalar* blaptr = (MT_Scalar*) newaddrbase; copyipo->SetNewTarget((MT_Scalar*)blaptr); } diff --git a/source/gameengine/Ketsji/KX_ObColorIpoSGController.cpp b/source/gameengine/Ketsji/KX_ObColorIpoSGController.cpp index 58c1494724c..b6d385da8ca 100644 --- a/source/gameengine/Ketsji/KX_ObColorIpoSGController.cpp +++ b/source/gameengine/Ketsji/KX_ObColorIpoSGController.cpp @@ -37,6 +37,13 @@ #include #endif +#if defined(_WIN64) +typedef unsigned __int64 uint_ptr; +#else +typedef unsigned long uint_ptr; +#endif + + bool KX_ObColorIpoSGController::Update(double currentTime) { if (m_modified) @@ -87,10 +94,10 @@ SG_Controller* KX_ObColorIpoSGController::GetReplica(class SG_Node* destnode) iporeplica->AddInterpolator(copyipo); MT_Scalar* scaal = ((KX_ScalarInterpolator*)*i)->GetTarget(); - int orgbase = (int)this; - int orgloc = (int)scaal; - int offset = orgloc-orgbase; - int newaddrbase = (int)iporeplica + offset; + uint_ptr orgbase = (uint_ptr)this; + uint_ptr orgloc = (uint_ptr)scaal; + uint_ptr offset = orgloc-orgbase; + uint_ptr newaddrbase = (uint_ptr)iporeplica + offset; MT_Scalar* blaptr = (MT_Scalar*) newaddrbase; copyipo->SetNewTarget((MT_Scalar*)blaptr); } diff --git a/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp b/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp index f11a9a763fe..2317f9c3a9c 100644 --- a/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp +++ b/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp @@ -352,13 +352,17 @@ static PyObject* gPyRemoveConstraint(PyObject* self, PyObject* args, PyObject* kwds) { - int constraintid; - - if (PyArg_ParseTuple(args,"i",&constraintid)) +#if defined(_WIN64) + __int64 constraintid; + if (PyArg_ParseTuple(args,"L",&constraintid)) +#else + long constraintid; + if (PyArg_ParseTuple(args,"l",&constraintid)) +#endif { if (PHY_GetActiveEnvironment()) { - PHY_GetActiveEnvironment()->removeConstraint(constraintid); + PHY_GetActiveEnvironment()->removeConstraint((void *)constraintid); } } Py_INCREF(Py_None); return Py_None; diff --git a/source/gameengine/Ketsji/KX_WorldIpoController.cpp b/source/gameengine/Ketsji/KX_WorldIpoController.cpp index c4800dc9d91..ded251f391e 100644 --- a/source/gameengine/Ketsji/KX_WorldIpoController.cpp +++ b/source/gameengine/Ketsji/KX_WorldIpoController.cpp @@ -37,6 +37,12 @@ #include #endif +#if defined(_WIN64) +typedef unsigned __int64 uint_ptr; +#else +typedef unsigned long uint_ptr; +#endif + bool KX_WorldIpoController::Update(double currentTime) { if (m_modified) @@ -92,10 +98,10 @@ SG_Controller* KX_WorldIpoController::GetReplica(class SG_Node* destnode) iporeplica->AddInterpolator(copyipo); MT_Scalar* scaal = ((KX_ScalarInterpolator*)*i)->GetTarget(); - int orgbase = (int)this; - int orgloc = (int)scaal; - int offset = orgloc-orgbase; - int newaddrbase = (int)iporeplica + offset; + uint_ptr orgbase = (uint_ptr)this; + uint_ptr orgloc = (uint_ptr)scaal; + uint_ptr offset = orgloc-orgbase; + uint_ptr newaddrbase = (uint_ptr)iporeplica + offset; MT_Scalar* blaptr = (MT_Scalar*) newaddrbase; copyipo->SetNewTarget((MT_Scalar*)blaptr); } diff --git a/source/gameengine/Physics/BlOde/OdePhysicsEnvironment.h b/source/gameengine/Physics/BlOde/OdePhysicsEnvironment.h index 2214d642d7b..bddc1e03be1 100644 --- a/source/gameengine/Physics/BlOde/OdePhysicsEnvironment.h +++ b/source/gameengine/Physics/BlOde/OdePhysicsEnvironment.h @@ -53,7 +53,7 @@ public: float pivotX,float pivotY,float pivotZ, float axisX,float axisY,float axisZ); - virtual void removeConstraint(int constraintid); + virtual void removeConstraint(void * constraintid); virtual PHY_IPhysicsController* rayTest(PHY_IPhysicsController* ignoreClient,float fromX,float fromY,float fromZ, float toX,float toY,float toZ, float& hitX,float& hitY,float& hitZ,float& normalX,float& normalY,float& normalZ); diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp b/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp index c1bfa43d788..c375abbdb16 100644 --- a/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp +++ b/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp @@ -192,7 +192,7 @@ void CcdPhysicsEnvironment::removeCcdPhysicsController(CcdPhysicsController* ctr if ((&p2p->GetRigidBodyA() == ctrl->GetRigidBody() || (&p2p->GetRigidBodyB() == ctrl->GetRigidBody()))) { - removeConstraint(int(p2p)); + removeConstraint(p2p); //only 1 constraint per constroller break; } @@ -209,7 +209,7 @@ void CcdPhysicsEnvironment::removeCcdPhysicsController(CcdPhysicsController* ctr if ((&p2p->GetRigidBodyA() == ctrl->GetRigidBody() || (&p2p->GetRigidBodyB() == ctrl->GetRigidBody()))) { - removeConstraint(int(p2p)); + removeConstraint(p2p); //only 1 constraint per constroller break; } @@ -768,13 +768,11 @@ int CcdPhysicsEnvironment::createConstraint(class PHY_IPhysicsController* ctrl } -void CcdPhysicsEnvironment::removeConstraint(int constraintid) +void CcdPhysicsEnvironment::removeConstraint(void* p2p) { - - Point2PointConstraint* p2p = (Point2PointConstraint*) constraintid; - std::vector::iterator i = - std::find(m_p2pConstraints.begin(), m_p2pConstraints.end(), p2p); + std::find(m_p2pConstraints.begin(), m_p2pConstraints.end(), + (Point2PointConstraint *)p2p); if (!(i == m_p2pConstraints.end()) ) { diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h b/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h index 8bacbad8914..8e526421116 100644 --- a/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h +++ b/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h @@ -75,7 +75,7 @@ class CcdPhysicsEnvironment : public PHY_IPhysicsEnvironment virtual int createConstraint(class PHY_IPhysicsController* ctrl,class PHY_IPhysicsController* ctrl2,PHY_ConstraintType type, float pivotX,float pivotY,float pivotZ, float axisX,float axisY,float axisZ); - virtual void removeConstraint(int constraintid); + virtual void removeConstraint(void* constraintid); virtual PHY_IPhysicsController* rayTest(PHY_IPhysicsController* ignoreClient, float fromX,float fromY,float fromZ, float toX,float toY,float toZ, diff --git a/source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.cpp b/source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.cpp index a640acd9b3d..0b6f8a4ded4 100644 --- a/source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.cpp +++ b/source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.cpp @@ -101,7 +101,7 @@ int DummyPhysicsEnvironment::createConstraint(class PHY_IPhysicsController* ct } -void DummyPhysicsEnvironment::removeConstraint(int constraintid) +void DummyPhysicsEnvironment::removeConstraint(void * constraintid) { if (constraintid) { diff --git a/source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.h b/source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.h index fde27e822d6..0a359feea6d 100644 --- a/source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.h +++ b/source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.h @@ -61,7 +61,7 @@ public: float pivotX,float pivotY,float pivotZ, float axisX,float axisY,float axisZ); - virtual void removeConstraint(int constraintid); + virtual void removeConstraint(void * constraintid); virtual PHY_IPhysicsController* rayTest(PHY_IPhysicsController* ignoreClient, float fromX,float fromY,float fromZ, float toX,float toY,float toZ, float& hitX,float& hitY,float& hitZ,float& normalX,float& normalY,float& normalZ); diff --git a/source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.cpp b/source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.cpp index 6cd5d513357..8d03fd4b0f4 100644 --- a/source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.cpp +++ b/source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.cpp @@ -117,7 +117,7 @@ int SumoPhysicsEnvironment::createConstraint( return constraintid; } -void SumoPhysicsEnvironment::removeConstraint(int constraintid) +void SumoPhysicsEnvironment::removeConstraint(void * constraintid) { if (constraintid) { diff --git a/source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.h b/source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.h index 62672d8ba48..c93e34825b9 100644 --- a/source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.h +++ b/source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.h @@ -66,7 +66,7 @@ public: float pivotX,float pivotY,float pivotZ, float axisX,float axisY,float axisZ); - virtual void removeConstraint(int constraintid); + virtual void removeConstraint(void * constraintid); virtual PHY_IPhysicsController* rayTest(PHY_IPhysicsController* ignoreClient,float fromX,float fromY,float fromZ, float toX,float toY,float toZ, float& hitX,float& hitY,float& hitZ,float& normalX,float& normalY,float& normalZ); diff --git a/source/gameengine/Physics/common/PHY_IPhysicsEnvironment.h b/source/gameengine/Physics/common/PHY_IPhysicsEnvironment.h index c847e638bce..1158563527a 100644 --- a/source/gameengine/Physics/common/PHY_IPhysicsEnvironment.h +++ b/source/gameengine/Physics/common/PHY_IPhysicsEnvironment.h @@ -83,7 +83,7 @@ class PHY_IPhysicsEnvironment virtual int createConstraint(class PHY_IPhysicsController* ctrl,class PHY_IPhysicsController* ctrl2,PHY_ConstraintType type, float pivotX,float pivotY,float pivotZ, float axisX,float axisY,float axisZ)=0; - virtual void removeConstraint(int constraintid)=0; + virtual void removeConstraint(void * constraintid)=0; virtual PHY_IPhysicsController* rayTest(PHY_IPhysicsController* ignoreClient, float fromX,float fromY,float fromZ, float toX,float toY,float toZ, float& hitX,float& hitY,float& hitZ,float& normalX,float& normalY,float& normalZ)=0;