[Scummvm-git-logs] scummvm master -> 17a920936de9c76f7738a145325b8feea40be8af

aquadran noreply at scummvm.org
Fri Sep 5 16:25:32 UTC 2025


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .

Summary:
17a920936d WINTERMUTE: Synced with original code


Commit: 17a920936de9c76f7738a145325b8feea40be8af
    https://github.com/scummvm/scummvm/commit/17a920936de9c76f7738a145325b8feea40be8af
Author: Paweł Kołodziejski (aquadran at gmail.com)
Date: 2025-09-05T18:25:28+02:00

Commit Message:
WINTERMUTE: Synced with original code

Changed paths:
    engines/wintermute/base/gfx/base_image.cpp
    engines/wintermute/base/gfx/base_image.h
    engines/wintermute/base/gfx/opengl/meshx_opengl_shader.cpp
    engines/wintermute/base/gfx/opengl/meshx_opengl_shader.h
    engines/wintermute/base/gfx/xfile.cpp
    engines/wintermute/base/gfx/xfile.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


diff --git a/engines/wintermute/base/gfx/base_image.cpp b/engines/wintermute/base/gfx/base_image.cpp
index a0c3cd6fb22..c7c34673028 100644
--- a/engines/wintermute/base/gfx/base_image.cpp
+++ b/engines/wintermute/base/gfx/base_image.cpp
@@ -96,7 +96,7 @@ bool BaseImage::loadFile(const Common::String &filename) {
 }
 
 //////////////////////////////////////////////////////////////////////////
-bool BaseImage::saveBMPFile(const Common::String &filename) const {
+bool BaseImage::saveBMPFile(const char *filename) const {
 	Common::WriteStream *stream = openSfmFileForWrite(filename);
 	if (stream) {
 		bool ret = writeBMPToStream(stream);
diff --git a/engines/wintermute/base/gfx/base_image.h b/engines/wintermute/base/gfx/base_image.h
index 119089f3002..b0d0a292154 100644
--- a/engines/wintermute/base/gfx/base_image.h
+++ b/engines/wintermute/base/gfx/base_image.h
@@ -59,7 +59,7 @@ public:
 		return _paletteCount;
 	}
 	bool writeBMPToStream(Common::WriteStream *stream) const;
-	bool saveBMPFile(const Common::String &filename) const;
+	bool saveBMPFile(const char *filename) const;
 	void copyFrom(const Graphics::Surface *surface, int newWidth = 0, int newHeight = 0, byte flip = 0);
 private:
 	Common::String _filename;
diff --git a/engines/wintermute/base/gfx/opengl/meshx_opengl_shader.cpp b/engines/wintermute/base/gfx/opengl/meshx_opengl_shader.cpp
index b20b29bca67..94979cd469d 100644
--- a/engines/wintermute/base/gfx/opengl/meshx_opengl_shader.cpp
+++ b/engines/wintermute/base/gfx/opengl/meshx_opengl_shader.cpp
@@ -56,7 +56,7 @@ XMeshOpenGLShader::~XMeshOpenGLShader() {
 	glDeleteBuffers(1, &_indexBuffer);
 }
 
-bool XMeshOpenGLShader::loadFromXData(const Common::String &filename, XFileData *xobj) {
+bool XMeshOpenGLShader::loadFromXData(const char *filename, XFileData *xobj) {
 	if (XMesh::loadFromXData(filename, xobj)) {
 		uint32 *indexData = (uint32 *)_blendedMesh->getIndexBuffer().ptr();
 		uint32 indexDataSize = _blendedMesh->getIndexBuffer().size() / sizeof(uint32);
diff --git a/engines/wintermute/base/gfx/opengl/meshx_opengl_shader.h b/engines/wintermute/base/gfx/opengl/meshx_opengl_shader.h
index 5aa5dfc3d30..e89be3cddaf 100644
--- a/engines/wintermute/base/gfx/opengl/meshx_opengl_shader.h
+++ b/engines/wintermute/base/gfx/opengl/meshx_opengl_shader.h
@@ -44,7 +44,7 @@ public:
 	XMeshOpenGLShader(BaseGame *inGame, OpenGL::Shader *shader, OpenGL::Shader *flatShadowShader);
 	~XMeshOpenGLShader() override;
 
-	bool loadFromXData(const Common::String &filename, XFileData *xobj) override;
+	bool loadFromXData(const char *filename, XFileData *xobj) override;
 	bool render(XModel *model) override;
 	bool renderFlatShadowModel(uint32 shadowColor) override;
 	bool update(FrameNode *parentFrame) override;
diff --git a/engines/wintermute/base/gfx/xfile.cpp b/engines/wintermute/base/gfx/xfile.cpp
index fc95906fb98..c08136ba5f8 100644
--- a/engines/wintermute/base/gfx/xfile.cpp
+++ b/engines/wintermute/base/gfx/xfile.cpp
@@ -51,7 +51,7 @@ bool XFile::closeFile() {
 }
 
 //////////////////////////////////////////////////////////////////////////
-bool XFile::openFile(const Common::String &filename) {
+bool XFile::openFile(const char *filename) {
 	closeFile();
 
 	// load file
@@ -71,13 +71,13 @@ bool XFile::openFile(const Common::String &filename) {
 	bool res = _xfile->load(buffer, size);
 	delete[] buffer;
 	if (!res) {
-		BaseEngine::LOG(0, "Error loading X file '%s'", filename.c_str());
+		BaseEngine::LOG(0, "Error loading X file '%s'", filename);
 		return false;
 	}
 
 	// create enum object
 	if (!res || !_xfile->createEnumObject(_xenum)) {
-		BaseEngine::LOG(res, "Error creating XFile enum object for '%s'", filename.c_str());
+		BaseEngine::LOG(res, "Error creating XFile enum object for '%s'", filename);
 		closeFile();
 		return false;
 	}
diff --git a/engines/wintermute/base/gfx/xfile.h b/engines/wintermute/base/gfx/xfile.h
index 6c349dc797d..453fc2ee07a 100644
--- a/engines/wintermute/base/gfx/xfile.h
+++ b/engines/wintermute/base/gfx/xfile.h
@@ -38,7 +38,7 @@ public:
 	XFile(BaseGame *inGame);
 	virtual ~XFile();
 
-	bool openFile(const Common::String &filename);
+	bool openFile(const char *filename);
 	bool closeFile();
 
 	XFileEnumObject getEnum() {
diff --git a/engines/wintermute/base/gfx/xframe_node.cpp b/engines/wintermute/base/gfx/xframe_node.cpp
index b61223e013c..fb2ffdce475 100644
--- a/engines/wintermute/base/gfx/xframe_node.cpp
+++ b/engines/wintermute/base/gfx/xframe_node.cpp
@@ -97,7 +97,7 @@ void FrameNode::setTransformation(int slot, DXVector3 pos, DXVector3 scale, DXQu
 }
 
 //////////////////////////////////////////////////////////////////////////
-bool FrameNode::loadFromXData(const Common::String &filename, XModel *model, XFileData *xobj) {
+bool FrameNode::loadFromXData(const char *filename, XModel *model, XFileData *xobj) {
 	_game->miniUpdate();
 
 	bool res = true;
@@ -175,7 +175,7 @@ bool FrameNode::loadFromXData(const Common::String &filename, XModel *model, XFi
 	return true;
 }
 
-bool FrameNode::mergeFromXData(const Common::String &filename, XModel *model, XFileData *xobj) {
+bool FrameNode::mergeFromXData(const char *filename, XModel *model, XFileData *xobj) {
 	bool res = true;
 
 	// get the type of the object
diff --git a/engines/wintermute/base/gfx/xframe_node.h b/engines/wintermute/base/gfx/xframe_node.h
index d0da55cb4f6..510a55f336b 100644
--- a/engines/wintermute/base/gfx/xframe_node.h
+++ b/engines/wintermute/base/gfx/xframe_node.h
@@ -53,8 +53,8 @@ public:
 	bool renderFlatShadowModel(uint32 shadowColor);
 	bool updateShadowVol(ShadowVolume *shadow, DXMatrix *modelMat, DXVector3 *light, float extrusionDepth);
 
-	bool loadFromXData(const Common::String &filename, XModel *model, XFileData *xobj);
-	bool mergeFromXData(const Common::String &filename, XModel *model, XFileData *xobj);
+	bool loadFromXData(const char *filename, XModel *model, XFileData *xobj);
+	bool mergeFromXData(const char *filename, XModel *model, XFileData *xobj);
 	bool findBones(FrameNode *rootFrame);
 	FrameNode *findFrame(const char *frameName);
 	DXMatrix *getCombinedMatrix();
diff --git a/engines/wintermute/base/gfx/xmesh.cpp b/engines/wintermute/base/gfx/xmesh.cpp
index 321862690f3..c2e8d40a391 100644
--- a/engines/wintermute/base/gfx/xmesh.cpp
+++ b/engines/wintermute/base/gfx/xmesh.cpp
@@ -67,7 +67,7 @@ XMesh::~XMesh() {
 }
 
 //////////////////////////////////////////////////////////////////////////
-bool XMesh::loadFromXData(const Common::String &filename, XFileData *xobj) {
+bool XMesh::loadFromXData(const char *filename, XFileData *xobj) {
 	// get name
 	if (!XModel::loadName(this, xobj)) {
 		BaseEngine::LOG(0, "Error loading mesh name");
diff --git a/engines/wintermute/base/gfx/xmesh.h b/engines/wintermute/base/gfx/xmesh.h
index 8bc455f47fa..73363841762 100644
--- a/engines/wintermute/base/gfx/xmesh.h
+++ b/engines/wintermute/base/gfx/xmesh.h
@@ -51,7 +51,7 @@ public:
 	XMesh(BaseGame *inGame);
 	virtual ~XMesh();
 
-	virtual bool loadFromXData(const Common::String &filename, XFileData *xobj);
+	virtual bool loadFromXData(const char *filename, XFileData *xobj);
 	bool findBones(FrameNode *rootFrame);
 	virtual bool update(FrameNode *parentFrame);
 	virtual bool render(XModel *model) = 0;
diff --git a/engines/wintermute/base/gfx/xmodel.cpp b/engines/wintermute/base/gfx/xmodel.cpp
index 602c9c43d89..5a8cbbe5f5f 100644
--- a/engines/wintermute/base/gfx/xmodel.cpp
+++ b/engines/wintermute/base/gfx/xmodel.cpp
@@ -114,7 +114,7 @@ void XModel::cleanup(bool complete) {
 }
 
 //////////////////////////////////////////////////////////////////////////
-bool XModel::loadFromFile(const Common::String &filename, XModel *parentModel) {
+bool XModel::loadFromFile(const char *filename, XModel *parentModel) {
 	cleanup(false);
 
 	XFile *xfile = new XFile(_game);
@@ -129,7 +129,7 @@ bool XModel::loadFromFile(const Common::String &filename, XModel *parentModel) {
 	bool res = xfile->openFile(filename);
 	if (!res) {
 		delete xfile;
-		BaseEngine::LOG(0, "Error loading X file: %s", filename.c_str());
+		BaseEngine::LOG(0, "Error loading X file: %s", filename);
 		return false;
 	}
 
@@ -145,13 +145,13 @@ bool XModel::loadFromFile(const Common::String &filename, XModel *parentModel) {
 
 		res = _rootFrame->loadFromXData(filename, this, &xobj);
 		if (!res) {
-			BaseEngine::LOG(0, "Error loading top level object from '%s'", filename.c_str());
+			BaseEngine::LOG(0, "Error loading top level object from '%s'", filename);
 			break;
 		}
 	}
 
 	if (!_rootFrame->hasChildren()) {
-		BaseEngine::LOG(0, "Error getting any top level objects in '%s'", filename.c_str());
+		BaseEngine::LOG(0, "Error getting any top level objects in '%s'", filename);
 		res = false;
 	}
 
@@ -164,7 +164,8 @@ bool XModel::loadFromFile(const Common::String &filename, XModel *parentModel) {
 		_channels[i] = new AnimationChannel(_game, this);
 	}
 
-	setFilename(filename.c_str());
+	if (_filename != filename)
+		BaseUtils::setString(&_filename, filename);
 
 	delete xfile;
 
@@ -172,7 +173,7 @@ bool XModel::loadFromFile(const Common::String &filename, XModel *parentModel) {
 }
 
 //////////////////////////////////////////////////////////////////////////
-bool XModel::mergeFromFile(const Common::String &filename) {
+bool XModel::mergeFromFile(const char *filename) {
 	if (!_rootFrame) {
 		BaseEngine::LOG(0, "Error: XModel::mergeFromFile called on an empty model");
 		return false;
@@ -200,7 +201,7 @@ bool XModel::mergeFromFile(const Common::String &filename) {
 
 		res = _rootFrame->mergeFromXData(filename, this, &xobj);
 		if (!res) {
-			BaseEngine::LOG(0, "Error loading top level object from '%s'", filename.c_str());
+			BaseEngine::LOG(0, "Error loading top level object from '%s'", filename);
 			break;
 		}
 	}
@@ -212,14 +213,15 @@ bool XModel::mergeFromFile(const Common::String &filename) {
 	// remember path for save/load purposes
 	bool found = false;
 	for (int32 i = 0; i < _mergedModels.getSize(); ++i) {
-		if (scumm_stricmp(_mergedModels[i], filename.c_str()) == 0) {
+		if (scumm_stricmp(_mergedModels[i], filename) == 0) {
 			found = true;
 			break;
 		}
 	}
 	if (!found) {
-		char *path = new char[filename.size() + 1];
-		Common::strcpy_s(path, filename.size() + 1, filename.c_str());
+		size_t filenameSize = strlen(filename) + 1;
+		char *path = new char[filenameSize];
+		Common::strcpy_s(path, filenameSize, filename);
 		_mergedModels.add(path);
 	}
 
@@ -229,7 +231,7 @@ bool XModel::mergeFromFile(const Common::String &filename) {
 }
 
 //////////////////////////////////////////////////////////////////////////
-bool XModel::loadAnimationSet(const Common::String &filename, XFileData *xobj) {
+bool XModel::loadAnimationSet(const char *filename, XFileData *xobj) {
 	bool res = true;
 
 	// create the animation set object
@@ -280,7 +282,7 @@ bool XModel::loadAnimationSet(const Common::String &filename, XFileData *xobj) {
 }
 
 //////////////////////////////////////////////////////////////////////////
-bool XModel::loadAnimation(const Common::String &filename, XFileData *xobj, AnimationSet *parentAnimSet) {
+bool XModel::loadAnimation(const char *filename, XFileData *xobj, AnimationSet *parentAnimSet) {
 	// if no parent anim set is specified, create one
 	bool newAnimSet = false;
 	if (parentAnimSet == nullptr) {
diff --git a/engines/wintermute/base/gfx/xmodel.h b/engines/wintermute/base/gfx/xmodel.h
index 76bf4c6bdca..a7fc701aed6 100644
--- a/engines/wintermute/base/gfx/xmodel.h
+++ b/engines/wintermute/base/gfx/xmodel.h
@@ -152,7 +152,7 @@ private:
 					effectFileName = nullptr;
 
 				persistMgr->transferCharPtr(TMEMBER(effectFileName));
-				delete[] effectFileName;
+				SAFE_DELETE_ARRAY(effectFileName);
 			} else {
 				persistMgr->transferCharPtr(TMEMBER(_effectFile));
 			}
@@ -189,11 +189,11 @@ public:
 
 	XModel *_parentModel{};
 
-	bool loadFromFile(const Common::String &filename, XModel *parentModel = nullptr);
-	bool mergeFromFile(const Common::String &filename);
+	bool loadFromFile(const char *filename, XModel *parentModel = nullptr);
+	bool mergeFromFile(const char *filename);
 
-	bool loadAnimationSet(const Common::String &filename, XFileData *xobj);
-	bool loadAnimation(const Common::String &filename, XFileData *xobj, AnimationSet *parentAnimSet = nullptr);
+	bool loadAnimationSet(const char *filename, XFileData *xobj);
+	bool loadAnimation(const char *filename, XFileData *xobj, AnimationSet *parentAnimSet = nullptr);
 
 	bool update() override;
 	bool render();




More information about the Scummvm-git-logs mailing list