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

aquadran noreply at scummvm.org
Sun Oct 13 09:38:01 UTC 2024


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:
e7031d6078 WINTERMUTE: Sync pickPoly function with original


Commit: e7031d607813fa3eabcbcc9c8f2e43b2afd6c2d8
    https://github.com/scummvm/scummvm/commit/e7031d607813fa3eabcbcc9c8f2e43b2afd6c2d8
Author: Paweł Kołodziejski (aquadran at gmail.com)
Date: 2024-10-13T11:37:57+02:00

Commit Message:
WINTERMUTE: Sync pickPoly function with original

Changed paths:
    engines/wintermute/base/gfx/xmesh.cpp


diff --git a/engines/wintermute/base/gfx/xmesh.cpp b/engines/wintermute/base/gfx/xmesh.cpp
index becd999559f..561ef4250a1 100644
--- a/engines/wintermute/base/gfx/xmesh.cpp
+++ b/engines/wintermute/base/gfx/xmesh.cpp
@@ -399,39 +399,36 @@ bool XMesh::pickPoly(Math::Vector3d *pickRayOrig, Math::Vector3d *pickRayDir) {
 	if (!_blendedMesh)
 		return false;
 
-	float *vertexData = (float *)_blendedMesh->getVertexBuffer().ptr();
-	if (vertexData == nullptr) {
-		return false;
-	}
-	uint32 vertexSize = DXGetFVFVertexSize(_blendedMesh->getFVF()) / sizeof(float);
+	uint32 fvfSize = DXGetFVFVertexSize(_blendedMesh->getFVF());
+	uint32 numFaces = _blendedMesh->getNumFaces();
 
-	bool res = false;
+	// lock vertex buffer
+	byte *points = _blendedMesh->getVertexBuffer().ptr();
 
-	uint32 *indexData = (uint32 *)_blendedMesh->getIndexBuffer().ptr();
-	uint32 indexDataSize = _blendedMesh->getIndexBuffer().size() / sizeof(uint32);
-	for (uint32 i = 0; i < indexDataSize; i += 3) {
-		uint32 index1 = indexData[i + 0];
-		uint32 index2 = indexData[i + 1];
-		uint32 index3 = indexData[i + 2];
-
-		Math::Vector3d v0;
-		v0.setData(&vertexData[index1 * vertexSize]);
-		Math::Vector3d v1;
-		v1.setData(&vertexData[index2 * vertexSize]);
-		Math::Vector3d v2;
-		v2.setData(&vertexData[index3 * vertexSize]);
+	// lock index buffer
+	uint32 *indices = (uint32 *)_blendedMesh->getIndexBuffer().ptr();
+
+
+	bool found = false;
+	Math::Vector3d intersection;
+
+	for (uint32 i = 0; i < numFaces; i++) {
+		DXVector3 vp0 = *(DXVector3 *)(points + indices[3 * i + 0] * fvfSize);
+		DXVector3 vp1 = *(DXVector3 *)(points + indices[3 * i + 1] * fvfSize);
+		DXVector3 vp2 = *(DXVector3 *)(points + indices[3 * i + 2] * fvfSize);
+		Math::Vector3d v0 = Math::Vector3d(vp0._x, vp0._y, vp0._z);
+		Math::Vector3d v1 = Math::Vector3d(vp1._x, vp1._y, vp1._z);
+		Math::Vector3d v2 = Math::Vector3d(vp2._x, vp2._y, vp2._z);
 
 		if (isnan(v0.x()))
 			continue;
 
-		Math::Vector3d intersection;
-		if (intersectTriangle(*pickRayOrig, *pickRayDir, v0, v1, v2, intersection.x(), intersection.y(), intersection.z())) {
-			res = true;
+		found = intersectTriangle(*pickRayOrig, *pickRayDir, v0, v1, v2, intersection.x(), intersection.y(), intersection.z()) != false;
+		if (found)
 			break;
-		}
 	}
 
-	return res;
+	return found;
 }
 
 ////////////////////////////////////////////////////////////////////////////




More information about the Scummvm-git-logs mailing list