[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