[Scummvm-git-logs] scummvm master -> 414049f51cc6eb346a882557a09fae41fbc9e00c
aquadran
noreply at scummvm.org
Thu Oct 17 16:54:39 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:
414049f51c WINTERMUTE: Convert math to DX for updateShadowVol() function
Commit: 414049f51cc6eb346a882557a09fae41fbc9e00c
https://github.com/scummvm/scummvm/commit/414049f51cc6eb346a882557a09fae41fbc9e00c
Author: PaweÅ KoÅodziejski (aquadran at gmail.com)
Date: 2024-10-17T18:54:34+02:00
Commit Message:
WINTERMUTE: Convert math to DX for updateShadowVol() function
Changed paths:
engines/wintermute/base/gfx/3dshadow_volume.cpp
engines/wintermute/base/gfx/3dshadow_volume.h
engines/wintermute/base/gfx/xmesh.cpp
diff --git a/engines/wintermute/base/gfx/3dshadow_volume.cpp b/engines/wintermute/base/gfx/3dshadow_volume.cpp
index cd183a184e1..d196ba33ad6 100644
--- a/engines/wintermute/base/gfx/3dshadow_volume.cpp
+++ b/engines/wintermute/base/gfx/3dshadow_volume.cpp
@@ -48,14 +48,15 @@ bool ShadowVolume::reset() {
}
//////////////////////////////////////////////////////////////////////////^M
-bool ShadowVolume::addMesh(Math::Vector3d *mesh, uint32 *adjacency, Math::Matrix4 *modelMat, Math::Vector3d *light, float extrusionDepth) {
+bool ShadowVolume::addMesh(DXVector3 *mesh, uint32 *adjacency, DXMatrix *modelMat, DXVector3 *light, float extrusionDepth) {
// TODO
return true;
}
//////////////////////////////////////////////////////////////////////////
-void ShadowVolume::addVertex(const Math::Vector3d &vertex) {
- _vertices.add(vertex);
+void ShadowVolume::addVertex(const DXVector3 &vertex) {
+ Math::Vector3d vec = Math::Vector3d(vertex._x, vertex._y, vertex._z);
+ _vertices.add(vec);
}
//////////////////////////////////////////////////////////////////////////
diff --git a/engines/wintermute/base/gfx/3dshadow_volume.h b/engines/wintermute/base/gfx/3dshadow_volume.h
index dc7f7a09906..e10562476f2 100644
--- a/engines/wintermute/base/gfx/3dshadow_volume.h
+++ b/engines/wintermute/base/gfx/3dshadow_volume.h
@@ -28,7 +28,8 @@
#ifndef WINTERMUTE_3D_SHADOW_VOLUME_H
#define WINTERMUTE_3D_SHADOW_VOLUME_H
-#include "engines/wintermute//base/base.h"
+#include "engines/wintermute/base/base.h"
+#include "engines/wintermute/base/gfx/xmath.h"
#include "engines/wintermute/coll_templ.h"
#include "math/matrix4.h"
#include "math/vector3d.h"
@@ -50,8 +51,8 @@ public:
ShadowVolume(BaseGame *inGame);
virtual ~ShadowVolume();
- bool addMesh(Math::Vector3d *mesh, uint32 *adjacency, Math::Matrix4 *modelMat, Math::Vector3d *light, float extrusionDepth);
- void addVertex(const Math::Vector3d &vertex);
+ bool addMesh(DXVector3 *mesh, uint32 *adjacency, DXMatrix *modelMat, DXVector3 *light, float extrusionDepth);
+ void addVertex(const DXVector3 &vertex);
bool reset();
virtual bool renderToStencilBuffer() = 0;
diff --git a/engines/wintermute/base/gfx/xmesh.cpp b/engines/wintermute/base/gfx/xmesh.cpp
index c2fdf922544..b92e20fc139 100644
--- a/engines/wintermute/base/gfx/xmesh.cpp
+++ b/engines/wintermute/base/gfx/xmesh.cpp
@@ -318,10 +318,9 @@ bool XMesh::updateShadowVol(ShadowVolume *shadow, Math::Matrix4 &modelMat, const
}
uint32 vertexSize = DXGetFVFVertexSize(_blendedMesh->getFVF()) / sizeof(float);
- Math::Vector3d invLight = light;
- Math::Matrix4 matInverseModel = modelMat;
- matInverseModel.inverse();
- matInverseModel.transform(&invLight, false);
+ DXVector3 invLight = DXVector3(light.getData());
+ DXMatrix matInverseModel = DXMatrix(modelMat.getData());
+ DXMatrixInverse(&matInverseModel, nullptr, &matInverseModel);
uint32 numEdges = 0;
@@ -335,14 +334,17 @@ bool XMesh::updateShadowVol(ShadowVolume *shadow, Math::Matrix4 &modelMat, const
uint16 index1 = indexData[3 * i + 1];
uint16 index2 = indexData[3 * i + 2];
- Math::Vector3d v0(vertexData + index0 * vertexSize);
- Math::Vector3d v1(vertexData + index1 * vertexSize);
- Math::Vector3d v2(vertexData + index2 * vertexSize);
+ DXVector3 v0(vertexData + index0 * vertexSize);
+ DXVector3 v1(vertexData + index1 * vertexSize);
+ DXVector3 v2(vertexData + index2 * vertexSize);
// Transform vertices or transform light?
- Math::Vector3d vNormal = Math::Vector3d::crossProduct(v2 - v1, v1 - v0);
+ DXVector3 vNormal, vec1, vec2;
+ vec1 = v2 - v1;
+ vec2 = v1 - v0;
+ DXVec3Cross(&vNormal, &vec1, &vec2);
- if (Math::Vector3d::dotProduct(vNormal, invLight) >= 0.0f) {
+ if (DXVec3Dot(&vNormal, &invLight) >= 0.0f) {
isFront[i] = false; // back face
} else {
isFront[i] = true; // front face
@@ -385,10 +387,10 @@ bool XMesh::updateShadowVol(ShadowVolume *shadow, Math::Matrix4 &modelMat, const
}
for (uint32 i = 0; i < numEdges; i++) {
- Math::Vector3d v1(vertexData + edges[2 * i + 0] * vertexSize);
- Math::Vector3d v2(vertexData + edges[2 * i + 1] * vertexSize);
- Math::Vector3d v3 = v1 - invLight * extrusionDepth;
- Math::Vector3d v4 = v2 - invLight * extrusionDepth;
+ DXVector3 v1(vertexData + edges[2 * i + 0] * vertexSize);
+ DXVector3 v2(vertexData + edges[2 * i + 1] * vertexSize);
+ DXVector3 v3 = v1 - invLight * extrusionDepth;
+ DXVector3 v4 = v2 - invLight * extrusionDepth;
// Add a quad (two triangles) to the vertex list
shadow->addVertex(v1);
More information about the Scummvm-git-logs
mailing list