[Scummvm-git-logs] scummvm master -> 984eb9e2dd280bb8187d8e7da42ce7553e2345c9

aquadran noreply at scummvm.org
Mon Oct 14 19:49:35 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:
984eb9e2dd WINTERMUTE: Switch to skinmesh API for skinning


Commit: 984eb9e2dd280bb8187d8e7da42ce7553e2345c9
    https://github.com/scummvm/scummvm/commit/984eb9e2dd280bb8187d8e7da42ce7553e2345c9
Author: Paweł Kołodziejski (aquadran at gmail.com)
Date: 2024-10-14T21:49:31+02:00

Commit Message:
WINTERMUTE: Switch to skinmesh API for skinning

Changed paths:
    engines/wintermute/ad/ad_actor_3dx.cpp
    engines/wintermute/ad/ad_object_3d.cpp
    engines/wintermute/base/gfx/skin_mesh_helper.cpp
    engines/wintermute/base/gfx/skin_mesh_helper.h
    engines/wintermute/base/gfx/xframe_node.cpp
    engines/wintermute/base/gfx/xframe_node.h
    engines/wintermute/base/gfx/xmesh.cpp
    engines/wintermute/base/gfx/xmesh.h
    engines/wintermute/base/gfx/xmodel.cpp
    engines/wintermute/base/gfx/xmodel.h
    engines/wintermute/base/gfx/xskinmesh.cpp
    engines/wintermute/base/gfx/xskinmesh.h


diff --git a/engines/wintermute/ad/ad_actor_3dx.cpp b/engines/wintermute/ad/ad_actor_3dx.cpp
index 35af96ae0ce..8ba7ac48c20 100644
--- a/engines/wintermute/ad/ad_actor_3dx.cpp
+++ b/engines/wintermute/ad/ad_actor_3dx.cpp
@@ -502,12 +502,13 @@ bool AdActor3DX::displayShadowVolume() {
 			continue;
 		}
 
-		Math::Matrix4 *boneMat = _xmodel->getBoneMatrix(at->getParentBone().c_str());
+		DXMatrix *boneMat = _xmodel->getBoneMatrix(at->getParentBone().c_str());
 		if (!boneMat) {
 			continue;
 		}
 
-		Math::Matrix4 viewMat = *boneMat;
+		Math::Matrix4 viewMat;
+		viewMat.setData(*boneMat);
 		at->displayShadowVol(viewMat, lightVector, extrusionDepth, true);
 	}
 
@@ -550,12 +551,13 @@ bool AdActor3DX::displayAttachments(bool registerObjects) {
 			continue;
 		}
 
-		Math::Matrix4 *boneMat = _xmodel->getBoneMatrix(at->getParentBone().c_str());
+		DXMatrix *boneMat = _xmodel->getBoneMatrix(at->getParentBone().c_str());
 		if (!boneMat) {
 			continue;
 		}
 
-		Math::Matrix4 viewMat = *boneMat;
+		Math::Matrix4 viewMat;
+		viewMat.setData(*boneMat);
 		at->displayAttachable(viewMat, registerObjects);
 	}
 
diff --git a/engines/wintermute/ad/ad_object_3d.cpp b/engines/wintermute/ad/ad_object_3d.cpp
index 8ce38f779b5..febc4470e65 100644
--- a/engines/wintermute/ad/ad_object_3d.cpp
+++ b/engines/wintermute/ad/ad_object_3d.cpp
@@ -599,13 +599,14 @@ bool AdObject3D::getBonePosition2D(const char *boneName, int32 *x, int32 *y) {
 	if (!adGame->_scene || !adGame->_scene->_sceneGeometry)
 		return false;
 
-	Math::Matrix4 *boneMat = _xmodel->getBoneMatrix(boneName);
-
+	DXMatrix *boneMat = _xmodel->getBoneMatrix(boneName);
 	if (!boneMat) {
 		return false;
 	}
 
-	Math::Matrix4 bonePosMat = *boneMat * _worldMatrix;
+	Math::Matrix4 boneMatrix;
+	boneMatrix.setData(*boneMat);
+	Math::Matrix4 bonePosMat = boneMatrix * _worldMatrix;
 
 	Math::Vector4d vectBone4 = Math::Vector4d(0.0f, 0.0f, 0.0f, 0.0f);
 	bonePosMat.transformVector(&vectBone4);
@@ -621,12 +622,14 @@ bool AdObject3D::getBonePosition3D(const char *boneName, Math::Vector3d *pos, Ma
 		return false;
 	}
 
-	Math::Matrix4 *boneMat = _xmodel->getBoneMatrix(boneName);
+	DXMatrix *boneMat = _xmodel->getBoneMatrix(boneName);
 	if (!boneMat) {
 		return false;
 	}
 
-	Math::Matrix4 bonePosMat = *boneMat * _worldMatrix;
+	Math::Matrix4 boneMatrix;
+	boneMatrix.setData(*boneMat);
+	Math::Matrix4 bonePosMat = boneMatrix * _worldMatrix;
 	*pos = Math::Vector3d(0.0f, 0.0f, 0.0f);
 
 	if (offset) {
diff --git a/engines/wintermute/base/gfx/skin_mesh_helper.cpp b/engines/wintermute/base/gfx/skin_mesh_helper.cpp
index 8009d5f2930..835198bd925 100644
--- a/engines/wintermute/base/gfx/skin_mesh_helper.cpp
+++ b/engines/wintermute/base/gfx/skin_mesh_helper.cpp
@@ -80,14 +80,6 @@ bool SkinMeshHelper::updateSkinnedMesh(const DXMatrix *boneTransforms, DXMesh *m
 	return _skinInfo->updateSkinnedMesh(boneTransforms, sourceVerts, targetVerts);
 }
 
-//////////////////////////////////////////////////////////////////////////
-bool SkinMeshHelper::updateSkinnedMesh(BaseArray<Math::Matrix4> &boneTransforms, DXMesh *mesh) {
-	void *sourceVerts = reinterpret_cast<void *>(_mesh->getVertexBuffer().ptr());
-	void *targetVerts = reinterpret_cast<void *>(mesh->getVertexBuffer().ptr());
-
-	return _skinInfo->updateSkinnedMesh(boneTransforms, sourceVerts, targetVerts);
-}
-
 //////////////////////////////////////////////////////////////////////////
 const char *SkinMeshHelper::getBoneName(uint32 boneIndex) {
 	return _skinInfo->getBoneName(boneIndex);
diff --git a/engines/wintermute/base/gfx/skin_mesh_helper.h b/engines/wintermute/base/gfx/skin_mesh_helper.h
index 40007794157..82cb371c059 100644
--- a/engines/wintermute/base/gfx/skin_mesh_helper.h
+++ b/engines/wintermute/base/gfx/skin_mesh_helper.h
@@ -28,10 +28,6 @@
 #ifndef WINTERMUTE_SKIN_MESH_HELPER_H
 #define WINTERMUTE_SKIN_MESH_HELPER_H
 
-#include "math/matrix4.h"
-#include "math/vector3d.h"
-#include "math/vector3d.h"
-
 #include "engines/wintermute/base/gfx/xmath.h"
 
 namespace Wintermute {
@@ -56,7 +52,6 @@ public:
 	bool getOriginalMesh(DXMesh **mesh);
 	bool generateSkinnedMesh(Common::Array<uint32> &adjacencyOut, DXMesh **mesh);
 	bool updateSkinnedMesh(const DXMatrix *boneTransforms, DXMesh *mesh);
-	bool updateSkinnedMesh(BaseArray<Math::Matrix4> &boneTransforms, DXMesh *mesh);
 	const char *getBoneName(uint32 boneIndex);
 	DXMatrix *getBoneOffsetMatrix(uint32 boneIndex);
 
diff --git a/engines/wintermute/base/gfx/xframe_node.cpp b/engines/wintermute/base/gfx/xframe_node.cpp
index b7f89aabb74..0864b82a1f3 100644
--- a/engines/wintermute/base/gfx/xframe_node.cpp
+++ b/engines/wintermute/base/gfx/xframe_node.cpp
@@ -40,7 +40,7 @@ namespace Wintermute {
 FrameNode::FrameNode(BaseGame *inGame) : BaseNamedObject(inGame) {
 	_transformationMatrix.setToIdentity();
 	_originalMatrix.setToIdentity();
-	_combinedMatrix.setToIdentity();
+	DXMatrixIdentity(&_combinedMatrix);
 
 	for (int i = 0; i < 2; i++) {
 		_transPos[i] = Math::Vector3d(0.0f, 0.0f, 0.0f);
@@ -70,7 +70,7 @@ FrameNode::~FrameNode() {
 }
 
 //////////////////////////////////////////////////////////////////////////
-Math::Matrix4 *FrameNode::getCombinedMatrix() {
+DXMatrix *FrameNode::getCombinedMatrix() {
 	return &_combinedMatrix;
 }
 
@@ -249,7 +249,7 @@ FrameNode *FrameNode::findFrame(const char *frameName) {
 }
 
 //////////////////////////////////////////////////////////////////////////
-bool FrameNode::updateMatrices(Math::Matrix4 &parentMat) {
+bool FrameNode::updateMatrices(DXMatrix &parentMat) {
 	if (_transUsed[0]) {
 		Math::Vector3d transPos = _transPos[0];
 		Math::Vector3d transScale = _transScale[0];
@@ -282,7 +282,10 @@ bool FrameNode::updateMatrices(Math::Matrix4 &parentMat) {
 	_transUsed[0] = _transUsed[1] = false;
 
 	// multiply by parent transformation
-	_combinedMatrix = parentMat * _transformationMatrix;
+	Math::Matrix4 parentMatrix;
+	parentMatrix.setData(parentMat._m4x4);
+	Math::Matrix4 combinedMatrix = parentMatrix * _transformationMatrix;
+	_combinedMatrix = DXMatrix(combinedMatrix.getData());
 
 	// update child frames
 	for (uint32 i = 0; i < _frames.size(); i++) {
diff --git a/engines/wintermute/base/gfx/xframe_node.h b/engines/wintermute/base/gfx/xframe_node.h
index 93fd6537c58..6d648f73d88 100644
--- a/engines/wintermute/base/gfx/xframe_node.h
+++ b/engines/wintermute/base/gfx/xframe_node.h
@@ -48,7 +48,7 @@ public:
 	FrameNode(BaseGame *inGame);
 	virtual ~FrameNode();
 
-	bool updateMatrices(Math::Matrix4 &parentMat);
+	bool updateMatrices(DXMatrix &parentMat);
 	bool updateMeshes();
 	bool resetMatrices();
 	bool render(XModel *model);
@@ -59,7 +59,7 @@ public:
 	bool mergeFromXData(const Common::String &filename, XModel *model, XFileData *xobj);
 	bool findBones(FrameNode *rootFrame);
 	FrameNode *findFrame(const char *frameName);
-	Math::Matrix4 *getCombinedMatrix();
+	DXMatrix *getCombinedMatrix();
 	Math::Matrix4 *getOriginalMatrix();
 	void setTransformationMatrix(Math::Matrix4 *mat);
 	bool pickPoly(Math::Vector3d *pickRayOrig, Math::Vector3d *pickRayDir);
@@ -81,7 +81,7 @@ protected:
 
 	Math::Matrix4 _transformationMatrix;
 	Math::Matrix4 _originalMatrix;
-	Math::Matrix4 _combinedMatrix;
+	DXMatrix _combinedMatrix;
 
 	Math::Vector3d _transPos[2];
 	Math::Vector3d _transScale[2];
diff --git a/engines/wintermute/base/gfx/xmesh.cpp b/engines/wintermute/base/gfx/xmesh.cpp
index d5b2fe5f9ae..12de2b131be 100644
--- a/engines/wintermute/base/gfx/xmesh.cpp
+++ b/engines/wintermute/base/gfx/xmesh.cpp
@@ -45,6 +45,8 @@ XMesh::XMesh(Wintermute::BaseGame *inGame) : BaseNamedObject(inGame) {
 	_blendedMesh = nullptr;
 	_staticMesh = nullptr;
 
+	_boneMatrices = nullptr;
+
 	_BBoxStart = _BBoxEnd = Math::Vector3d(0.0f, 0.0f, 0.0f);
 }
 
@@ -55,6 +57,10 @@ XMesh::~XMesh() {
 	_blendedMesh = nullptr;
 	delete _staticMesh;
 	_staticMesh = nullptr;
+
+	delete[] _boneMatrices;
+	_boneMatrices = nullptr;
+
 	_materials.clear();
 }
 
@@ -110,7 +116,7 @@ bool XMesh::loadFromXData(const Common::String &filename, XFileData *xobj) {
 	// Process skinning data
 	if (numBones) {
 		// bones are available
-		//_boneMatrices = new DXMatrix*[numBones];
+		_boneMatrices = new DXMatrix*[numBones];
 
 		generateMesh();
 	} else {
@@ -183,7 +189,6 @@ bool XMesh::findBones(FrameNode *rootFrame) {
 	if (!_skinMesh)
 		return true;
 
-	_boneMatrices.resize(_skinMesh->getNumBones());
 	// get the buffer with the names of the bones
 	for (uint32 i = 0; i < _skinMesh->getNumBones(); i++) {
 		// find a frame with the same name
@@ -209,8 +214,7 @@ bool XMesh::update(FrameNode *parentFrame) {
 	// update skinned mesh
 	if (_skinMesh) {
 		int numBones = _skinMesh->getNumBones();
-		BaseArray<Math::Matrix4> boneMatrices;
-		boneMatrices.resize(numBones);
+		DXMatrix *boneMatrices = new DXMatrix[numBones];
 
 		// prepare final matrices
 		for (int i = 0; i < numBones; ++i) {
@@ -220,11 +224,14 @@ bool XMesh::update(FrameNode *parentFrame) {
 					offsetMatrix(c, r) = _skinMesh->getBoneOffsetMatrix(i)->_m4x4[r * 4 + c];
 				}
 			}
-			boneMatrices[i] = *_boneMatrices[i] * offsetMatrix;
+			Math::Matrix4 boneMatrix;
+			boneMatrix.setData(_boneMatrices[i]->_m4x4);
+			boneMatrices[i] = DXMatrix((boneMatrix * offsetMatrix).getData());
 		}
 
 		// generate skinned mesh
 		res = _skinMesh->updateSkinnedMesh(boneMatrices, _blendedMesh);
+		delete [] boneMatrices;
 
 		if (!res) {
 			BaseEngine::LOG(0, "Error updating skinned mesh");
@@ -281,7 +288,9 @@ bool XMesh::update(FrameNode *parentFrame) {
 		for (uint32 i = 0; i < numVertices; i++) {
 			DXVector3 v = *(DXVector3 *)(oldPoints + i * fvfSize);
 			Math::Vector3d newVertex = Math::Vector3d(v._x, v._y, v._z);
-			parentFrame->getCombinedMatrix()->transform(&newVertex, true);
+			Math::Matrix4 combinedMatrix;
+			combinedMatrix.setData(parentFrame->getCombinedMatrix()->_m4x4);
+			combinedMatrix.transform(&newVertex, true);
 
 			((DXVector3 *)(newPoints + i * fvfSize))->_x = newVertex.x();
 			((DXVector3 *)(newPoints + i * fvfSize))->_y = newVertex.y();
diff --git a/engines/wintermute/base/gfx/xmesh.h b/engines/wintermute/base/gfx/xmesh.h
index 0c293292e11..6cab29952a5 100644
--- a/engines/wintermute/base/gfx/xmesh.h
+++ b/engines/wintermute/base/gfx/xmesh.h
@@ -77,7 +77,7 @@ protected:
 	DXMesh *_blendedMesh;
 	DXMesh *_staticMesh;
 
-	BaseArray<Math::Matrix4 *> _boneMatrices;
+	DXMatrix **_boneMatrices;
 
 	Common::Array<uint32> _adjacency;
 
diff --git a/engines/wintermute/base/gfx/xmodel.cpp b/engines/wintermute/base/gfx/xmodel.cpp
index 0fcd8c40761..0dcb833cf98 100644
--- a/engines/wintermute/base/gfx/xmodel.cpp
+++ b/engines/wintermute/base/gfx/xmodel.cpp
@@ -364,8 +364,8 @@ bool XModel::update() {
 
 	// update matrices
 	if (_rootFrame) {
-		Math::Matrix4 tempMat;
-		tempMat.setToIdentity();
+		DXMatrix tempMat;
+		DXMatrixIdentity(&tempMat);
 		_rootFrame->updateMatrices(tempMat);
 
 		return _rootFrame->updateMeshes();
@@ -521,7 +521,7 @@ bool XModel::renderFlatShadowModel() {
 }
 
 //////////////////////////////////////////////////////////////////////////
-Math::Matrix4 *XModel::getBoneMatrix(const char *boneName) {
+DXMatrix *XModel::getBoneMatrix(const char *boneName) {
 	FrameNode *bone = _rootFrame->findFrame(boneName);
 
 	if (bone) {
diff --git a/engines/wintermute/base/gfx/xmodel.h b/engines/wintermute/base/gfx/xmodel.h
index 05dde59b90b..e4907dd2257 100644
--- a/engines/wintermute/base/gfx/xmodel.h
+++ b/engines/wintermute/base/gfx/xmodel.h
@@ -156,7 +156,7 @@ public:
 	bool stopAnim(int channel, uint32 transitionTime);
 	bool stopAnim(uint32 transitionTime);
 
-	Math::Matrix4 *getBoneMatrix(const char *boneName);
+	DXMatrix *getBoneMatrix(const char *boneName);
 	FrameNode *getRootFrame();
 
 	bool setMaterialSprite(const char *materialName, const char *spriteFilename);
diff --git a/engines/wintermute/base/gfx/xskinmesh.cpp b/engines/wintermute/base/gfx/xskinmesh.cpp
index ac3a2374024..cb01ec8ea90 100644
--- a/engines/wintermute/base/gfx/xskinmesh.cpp
+++ b/engines/wintermute/base/gfx/xskinmesh.cpp
@@ -432,7 +432,7 @@ void DXSkinInfo::destroy() {
 	_bones = nullptr;
 }
 
-bool DXSkinInfo::updateSkinnedMesh(BaseArray<Math::Matrix4> &boneTransforms, void *srcVertices, void *dstVertices) {
+bool DXSkinInfo::updateSkinnedMesh(const DXMatrix *boneTransforms, void *srcVertices, void *dstVertices) {
 	uint32 vertexSize = DXGetFVFVertexSize(_fvf);
 	uint32 normalOffset = sizeof(DXVector3);
 	uint32 i, j;
@@ -445,14 +445,25 @@ bool DXSkinInfo::updateSkinnedMesh(BaseArray<Math::Matrix4> &boneTransforms, voi
 	}
 
 	for (i = 0; i < _numBones; i++) {
-		for (j = 0; j < _bones[i]._numInfluences; ++j) {
+		//DXMatrix boneInverse, matrix;
+
+		Math::Matrix4 boneMatrix;
+		boneMatrix.setData(boneTransforms[i]._m4x4);
+
+		//DXMatrixInverse(&boneInverse, NULL, &_bones[i]._transform);
+		//DXMatrixMultiply(&matrix, &boneTransforms[i], &boneInverse);
+		//DXMatrixMultiply(&matrix, &matrix, &_bones[i]._transform);
+
+		for (j = 0; j < _bones[i]._numInfluences; j++) {
 			Math::Vector3d position;
 			DXVector3 *positionSrc = (DXVector3 *)((byte *)srcVertices + vertexSize * _bones[i]._vertices[j]);
 			DXVector3 *positionDst = (DXVector3 *)((byte *)dstVertices + vertexSize * _bones[i]._vertices[j]);
 			float weight = _bones[i]._weights[j];
 
 			position.set(positionSrc->_x, positionSrc->_y, positionSrc->_z);
-			boneTransforms[i].transform(&position, true);
+			boneMatrix.transform(&position, true);
+			//DXVec3TransformCoord(&position, positionSrc, &matrix);
+
 			positionDst->_x += weight * position.x();
 			positionDst->_y += weight * position.y();
 			positionDst->_z += weight * position.z();
@@ -468,19 +479,26 @@ bool DXSkinInfo::updateSkinnedMesh(BaseArray<Math::Matrix4> &boneTransforms, voi
 		}
 
 		for (i = 0; i < _numBones; i++) {
-			boneTransforms[i].transpose();
-			boneTransforms[i].inverse();
-		}
+			//DXMatrix boneInverse, matrix;
 
-		for (i = 0; i < _numBones; i++) {
-			for (j = 0; j < _bones[i]._numInfluences; ++j) {
+			Math::Matrix4 boneMatrix;
+			boneMatrix.setData(boneTransforms[i]._m4x4);
+			boneMatrix.transpose();
+			boneMatrix.inverse();
+
+			//DXMatrixInverse(&boneInverse, nullptr, &_bones[i]._transform);
+			//DXMatrixMultiply(&matrix, &_bones[i]._transform, &boneTransforms[i]);
+
+			for (j = 0; j < _bones[i]._numInfluences; j++) {
 				Math::Vector3d normal;
 				DXVector3 *normalSrc = (DXVector3 *)((byte *)srcVertices + vertexSize * _bones[i]._vertices[j] + normalOffset);
 				DXVector3 *normalDst = (DXVector3 *)((byte *)dstVertices + vertexSize * _bones[i]._vertices[j] + normalOffset);
 				float weight = _bones[i]._weights[j];
 
+				//DXVec3TransformNormal(&normal, normalSrc, &boneInverse);
+				//DXVec3TransformNormal(&normal, &normal, &matrix);
 				normal.set(normalSrc->_x, normalSrc->_y, normalSrc->_z);
-				boneTransforms[i].transform(&normal, true);
+				boneMatrix.transform(&normal, true);
 				normalDst->_x += weight * normal.x();
 				normalDst->_y += weight * normal.y();
 				normalDst->_z += weight * normal.z();
@@ -498,77 +516,6 @@ bool DXSkinInfo::updateSkinnedMesh(BaseArray<Math::Matrix4> &boneTransforms, voi
 	return true;
 }
 
-bool DXSkinInfo::updateSkinnedMesh(const DXMatrix *boneTransforms, void *srcVertices, void *dstVertices) {
-	uint32 vertexSize = DXGetFVFVertexSize(_fvf);
-	uint32 normalOffset = sizeof(DXVector3);
-	uint32 i, j;
-
-	for (i = 0; i < _numVertices; i++) {
-		DXVector3 *position = (DXVector3 *)((byte *)dstVertices + vertexSize * i);
-		position->_x = 0.0f;
-		position->_y = 0.0f;
-		position->_z = 0.0f;
-	}
-
-	for (i = 0; i < _numBones; i++) {
-		DXMatrix boneInverse, matrix;
-
-		DXMatrixInverse(&boneInverse, NULL, &_bones[i]._transform);
-		DXMatrixMultiply(&matrix, &boneTransforms[i], &boneInverse);
-		DXMatrixMultiply(&matrix, &matrix, &_bones[i]._transform);
-
-		for (j = 0; j < _bones[i]._numInfluences; j++) {
-			DXVector3 position;
-			DXVector3 *positionSrc = (DXVector3 *)((byte *)srcVertices + vertexSize * _bones[i]._vertices[j]);
-			DXVector3 *positionDst = (DXVector3 *)((byte *)dstVertices + vertexSize * _bones[i]._vertices[j]);
-			float weight = _bones[i]._weights[j];
-
-			DXVec3TransformCoord(&position, positionSrc, &matrix);
-			positionDst->_x += weight * position._x;
-			positionDst->_y += weight * position._y;
-			positionDst->_z += weight * position._z;
-		}
-	}
-
-	if (_fvf & DXFVF_NORMAL) {
-		for (i = 0; i < _numVertices; i++) {
-			DXVector3 *normal = (DXVector3 *)((byte *)dstVertices + vertexSize * i + normalOffset);
-			normal->_x = 0.0f;
-			normal->_y = 0.0f;
-			normal->_z = 0.0f;
-		}
-
-		for (i = 0; i < _numBones; i++) {
-			DXMatrix boneInverse, matrix;
-
-			DXMatrixInverse(&boneInverse, nullptr, &_bones[i]._transform);
-			DXMatrixMultiply(&matrix, &_bones[i]._transform, &boneTransforms[i]);
-
-			for (j = 0; j < _bones[i]._numInfluences; j++) {
-				DXVector3 normal;
-				DXVector3 *normalSrc = (DXVector3 *)((byte *)srcVertices + vertexSize * _bones[i]._vertices[j] + normalOffset);
-				DXVector3 *normalDst = (DXVector3 *)((byte *)dstVertices + vertexSize * _bones[i]._vertices[j] + normalOffset);
-				float weight = _bones[i]._weights[j];
-
-				DXVec3TransformNormal(&normal, normalSrc, &boneInverse);
-				DXVec3TransformNormal(&normal, &normal, &matrix);
-				normalDst->_x += weight * normal._x;
-				normalDst->_y += weight * normal._y;
-				normalDst->_z += weight * normal._z;
-			}
-		}
-
-		for (i = 0; i < _numVertices; i++) {
-			DXVector3 *normalDest = (DXVector3 *)((byte *)dstVertices + (i * vertexSize) + normalOffset);
-			if ((normalDest->_x != 0.0f) && (normalDest->_y != 0.0f) && (normalDest->_z != 0.0f)) {
-				DXVec3Normalize(normalDest, normalDest);
-			}
-		}
-	}
-
-	return true;
-}
-
 bool DXSkinInfo::setBoneName(uint32 boneIdx, const char *name) {
 	if (boneIdx >= _numBones || !name)
 		return false;
diff --git a/engines/wintermute/base/gfx/xskinmesh.h b/engines/wintermute/base/gfx/xskinmesh.h
index c9d85c7aa13..a487d19610c 100644
--- a/engines/wintermute/base/gfx/xskinmesh.h
+++ b/engines/wintermute/base/gfx/xskinmesh.h
@@ -33,7 +33,6 @@
 #ifndef WINTERMUTE_XSKINMESH_H
 #define WINTERMUTE_XSKINMESH_H
 
-#include "engines/wintermute/coll_templ.h"
 #include "engines/wintermute/base/gfx/xbuffer.h"
 #include "engines/wintermute/base/gfx/xfile_loader.h"
 #include "engines/wintermute/base/gfx/xmath.h"
@@ -123,7 +122,6 @@ public:
 	bool setBoneOffsetMatrix(uint32 boneIdx, const float *boneTransform);
 	DXMatrix *getBoneOffsetMatrix(uint32 boneIdx) { return &_bones[boneIdx]._transform; }
 	bool updateSkinnedMesh(const DXMatrix *boneTransforms, void *srcVertices, void *dstVertices);
-	bool updateSkinnedMesh(BaseArray<Math::Matrix4> &boneTransforms, void *srcVertices, void *dstVertices);
 };
 
 class DXMesh {




More information about the Scummvm-git-logs mailing list