[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