[Scummvm-git-logs] scummvm master -> e90379f9f623b87ae3f3ccea3509cc80b8a6109d
aquadran
noreply at scummvm.org
Thu Oct 17 13:06:56 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:
e90379f9f6 WINTERMUTE: Get rid project() function from renderer
Commit: e90379f9f623b87ae3f3ccea3509cc80b8a6109d
https://github.com/scummvm/scummvm/commit/e90379f9f623b87ae3f3ccea3509cc80b8a6109d
Author: PaweÅ KoÅodziejski (aquadran at gmail.com)
Date: 2024-10-17T15:06:50+02:00
Commit Message:
WINTERMUTE: Get rid project() function from renderer
Changed paths:
engines/wintermute/base/gfx/base_renderer3d.cpp
engines/wintermute/base/gfx/base_renderer3d.h
engines/wintermute/base/gfx/xmodel.cpp
engines/wintermute/base/gfx/xmodel.h
diff --git a/engines/wintermute/base/gfx/base_renderer3d.cpp b/engines/wintermute/base/gfx/base_renderer3d.cpp
index 32c558d586e..3f9fbacaa49 100644
--- a/engines/wintermute/base/gfx/base_renderer3d.cpp
+++ b/engines/wintermute/base/gfx/base_renderer3d.cpp
@@ -87,18 +87,6 @@ bool BaseRenderer3D::getProjectionParams(float *resWidth, float *resHeight, floa
return true;
}
-void BaseRenderer3D::project(const Math::Matrix4 &worldMatrix, const Math::Vector3d &point, int32 &x, int32 &y) {
- Math::Matrix4 tmp = worldMatrix;
- tmp.transpose();
- Math::Vector3d windowCoords;
- Math::Matrix4 modelMatrix = tmp * _viewMatrix;
- int viewport[4] = { _viewportRect.left, _height - _viewportRect.bottom, _viewportRect.width(), _viewportRect.height()};
- Math::gluMathProject(point, modelMatrix.getData(), _projectionMatrix.getData(), viewport, windowCoords);
- x = windowCoords.x();
- // The Wintermute script code will expect a Direct3D viewport
- y = viewport[3] - windowCoords.y();
-}
-
bool BaseRenderer3D::setAmbientLightColor(uint32 color) {
_ambientLightColor = color;
_ambientLightOverride = true;
diff --git a/engines/wintermute/base/gfx/base_renderer3d.h b/engines/wintermute/base/gfx/base_renderer3d.h
index 11ea32b801e..80fdada9e80 100644
--- a/engines/wintermute/base/gfx/base_renderer3d.h
+++ b/engines/wintermute/base/gfx/base_renderer3d.h
@@ -145,8 +145,6 @@ public:
transform = _projectionMatrix;
}
- void project(const Math::Matrix4 &worldMatrix, const Math::Vector3d &point, int32 &x, int32 &y);
-
Camera3D *_camera;
virtual Mesh3DS *createMesh3DS() = 0;
diff --git a/engines/wintermute/base/gfx/xmodel.cpp b/engines/wintermute/base/gfx/xmodel.cpp
index 55a8e328549..da53429900a 100644
--- a/engines/wintermute/base/gfx/xmodel.cpp
+++ b/engines/wintermute/base/gfx/xmodel.cpp
@@ -600,11 +600,15 @@ void XModel::updateBoundingRect() {
_boundingRect.left = _boundingRect.top = INT_MAX_VALUE;
_boundingRect.right = _boundingRect.bottom = INT_MIN_VALUE;
- Math::Matrix4 viewMat, projMat, worldMat;
- Math::Vector3d vec2d(0, 0, 0);
- _gameRef->_renderer3D->getViewTransform(viewMat);
- _gameRef->_renderer3D->getProjectionTransform(projMat);
- _gameRef->_renderer3D->getWorldTransform(worldMat);
+ Math::Matrix4 view, proj, world;
+ DXVector3 vec2d(0, 0, 0);
+ _gameRef->_renderer3D->getViewTransform(view);
+ _gameRef->_renderer3D->getProjectionTransform(proj);
+ _gameRef->_renderer3D->getWorldTransform(world);
+ world.transpose();
+ DXMatrix viewMat = DXMatrix(view.getData());
+ DXMatrix projMat = DXMatrix(proj.getData());
+ DXMatrix worldMat = DXMatrix(world.getData());
_drawingViewport = _gameRef->_renderer3D->getViewPort();
@@ -615,32 +619,31 @@ void XModel::updateBoundingRect() {
float z1 = _BBoxStart.z();
float z2 = _BBoxEnd.z();
- int32 screenX = 0;
- int32 screenY = 0;
-
- _gameRef->_renderer3D->project(_lastWorldMat, Math::Vector3d(x1, y1, z1), screenX, screenY);
- updateRect(&_boundingRect, Math::Vector3d(screenX, screenY, 0));
-
- _gameRef->_renderer3D->project(_lastWorldMat, Math::Vector3d(x1, y1, z2), screenX, screenY);
- updateRect(&_boundingRect, Math::Vector3d(screenX, screenY, 0));
-
- _gameRef->_renderer3D->project(_lastWorldMat, Math::Vector3d(x1, y2, z1), screenX, screenY);
- updateRect(&_boundingRect, Math::Vector3d(screenX, screenY, 0));
-
- _gameRef->_renderer3D->project(_lastWorldMat, Math::Vector3d(x1, y2, z2), screenX, screenY);
- updateRect(&_boundingRect, Math::Vector3d(screenX, screenY, 0));
-
- _gameRef->_renderer3D->project(_lastWorldMat, Math::Vector3d(x2, y1, z1), screenX, screenY);
- updateRect(&_boundingRect, Math::Vector3d(screenX, screenY, 0));
-
- _gameRef->_renderer3D->project(_lastWorldMat, Math::Vector3d(x2, y1, z2), screenX, screenY);
- updateRect(&_boundingRect, Math::Vector3d(screenX, screenY, 0));
-
- _gameRef->_renderer3D->project(_lastWorldMat, Math::Vector3d(x2, y2, z1), screenX, screenY);
- updateRect(&_boundingRect, Math::Vector3d(screenX, screenY, 0));
-
- _gameRef->_renderer3D->project(_lastWorldMat, Math::Vector3d(x2, y2, z2), screenX, screenY);
- updateRect(&_boundingRect, Math::Vector3d(screenX, screenY, 0));
+ DXVector3 v111(x1 ,y1, z1);
+ DXVec3Project(&vec2d, &v111, &_drawingViewport, &projMat, &viewMat, &worldMat);
+ updateRect(&_boundingRect, &vec2d);
+ DXVector3 v211(x2, y1, z1);
+ DXVec3Project(&vec2d, &v211, &_drawingViewport, &projMat, &viewMat, &worldMat);
+ updateRect(&_boundingRect, &vec2d);
+ DXVector3 v112(x1, y1, z2);
+ DXVec3Project(&vec2d, &v112, &_drawingViewport, &projMat, &viewMat, &worldMat);
+ updateRect(&_boundingRect, &vec2d);
+ DXVector3 v212(x2, y1, z2);
+ DXVec3Project(&vec2d, &v212, &_drawingViewport, &projMat, &viewMat, &worldMat);
+ updateRect(&_boundingRect, &vec2d);
+
+ DXVector3 v121(x1, y2, z1);
+ DXVec3Project(&vec2d, &v121, &_drawingViewport, &projMat, &viewMat, &worldMat);
+ updateRect(&_boundingRect, &vec2d);
+ DXVector3 v221(x2, y2, z1);
+ DXVec3Project(&vec2d, &v221, &_drawingViewport, &projMat, &viewMat, &worldMat);
+ updateRect(&_boundingRect, &vec2d);
+ DXVector3 v122(x1, y2, z2);
+ DXVec3Project(&vec2d, &v122, &_drawingViewport, &projMat, &viewMat, &worldMat);
+ updateRect(&_boundingRect, &vec2d);
+ DXVector3 v222(x2, y2, z2);
+ DXVec3Project(&vec2d, &v222, &_drawingViewport, &projMat, &viewMat, &worldMat);
+ updateRect(&_boundingRect, &vec2d);
_boundingRect.left -= _gameRef->_renderer3D->_drawOffsetX;
_boundingRect.right -= _gameRef->_renderer3D->_drawOffsetX;
@@ -649,11 +652,11 @@ void XModel::updateBoundingRect() {
}
//////////////////////////////////////////////////////////////////////////
-void XModel::updateRect(Rect32 *rc, Math::Vector3d vec) {
- rc->left = MIN(rc->left, (int32)vec.x());
- rc->right = MAX(rc->right, (int32)vec.x());
- rc->top = MIN(rc->top, (int32)vec.y());
- rc->bottom = MAX(rc->bottom, (int32)vec.y());
+void XModel::updateRect(Rect32 *rc, DXVector3 *vec) {
+ rc->left = MIN(rc->left, (int32)vec->_x);
+ rc->right = MAX(rc->right, (int32)vec->_x);
+ rc->top = MIN(rc->top, (int32)vec->_y);
+ rc->bottom = MAX(rc->bottom, (int32)vec->_y);
}
//////////////////////////////////////////////////////////////////////////
diff --git a/engines/wintermute/base/gfx/xmodel.h b/engines/wintermute/base/gfx/xmodel.h
index 46f84aef45f..1bd2726af94 100644
--- a/engines/wintermute/base/gfx/xmodel.h
+++ b/engines/wintermute/base/gfx/xmodel.h
@@ -176,7 +176,7 @@ private:
bool findBones(bool animOnly = false, XModel *parentModel = nullptr);
void updateBoundingRect();
- void static inline updateRect(Rect32 *rc, Math::Vector3d vec);
+ void static inline updateRect(Rect32 *rc, DXVector3 *vec);
Rect32 _drawingViewport;
Math::Matrix4 _lastWorldMat;
Math::Matrix4 _lastViewMat;
More information about the Scummvm-git-logs
mailing list