[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