[Scummvm-git-logs] scummvm master -> 4459d10de03ece7f2ad8642f047eb691a1d0cf37

aquadran noreply at scummvm.org
Thu Oct 17 17:32:24 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:
4459d10de0 WINTERMUTE: Update BoundingBox() to use DX math


Commit: 4459d10de03ece7f2ad8642f047eb691a1d0cf37
    https://github.com/scummvm/scummvm/commit/4459d10de03ece7f2ad8642f047eb691a1d0cf37
Author: Paweł Kołodziejski (aquadran at gmail.com)
Date: 2024-10-17T19:32:18+02:00

Commit Message:
WINTERMUTE: Update BoundingBox() to use DX math

Changed paths:
    engines/wintermute/base/base_persistence_manager.cpp
    engines/wintermute/base/base_persistence_manager.h
    engines/wintermute/base/gfx/xframe_node.cpp
    engines/wintermute/base/gfx/xframe_node.h
    engines/wintermute/base/gfx/xmodel.cpp
    engines/wintermute/base/gfx/xmodel.h


diff --git a/engines/wintermute/base/base_persistence_manager.cpp b/engines/wintermute/base/base_persistence_manager.cpp
index 7355de42f09..49301e4ae98 100644
--- a/engines/wintermute/base/base_persistence_manager.cpp
+++ b/engines/wintermute/base/base_persistence_manager.cpp
@@ -849,6 +849,29 @@ bool BasePersistenceManager::transferVector3d(const char *name, Math::Vector3d *
 		return STATUS_OK;
 	}
 }
+bool BasePersistenceManager::transferVector3d(const char *name, DXVector3 *val) {
+	if (_saving) {
+		putFloat(val->_x);
+		putFloat(val->_y);
+		putFloat(val->_z);
+
+		if (_saveStream->err()) {
+			return STATUS_FAILED;
+		}
+
+		return STATUS_OK;
+	} else {
+		val->_x = getFloat();
+		val->_y = getFloat();
+		val->_z = getFloat();
+
+		if (_loadStream->err()) {
+			return STATUS_FAILED;
+		}
+
+		return STATUS_OK;
+	}
+}
 
 //////////////////////////////////////////////////////////////////////////
 // Matrix4
@@ -879,6 +902,29 @@ bool BasePersistenceManager::transferMatrix4(const char *name, Math::Matrix4 *va
 		return STATUS_OK;
 	}
 }
+bool BasePersistenceManager::transferMatrix4(const char *name, DXMatrix *val) {
+	if (_saving) {
+		for (int i = 0; i < 16; ++i) {
+			putFloat(val->_m4x4[i]);
+		}
+
+		if (_saveStream->err()) {
+			return STATUS_FAILED;
+		}
+
+		return STATUS_OK;
+	} else {
+		for (int i = 0; i < 16; ++i) {
+			val->_m4x4[i] = getFloat();
+		}
+
+		if (_loadStream->err()) {
+			return STATUS_FAILED;
+		}
+
+		return STATUS_OK;
+	}
+}
 
 bool BasePersistenceManager::transferAngle(const char *name, float *val) {
 	if (_saving) {
diff --git a/engines/wintermute/base/base_persistence_manager.h b/engines/wintermute/base/base_persistence_manager.h
index 351d482497c..19178ec3195 100644
--- a/engines/wintermute/base/base_persistence_manager.h
+++ b/engines/wintermute/base/base_persistence_manager.h
@@ -31,6 +31,7 @@
 
 #include "engines/wintermute/dctypes.h"
 #include "engines/wintermute/math/rect32.h"
+#include "engines/wintermute/base/gfx/xmath.h"
 #include "engines/savestate.h"
 #include "common/stream.h"
 #include "common/str.h"
@@ -98,8 +99,10 @@ public:
 	bool transferString(const char *name, Common::String *val);
 	bool transferVector2(const char *name, Vector2 *val);
 #ifdef ENABLE_WME3D
+	bool transferVector3d(const char *name, DXVector3 *val);
 	bool transferVector3d(const char *name, Math::Vector3d *val);
 	bool transferMatrix4(const char *name, Math::Matrix4 *val);
+	bool transferMatrix4(const char *name, DXMatrix *val);
 	bool transferAngle(const char *name, float *val);
 #endif
 	BasePersistenceManager(const Common::String &savePrefix = "", bool deleteSingleton = false);
diff --git a/engines/wintermute/base/gfx/xframe_node.cpp b/engines/wintermute/base/gfx/xframe_node.cpp
index 0c3b2495687..dcc3a3a3e2d 100644
--- a/engines/wintermute/base/gfx/xframe_node.cpp
+++ b/engines/wintermute/base/gfx/xframe_node.cpp
@@ -30,6 +30,7 @@
 #include "engines/wintermute/base/gfx/base_renderer3d.h"
 #include "engines/wintermute/base/gfx/xmaterial.h"
 #include "engines/wintermute/base/gfx/xframe_node.h"
+#include "engines/wintermute/base/gfx/xmath.h"
 #include "engines/wintermute/base/gfx/xmodel.h"
 #include "engines/wintermute/base/gfx/xfile_loader.h"
 #include "engines/wintermute/dcgf.h"
@@ -413,15 +414,15 @@ bool FrameNode::pickPoly(Math::Vector3d *pickRayOrig, Math::Vector3d *pickRayDir
 }
 
 //////////////////////////////////////////////////////////////////////////
-bool FrameNode::getBoundingBox(Math::Vector3d *boxStart, Math::Vector3d *boxEnd) {
+bool FrameNode::getBoundingBox(DXVector3 *boxStart, DXVector3 *boxEnd) {
 	for (uint32 i = 0; i < _meshes.size(); i++) {
-		boxStart->x() = MIN(boxStart->x(), _meshes[i]->_BBoxStart._x);
-		boxStart->y() = MIN(boxStart->y(), _meshes[i]->_BBoxStart._y);
-		boxStart->z() = MIN(boxStart->z(), _meshes[i]->_BBoxStart._z);
+		boxStart->_x = MIN(boxStart->_x, _meshes[i]->_BBoxStart._x);
+		boxStart->_y = MIN(boxStart->_y, _meshes[i]->_BBoxStart._y);
+		boxStart->_z = MIN(boxStart->_z, _meshes[i]->_BBoxStart._z);
 
-		boxEnd->x() = MAX(boxEnd->x(), _meshes[i]->_BBoxEnd._x);
-		boxEnd->y() = MAX(boxEnd->y(), _meshes[i]->_BBoxEnd._y);
-		boxEnd->z() = MAX(boxEnd->z(), _meshes[i]->_BBoxEnd._z);
+		boxEnd->_x = MAX(boxEnd->_x, _meshes[i]->_BBoxEnd._x);
+		boxEnd->_y = MAX(boxEnd->_y, _meshes[i]->_BBoxEnd._y);
+		boxEnd->_z = MAX(boxEnd->_z, _meshes[i]->_BBoxEnd._z);
 	}
 
 	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 6d648f73d88..ae6062c642f 100644
--- a/engines/wintermute/base/gfx/xframe_node.h
+++ b/engines/wintermute/base/gfx/xframe_node.h
@@ -63,7 +63,7 @@ public:
 	Math::Matrix4 *getOriginalMatrix();
 	void setTransformationMatrix(Math::Matrix4 *mat);
 	bool pickPoly(Math::Vector3d *pickRayOrig, Math::Vector3d *pickRayDir);
-	bool getBoundingBox(Math::Vector3d *boxStart, Math::Vector3d *boxEnd);
+	bool getBoundingBox(DXVector3 *boxStart, DXVector3 *boxEnd);
 
 	void setTransformation(int slot, Math::Vector3d pos, Math::Vector3d scale, Math::Quaternion rot, float lerpValue);
 
diff --git a/engines/wintermute/base/gfx/xmodel.cpp b/engines/wintermute/base/gfx/xmodel.cpp
index 158816d4ca9..42d5120ce0f 100644
--- a/engines/wintermute/base/gfx/xmodel.cpp
+++ b/engines/wintermute/base/gfx/xmodel.cpp
@@ -62,7 +62,7 @@ XModel::XModel(BaseGame *inGame, BaseObject *owner) : BaseObject(inGame) {
 	_lastProjMat.setToIdentity();
 	_lastOffsetX = _lastOffsetY = 0;
 
-	_BBoxStart = _BBoxEnd = Math::Vector3d(0.0f, 0.0f, 0.0f);
+	_BBoxStart = _BBoxEnd = DXVector3(0.0f, 0.0f, 0.0f);
 	_boundingRect.setEmpty();
 
 	for (int i = 0; i < X_NUM_ANIMATION_CHANNELS; i++) {
@@ -602,7 +602,7 @@ bool XModel::isTransparentAt(int x, int y) {
 
 //////////////////////////////////////////////////////////////////////////
 void XModel::updateBoundingRect() {
-	_BBoxStart = _BBoxEnd = Math::Vector3d(0, 0, 0);
+	_BBoxStart = _BBoxEnd = DXVector3(0, 0, 0);
 
 	if (_rootFrame) {
 		_rootFrame->getBoundingBox(&_BBoxStart, &_BBoxEnd);
@@ -623,12 +623,12 @@ void XModel::updateBoundingRect() {
 
 	_drawingViewport = _gameRef->_renderer3D->getViewPort();
 
-	float x1 = _BBoxStart.x();
-	float x2 = _BBoxEnd.x();
-	float y1 = _BBoxStart.y();
-	float y2 = _BBoxEnd.y();
-	float z1 = _BBoxStart.z();
-	float z2 = _BBoxEnd.z();
+	float x1 = _BBoxStart._x;
+	float x2 = _BBoxEnd._x;
+	float y1 = _BBoxStart._y;
+	float y2 = _BBoxEnd._y;
+	float z1 = _BBoxStart._z;
+	float z2 = _BBoxEnd._z;
 
 	DXVector3 v111(x1 ,y1, z1);
 	DXVec3Project(&vec2d, &v111, &_drawingViewport, &projMat, &viewMat, &worldMat);
diff --git a/engines/wintermute/base/gfx/xmodel.h b/engines/wintermute/base/gfx/xmodel.h
index 1bd2726af94..7d51f5fdd28 100644
--- a/engines/wintermute/base/gfx/xmodel.h
+++ b/engines/wintermute/base/gfx/xmodel.h
@@ -30,6 +30,7 @@
 
 #include "engines/wintermute/base/base_object.h"
 #include "engines/wintermute/base/base_sprite.h"
+#include "engines/wintermute/base/gfx/xmath.h"
 #include "engines/wintermute/coll_templ.h"
 #include "engines/wintermute/math/rect32.h"
 #include "engines/wintermute/video/video_theora_player.h"
@@ -184,8 +185,8 @@ private:
 	int32 _lastOffsetX;
 	int32 _lastOffsetY;
 
-	Math::Vector3d _BBoxStart;
-	Math::Vector3d _BBoxEnd;
+	DXVector3 _BBoxStart;
+	DXVector3 _BBoxEnd;
 
 protected:
 	BaseArray<const char*> _mergedModels;




More information about the Scummvm-git-logs mailing list