[Scummvm-git-logs] scummvm master -> 639d20720e4f746d7e92a22b65349e500a5d8dc7
grisenti
noreply at scummvm.org
Wed Sep 6 17:29:46 UTC 2023
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
639d20720e HPL1: Fix unsafe function casts
Commit: 639d20720e4f746d7e92a22b65349e500a5d8dc7
https://github.com/scummvm/scummvm/commit/639d20720e4f746d7e92a22b65349e500a5d8dc7
Author: grisenti (emanuele at grisenti.net)
Date: 2023-09-06T19:29:36+02:00
Commit Message:
HPL1: Fix unsafe function casts
Changed paths:
engines/hpl1/engine/libraries/newton/Newton.h
engines/hpl1/engine/libraries/newton/core/dg.h
engines/hpl1/engine/libraries/newton/physics/dgBallConstraint.cpp
engines/hpl1/engine/libraries/newton/physics/dgBallConstraint.h
engines/hpl1/engine/libraries/newton/physics/dgBilateralConstraint.cpp
engines/hpl1/engine/libraries/newton/physics/dgBody.cpp
engines/hpl1/engine/libraries/newton/physics/dgBody.h
engines/hpl1/engine/libraries/newton/physics/dgBroadPhaseCollision.cpp
engines/hpl1/engine/libraries/newton/physics/dgCollisionBVH.cpp
engines/hpl1/engine/libraries/newton/physics/dgCollisionBox.cpp
engines/hpl1/engine/libraries/newton/physics/dgCollisionCapsule.cpp
engines/hpl1/engine/libraries/newton/physics/dgCollisionChamferCylinder.cpp
engines/hpl1/engine/libraries/newton/physics/dgCollisionCompound.cpp
engines/hpl1/engine/libraries/newton/physics/dgCollisionConvex.cpp
engines/hpl1/engine/libraries/newton/physics/dgCollisionConvexModifier.cpp
engines/hpl1/engine/libraries/newton/physics/dgCollisionCylinder.cpp
engines/hpl1/engine/libraries/newton/physics/dgCollisionEllipse.cpp
engines/hpl1/engine/libraries/newton/physics/dgCollisionSphere.cpp
engines/hpl1/engine/libraries/newton/physics/dgCollisionUserMesh.cpp
engines/hpl1/engine/libraries/newton/physics/dgCollisionUserMesh.h
engines/hpl1/engine/libraries/newton/physics/dgConstraint.h
engines/hpl1/engine/libraries/newton/physics/dgContact.cpp
engines/hpl1/engine/libraries/newton/physics/dgContact.h
engines/hpl1/engine/libraries/newton/physics/dgCorkscrewConstraint.cpp
engines/hpl1/engine/libraries/newton/physics/dgCorkscrewConstraint.h
engines/hpl1/engine/libraries/newton/physics/dgHingeConstraint.cpp
engines/hpl1/engine/libraries/newton/physics/dgHingeConstraint.h
engines/hpl1/engine/libraries/newton/physics/dgNarrowPhaseCollision.cpp
engines/hpl1/engine/libraries/newton/physics/dgSlidingConstraint.cpp
engines/hpl1/engine/libraries/newton/physics/dgSlidingConstraint.h
engines/hpl1/engine/libraries/newton/physics/dgUniversalConstraint.cpp
engines/hpl1/engine/libraries/newton/physics/dgUniversalConstraint.h
engines/hpl1/engine/libraries/newton/physics/dgWorld.cpp
engines/hpl1/engine/libraries/newton/physics/dgWorldDynamicUpdate.cpp
diff --git a/engines/hpl1/engine/libraries/newton/Newton.h b/engines/hpl1/engine/libraries/newton/Newton.h
index 30beb420b48..b9fb58d46fe 100644
--- a/engines/hpl1/engine/libraries/newton/Newton.h
+++ b/engines/hpl1/engine/libraries/newton/Newton.h
@@ -264,17 +264,17 @@ typedef void (*NewtonDestroyWorld)(const NewtonWorld *const newtonWorld);
typedef unsigned(*NewtonGetTicksCountCallback)();
-typedef void (*NewtonSerialize)(void *const serializeHandle, const void *buffer, int size);
-typedef void (*NewtonDeserialize)(void *const serializeHandle, void *buffer, int size);
+typedef void (*NewtonSerialize)(void *const serializeHandle, const void *buffer, size_t size);
+typedef void (*NewtonDeserialize)(void *const serializeHandle, void *buffer, size_t size);
// user collision callbacks
typedef void (*NewtonUserMeshCollisionDestroyCallback)(void *const userData);
typedef void (*NewtonUserMeshCollisionCollideCallback)(NewtonUserMeshCollisionCollideDesc *const collideDescData);
typedef dFloat(*NewtonUserMeshCollisionRayHitCallback)(NewtonUserMeshCollisionRayHitDesc *const lineDescData);
typedef void (*NewtonUserMeshCollisionGetCollisionInfo)(void *const userData, NewtonCollisionInfoRecord *const infoRecord);
-typedef int (*NewtonUserMeshCollisionGetFacesInAABB)(void *const userData, const dFloat *const p0, const dFloat *const p1,
- const dFloat **const vertexArray, int *const vertexCount, int *const vertexStrideInBytes,
- const int *const indexList, int maxIndexCount, const int *const userDataList);
+typedef void (*NewtonUserMeshCollisionGetFacesInAABB)(void *const userData, const dFloat *const p0, const dFloat *const p1,
+ const dFloat *const *const vertexArray, int *const vertexCount, int *const vertexStrideInBytes,
+ const int *const indexList, int maxIndexCount, const int *const userDataList);
typedef dFloat(*NewtonCollisionTreeRayCastCallback)(const NewtonBody *const body, const NewtonCollision *const treeCollision, dFloat interception, dFloat *normal, int faceId, void *usedData);
typedef dFloat(*NewtonHeightFieldRayCastCallback)(const NewtonBody *const body, const NewtonCollision *const heightFieldCollision, dFloat interception, int row, int col, dFloat *normal, int faceId, void *usedData);
diff --git a/engines/hpl1/engine/libraries/newton/core/dg.h b/engines/hpl1/engine/libraries/newton/core/dg.h
index b572b1926fc..de159a98a36 100644
--- a/engines/hpl1/engine/libraries/newton/core/dg.h
+++ b/engines/hpl1/engine/libraries/newton/core/dg.h
@@ -60,4 +60,23 @@
#include "dgPolyhedraMassProperties.h"
#include "dgDelaunayTetrahedralization.h"
+class NewtonMesh;
+class NewtonBody;
+class NewtonWorld;
+class NewtonJoint;
+class NewtonMaterial;
+class NewtonCollision;
+class NewtonSceneProxy;
+class NewtonbreakableComponentMesh;
+
+typedef struct NewtonUserMeshCollisionCollideDesc NewtonUserMeshCollisionCollideDesc;
+typedef struct NewtonUserMeshCollisionRayHitDesc NewtonUserMeshCollisionRayHitDesc;
+typedef struct NewtonHingeSliderUpdateDesc NewtonHingeSliderUpdateDesc;
+
+#ifdef __USE_DOUBLE_PRECISION__
+#define dFloat double
+#else
+#define dFloat float
+#endif
+
#endif
diff --git a/engines/hpl1/engine/libraries/newton/physics/dgBallConstraint.cpp b/engines/hpl1/engine/libraries/newton/physics/dgBallConstraint.cpp
index f073d1cb3ad..6e6f36e67ab 100644
--- a/engines/hpl1/engine/libraries/newton/physics/dgBallConstraint.cpp
+++ b/engines/hpl1/engine/libraries/newton/physics/dgBallConstraint.cpp
@@ -224,7 +224,7 @@ dgUnsigned32 dgBallConstraint::JacobianDerivative(dgContraintDescritor ¶ms)
dgMatrix matrix1;
if (m_jointUserCallback) {
- m_jointUserCallback(*this, params.m_timestep);
+ m_jointUserCallback(reinterpret_cast<NewtonJoint *>(this), params.m_timestep);
}
dgVector angle(CalculateGlobalMatrixAndAngle(matrix0, matrix1));
diff --git a/engines/hpl1/engine/libraries/newton/physics/dgBallConstraint.h b/engines/hpl1/engine/libraries/newton/physics/dgBallConstraint.h
index 6ccfb447ee3..4841902c726 100644
--- a/engines/hpl1/engine/libraries/newton/physics/dgBallConstraint.h
+++ b/engines/hpl1/engine/libraries/newton/physics/dgBallConstraint.h
@@ -30,7 +30,7 @@
// template<class T> class dgPool;
class dgBallConstraint;
-typedef dgUnsigned32(dgApi *dgBallJointFriction)(const dgBallConstraint &ball, dgFloat32 timestep);
+typedef void(dgApi *dgBallJointFriction)(const NewtonJoint *const ball, dFloat timestep);
class dgBallConstraint : public dgBilateralConstraint {
public:
diff --git a/engines/hpl1/engine/libraries/newton/physics/dgBilateralConstraint.cpp b/engines/hpl1/engine/libraries/newton/physics/dgBilateralConstraint.cpp
index d51246ac5ac..d505b608968 100644
--- a/engines/hpl1/engine/libraries/newton/physics/dgBilateralConstraint.cpp
+++ b/engines/hpl1/engine/libraries/newton/physics/dgBilateralConstraint.cpp
@@ -55,7 +55,7 @@ dgBilateralConstraint::dgBilateralConstraint() : dgConstraint() {
dgBilateralConstraint::~dgBilateralConstraint() {
if (m_destructor) {
- m_destructor(*this);
+ m_destructor(reinterpret_cast<NewtonJoint *>(this));
}
}
diff --git a/engines/hpl1/engine/libraries/newton/physics/dgBody.cpp b/engines/hpl1/engine/libraries/newton/physics/dgBody.cpp
index 4eb8f587b27..485f4b8376e 100644
--- a/engines/hpl1/engine/libraries/newton/physics/dgBody.cpp
+++ b/engines/hpl1/engine/libraries/newton/physics/dgBody.cpp
@@ -340,8 +340,8 @@ dgFloat32 dgBody::RayCast(const dgLineBox &line, OnRayCastAction filter,
contactOut.m_normal = m_collisionWorldMatrix.RotateVectorSimd(
contactOut.m_normal);
- minT = filter(this, contactOut.m_normal, dgInt32(contactOut.m_userId),
- userData, t);
+ minT = filter(reinterpret_cast<const NewtonBody *>(this), &contactOut.m_normal.m_x, dgInt32(contactOut.m_userId),
+ userData, t);
}
}
} else {
@@ -355,8 +355,8 @@ dgFloat32 dgBody::RayCast(const dgLineBox &line, OnRayCastAction filter,
NEWTON_ASSERT(t <= 1.0f);
contactOut.m_normal = m_collisionWorldMatrix.RotateVector(
contactOut.m_normal);
- minT = filter(this, contactOut.m_normal, dgInt32(contactOut.m_userId),
- userData, t);
+ minT = filter(reinterpret_cast<const NewtonBody *>(this), &contactOut.m_normal.m_x, dgInt32(contactOut.m_userId),
+ userData, t);
}
}
}
@@ -538,7 +538,7 @@ void dgBody::CalcInvInertiaMatrixSimd() {
void dgBody::UpdateMatrix(dgFloat32 timestep, dgInt32 threadIndex) {
if (m_matrixUpdate) {
// m_world->dgGetUserLock_();
- m_matrixUpdate(*this, m_matrix, threadIndex);
+ m_matrixUpdate(reinterpret_cast<const NewtonBody *>(this), &m_matrix.m_front.m_x, threadIndex);
// m_world->dgReleasedUserLock_();
}
// UpdateCollisionMatrix (timestep, threadIndex);
diff --git a/engines/hpl1/engine/libraries/newton/physics/dgBody.h b/engines/hpl1/engine/libraries/newton/physics/dgBody.h
index 9a70a05dc2a..40a9daf8ddf 100644
--- a/engines/hpl1/engine/libraries/newton/physics/dgBody.h
+++ b/engines/hpl1/engine/libraries/newton/physics/dgBody.h
@@ -60,12 +60,12 @@ public:
const dgBody *m_hitBody; // body hit at contact point
};
-typedef void(dgApi *OnBodyDestroy)(dgBody &me);
-typedef void(dgApi *OnApplyExtForceAndTorque)(dgBody &me, dgFloat32 timestep, dgInt32 threadIndex);
-typedef void(dgApi *OnMatrixUpdateCallback)(const dgBody &me, const dgMatrix &matrix, dgInt32 threadIndex);
-typedef dgUnsigned32(dgApi *OnRayPrecastAction)(const dgBody *const body, const dgCollision *const collision, void *const userData);
-typedef dgFloat32(dgApi *OnRayCastAction)(const dgBody *const body, const dgVector &normal, dgInt32 collisionID, void *const userData, dgFloat32 intersetParam);
-typedef dgUnsigned32(dgApi *GetBuoyancyPlane)(void *collisionID, void *context, const dgMatrix &matrix, dgPlane &plane);
+typedef void(dgApi *OnBodyDestroy)(const NewtonBody *const me);
+typedef void(dgApi *OnApplyExtForceAndTorque)(NewtonBody *const me, dFloat timestep, int threadIndex);
+typedef void(dgApi *OnMatrixUpdateCallback)(const NewtonBody *const body, const dFloat *const matrix, int threadIndex);
+typedef dgUnsigned32(dgApi *OnRayPrecastAction)(const NewtonBody *const body, const NewtonCollision *const collision, void *const userData);
+typedef dgFloat32(dgApi *OnRayCastAction)(const NewtonBody *const body, const dFloat *const hitNormal, int collisionID, void *const userData, dFloat intersectParam);
+typedef dgUnsigned32(dgApi *GetBuoyancyPlane)(const int collisionID, void *const context, const dFloat *const globalSpaceMatrix, dFloat *const globalSpacePlane);
#define OverlapTest(body0, body1) dgOverlapTest((body0)->m_minAABB, (body0)->m_maxAABB, (body1)->m_minAABB, (body1)->m_maxAABB)
//#define OverlapTest_SSE(body0,body1) dgOverlapTest_SSE ((body0)->m_minAABB, (body0)->m_maxAABB, (body1)->m_minAABB, (body1)->m_maxAABB)
@@ -570,7 +570,7 @@ inline void dgBody::ApplyExtenalForces(dgFloat32 timestep, dgInt32 threadIndex)
m_accel = dgVector(dgFloat32(0.0f), dgFloat32(0.0f), dgFloat32(0.0f), dgFloat32(0.0f));
m_alpha = dgVector(dgFloat32(0.0f), dgFloat32(0.0f), dgFloat32(0.0f), dgFloat32(0.0f));
if (m_applyExtForces) {
- m_applyExtForces(*this, timestep, threadIndex);
+ m_applyExtForces(reinterpret_cast<NewtonBody *>(this), timestep, threadIndex);
}
}
diff --git a/engines/hpl1/engine/libraries/newton/physics/dgBroadPhaseCollision.cpp b/engines/hpl1/engine/libraries/newton/physics/dgBroadPhaseCollision.cpp
index a17ae201849..af309b03f4e 100644
--- a/engines/hpl1/engine/libraries/newton/physics/dgBroadPhaseCollision.cpp
+++ b/engines/hpl1/engine/libraries/newton/physics/dgBroadPhaseCollision.cpp
@@ -596,7 +596,7 @@ dgInt32 dgBroadPhaseCollision::ConvexCast(dgCollision *const shape,
// if (body != sentinel) {
if (!body->m_collision->IsType(
dgCollision::dgCollisionNull_RTTI)) {
- if (!PREFILTER_RAYCAST(prefilter, body, collision, userData)) {
+ if (!PREFILTER_RAYCAST(prefilter, reinterpret_cast<const NewtonBody *>(body), reinterpret_cast<const NewtonCollision *>(collision), userData)) {
dgInt32 count;
dgFloat32 time;
diff --git a/engines/hpl1/engine/libraries/newton/physics/dgCollisionBVH.cpp b/engines/hpl1/engine/libraries/newton/physics/dgCollisionBVH.cpp
index a5655a74f38..e9d4cb1cd20 100644
--- a/engines/hpl1/engine/libraries/newton/physics/dgCollisionBVH.cpp
+++ b/engines/hpl1/engine/libraries/newton/physics/dgCollisionBVH.cpp
@@ -283,7 +283,7 @@ dgFloat32 dgCollisionBVH::RayCastSimd(const dgVector &localP0,
const dgVector &localP1, dgContactPoint &contactOut,
OnRayPrecastAction preFilter, const dgBody *const body,
void *const userData) const {
- if (PREFILTER_RAYCAST(preFilter, body, this, userData)) {
+ if (PREFILTER_RAYCAST(preFilter, reinterpret_cast<const NewtonBody *>(body), reinterpret_cast<const NewtonCollision *>(this), userData)) {
return dgFloat32(1.2f);
}
@@ -321,7 +321,7 @@ dgFloat32 dgCollisionBVH::RayCast(const dgVector &localP0,
const dgVector &localP1, dgContactPoint &contactOut,
OnRayPrecastAction preFilter, const dgBody *const body,
void *const userData) const {
- if (PREFILTER_RAYCAST(preFilter, body, this, userData)) {
+ if (PREFILTER_RAYCAST(preFilter, reinterpret_cast<const NewtonBody *>(body), reinterpret_cast<const NewtonCollision *>(this), userData)) {
return dgFloat32(1.2f);
}
diff --git a/engines/hpl1/engine/libraries/newton/physics/dgCollisionBox.cpp b/engines/hpl1/engine/libraries/newton/physics/dgCollisionBox.cpp
index eae87730e9e..33691da2fcf 100644
--- a/engines/hpl1/engine/libraries/newton/physics/dgCollisionBox.cpp
+++ b/engines/hpl1/engine/libraries/newton/physics/dgCollisionBox.cpp
@@ -246,7 +246,7 @@ dgFloat32 dgCollisionBox::RayCast(const dgVector &localP0,
const dgVector &localP1, dgContactPoint &contactOut,
OnRayPrecastAction preFilter, const dgBody *const body,
void *const userData) const {
- if (PREFILTER_RAYCAST(preFilter, body, this, userData)) {
+ if (PREFILTER_RAYCAST(preFilter, reinterpret_cast<const NewtonBody *>(body), reinterpret_cast<const NewtonCollision *>(this), userData)) {
return dgFloat32(1.2f);
}
diff --git a/engines/hpl1/engine/libraries/newton/physics/dgCollisionCapsule.cpp b/engines/hpl1/engine/libraries/newton/physics/dgCollisionCapsule.cpp
index 5c352eb272f..14ed177391a 100644
--- a/engines/hpl1/engine/libraries/newton/physics/dgCollisionCapsule.cpp
+++ b/engines/hpl1/engine/libraries/newton/physics/dgCollisionCapsule.cpp
@@ -337,7 +337,7 @@ dgVector dgCollisionCapsule::SupportVertex(const dgVector &dir) const {
}
dgFloat32 dgCollisionCapsule::RayCast(const dgVector &q0, const dgVector &q1, dgContactPoint &contactOut, OnRayPrecastAction preFilter, const dgBody *const body, void *const userData) const {
- if (PREFILTER_RAYCAST(preFilter, body, this, userData)) {
+ if (PREFILTER_RAYCAST(preFilter, reinterpret_cast<const NewtonBody *>(body), reinterpret_cast<const NewtonCollision *>(this), userData)) {
return dgFloat32(1.2f);
}
diff --git a/engines/hpl1/engine/libraries/newton/physics/dgCollisionChamferCylinder.cpp b/engines/hpl1/engine/libraries/newton/physics/dgCollisionChamferCylinder.cpp
index b2bf9aa9725..26bdeed0462 100644
--- a/engines/hpl1/engine/libraries/newton/physics/dgCollisionChamferCylinder.cpp
+++ b/engines/hpl1/engine/libraries/newton/physics/dgCollisionChamferCylinder.cpp
@@ -297,7 +297,7 @@ dgFloat32 dgCollisionChamferCylinder::RayCast(const dgVector &q0,
// dgFloat32 z;
// dgFloat32 t1;
- if (PREFILTER_RAYCAST(preFilter, body, this, userData)) {
+ if (PREFILTER_RAYCAST(preFilter, reinterpret_cast<const NewtonBody *>(body), reinterpret_cast<const NewtonCollision *>(this), userData)) {
return dgFloat32(1.2f);
}
@@ -337,7 +337,7 @@ dgFloat32 dgCollisionChamferCylinder::RayCastSimd(const dgVector &q0,
const dgVector &q1, dgContactPoint &contactOut,
OnRayPrecastAction preFilter, const dgBody *const body,
void *const userData) const {
- if (PREFILTER_RAYCAST(preFilter, body, this, userData)) {
+ if (PREFILTER_RAYCAST(preFilter, reinterpret_cast<const NewtonBody *>(body), reinterpret_cast<const NewtonCollision *>(this), userData)) {
return dgFloat32(1.2f);
}
diff --git a/engines/hpl1/engine/libraries/newton/physics/dgCollisionCompound.cpp b/engines/hpl1/engine/libraries/newton/physics/dgCollisionCompound.cpp
index 4c89ddb05fe..4ca7e0917d3 100644
--- a/engines/hpl1/engine/libraries/newton/physics/dgCollisionCompound.cpp
+++ b/engines/hpl1/engine/libraries/newton/physics/dgCollisionCompound.cpp
@@ -1517,8 +1517,8 @@ dgInt32 dgCollisionCompound::CalculateContactsToSingle(
processContacts = 1;
if (pair->m_material && pair->m_material->m_compoundAABBOverlap) {
processContacts = pair->m_material->m_compoundAABBOverlap(
- *pair->m_material, *compoundBody, *otherBody,
- proxy.m_threadIndex);
+ reinterpret_cast<const NewtonMaterial *>(pair->m_material), reinterpret_cast<const NewtonBody *>(compoundBody), reinterpret_cast<const NewtonBody *>(otherBody),
+ proxy.m_threadIndex);
}
if (processContacts) {
proxy.m_referenceCollision = me->m_shape;
@@ -1598,8 +1598,8 @@ dgInt32 dgCollisionCompound::CalculateContactsToCompound(
processContacts = 1;
if (pair->m_material && pair->m_material->m_compoundAABBOverlap) {
- processContacts = pair->m_material->m_compoundAABBOverlap(
- *pair->m_material, *myBody, *otherBody, proxy.m_threadIndex);
+ processContacts = pair->m_material->m_compoundAABBOverlap(reinterpret_cast<const NewtonMaterial *>(pair->m_material), reinterpret_cast<const NewtonBody *>(myBody), reinterpret_cast<const NewtonBody *>(otherBody),
+ proxy.m_threadIndex);
}
if (processContacts) {
proxy.m_referenceCollision = me->m_shape;
diff --git a/engines/hpl1/engine/libraries/newton/physics/dgCollisionConvex.cpp b/engines/hpl1/engine/libraries/newton/physics/dgCollisionConvex.cpp
index ccd51ee4e89..0b73f800446 100644
--- a/engines/hpl1/engine/libraries/newton/physics/dgCollisionConvex.cpp
+++ b/engines/hpl1/engine/libraries/newton/physics/dgCollisionConvex.cpp
@@ -677,8 +677,8 @@ dgVector dgCollisionConvex::CalculateVolumeIntegral(
if (buoyancyPlane) {
dgPlane globalPlane;
// if (buoyancyPlane (GetUserData(), context, globalMatrix, globalPlane)) {
- if (buoyancyPlane((void *)(intptr_t)SetUserDataID(), context, globalMatrix,
- globalPlane)) {
+ if (buoyancyPlane((intptr_t)SetUserDataID(), context, &globalMatrix.m_front.m_x,
+ &globalPlane.m_x)) {
globalPlane = globalMatrix.UntransformPlane(globalPlane);
cg = CalculateVolumeIntegral(globalPlane);
}
@@ -1618,7 +1618,7 @@ dgFloat32 dgCollisionConvex::RayCast(const dgVector &localP0,
#define DG_AREA (DG_LEN * DG_LEN)
#define DG_VOL (DG_AREA * DG_LEN)
- if (PREFILTER_RAYCAST(preFilter, body, this, userData)) {
+ if (PREFILTER_RAYCAST(preFilter, reinterpret_cast<const NewtonBody *>(body), reinterpret_cast<const NewtonCollision *>(this), userData)) {
return dgFloat32(1.2f);
}
diff --git a/engines/hpl1/engine/libraries/newton/physics/dgCollisionConvexModifier.cpp b/engines/hpl1/engine/libraries/newton/physics/dgCollisionConvexModifier.cpp
index 4ab6b5a94bc..f99591eb611 100644
--- a/engines/hpl1/engine/libraries/newton/physics/dgCollisionConvexModifier.cpp
+++ b/engines/hpl1/engine/libraries/newton/physics/dgCollisionConvexModifier.cpp
@@ -265,7 +265,7 @@ dgFloat32 dgCollisionConvexModifier::RayCast(const dgVector &p0,
OnRayPrecastAction preFilter, const dgBody *const body,
void *const userData) const {
dgFloat32 t;
- if (PREFILTER_RAYCAST(preFilter, body, this, userData)) {
+ if (PREFILTER_RAYCAST(preFilter, reinterpret_cast<const NewtonBody *>(body), reinterpret_cast<const NewtonCollision *>(this), userData)) {
return dgFloat32(1.2f);
}
@@ -285,7 +285,7 @@ dgFloat32 dgCollisionConvexModifier::RayCastSimd(const dgVector &p0,
OnRayPrecastAction preFilter, const dgBody *const body,
void *const userData) const {
dgFloat32 t;
- if (PREFILTER_RAYCAST(preFilter, body, this, userData)) {
+ if (PREFILTER_RAYCAST(preFilter, reinterpret_cast<const NewtonBody *>(body), reinterpret_cast<const NewtonCollision *>(this), userData)) {
return dgFloat32(1.2f);
}
@@ -313,7 +313,8 @@ dgVector dgCollisionConvexModifier::CalculateVolumeIntegral(
dgFloat32(-1.0e8f));
if (bouyancyPlane) {
dgPlane globalPlane;
- if (bouyancyPlane(GetUserData(), context, globalMatrix, globalPlane)) {
+ // user data is not used
+ if (bouyancyPlane(0, context, &globalMatrix.m_front.m_x, &globalPlane.m_x)) {
plane = globalMatrix.UntransformPlane(globalPlane);
dgVector point(plane.Scale(-plane.m_w));
diff --git a/engines/hpl1/engine/libraries/newton/physics/dgCollisionCylinder.cpp b/engines/hpl1/engine/libraries/newton/physics/dgCollisionCylinder.cpp
index 6e2bfd78110..90e8e1f0f77 100644
--- a/engines/hpl1/engine/libraries/newton/physics/dgCollisionCylinder.cpp
+++ b/engines/hpl1/engine/libraries/newton/physics/dgCollisionCylinder.cpp
@@ -403,7 +403,7 @@ dgInt32 dgCollisionCylinder::CalculatePlaneIntersectionSimd(
dgFloat32 dgCollisionCylinder::RayCast(const dgVector &q0, const dgVector &q1,
dgContactPoint &contactOut, OnRayPrecastAction preFilter,
const dgBody *const body, void *const userData) const {
- if (PREFILTER_RAYCAST(preFilter, body, this, userData)) {
+ if (PREFILTER_RAYCAST(preFilter, reinterpret_cast<const NewtonBody *>(body), reinterpret_cast<const NewtonCollision *>(this), userData)) {
return dgFloat32(1.2f);
}
diff --git a/engines/hpl1/engine/libraries/newton/physics/dgCollisionEllipse.cpp b/engines/hpl1/engine/libraries/newton/physics/dgCollisionEllipse.cpp
index a101d199a31..7738a59c737 100644
--- a/engines/hpl1/engine/libraries/newton/physics/dgCollisionEllipse.cpp
+++ b/engines/hpl1/engine/libraries/newton/physics/dgCollisionEllipse.cpp
@@ -188,7 +188,7 @@ dgFloat32 dgCollisionEllipse::RayCast(const dgVector &p0, const dgVector &p1,
const dgBody *const body, void *const userData) const {
dgFloat32 t;
- if (PREFILTER_RAYCAST(preFilter, body, this, userData)) {
+ if (PREFILTER_RAYCAST(preFilter, reinterpret_cast<const NewtonBody *>(body), reinterpret_cast<const NewtonCollision *>(this), userData)) {
return dgFloat32(1.2f);
}
diff --git a/engines/hpl1/engine/libraries/newton/physics/dgCollisionSphere.cpp b/engines/hpl1/engine/libraries/newton/physics/dgCollisionSphere.cpp
index 74836fce239..8a5c80fab49 100644
--- a/engines/hpl1/engine/libraries/newton/physics/dgCollisionSphere.cpp
+++ b/engines/hpl1/engine/libraries/newton/physics/dgCollisionSphere.cpp
@@ -320,7 +320,7 @@ dgVector dgCollisionPoint::SupportVertexSimd(const dgVector &dir) const {
}
dgFloat32 dgCollisionSphere::RayCast(const dgVector &p0, const dgVector &p1, dgContactPoint &contactOut, OnRayPrecastAction preFilter, const dgBody *const body, void *const userData) const {
- if (PREFILTER_RAYCAST(preFilter, body, this, userData)) {
+ if (PREFILTER_RAYCAST(preFilter, reinterpret_cast<const NewtonBody *>(body), reinterpret_cast<const NewtonCollision *>(this), userData)) {
return dgFloat32(1.2f);
}
diff --git a/engines/hpl1/engine/libraries/newton/physics/dgCollisionUserMesh.cpp b/engines/hpl1/engine/libraries/newton/physics/dgCollisionUserMesh.cpp
index c17efa9c44d..72d44fe6075 100644
--- a/engines/hpl1/engine/libraries/newton/physics/dgCollisionUserMesh.cpp
+++ b/engines/hpl1/engine/libraries/newton/physics/dgCollisionUserMesh.cpp
@@ -74,9 +74,9 @@ void dgCollisionUserMesh::GetVertexListIndexList(const dgVector &p0,
const dgVector &p1, dgGetVertexListIndexList &data) const {
if (m_faceInAabb) {
return m_faceInAabb(m_userData, &p0[0], &p1[0],
- (const dgFloat32 * const *)&data.m_veterxArray, &data.m_vertexCount,
- &data.m_vertexStrideInBytes, data.m_indexList, data.m_maxIndexCount,
- data.m_userDataList);
+ &data.m_veterxArray, &data.m_vertexCount,
+ &data.m_vertexStrideInBytes, data.m_indexList, data.m_maxIndexCount,
+ data.m_userDataList);
} else {
data.m_triangleCount = 0;
@@ -104,7 +104,7 @@ dgFloat32 dgCollisionUserMesh::RayCast(const dgVector &localP0,
void *const userData) const {
dgFloat32 t;
dgFloat32 param;
- if (PREFILTER_RAYCAST(preFilter, body, this, userData)) {
+ if (PREFILTER_RAYCAST(preFilter, reinterpret_cast<const NewtonBody *>(body), reinterpret_cast<const NewtonCollision *>(this), userData)) {
return dgFloat32(1.2f);
}
@@ -119,7 +119,7 @@ dgFloat32 dgCollisionUserMesh::RayCast(const dgVector &localP0,
data.m_matrix = body->m_collisionWorldMatrix;
}
- t = m_rayHitCallBack(data);
+ t = m_rayHitCallBack(reinterpret_cast<NewtonUserMeshCollisionRayHitDesc *>(&data));
if ((t < dgFloat32(1.0f)) && (t > dgFloat32(0.0f))) {
param = t;
contactOut.m_normal = data.m_normal;
@@ -140,7 +140,7 @@ void dgCollisionUserMesh::GetCollidingFaces(dgPolygonMeshDesc *const data) const
if (m_collideCallback) {
data->m_me = this;
data->m_userData = m_userData;
- m_collideCallback(*data);
+ m_collideCallback(reinterpret_cast<NewtonUserMeshCollisionCollideDesc *>(data));
}
}
diff --git a/engines/hpl1/engine/libraries/newton/physics/dgCollisionUserMesh.h b/engines/hpl1/engine/libraries/newton/physics/dgCollisionUserMesh.h
index b82b04e9704..0e35c96a873 100644
--- a/engines/hpl1/engine/libraries/newton/physics/dgCollisionUserMesh.h
+++ b/engines/hpl1/engine/libraries/newton/physics/dgCollisionUserMesh.h
@@ -27,12 +27,12 @@
typedef void (dgApi *OnUserMeshDestroyCallback)(void *const userData);
-typedef void (dgApi *OnUserMeshCollideCallback)(dgPolygonMeshDesc &collideData);
-typedef dgFloat32(dgApi *OnUserMeshRayHitCallback)(dgCollisionMeshRayHitDesc &rayHitdata);
+typedef void(dgApi *OnUserMeshCollideCallback)(NewtonUserMeshCollisionCollideDesc *const collideDescData);
+typedef dgFloat32(dgApi *OnUserMeshRayHitCallback)(NewtonUserMeshCollisionRayHitDesc *const lineDescData);
typedef void (dgApi *UserMeshCollisionInfo)(void *userData, dgCollisionInfo *infoRecord);
-typedef void (dgApi *UserMeshFacesInAABB)(void *userData, const dgFloat32 *p0, const dgFloat32 *p1,
- const dgFloat32 * const *vertexArray, dgInt32 *vertexCount, dgInt32 *vertexStrideInBytes,
- const dgInt32 *indexList, dgInt32 maxIndexCount, const dgInt32 *faceAttribute);
+typedef void(dgApi *UserMeshFacesInAABB)(void *const userData, const dFloat *const p0, const dFloat *const p1,
+ const dFloat *const *const vertexArray, int *const vertexCount, int *const vertexStrideInBytes,
+ const int *const indexList, int maxIndexCount, const int *const userDataList);
class dgUserMeshCreation {
public:
diff --git a/engines/hpl1/engine/libraries/newton/physics/dgConstraint.h b/engines/hpl1/engine/libraries/newton/physics/dgConstraint.h
index 7f36d3ad05a..871567e1e81 100644
--- a/engines/hpl1/engine/libraries/newton/physics/dgConstraint.h
+++ b/engines/hpl1/engine/libraries/newton/physics/dgConstraint.h
@@ -43,7 +43,7 @@ class dgWorld;
class dgConstraint;
class dgBilateralBounds;
-typedef void (dgApi *ConstraintsForceFeeback)(const dgConstraint &me, dgFloat32 timestep, dgInt32 threadIndex);
+typedef void(dgApi *ConstraintsForceFeeback)(const NewtonJoint *const userJoint, dFloat timestep, int threadIndex);
class dgConstraintInfo {
public:
@@ -163,7 +163,7 @@ enum dgConstraintID {
dgUnknownConstraintId
};
-typedef void (dgApi *OnConstraintDestroy)(dgConstraint &me);
+typedef void(dgApi *OnConstraintDestroy)(const NewtonJoint *const me);
DG_MSC_VECTOR_ALIGMENT
class dgConstraint {
diff --git a/engines/hpl1/engine/libraries/newton/physics/dgContact.cpp b/engines/hpl1/engine/libraries/newton/physics/dgContact.cpp
index a3d5639a042..6fca27a59ec 100644
--- a/engines/hpl1/engine/libraries/newton/physics/dgContact.cpp
+++ b/engines/hpl1/engine/libraries/newton/physics/dgContact.cpp
@@ -551,8 +551,8 @@ void dgCollidingPairCollector::AddPair(dgBody *const bodyPtr0,
processContacts = 1;
if (material->m_aabbOverlap) {
- processContacts = material->m_aabbOverlap(*material, *body0, *body1,
- threadIndex);
+ processContacts = material->m_aabbOverlap(reinterpret_cast<const NewtonMaterial *>(material), reinterpret_cast<const NewtonBody *>(body0), reinterpret_cast<const NewtonBody *>(body1),
+ threadIndex);
}
if (processContacts) {
NEWTON_ASSERT(
diff --git a/engines/hpl1/engine/libraries/newton/physics/dgContact.h b/engines/hpl1/engine/libraries/newton/physics/dgContact.h
index f6dba388322..80e03059e04 100644
--- a/engines/hpl1/engine/libraries/newton/physics/dgContact.h
+++ b/engines/hpl1/engine/libraries/newton/physics/dgContact.h
@@ -38,9 +38,8 @@ class dgPolygonMeshDesc;
#define DG_MAX_CONTATCS 128
#define DG_CACHE_PAIR_BUFFER 256
-typedef bool (dgApi *OnAABBOverlap)(const dgContactMaterial &material, const dgBody &body0, const dgBody &body1, dgInt32 threadIndex);
-typedef void (dgApi *OnContactCallback)(dgContact &contactJoint, dgFloat32 timestep, dgInt32 threadIndex);
-
+typedef int(dgApi *OnAABBOverlap)(const NewtonMaterial *const material, const NewtonBody *const body0, const NewtonBody *const body1, int threadIndex);
+typedef void(dgApi *OnContactCallback)(const NewtonJoint *const contact, dFloat timestep, int threadIndex);
class dgActiveContacts: public dgList<dgContact *> {
public:
diff --git a/engines/hpl1/engine/libraries/newton/physics/dgCorkscrewConstraint.cpp b/engines/hpl1/engine/libraries/newton/physics/dgCorkscrewConstraint.cpp
index 88f57f1710e..ecadff2fa87 100644
--- a/engines/hpl1/engine/libraries/newton/physics/dgCorkscrewConstraint.cpp
+++ b/engines/hpl1/engine/libraries/newton/physics/dgCorkscrewConstraint.cpp
@@ -235,7 +235,7 @@ dgUnsigned32 dgCorkscrewConstraint::JacobianDerivative(
axisParam[1].m_minFriction = DG_MIN_BOUND;
axisParam[1].m_maxFriction = DG_MAX_BOUND;
- code = m_jointAccelFnt(*this, axisParam);
+ code = m_jointAccelFnt(reinterpret_cast<NewtonJoint *>(this), reinterpret_cast<NewtonHingeSliderUpdateDesc *>(axisParam));
if (code & 1) {
if ((axisParam[0].m_minFriction > DG_MIN_BOUND) || (axisParam[0].m_maxFriction < DG_MAX_BOUND)) {
params.m_forceBounds[ret].m_low = axisParam[0].m_minFriction;
diff --git a/engines/hpl1/engine/libraries/newton/physics/dgCorkscrewConstraint.h b/engines/hpl1/engine/libraries/newton/physics/dgCorkscrewConstraint.h
index 4e88dc4c105..3d854cebebb 100644
--- a/engines/hpl1/engine/libraries/newton/physics/dgCorkscrewConstraint.h
+++ b/engines/hpl1/engine/libraries/newton/physics/dgCorkscrewConstraint.h
@@ -27,8 +27,7 @@
class dgCorkscrewConstraint;
-
-typedef dgUnsigned32(dgApi *dgCorkscrewJointAcceleration)(const dgCorkscrewConstraint &hinge, dgJointCallBackParam *param);
+typedef dgUnsigned32(dgApi *dgCorkscrewJointAcceleration)(const NewtonJoint *const corkscrew, NewtonHingeSliderUpdateDesc *const desc);
class dgCorkscrewConstraint: public dgBilateralConstraint {
public:
diff --git a/engines/hpl1/engine/libraries/newton/physics/dgHingeConstraint.cpp b/engines/hpl1/engine/libraries/newton/physics/dgHingeConstraint.cpp
index 4750f05f062..4e874ad8c76 100644
--- a/engines/hpl1/engine/libraries/newton/physics/dgHingeConstraint.cpp
+++ b/engines/hpl1/engine/libraries/newton/physics/dgHingeConstraint.cpp
@@ -167,7 +167,7 @@ dgUnsigned32 dgHingeConstraint::JacobianDerivative(dgContraintDescritor ¶ms)
axisParam.m_minFriction = DG_MIN_BOUND;
axisParam.m_maxFriction = DG_MAX_BOUND;
- if (m_jointAccelFnt(*this, &axisParam)) {
+ if (m_jointAccelFnt(reinterpret_cast<NewtonJoint *>(this), reinterpret_cast<NewtonHingeSliderUpdateDesc *>(&axisParam))) {
if ((axisParam.m_minFriction > DG_MIN_BOUND) || (axisParam.m_maxFriction < DG_MAX_BOUND)) {
params.m_forceBounds[5].m_low = axisParam.m_minFriction;
params.m_forceBounds[5].m_upper = axisParam.m_maxFriction;
diff --git a/engines/hpl1/engine/libraries/newton/physics/dgHingeConstraint.h b/engines/hpl1/engine/libraries/newton/physics/dgHingeConstraint.h
index 28b49092412..982b4272d17 100644
--- a/engines/hpl1/engine/libraries/newton/physics/dgHingeConstraint.h
+++ b/engines/hpl1/engine/libraries/newton/physics/dgHingeConstraint.h
@@ -27,8 +27,7 @@
class dgHingeConstraint;
-
-typedef dgUnsigned32(dgApi *dgHingeJointAcceleration)(const dgHingeConstraint &hinge, dgJointCallBackParam *param);
+typedef dgUnsigned32(dgApi *dgHingeJointAcceleration)(const NewtonJoint *const hinge, NewtonHingeSliderUpdateDesc *const desc);
class dgHingeConstraint: public dgBilateralConstraint {
public:
diff --git a/engines/hpl1/engine/libraries/newton/physics/dgNarrowPhaseCollision.cpp b/engines/hpl1/engine/libraries/newton/physics/dgNarrowPhaseCollision.cpp
index 774227abbeb..4d34a00da13 100644
--- a/engines/hpl1/engine/libraries/newton/physics/dgNarrowPhaseCollision.cpp
+++ b/engines/hpl1/engine/libraries/newton/physics/dgNarrowPhaseCollision.cpp
@@ -1055,7 +1055,7 @@ void dgWorld::ProcessCachedContacts(dgContact *const contact,
}
if (material->m_contactPoint) {
- material->m_contactPoint(*contact, timestep, threadIndex);
+ material->m_contactPoint(reinterpret_cast<const NewtonJoint *>(contact), timestep, threadIndex);
}
contact->m_maxDOF = dgUnsigned32(3 * contact->GetCount());
@@ -1093,7 +1093,7 @@ void dgWorld::ProcessTriggers(dgCollidingPairCollector::dgPair *const pair,
NEWTON_ASSERT(contact->m_body1 == body1);
if (material->m_contactPoint) {
- material->m_contactPoint(*contact, timestep, threadIndex);
+ material->m_contactPoint(reinterpret_cast<const NewtonJoint *>(contact), timestep, threadIndex);
}
contact->m_maxDOF = 0;
}
@@ -1332,7 +1332,7 @@ void dgWorld::ProcessContacts(dgCollidingPairCollector::dgPair *const pair,
}
if (material->m_contactPoint) {
- material->m_contactPoint(*contact, timestep, threadIndex);
+ material->m_contactPoint(reinterpret_cast<const NewtonJoint *>(contact), timestep, threadIndex);
}
if (maxImpulse > dgFloat32(1.0f)) {
diff --git a/engines/hpl1/engine/libraries/newton/physics/dgSlidingConstraint.cpp b/engines/hpl1/engine/libraries/newton/physics/dgSlidingConstraint.cpp
index 7b2396be5ad..fbaec6ed0b4 100644
--- a/engines/hpl1/engine/libraries/newton/physics/dgSlidingConstraint.cpp
+++ b/engines/hpl1/engine/libraries/newton/physics/dgSlidingConstraint.cpp
@@ -181,7 +181,7 @@ dgUnsigned32 dgSlidingConstraint::JacobianDerivative(
axisParam.m_minFriction = DG_MIN_BOUND;
axisParam.m_maxFriction = DG_MAX_BOUND;
- if (m_jointAccelFnt(*this, &axisParam)) {
+ if (m_jointAccelFnt(reinterpret_cast<NewtonJoint *>(this), reinterpret_cast<NewtonHingeSliderUpdateDesc *>(&axisParam))) {
if ((axisParam.m_minFriction > DG_MIN_BOUND) || (axisParam.m_maxFriction < DG_MAX_BOUND)) {
params.m_forceBounds[5].m_low = axisParam.m_minFriction;
params.m_forceBounds[5].m_upper = axisParam.m_maxFriction;
diff --git a/engines/hpl1/engine/libraries/newton/physics/dgSlidingConstraint.h b/engines/hpl1/engine/libraries/newton/physics/dgSlidingConstraint.h
index a2508d31934..5d2453c7a3b 100644
--- a/engines/hpl1/engine/libraries/newton/physics/dgSlidingConstraint.h
+++ b/engines/hpl1/engine/libraries/newton/physics/dgSlidingConstraint.h
@@ -26,7 +26,7 @@
//template<class T> class dgPool;
class dgSlidingConstraint;
-typedef dgUnsigned32(dgApi *dgSlidingJointAcceleration)(const dgSlidingConstraint &hinge, dgJointCallBackParam *param);
+typedef dgUnsigned32(dgApi *dgSlidingJointAcceleration)(const NewtonJoint *const slider, NewtonHingeSliderUpdateDesc *const desc);
class dgSlidingConstraint: public dgBilateralConstraint {
public:
diff --git a/engines/hpl1/engine/libraries/newton/physics/dgUniversalConstraint.cpp b/engines/hpl1/engine/libraries/newton/physics/dgUniversalConstraint.cpp
index 29ecfb25035..764becb4619 100644
--- a/engines/hpl1/engine/libraries/newton/physics/dgUniversalConstraint.cpp
+++ b/engines/hpl1/engine/libraries/newton/physics/dgUniversalConstraint.cpp
@@ -256,7 +256,7 @@ dgUnsigned32 dgUniversalConstraint::JacobianDerivative(
axisParam[1].m_minFriction = DG_MIN_BOUND;
axisParam[1].m_maxFriction = DG_MAX_BOUND;
- code = m_jointAccelFnt(*this, axisParam);
+ code = m_jointAccelFnt(reinterpret_cast<NewtonJoint *>(this), reinterpret_cast<NewtonHingeSliderUpdateDesc *>(axisParam));
if (code & 1) {
if ((axisParam[0].m_minFriction > DG_MIN_BOUND) || (axisParam[0].m_maxFriction < DG_MAX_BOUND)) {
params.m_forceBounds[ret].m_low = axisParam[0].m_minFriction;
diff --git a/engines/hpl1/engine/libraries/newton/physics/dgUniversalConstraint.h b/engines/hpl1/engine/libraries/newton/physics/dgUniversalConstraint.h
index 17e68c66b05..3c4276e7df6 100644
--- a/engines/hpl1/engine/libraries/newton/physics/dgUniversalConstraint.h
+++ b/engines/hpl1/engine/libraries/newton/physics/dgUniversalConstraint.h
@@ -27,8 +27,7 @@
class dgUniversalConstraint;
-
-typedef dgUnsigned32(dgApi *dgUniversalJointAcceleration)(const dgUniversalConstraint &hinge, dgJointCallBackParam *param);
+typedef dgUnsigned32(dgApi *dgUniversalJointAcceleration)(const NewtonJoint *const universal, NewtonHingeSliderUpdateDesc *const desc);
class dgUniversalConstraint: public dgBilateralConstraint {
public:
diff --git a/engines/hpl1/engine/libraries/newton/physics/dgWorld.cpp b/engines/hpl1/engine/libraries/newton/physics/dgWorld.cpp
index c45250b2a61..681aa38cbdb 100644
--- a/engines/hpl1/engine/libraries/newton/physics/dgWorld.cpp
+++ b/engines/hpl1/engine/libraries/newton/physics/dgWorld.cpp
@@ -494,7 +494,7 @@ dgBody *dgWorld::CreateBody(dgCollision *const collision,
void dgWorld::DestroyBody(dgBody *const body) {
if (body->m_destructor) {
- body->m_destructor(*body);
+ body->m_destructor(reinterpret_cast<const NewtonBody *>(body));
}
dgBroadPhaseCollision::Remove(body);
diff --git a/engines/hpl1/engine/libraries/newton/physics/dgWorldDynamicUpdate.cpp b/engines/hpl1/engine/libraries/newton/physics/dgWorldDynamicUpdate.cpp
index bef117f394e..6cdf9cf6c72 100644
--- a/engines/hpl1/engine/libraries/newton/physics/dgWorldDynamicUpdate.cpp
+++ b/engines/hpl1/engine/libraries/newton/physics/dgWorldDynamicUpdate.cpp
@@ -299,8 +299,8 @@ void dgSolverWorlkerThreads::ThreadExecute() {
if (material->m_aabbOverlap) {
NEWTON_ASSERT(contact->m_body0);
NEWTON_ASSERT(contact->m_body1);
- material->m_aabbOverlap(*material, *contact->m_body0,
- *contact->m_body1, m_threadIndex);
+ material->m_aabbOverlap(reinterpret_cast<const NewtonMaterial *>(material), reinterpret_cast<const NewtonBody *>(contact->m_body0),
+ reinterpret_cast<const NewtonBody *>(contact->m_body1), m_threadIndex);
}
dgCollidingPairCollector::dgPair pair;
pair.m_body0 = contact->m_body0;
@@ -398,8 +398,8 @@ void dgSolverWorlkerThreads::ThreadExecute() {
if (material->m_aabbOverlap) {
NEWTON_ASSERT(contact->m_body0);
NEWTON_ASSERT(contact->m_body1);
- material->m_aabbOverlap(*material, *contact->m_body0,
- *contact->m_body1, m_threadIndex);
+ material->m_aabbOverlap(reinterpret_cast<const NewtonMaterial *>(material), reinterpret_cast<const NewtonBody *>(contact->m_body0),
+ reinterpret_cast<const NewtonBody *>(contact->m_body1), m_threadIndex);
}
dgCollidingPairCollector::dgPair pair;
pair.m_body0 = contact->m_body0;
@@ -1905,7 +1905,7 @@ void dgJacobianMemory::ApplyExternalForcesAndAcceleration(
for (dgInt32 i = 0; i < m_jointCount; i++) {
if (constraintArray[i].m_joint->m_updaFeedbackCallback) {
constraintArray[i].m_joint->m_updaFeedbackCallback(
- *constraintArray[i].m_joint, m_timeStep, m_threadIndex);
+ reinterpret_cast<const NewtonJoint *>(constraintArray[i].m_joint), m_timeStep, m_threadIndex);
}
}
}
@@ -5779,7 +5779,7 @@ void dgJacobianMemory::CalculateForcesGameMode(dgInt32 iterations,
for (dgInt32 i = 0; i < m_jointCount; i++) {
if (constraintArray[i].m_joint->m_updaFeedbackCallback) {
constraintArray[i].m_joint->m_updaFeedbackCallback(
- *constraintArray[i].m_joint, m_timeStep, m_threadIndex);
+ reinterpret_cast<const NewtonJoint *>(constraintArray[i].m_joint), m_timeStep, m_threadIndex);
}
}
}
@@ -7222,7 +7222,7 @@ void dgJacobianMemory::CalculateForcesGameModeParallel(dgInt32 iterations,
for (dgInt32 i = 0; i < m_jointCount; i++) {
if (constraintArray[i].m_joint->m_updaFeedbackCallback) {
constraintArray[i].m_joint->m_updaFeedbackCallback(
- *constraintArray[i].m_joint, m_timeStep, m_threadIndex);
+ reinterpret_cast<const NewtonJoint *>(constraintArray[i].m_joint), m_timeStep, m_threadIndex);
}
}
}
More information about the Scummvm-git-logs
mailing list