[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