[Scummvm-git-logs] scummvm master -> cd716c9118e6ec1813aaa658cbf7d482805e7118
aquadran
noreply at scummvm.org
Sat Oct 26 21:23:34 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:
cd716c9118 WINTERMUTE: Synced viewport code with original
Commit: cd716c9118e6ec1813aaa658cbf7d482805e7118
https://github.com/scummvm/scummvm/commit/cd716c9118e6ec1813aaa658cbf7d482805e7118
Author: PaweÅ KoÅodziejski (aquadran at gmail.com)
Date: 2024-10-26T23:23:29+02:00
Commit Message:
WINTERMUTE: Synced viewport code with original
Changed paths:
engines/wintermute/ad/ad_object_3d.cpp
engines/wintermute/ad/ad_scene_geometry.cpp
engines/wintermute/ad/ad_scene_geometry.h
engines/wintermute/base/gfx/base_renderer.h
engines/wintermute/base/gfx/base_renderer3d.cpp
engines/wintermute/base/gfx/base_renderer3d.h
engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
engines/wintermute/base/gfx/opengl/base_render_opengl3d.h
engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.h
engines/wintermute/base/gfx/opengl/shadow_volume_opengl.cpp
engines/wintermute/base/gfx/opengl/shadow_volume_opengl_shader.cpp
engines/wintermute/base/gfx/osystem/base_render_osystem.cpp
engines/wintermute/base/gfx/osystem/base_render_osystem.h
engines/wintermute/base/gfx/xmath.cpp
engines/wintermute/base/gfx/xmath.h
engines/wintermute/base/gfx/xmodel.cpp
engines/wintermute/base/gfx/xmodel.h
diff --git a/engines/wintermute/ad/ad_object_3d.cpp b/engines/wintermute/ad/ad_object_3d.cpp
index 984abaecf85..034c65c94bd 100644
--- a/engines/wintermute/ad/ad_object_3d.cpp
+++ b/engines/wintermute/ad/ad_object_3d.cpp
@@ -133,7 +133,7 @@ bool AdObject3D::convert3DTo2D(DXMatrix *worldMat, int32 *posX, int32 *posY) {
_gameRef->_renderer3D->getViewTransform(&viewMat);
_gameRef->_renderer3D->getProjectionTransform(&projMat);
- Rect32 viewport = _gameRef->_renderer3D->getViewPort();
+ DXViewport viewport = _gameRef->_renderer3D->getViewPort();
DXVec3Project(&vec2d, &origin, &viewport, &projMat, &viewMat, worldMat);
diff --git a/engines/wintermute/ad/ad_scene_geometry.cpp b/engines/wintermute/ad/ad_scene_geometry.cpp
index 5d4fb9dcbc6..bb1ef148051 100644
--- a/engines/wintermute/ad/ad_scene_geometry.cpp
+++ b/engines/wintermute/ad/ad_scene_geometry.cpp
@@ -73,7 +73,7 @@ AdSceneGeometry::AdSceneGeometry(BaseGame *gameRef) : BaseObject(gameRef) {
_PFSource = _PFTarget = _PFAlternateTarget = DXVector3(0, 0, 0);
_PFAlternateDist = FLT_MAX;
- _drawingViewport.setRect(0, 0, 0, 0);
+ memset(&_drawingViewport, 0, sizeof(DXViewport));
DXMatrixIdentity(&_lastWorldMat);
DXMatrixIdentity(&_lastViewMat);
@@ -685,10 +685,10 @@ bool AdSceneGeometry::convert2Dto3D(int x, int y, DXVector3 *pos) {
_gameRef->_renderer3D->getProjectionParams(&resWidth, &resHeight, &layerWidth, &layerHeight, &modWidth, &modHeight, &customViewport);
// modify coordinates according to viewport settings
- int mleft = _drawingViewport.left;
- int mright = resWidth - _drawingViewport.width() - _drawingViewport.left;
- int mtop = _drawingViewport.top;
- int mbottom = resHeight - _drawingViewport.height() - _drawingViewport.top;
+ int mleft = _drawingViewport._x;
+ int mright = resWidth - _drawingViewport._width - _drawingViewport._x;
+ int mtop = _drawingViewport._y;
+ int mbottom = resHeight - _drawingViewport._height - _drawingViewport._y;
x -= (mleft + mright) / 2 + modWidth;
y -= (mtop + mbottom) / 2 + modHeight;
@@ -699,8 +699,8 @@ bool AdSceneGeometry::convert2Dto3D(int x, int y, DXVector3 *pos) {
// Compute the vector of the pick ray in screen space
DXVector3 vec;
- vec._x = (((2.0f * x) / _drawingViewport.width()) - 1) / _lastProjMat.matrix._11;
- vec._y = -(((2.0f * y) / _drawingViewport.height()) - 1) / _lastProjMat.matrix._22;
+ vec._x = (((2.0f * x) / _drawingViewport._width) - 1) / _lastProjMat.matrix._11;
+ vec._y = -(((2.0f * y) / _drawingViewport._height) - 1) / _lastProjMat.matrix._22;
vec._z = 1.0f;
// Get the inverse view matrix
diff --git a/engines/wintermute/ad/ad_scene_geometry.h b/engines/wintermute/ad/ad_scene_geometry.h
index bf6f05b531c..f315ed4ca06 100644
--- a/engines/wintermute/ad/ad_scene_geometry.h
+++ b/engines/wintermute/ad/ad_scene_geometry.h
@@ -67,7 +67,7 @@ public:
DXMatrix _lastProjMat;
int _lastOffsetX;
int _lastOffsetY;
- Rect32 _drawingViewport;
+ DXViewport _drawingViewport;
int _lastScrollX;
int _lastScrollY;
diff --git a/engines/wintermute/base/gfx/base_renderer.h b/engines/wintermute/base/gfx/base_renderer.h
index acc35637c43..e899eaa998e 100644
--- a/engines/wintermute/base/gfx/base_renderer.h
+++ b/engines/wintermute/base/gfx/base_renderer.h
@@ -67,7 +67,6 @@ public:
virtual bool saveScreenShot(const Common::String &filename, int sizeX = 0, int sizeY = 0);
virtual bool setViewport(int left, int top, int right, int bottom);
virtual bool setViewport(Rect32 *rect);
- virtual Rect32 getViewPort() = 0;
virtual bool setScreenViewport();
virtual void setWindowed(bool windowed) = 0;
diff --git a/engines/wintermute/base/gfx/base_renderer3d.cpp b/engines/wintermute/base/gfx/base_renderer3d.cpp
index 3b9b60a1c22..dbe4c1a6735 100644
--- a/engines/wintermute/base/gfx/base_renderer3d.cpp
+++ b/engines/wintermute/base/gfx/base_renderer3d.cpp
@@ -116,8 +116,8 @@ bool BaseRenderer3D::setDefaultAmbientLightColor() {
return true;
}
-Rect32 BaseRenderer3D::getViewPort() {
- return _viewportRect;
+DXViewport BaseRenderer3D::getViewPort() {
+ return _viewport;
}
Graphics::PixelFormat BaseRenderer3D::getPixelFormat() const {
diff --git a/engines/wintermute/base/gfx/base_renderer3d.h b/engines/wintermute/base/gfx/base_renderer3d.h
index dacec961e17..e5c5466729a 100644
--- a/engines/wintermute/base/gfx/base_renderer3d.h
+++ b/engines/wintermute/base/gfx/base_renderer3d.h
@@ -98,6 +98,7 @@ public:
// NOT declared in sub class: virtual HRESULT Setup3DCustom(D3DXMATRIX* ViewMat, D3DXMATRIX* ProjMat);
// declared in sub class: virtual HRESULT Setup2D(bool Force=false);
// declared in sub class: virtual HRESULT SetupLines();
+ Camera3D *_camera;
// declared in sub class: HRESULT ResetDevice();
void initLoop() override;
// declared in sub class: virtual HRESULT Fill(BYTE r, BYTE g, BYTE b, RECT* rect=NULL);
@@ -124,7 +125,7 @@ public:
virtual void enableCulling() = 0;
virtual void disableCulling() = 0;
- Rect32 getViewPort() override;
+ DXViewport getViewPort();
Graphics::PixelFormat getPixelFormat() const override;
@@ -146,8 +147,6 @@ public:
*transform = _projectionMatrix;
}
- Camera3D *_camera;
-
virtual Mesh3DS *createMesh3DS() = 0;
virtual XMesh *createXMesh() = 0;
virtual ShadowVolume *createShadowVolume() = 0;
@@ -159,13 +158,15 @@ public:
Math::Matrix3 build2dTransformation(const Vector2 ¢er, float angle);
+ virtual bool setViewport3D(DXViewport *viewport) = 0;
+
// ScummVM specific methods <--
protected:
DXMatrix _worldMatrix;
DXMatrix _viewMatrix;
DXMatrix _projectionMatrix;
- Rect32 _viewport;
+ DXViewport _viewport;
float _fov;
float _nearClipPlane;
float _farClipPlane;
diff --git a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
index 10ba76fc9df..60032429148 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
@@ -299,7 +299,21 @@ bool BaseRenderOpenGL3D::fill(byte r, byte g, byte b, Common::Rect *rect) {
bool BaseRenderOpenGL3D::setViewport(int left, int top, int right, int bottom) {
_viewportRect.setRect(left, top, right, bottom);
+ _viewport._x = left;
+ _viewport._y = top;
+ _viewport._width = right - left;
+ _viewport._height = bottom - top;
+ _viewport._minZ = 0.0f;
+ _viewport._maxZ = 1.0f;
glViewport(left, _height - bottom, right - left, bottom - top);
+ glDepthRange(_viewport._minZ, _viewport._maxZ);
+ return true;
+}
+
+bool BaseRenderOpenGL3D::setViewport3D(DXViewport *viewport) {
+ _viewport = *viewport;
+ glViewport(_viewport._x, _height - _viewport._height, _viewport._width, _viewport._height);
+ glDepthRange(_viewport._minZ, _viewport._maxZ);
return true;
}
diff --git a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.h b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.h
index 806c3c326e5..99ca434817f 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.h
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.h
@@ -136,6 +136,8 @@ public:
XMesh *createXMesh() override;
ShadowVolume *createShadowVolume() override;
+ bool setViewport3D(DXViewport *viewport) override;
+
private:
SimpleShadowVertex _simpleShadow[4];
Common::Array<DXVector4> _lightPositions;
diff --git a/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp b/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
index f9908a8870b..d3cd3917b83 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
@@ -410,7 +410,21 @@ bool BaseRenderOpenGL3DShader::fill(byte r, byte g, byte b, Common::Rect *rect)
bool BaseRenderOpenGL3DShader::setViewport(int left, int top, int right, int bottom) {
_viewportRect.setRect(left, top, right, bottom);
+ _viewport._x = left;
+ _viewport._y = top;
+ _viewport._width = right - left;
+ _viewport._height = bottom - top;
+ _viewport._minZ = 0.0f;
+ _viewport._maxZ = 1.0f;
glViewport(left, _height - bottom, right - left, bottom - top);
+ glDepthRange(_viewport._minZ, _viewport._maxZ);
+ return true;
+}
+
+bool BaseRenderOpenGL3DShader::setViewport3D(DXViewport *viewport) {
+ _viewport = *viewport;
+ glViewport(_viewport._x, _height - _viewport._height, _viewport._width, _viewport._height);
+ glDepthRange(_viewport._minZ, _viewport._maxZ);
return true;
}
diff --git a/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.h b/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.h
index bfbc2b299c3..443abfb84e2 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.h
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.h
@@ -125,6 +125,8 @@ public:
XMesh *createXMesh() override;
ShadowVolume *createShadowVolume() override;
+ bool setViewport3D(DXViewport *viewport) override;
+
private:
DXMatrix _projectionMatrix2d;
diff --git a/engines/wintermute/base/gfx/opengl/shadow_volume_opengl.cpp b/engines/wintermute/base/gfx/opengl/shadow_volume_opengl.cpp
index 0fc098d415d..97796b166b3 100644
--- a/engines/wintermute/base/gfx/opengl/shadow_volume_opengl.cpp
+++ b/engines/wintermute/base/gfx/opengl/shadow_volume_opengl.cpp
@@ -151,22 +151,22 @@ bool ShadowVolumeOpenGL::renderToScene() {
//////////////////////////////////////////////////////////////////////////
bool ShadowVolumeOpenGL::initMask() {
- Rect32 viewport = _gameRef->_renderer->getViewPort();
+ DXViewport viewport = _gameRef->_renderer3D->getViewPort();
- _shadowMask[0].x = viewport.left;
- _shadowMask[0].y = viewport.bottom;
+ _shadowMask[0].x = viewport._x;
+ _shadowMask[0].y = viewport._height;
_shadowMask[0].z = 0.0f;
- _shadowMask[1].x = viewport.left;
- _shadowMask[1].y = viewport.top;
+ _shadowMask[1].x = viewport._x;
+ _shadowMask[1].y = viewport._y;
_shadowMask[1].z = 0.0f;
- _shadowMask[2].x = viewport.right;
- _shadowMask[2].y = viewport.bottom;
+ _shadowMask[2].x = viewport._width;
+ _shadowMask[2].y = viewport._height;
_shadowMask[2].z = 0.0f;
- _shadowMask[3].x = viewport.right;
- _shadowMask[3].y = viewport.top;
+ _shadowMask[3].x = viewport._width;
+ _shadowMask[3].y = viewport._y;
_shadowMask[3].z = 0.0f;
byte a = RGBCOLGetA(_color);
diff --git a/engines/wintermute/base/gfx/opengl/shadow_volume_opengl_shader.cpp b/engines/wintermute/base/gfx/opengl/shadow_volume_opengl_shader.cpp
index dd3a590e90d..65db86230dd 100644
--- a/engines/wintermute/base/gfx/opengl/shadow_volume_opengl_shader.cpp
+++ b/engines/wintermute/base/gfx/opengl/shadow_volume_opengl_shader.cpp
@@ -46,19 +46,19 @@ struct ShadowVertexShader {
ShadowVolumeOpenGLShader::ShadowVolumeOpenGLShader(BaseGame *inGame, OpenGL::Shader *volumeShader, OpenGL::Shader *maskShader)
: ShadowVolume(inGame), _color(0x7f000000), _volumeShader(volumeShader), _maskShader(maskShader) {
ShadowVertexShader shadowMask[4];
- Rect32 viewport = _gameRef->_renderer->getViewPort();
+ DXViewport viewport = _gameRef->_renderer3D->getViewPort();
- shadowMask[0].x = viewport.left;
- shadowMask[0].y = viewport.bottom;
+ shadowMask[0].x = viewport._x;
+ shadowMask[0].y = viewport._height;
- shadowMask[1].x = viewport.left;
- shadowMask[1].y = viewport.top;
+ shadowMask[1].x = viewport._x;
+ shadowMask[1].y = viewport._y;
- shadowMask[2].x = viewport.right;
- shadowMask[2].y = viewport.bottom;
+ shadowMask[2].x = viewport._width;
+ shadowMask[2].y = viewport._height;
- shadowMask[3].x = viewport.right;
- shadowMask[3].y = viewport.top;
+ shadowMask[3].x = viewport._width;
+ shadowMask[3].y = viewport._y;
glGenBuffers(1, &_shadowMaskVertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, _shadowMaskVertexBuffer);
@@ -166,21 +166,21 @@ bool ShadowVolumeOpenGLShader::renderToScene() {
//////////////////////////////////////////////////////////////////////////
bool ShadowVolumeOpenGLShader::initMask() {
- Rect32 viewport = _gameRef->_renderer->getViewPort();
+ DXViewport viewport = _gameRef->_renderer3D->getViewPort();
ShadowVertexShader shadowMask[4];
- shadowMask[0].x = viewport.left;
- shadowMask[0].y = viewport.bottom;
+ shadowMask[0].x = viewport._x;
+ shadowMask[0].y = viewport._height;
- shadowMask[1].x = viewport.left;
- shadowMask[1].y = viewport.top;
+ shadowMask[1].x = viewport._x;
+ shadowMask[1].y = viewport._y;
- shadowMask[2].x = viewport.right;
- shadowMask[2].y = viewport.bottom;
+ shadowMask[2].x = viewport._width;
+ shadowMask[2].y = viewport._height;
- shadowMask[3].x = viewport.right;
- shadowMask[3].y = viewport.top;
+ shadowMask[3].x = viewport._width;
+ shadowMask[3].y = viewport._y;
glBindBuffer(GL_ARRAY_BUFFER, _shadowMaskVertexBuffer);
glBufferSubData(GL_ARRAY_BUFFER, 0, 4 * sizeof(ShadowVertexShader), shadowMask);
diff --git a/engines/wintermute/base/gfx/osystem/base_render_osystem.cpp b/engines/wintermute/base/gfx/osystem/base_render_osystem.cpp
index e14d757b391..1413f15fa30 100644
--- a/engines/wintermute/base/gfx/osystem/base_render_osystem.cpp
+++ b/engines/wintermute/base/gfx/osystem/base_render_osystem.cpp
@@ -536,15 +536,6 @@ bool BaseRenderOSystem::setViewport(int left, int top, int right, int bottom) {
return STATUS_OK;
}
-Rect32 BaseRenderOSystem::getViewPort() {
- Rect32 ret;
- ret.top = _renderRect.top;
- ret.bottom = _renderRect.bottom;
- ret.left = _renderRect.left;
- ret.right = _renderRect.right;
- return ret;
-}
-
//////////////////////////////////////////////////////////////////////////
void BaseRenderOSystem::modTargetRect(Common::Rect *rect) {
return;
diff --git a/engines/wintermute/base/gfx/osystem/base_render_osystem.h b/engines/wintermute/base/gfx/osystem/base_render_osystem.h
index 315151c36ca..6ab55d26a9d 100644
--- a/engines/wintermute/base/gfx/osystem/base_render_osystem.h
+++ b/engines/wintermute/base/gfx/osystem/base_render_osystem.h
@@ -98,7 +98,6 @@ public:
bool setViewport(int left, int top, int right, int bottom) override;
bool setViewport(Rect32 *rect) override { return BaseRenderer::setViewport(rect); }
- Rect32 getViewPort() override;
void modTargetRect(Common::Rect *rect);
void pointFromScreen(Point32 *point);
void pointToScreen(Point32 *point);
diff --git a/engines/wintermute/base/gfx/xmath.cpp b/engines/wintermute/base/gfx/xmath.cpp
index bdb2b5e097d..cb9f0d4bd04 100644
--- a/engines/wintermute/base/gfx/xmath.cpp
+++ b/engines/wintermute/base/gfx/xmath.cpp
@@ -540,7 +540,7 @@ DXMatrix *DXMatrixMultiply(DXMatrix *pout, const DXMatrix *pm1, const DXMatrix *
return pout;
}
-DXVector3 *DXVec3Project(DXVector3 *pout, const DXVector3 *pv, const Rect32 *pviewport,
+DXVector3 *DXVec3Project(DXVector3 *pout, const DXVector3 *pv, const DXViewport *pviewport,
const DXMatrix *pprojection, const DXMatrix *pview, const DXMatrix *pworld) {
DXMatrix m;
@@ -555,9 +555,9 @@ DXVector3 *DXVec3Project(DXVector3 *pout, const DXVector3 *pv, const Rect32 *pvi
DXVec3TransformCoord(pout, pv, &m);
if (pviewport) {
- pout->_x = pviewport->left + (1.0f + pout->_x) * pviewport->width() / 2.0f;
- pout->_y = pviewport->top + (1.0f - pout->_y) * pviewport->height() / 2.0f;
- pout->_z = (1.0f + pout->_z) / 2.0f;
+ pout->_x = pviewport->_x + (1.0f + pout->_x) * pviewport->_width / 2.0f;
+ pout->_y = pviewport->_y + (1.0f - pout->_y) * pviewport->_height / 2.0f;
+ pout->_z = pviewport->_minZ + pout->_z * (pviewport->_maxZ - pviewport->_minZ);
}
return pout;
}
diff --git a/engines/wintermute/base/gfx/xmath.h b/engines/wintermute/base/gfx/xmath.h
index c94c5ea5519..47bf12854ce 100644
--- a/engines/wintermute/base/gfx/xmath.h
+++ b/engines/wintermute/base/gfx/xmath.h
@@ -133,6 +133,15 @@ struct DXMatrix {
DXMatrix operator * (const DXMatrix &) const;
};
+struct DXViewport {
+ uint32 _x;
+ uint32 _y;
+ uint32 _width;
+ uint32 _height;
+ float _minZ;
+ float _maxZ;
+};
+
#if defined(SCUMMVM_USE_PRAGMA_PACK)
#pragma pack()
#endif
@@ -158,7 +167,7 @@ DXVector4 *DXVec3Transform(DXVector4 *pout, const DXVector3 *pv, const DXMatrix
DXVector3 *DXVec3TransformCoord(DXVector3 *pout, const DXVector3 *pv, const DXMatrix *pm);
DXVector3 *DXVec3TransformNormal(DXVector3 *pout, const DXVector3 *pv, const DXMatrix *pm);
DXMatrix *DXMatrixMultiply(DXMatrix *pout, const DXMatrix *pm1, const DXMatrix *pm2);
-DXVector3 *DXVec3Project(DXVector3 *pout, const DXVector3 *pv, const Rect32 *pviewport,
+DXVector3 *DXVec3Project(DXVector3 *pout, const DXVector3 *pv, const DXViewport *pviewport,
const DXMatrix *pprojection, const DXMatrix *pview, const DXMatrix *pworld);
DXMatrix *DXMatrixTranspose(DXMatrix *pout, const DXMatrix *pm);
diff --git a/engines/wintermute/base/gfx/xmodel.cpp b/engines/wintermute/base/gfx/xmodel.cpp
index 8371c93c5ae..be2a8429c27 100644
--- a/engines/wintermute/base/gfx/xmodel.cpp
+++ b/engines/wintermute/base/gfx/xmodel.cpp
@@ -56,7 +56,7 @@ XModel::XModel(BaseGame *inGame, BaseObject *owner) : BaseObject(inGame) {
_rootFrame = nullptr;
- _drawingViewport.setEmpty();
+ memset(&_drawingViewport, 0, sizeof(DXViewport));
DXMatrixIdentity(&_lastWorldMat);
DXMatrixIdentity(&_lastViewMat);
DXMatrixIdentity(&_lastProjMat);
@@ -557,8 +557,8 @@ bool XModel::isTransparentAt(int x, int y) {
bool customViewport;
_gameRef->_renderer3D->getProjectionParams(&resWidth, &resHeight, &layerWidth, &layerHeight, &modWidth, &modHeight, &customViewport);
- x -= _drawingViewport.left + modWidth;
- y -= _drawingViewport.top + modHeight;
+ x -= _drawingViewport._x + modWidth;
+ y -= _drawingViewport._y + modHeight;
if (customViewport) {
x += _gameRef->_renderer3D->_drawOffsetX;
@@ -570,8 +570,8 @@ bool XModel::isTransparentAt(int x, int y) {
// Compute the vector of the pick ray in screen space
DXVector3 vec;
- vec._x = (((2.0f * x) / (_drawingViewport.width())) - 1) / _lastProjMat.matrix._11;
- vec._y = -(((2.0f * y) / (_drawingViewport.height())) - 1) / _lastProjMat.matrix._22;
+ vec._x = (((2.0f * x) / (_drawingViewport._width)) - 1) / _lastProjMat.matrix._11;
+ vec._y = -(((2.0f * y) / (_drawingViewport._height)) - 1) / _lastProjMat.matrix._22;
vec._z = 1.0f;
// Get the inverse view matrix
@@ -890,7 +890,7 @@ bool XModel::persist(BasePersistenceManager *persistMgr) {
persistMgr->transferRect32(TMEMBER(_boundingRect));
if (!persistMgr->getIsSaving()) {
- _drawingViewport.setEmpty();
+ memset(&_drawingViewport, 0, sizeof(DXViewport));
}
persistMgr->transferSint32(TMEMBER(_lastOffsetX));
diff --git a/engines/wintermute/base/gfx/xmodel.h b/engines/wintermute/base/gfx/xmodel.h
index 908509aae5c..bfc6031b28b 100644
--- a/engines/wintermute/base/gfx/xmodel.h
+++ b/engines/wintermute/base/gfx/xmodel.h
@@ -178,7 +178,7 @@ private:
void updateBoundingRect();
void static inline updateRect(Rect32 *rc, DXVector3 *vec);
- Rect32 _drawingViewport;
+ DXViewport _drawingViewport;
DXMatrix _lastWorldMat;
DXMatrix _lastViewMat;
DXMatrix _lastProjMat;
More information about the Scummvm-git-logs
mailing list