[Scummvm-git-logs] scummvm master -> a2aaca37860c78f2a3f4024e3c0138f94db3b19b

aquadran noreply at scummvm.org
Sat Jul 30 14:58:28 UTC 2022


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:
a2aaca3786 ICB: Avoid casting rap_API class to memory


Commit: a2aaca37860c78f2a3f4024e3c0138f94db3b19b
    https://github.com/scummvm/scummvm/commit/a2aaca37860c78f2a3f4024e3c0138f94db3b19b
Author: Paweł Kołodziejski (aquadran at gmail.com)
Date: 2022-07-30T16:58:23+02:00

Commit Message:
ICB: Avoid casting rap_API class to memory

Changed paths:
    engines/icb/actor_pc.cpp
    engines/icb/gfx/rap_api.h
    engines/icb/shadow_pc.cpp
    engines/icb/softskin_pc.cpp


diff --git a/engines/icb/actor_pc.cpp b/engines/icb/actor_pc.cpp
index fed56fbb8b4..cd433af92ee 100644
--- a/engines/icb/actor_pc.cpp
+++ b/engines/icb/actor_pc.cpp
@@ -83,7 +83,7 @@ void DrawActor4PC(psxActor *actor, psxCamera *camera, Bone_Frame *frame, rap_API
 	MATRIXPC bone2actor[MAX_LW_MATRICES];
 	MatrixHierarchyPC skeleton[MAX_LW_MATRICES];
 	MATRIXPC *lwPtr;
-	BoneLink *bones = mesh->GetBonePtr();
+	BoneLink *bones = rap_API_Object::GetBonePtr(mesh);
 
 	SVECTOR poseBox[8];
 	SVECTOR poseMinBox, poseMaxBox;
@@ -619,11 +619,11 @@ void DrawModel4PC(rap_API *mrap, int32 poseBone, MATRIXPC *lw, MATRIXPC *local2s
 	// Now go and find the actual polygon data for this primitive
 	uint32 *polyStart;
 	uint32 nPolys;
-	uint32 *pNormal = mrap->GetNormalPtr();
+	uint32 *pNormal = rap_API_Object::GetNormalPtr(mrap);
 
 	nPolys = mrap->nFUS3;
 	if (nPolys != 0) {
-		polyStart = mrap->GetFUS3Ptr();
+		polyStart = rap_API_Object::GetFUS3Ptr(mrap);
 		// Do the drawing using internal C based debugging drawing code
 		if (debug) {
 			drawFUS3PC(polyStart, nPolys, local);
@@ -633,7 +633,7 @@ void DrawModel4PC(rap_API *mrap, int32 poseBone, MATRIXPC *lw, MATRIXPC *local2s
 	}
 	nPolys = mrap->nGUS3;
 	if (nPolys != 0) {
-		polyStart = mrap->GetGUS3Ptr();
+		polyStart = rap_API_Object::GetGUS3Ptr(mrap);
 		// Do the drawing using internal C based debugging drawing code
 		if (debug) {
 			drawGUS3PC(polyStart, nPolys, local);
@@ -643,7 +643,7 @@ void DrawModel4PC(rap_API *mrap, int32 poseBone, MATRIXPC *lw, MATRIXPC *local2s
 	}
 	nPolys = mrap->nFTS3;
 	if (nPolys != 0) {
-		polyStart = mrap->GetFTS3Ptr();
+		polyStart = rap_API_Object::GetFTS3Ptr(mrap);
 		// Do the drawing using internal C based debugging drawing code
 		if (debug) {
 			drawFTS3PC(polyStart, nPolys, local);
@@ -653,7 +653,7 @@ void DrawModel4PC(rap_API *mrap, int32 poseBone, MATRIXPC *lw, MATRIXPC *local2s
 	}
 	nPolys = mrap->nGTS3;
 	if (nPolys != 0) {
-		polyStart = mrap->GetGTS3Ptr();
+		polyStart = rap_API_Object::GetGTS3Ptr(mrap);
 		// Do the drawing using internal C based debugging drawing code
 		if (debug) {
 			drawGTS3PC(polyStart, nPolys, local);
@@ -663,7 +663,7 @@ void DrawModel4PC(rap_API *mrap, int32 poseBone, MATRIXPC *lw, MATRIXPC *local2s
 	}
 	nPolys = mrap->nFUL3;
 	if (nPolys != 0) {
-		polyStart = mrap->GetFUL3Ptr();
+		polyStart = rap_API_Object::GetFUL3Ptr(mrap);
 		// Do the drawing using internal C based debugging drawing code
 		if (debug) {
 			drawFUL3PC(polyStart, nPolys, local, (SVECTOR *)pNormal);
@@ -673,7 +673,7 @@ void DrawModel4PC(rap_API *mrap, int32 poseBone, MATRIXPC *lw, MATRIXPC *local2s
 	}
 	nPolys = mrap->nGUL3;
 	if (nPolys != 0) {
-		polyStart = mrap->GetGUL3Ptr();
+		polyStart = rap_API_Object::GetGUL3Ptr(mrap);
 		// Do the drawing using internal C based debugging drawing code
 		if (debug) {
 			drawGUL3PC(polyStart, nPolys, local, (SVECTOR *)pNormal);
@@ -683,7 +683,7 @@ void DrawModel4PC(rap_API *mrap, int32 poseBone, MATRIXPC *lw, MATRIXPC *local2s
 	}
 	nPolys = mrap->nFTL3;
 	if (nPolys != 0) {
-		polyStart = mrap->GetFTL3Ptr();
+		polyStart = rap_API_Object::GetFTL3Ptr(mrap);
 		// Do the drawing using internal C based debugging drawing code
 		if (debug) {
 			drawFTL3PC(polyStart, nPolys, local, (SVECTOR *)pNormal);
@@ -693,7 +693,7 @@ void DrawModel4PC(rap_API *mrap, int32 poseBone, MATRIXPC *lw, MATRIXPC *local2s
 	}
 	nPolys = mrap->nGTL3;
 	if (nPolys != 0) {
-		polyStart = mrap->GetGTL3Ptr();
+		polyStart = rap_API_Object::GetGTL3Ptr(mrap);
 		// Do the drawing using internal C based debugging drawing code
 		if (debug) {
 			drawGTL3PC(polyStart, nPolys, local, (SVECTOR *)pNormal);
@@ -718,8 +718,8 @@ void DrawModel4PC(rap_API *mrap, int32 poseBone, MATRIXPC *lw, MATRIXPC *local2s
 			deadObject = 0;
 		}
 
-		uint32 *typePtr = mrap->GetAnimPolyPtr();
-		polyStart = mrap->GetAnimPolyFrame(frm);
+		uint32 *typePtr = rap_API_Object::GetAnimPolyPtr(mrap);
+		polyStart = rap_API_Object::GetAnimPolyFrame(mrap, frm);
 		for (uint32 t = 0; t < nTypes; t++) {
 			switch (*typePtr++) { // ++ skips the type field
 			case HMD_FUS3: {
diff --git a/engines/icb/gfx/rap_api.h b/engines/icb/gfx/rap_api.h
index 2ad284bfd2a..afc1025d19b 100644
--- a/engines/icb/gfx/rap_api.h
+++ b/engines/icb/gfx/rap_api.h
@@ -29,6 +29,8 @@
 
 #include "engines/icb/gfx/psx_pcdefines.h"
 
+#include "common/endian.h"
+
 namespace ICB {
 
 #define RAP_API_SCHEMA 10
@@ -132,37 +134,43 @@ typedef struct rap_API {
 	uint32 normalOffset;     // in bytes
 	uint32 boneOffset;       // in bytes
 	Vertex noneLinkData[1];  // Vertex noLinkData[nNone];
+} rap_API;
 
-	Vertex *GetNoneLinkPtr() { return noneLinkData; }
-
-	VertexLink *GetSingleLinkPtr() { return (VertexLink *)(id + singleLinkOffset); }
-
-	WeightedVertexLink *GetMultiLinkPtr() { return (WeightedVertexLink *)(id + multiLinkOffset); }
-
-	uint32 *GetFUS3Ptr() { return (uint32 *)(id + FUS3offset); }
-	uint32 *GetGUS3Ptr() { return (uint32 *)(id + GUS3offset); }
-	uint32 *GetFTS3Ptr() { return (uint32 *)(id + FTS3offset); }
-	uint32 *GetGTS3Ptr() { return (uint32 *)(id + GTS3offset); }
-	uint32 *GetFUL3Ptr() { return (uint32 *)(id + FUL3offset); }
-	uint32 *GetGUL3Ptr() { return (uint32 *)(id + GUL3offset); }
-	uint32 *GetFTL3Ptr() { return (uint32 *)(id + FTL3offset); }
-	uint32 *GetGTL3Ptr() { return (uint32 *)(id + GTL3offset); }
-	uint32 *GetTRI3Ptr() { return (uint32 *)(id + TRI3offset); }
-	uint32 *GetNormalPtr() { return (uint32 *)(id + normalOffset); }
-	BoneLink *GetBonePtr() { return (BoneLink *)(id + boneOffset); }
-	uint32 *GetBoneHashPtr() {
-		BoneLink *bPtr = GetBonePtr();
-		return (uint32 *)(bPtr + nBones);
+class rap_API_Object {
+public:
+	static Vertex *GetNoneLinkPtr(rap_API *rap) { return rap->noneLinkData; }
+
+	static VertexLink *GetSingleLinkPtr(rap_API *rap) { return (VertexLink *)(rap->id + rap->singleLinkOffset); }
+
+	static WeightedVertexLink *GetMultiLinkPtr(rap_API *rap) { return (WeightedVertexLink *)(rap->id + rap->multiLinkOffset); }
+
+	static uint32 *GetFUS3Ptr(rap_API *rap) { return (uint32 *)(rap->id + rap->FUS3offset); }
+	static uint32 *GetGUS3Ptr(rap_API *rap) { return (uint32 *)(rap->id + rap->GUS3offset); }
+	static uint32 *GetFTS3Ptr(rap_API *rap) { return (uint32 *)(rap->id + rap->FTS3offset); }
+	static uint32 *GetGTS3Ptr(rap_API *rap) { return (uint32 *)(rap->id + rap->GTS3offset); }
+	static uint32 *GetFUL3Ptr(rap_API *rap) { return (uint32 *)(rap->id + rap->FUL3offset); }
+	static uint32 *GetGUL3Ptr(rap_API *rap) { return (uint32 *)(rap->id + rap->GUL3offset); }
+	static uint32 *GetFTL3Ptr(rap_API *rap) { return (uint32 *)(rap->id + rap->FTL3offset); }
+	static uint32 *GetGTL3Ptr(rap_API *rap) { return (uint32 *)(rap->id + rap->GTL3offset); }
+	static uint32 *GetTRI3Ptr(rap_API *rap) { return (uint32 *)(rap->id + rap->TRI3offset); }
+	static uint32 *GetNormalPtr(rap_API *rap) { return (uint32 *)(rap->id + rap->normalOffset); }
+	static BoneLink *GetBonePtr(rap_API *rap) { return (BoneLink *)(rap->id + rap->boneOffset); }
+	static uint32 *GetBoneHashPtr(rap_API *rap) {
+		BoneLink *bPtr = GetBonePtr(rap);
+		return (uint32 *)(bPtr + rap->nBones);
 	}
-
-	uint32 *GetAnimPolyPtr() { return (uint32 *)(id + animPolyOffset); }
-	uint32 *GetAnimPolyFrame(int32 frame) { return (uint32 *)(id + animPolyOffset + nAnimTypes * 2 * sizeof(uint32) + frame * animPolySize); }
-
-} rap_API;
+	static uint32 *GetAnimPolyPtr(rap_API *rap) {
+		return (uint32 *)(rap->id + rap->animPolyOffset);
+		
+	}
+	static uint32 *GetAnimPolyFrame(rap_API *rap, int32 frame) {
+		return (uint32 *)(rap->id + rap->animPolyOffset + rap->nAnimTypes * 2 * sizeof(uint32) + frame * rap->animPolySize);
+	}
+};
 
 inline void ConvertRAP(rap_API *rap) {
 	// Do we need to do any conversion ?
-	if (rap->schema == RAP_API_SCHEMA)
+	if (FROM_LE_32(rap->schema) == RAP_API_SCHEMA)
 		return;
 
 	// You can't so a schema check will fail !
diff --git a/engines/icb/shadow_pc.cpp b/engines/icb/shadow_pc.cpp
index 16a56e31d25..0d0344def43 100644
--- a/engines/icb/shadow_pc.cpp
+++ b/engines/icb/shadow_pc.cpp
@@ -351,7 +351,7 @@ void MakeShadowPC(rap_API *srap, SVECTORPC *local, int32 nVertices, SVECTORPC *p
 
 	nPolys = srap->nTRI3;
 	if (nPolys != 0) {
-		polyStart = srap->GetTRI3Ptr();
+		polyStart = rap_API_Object::GetTRI3Ptr(srap);
 		// Do the drawing using internal C based debugging drawing code
 		if (debug) {
 			drawTRI3PC(polyStart, nPolys, pvert);
diff --git a/engines/icb/softskin_pc.cpp b/engines/icb/softskin_pc.cpp
index ecf5194b55a..e3ce1e61ae9 100644
--- a/engines/icb/softskin_pc.cpp
+++ b/engines/icb/softskin_pc.cpp
@@ -48,9 +48,9 @@ int32 softskinPC(rap_API *rap, int32 poseBone, MATRIXPC *lw, SVECTORPC *local, i
 	uint32 nSingle = pLink->nSingle;
 	uint32 nMulti = pLink->nMultiple;
 	uint32 i, vIndex;
-	Vertex *noneLink = rap->GetNoneLinkPtr();
-	VertexLink *singleLink = rap->GetSingleLinkPtr();
-	WeightedVertexLink *multiLink = rap->GetMultiLinkPtr();
+	Vertex *noneLink = rap_API_Object::GetNoneLinkPtr(rap);
+	VertexLink *singleLink = rap_API_Object::GetSingleLinkPtr(rap);
+	WeightedVertexLink *multiLink = rap_API_Object::GetMultiLinkPtr(rap);
 
 	uint32 prim;
 	uint32 nVertices = 0;




More information about the Scummvm-git-logs mailing list