[Scummvm-git-logs] scummvm master -> 327b35407fb3a1f824e0a8bbe56ffff07c90367b
aquadran
noreply at scummvm.org
Sun Feb 26 14:03:31 UTC 2023
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:
327b35407f WME3D: Move portions code to mesh loader
Commit: 327b35407fb3a1f824e0a8bbe56ffff07c90367b
https://github.com/scummvm/scummvm/commit/327b35407fb3a1f824e0a8bbe56ffff07c90367b
Author: PaweÅ KoÅodziejski (aquadran at gmail.com)
Date: 2023-02-26T15:03:25+01:00
Commit Message:
WME3D: Move portions code to mesh loader
Changed paths:
engines/wintermute/base/gfx/skin_mesh_helper.cpp
engines/wintermute/base/gfx/xmesh.cpp
engines/wintermute/base/gfx/xskinmesh_loader.cpp
engines/wintermute/base/gfx/xskinmesh_loader.h
diff --git a/engines/wintermute/base/gfx/skin_mesh_helper.cpp b/engines/wintermute/base/gfx/skin_mesh_helper.cpp
index 9f95c6be3ca..16996230d4d 100644
--- a/engines/wintermute/base/gfx/skin_mesh_helper.cpp
+++ b/engines/wintermute/base/gfx/skin_mesh_helper.cpp
@@ -28,6 +28,7 @@
#include "engines/wintermute/dcgf.h"
#include "engines/wintermute/base/gfx/skin_mesh_helper.h"
#include "engines/wintermute/base/gfx/xskinmesh_loader.h"
+#include "engines/wintermute/base/gfx/xfile_loader.h"
namespace Wintermute {
@@ -43,7 +44,7 @@ SkinMeshHelper::~SkinMeshHelper() {
//////////////////////////////////////////////////////////////////////////
uint SkinMeshHelper::getNumFaces() {
- return 0;//_mesh->getNumFaces();
+ return _mesh->_meshObject->_numFaces;
}
//////////////////////////////////////////////////////////////////////////
diff --git a/engines/wintermute/base/gfx/xmesh.cpp b/engines/wintermute/base/gfx/xmesh.cpp
index 7161944108b..e89dddd2eb5 100644
--- a/engines/wintermute/base/gfx/xmesh.cpp
+++ b/engines/wintermute/base/gfx/xmesh.cpp
@@ -67,25 +67,18 @@ bool XMesh::loadFromXData(const Common::String &filename, XFileData *xobj, Commo
return false;
}
- XSkinMeshLoader *mesh = new XSkinMeshLoader(this);
+ XSkinMeshLoader *mesh = new XSkinMeshLoader(this, meshObject);
_skinMesh = new SkinMeshHelper(mesh);
- mesh->_vertexCount = meshObject->_numVertices;
-
- // vertex format for .X meshes will be position + normals + textures
- mesh->_vertexData = new float[XSkinMeshLoader::kVertexComponentCount * mesh->_vertexCount]();
- mesh->_vertexPositionData = new float[3 * mesh->_vertexCount]();
- // we already know how big this is supposed to be
- // TODO: might have to generate normals if file does not contain any
- mesh->_vertexNormalData = new float[3 * mesh->_vertexCount]();
-
mesh->parsePositionCoords(meshObject);
- int faceCount = meshObject->_numFaces;
+ uint numFaces = _skinMesh->getNumFaces();
+
+ //uint numBones = _skinMesh->getNumBones();
Common::Array<int> indexCountPerFace;
- mesh->parseFaces(meshObject, faceCount, indexCountPerFace);
+ mesh->parseFaces(meshObject, numFaces, indexCountPerFace);
uint numChildren = 0;
xobj->getChildren(numChildren);
@@ -100,7 +93,7 @@ bool XMesh::loadFromXData(const Common::String &filename, XFileData *xobj, Commo
} else if (objectType == kXClassMeshNormals) {
mesh->parseNormalCoords(&xchildData);
} else if (objectType == kXClassMeshMaterialList) {
- mesh->parseMaterials(&xchildData, _gameRef, faceCount, filename, materialReferences, indexCountPerFace);
+ mesh->parseMaterials(&xchildData, _gameRef, numFaces, filename, materialReferences, indexCountPerFace);
} else if (objectType == kXClassMaterial) {
Material *mat = new Material(_gameRef);
mat->loadFromX(&xchildData, filename);
diff --git a/engines/wintermute/base/gfx/xskinmesh_loader.cpp b/engines/wintermute/base/gfx/xskinmesh_loader.cpp
index 87c2862fb40..d7d5a4cd6a5 100644
--- a/engines/wintermute/base/gfx/xskinmesh_loader.cpp
+++ b/engines/wintermute/base/gfx/xskinmesh_loader.cpp
@@ -34,13 +34,17 @@ namespace Wintermute {
// define constant to make it available to the linker
const uint32 XSkinMeshLoader::kNullIndex;
-XSkinMeshLoader::XSkinMeshLoader(XMesh *mesh) {
+XSkinMeshLoader::XSkinMeshLoader(XMesh *mesh, XMeshObject *meshObject) {
_mesh = mesh;
-
- _vertexData = nullptr;
- _vertexPositionData = nullptr;
- _vertexNormalData = nullptr;
- _vertexCount = 0;
+ _meshObject = meshObject;
+
+ _vertexCount = meshObject->_numVertices;
+ // vertex format for .X meshes will be position + normals + textures
+ _vertexData = new float[kVertexComponentCount * _vertexCount]();
+ _vertexPositionData = new float[3 * _vertexCount]();
+ // we already know how big this is supposed to be
+ // TODO: might have to generate normals if file does not contain any
+ _vertexNormalData = new float[3 * _vertexCount]();
}
XSkinMeshLoader::~XSkinMeshLoader() {
diff --git a/engines/wintermute/base/gfx/xskinmesh_loader.h b/engines/wintermute/base/gfx/xskinmesh_loader.h
index 5beea158374..dcc213037d0 100644
--- a/engines/wintermute/base/gfx/xskinmesh_loader.h
+++ b/engines/wintermute/base/gfx/xskinmesh_loader.h
@@ -33,6 +33,7 @@ class Material;
class XModel;
class XMesh;
class ShadowVolume;
+class SkinMeshHelper;
class VideoTheoraPlayer;
struct XMeshObject;
@@ -47,9 +48,10 @@ class XSkinMeshLoader {
friend class XMesh;
friend class XMeshOpenGL;
friend class XMeshOpenGLShader;
+ friend class SkinMeshHelper;
public:
- XSkinMeshLoader(XMesh *mesh);
+ XSkinMeshLoader(XMesh *mesh, XMeshObject *meshObject);
virtual ~XSkinMeshLoader();
protected:
@@ -89,6 +91,7 @@ protected:
BaseArray<int> _materialIndices;
XMesh *_mesh;
+ XMeshObject *_meshObject;
};
} // namespace Wintermute
More information about the Scummvm-git-logs
mailing list