[Scummvm-git-logs] scummvm master -> 6d8c7dc1c7456fc00d374c67b0c0760b00bc2c15
aquadran
noreply at scummvm.org
Sun Oct 13 13:14:47 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:
6d8c7dc1c7 WINTERMUTE: Restore more code related renderer functions
Commit: 6d8c7dc1c7456fc00d374c67b0c0760b00bc2c15
https://github.com/scummvm/scummvm/commit/6d8c7dc1c7456fc00d374c67b0c0760b00bc2c15
Author: PaweÅ KoÅodziejski (aquadran at gmail.com)
Date: 2024-10-13T15:14:42+02:00
Commit Message:
WINTERMUTE: Restore more code related renderer functions
Changed paths:
engines/wintermute/ad/ad_actor_3dx.cpp
engines/wintermute/ad/ad_scene_geometry.cpp
engines/wintermute/base/gfx/base_renderer3d.h
engines/wintermute/base/gfx/xmodel.cpp
diff --git a/engines/wintermute/ad/ad_actor_3dx.cpp b/engines/wintermute/ad/ad_actor_3dx.cpp
index 01a6c4765a2..35af96ae0ce 100644
--- a/engines/wintermute/ad/ad_actor_3dx.cpp
+++ b/engines/wintermute/ad/ad_actor_3dx.cpp
@@ -470,6 +470,8 @@ bool AdActor3DX::displayShadowVolume() {
return false;
}
+ //_gameRef->_renderer3D->setWorldTransform(_worldMatrix);
+
Math::Vector3d lightVector = Math::Vector3d(_shadowLightPos.x() * _scale3D,
_shadowLightPos.y() * _scale3D,
_shadowLightPos.z() * _scale3D);
@@ -489,6 +491,9 @@ bool AdActor3DX::displayShadowVolume() {
shadowModel->updateShadowVol(getShadowVolume(), _worldMatrix, lightVector, extrusionDepth);
+ Math::Matrix4 origWorld;
+ _gameRef->_renderer3D->getWorldTransform(origWorld);
+
// handle the attachments
for (uint32 i = 0; i < _attachments.size(); i++) {
AdAttach3DX *at = _attachments[i];
@@ -536,6 +541,9 @@ bool AdActor3DX::displayAttachments(bool registerObjects) {
return true;
}
+ Math::Matrix4 origView;
+ _gameRef->_renderer3D->getWorldTransform(origView);
+
for (uint32 i = 0; i < _attachments.size(); i++) {
AdAttach3DX *at = _attachments[i];
if (!at->_active) {
@@ -551,6 +559,8 @@ bool AdActor3DX::displayAttachments(bool registerObjects) {
at->displayAttachable(viewMat, registerObjects);
}
+ //_gameRef->_renderer3D->setWorldTransform(origView);
+
return true;
}
diff --git a/engines/wintermute/ad/ad_scene_geometry.cpp b/engines/wintermute/ad/ad_scene_geometry.cpp
index a86808d2956..d8621fc29f3 100644
--- a/engines/wintermute/ad/ad_scene_geometry.cpp
+++ b/engines/wintermute/ad/ad_scene_geometry.cpp
@@ -356,17 +356,13 @@ Math::Matrix4 *AdSceneGeometry::getViewMatrix() {
//////////////////////////////////////////////////////////////////////////
bool AdSceneGeometry::storeDrawingParams() {
- // implement this later
- // CBRenderD3D* m_Renderer = (CBRenderD3D*)_gameRef->m_Renderer;
+ _drawingViewport = _gameRef->_renderer3D->getViewPort();
- // // store values
- // m_Renderer->m_Device->GetViewport(&m_DrawingViewport);
-
- // m_Renderer->m_Device->GetTransform(D3DTS_WORLD, &m_LastWorldMat);
- // m_Renderer->m_Device->GetTransform(D3DTS_VIEW, &m_LastViewMat);
- // m_Renderer->m_Device->GetTransform(D3DTS_PROJECTION, &m_LastProjMat);
+ // store values
+ //_gameRef->_renderer3D->getWorldTransform(_lastWorldMat);
+ //_gameRef->_renderer3D->getViewTransform(_lastViewMat);
+ //_gameRef->_renderer3D->getProjectionTransform(_lastProjMat);
- warning("AdSceneGeometry::storeDrawingParams not yet implemented");
AdScene *scene = ((AdGame *)_gameRef)->_scene;
if (scene) {
@@ -379,17 +375,17 @@ bool AdSceneGeometry::storeDrawingParams() {
Rect32 rc;
_gameRef->getCurrentViewportRect(&rc);
-// float width = (float)rc.right - (float)rc.left;
-// float height = (float)rc.bottom - (float)rc.top;
+ float width = (float)rc.right - (float)rc.left;
+ float height = (float)rc.bottom - (float)rc.top;
// margins
- // int mleft = rc.left;
- // int mright = m_Renderer->m_Width - Width - rc.left;
- // int mtop = rc.top;
- // int mbottom = m_Renderer->m_Height - Height - rc.top;
+ int mleft = rc.left;
+ int mright = _gameRef->_renderer3D->getWidth() - width - rc.left;
+ int mtop = rc.top;
+ int mbottom = _gameRef->_renderer3D->getHeight() - height - rc.top;
- // m_LastOffsetX = _gameRef->_offsetX + (mleft - mright)/2;
- // m_LastOffsetY = _gameRef->_offsetY + (mtop - mbottom)/2;
+ _lastOffsetX = _gameRef->_offsetX + (mleft - mright) / 2;
+ _lastOffsetY = _gameRef->_offsetY + (mtop - mbottom) / 2;
_lastValuesInitialized = true;
@@ -399,7 +395,7 @@ bool AdSceneGeometry::storeDrawingParams() {
//////////////////////////////////////////////////////////////////////////
bool AdSceneGeometry::render(bool render) {
// store values
- // storeDrawingParams();
+ storeDrawingParams();
if (render) {
_gameRef->_renderer3D->renderSceneGeometry(_planes, _blocks, _generics, _lights, getActiveCamera());
}
diff --git a/engines/wintermute/base/gfx/base_renderer3d.h b/engines/wintermute/base/gfx/base_renderer3d.h
index 3466ba6430d..bde8abc0b0e 100644
--- a/engines/wintermute/base/gfx/base_renderer3d.h
+++ b/engines/wintermute/base/gfx/base_renderer3d.h
@@ -94,13 +94,33 @@ public:
virtual bool setProjection2D() = 0;
virtual void setWorldTransform(const Math::Matrix4 &transform) = 0;
- void project(const Math::Matrix4 &worldMatrix, const Math::Vector3d &point, int32 &x, int32 &y);
- Math::Ray rayIntoScene(int x, int y);
+// void setWorldTransform(const Math::Matrix4 &transform) {
+// _worldMatrix = transform;
+// }
Math::Matrix4 lastProjectionMatrix() {
- return _projectionMatrix3d;
+ return _projectionMatrix;
+ }
+
+ void setProjectionTransform(const Math::Matrix4 &transform) {
+ _projectionMatrix = transform;
}
+ void getWorldTransform(Math::Matrix4 &transform) {
+ transform = _worldMatrix;
+ }
+
+ void getViewTransform(Math::Matrix4 &transform) {
+ transform = _viewMatrix;
+ }
+
+ void getProjectionTransform(Math::Matrix4 &transform) {
+ transform = _projectionMatrix;
+ }
+
+ void project(const Math::Matrix4 &worldMatrix, const Math::Vector3d &point, int32 &x, int32 &y);
+ Math::Ray rayIntoScene(int x, int y);
+
Camera3D *_camera;
virtual Mesh3DS *createMesh3DS() = 0;
@@ -121,6 +141,8 @@ public:
protected:
Math::Matrix4 _lastViewMatrix;
Rect32 _viewport3dRect;
+ Math::Matrix4 _worldMatrix;
+ Math::Matrix4 _viewMatrix;
Math::Matrix4 _projectionMatrix;
float _fov;
float _nearClipPlane;
diff --git a/engines/wintermute/base/gfx/xmodel.cpp b/engines/wintermute/base/gfx/xmodel.cpp
index fe2e0eab5ae..d073a340b34 100644
--- a/engines/wintermute/base/gfx/xmodel.cpp
+++ b/engines/wintermute/base/gfx/xmodel.cpp
@@ -477,6 +477,11 @@ bool XModel::render() {
// render everything
bool res = _rootFrame->render(this);
+ // remember matrices for object picking purposes
+ //_gameRef->_renderer3D->getWorldTransform(_lastWorldMat);
+ //_gameRef->_renderer3D->getWorldTransform(_lastViewMat);
+ //_gameRef->_renderer3D->getWorldTransform(_lastProjMat);
+
// remember scene offset
Rect32 rc;
_gameRef->getCurrentViewportRect(&rc);
@@ -561,8 +566,13 @@ 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);
+ _drawingViewport = _gameRef->_renderer3D->getViewPort();
float x1 = _BBoxStart.x();
float x2 = _BBoxEnd.x();
float y1 = _BBoxStart.y();
@@ -596,6 +606,11 @@ void XModel::updateBoundingRect() {
_gameRef->_renderer3D->project(_lastWorldMat, Math::Vector3d(x2, y2, z2), screenX, screenY);
updateRect(&_boundingRect, Math::Vector3d(screenX, screenY, 0));
+
+ _boundingRect.left -= _gameRef->_renderer3D->_drawOffsetX;
+ _boundingRect.right -= _gameRef->_renderer3D->_drawOffsetX;
+ _boundingRect.bottom -= _gameRef->_renderer3D->_drawOffsetY;
+ _boundingRect.top -= _gameRef->_renderer3D->_drawOffsetY;
}
//////////////////////////////////////////////////////////////////////////
More information about the Scummvm-git-logs
mailing list