[Scummvm-git-logs] scummvm master -> d6ae18348ec850633b42823d1c2e81bc362e701d

aquadran noreply at scummvm.org
Sat Jul 2 21:12:47 UTC 2022


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:
d6ae18348e WINTERMUTE: WME3D: Restore missing code from original


Commit: d6ae18348ec850633b42823d1c2e81bc362e701d
    https://github.com/scummvm/scummvm/commit/d6ae18348ec850633b42823d1c2e81bc362e701d
Author: Paweł Kołodziejski (aquadran at gmail.com)
Date: 2022-07-02T23:12:42+02:00

Commit Message:
WINTERMUTE: WME3D: Restore missing code from original

Changed paths:
    engines/wintermute/ad/ad_scene.cpp
    engines/wintermute/base/base_frame.cpp
    engines/wintermute/base/base_game.cpp
    engines/wintermute/base/gfx/x/modelx.cpp


diff --git a/engines/wintermute/ad/ad_scene.cpp b/engines/wintermute/ad/ad_scene.cpp
index dde473ed968..8a4c61eb03f 100644
--- a/engines/wintermute/ad/ad_scene.cpp
+++ b/engines/wintermute/ad/ad_scene.cpp
@@ -926,6 +926,14 @@ bool AdScene::loadBuffer(char *buffer, bool complete) {
 			parser.scanStr(params, "%b", &_editorShowScale);
 			break;
 
+#ifdef ENABLE_WME3D
+		case TOKEN_EDITOR_SHOW_GEOMETRY:
+			parser.scanStr(params, "%b", &_showGeometry);
+			if (!_gameRef->_editorMode)
+				_showGeometry = false;
+			break;
+#endif
+
 		case TOKEN_SCRIPT:
 			addScript(params);
 			break;
@@ -1026,6 +1034,8 @@ bool AdScene::loadBuffer(char *buffer, bool complete) {
 		Camera3D *activeCamera = _sceneGeometry->getActiveCamera();
 		if (activeCamera != nullptr) {
 			_gameRef->_renderer->setup3D(activeCamera);
+			_gameRef->_renderer->setScreenViewport();
+			_sceneGeometry->render(false);
 		}
 	}
 #endif
@@ -1133,8 +1143,10 @@ bool AdScene::traverseNodes(bool doUpdate) {
 	_gameRef->_renderer->setup2D();
 
 	// for each layer
-	/* int mainOffsetX = 0; */
-	/* int mainOffsetY = 0; */
+#ifdef ENABLE_WME3D
+	int mainOffsetX = 0;
+	int mainOffsetY = 0;
+#endif
 
 	for (uint32 j = 0; j < _layers.size(); j++) {
 		if (!_layers[j]->_active) {
@@ -1174,6 +1186,8 @@ bool AdScene::traverseNodes(bool doUpdate) {
 
 #ifdef ENABLE_WME3D
 		if (!doUpdate && _sceneGeometry && _layers[j]->_main) {
+			_gameRef->getOffset(&mainOffsetX, &mainOffsetY);
+
 			if (_gameRef->getMaxShadowType() >= SHADOW_STENCIL) {
 				_sceneGeometry->renderShadowGeometry();
 			}
@@ -1196,7 +1210,7 @@ bool AdScene::traverseNodes(bool doUpdate) {
 					}
 #else
 					if (node->_entity->_is3D) {
-						// prepare 3d rendering
+						_gameRef->_renderer->setup3D();
 					} else {
 						_gameRef->_renderer->setup2D();
 					}
@@ -1243,7 +1257,7 @@ bool AdScene::traverseNodes(bool doUpdate) {
 
 #ifdef ENABLE_WME3D
 	if (!doUpdate && _sceneGeometry) {
-		// always display geometry for the moment
+		_gameRef->setOffset(mainOffsetX, mainOffsetY);
 		_sceneGeometry->render(_showGeometry);
 	}
 #endif
@@ -1440,8 +1454,16 @@ bool AdScene::displayRegionContentOld(AdRegion *region) {
 
 
 		if (obj != nullptr) {
+#ifndef ENABLE_WME3D
 			_gameRef->_renderer->setup2D();
-
+#else
+			Camera3D *activeCamera = _sceneGeometry->getActiveCamera();
+			if (activeCamera != nullptr) {
+				_gameRef->_renderer->setup3D(activeCamera);
+			} else {
+				_gameRef->_renderer->setup2D();
+			}
+#endif
 			if (_gameRef->_editorMode || !obj->_editorOnly) {
 				obj->display();
 			}
diff --git a/engines/wintermute/base/base_frame.cpp b/engines/wintermute/base/base_frame.cpp
index b19f33bbbe8..a863d0d1760 100644
--- a/engines/wintermute/base/base_frame.cpp
+++ b/engines/wintermute/base/base_frame.cpp
@@ -28,6 +28,7 @@
 #include "engines/wintermute/base/base_parser.h"
 #include "engines/wintermute/base/base_engine.h"
 #include "engines/wintermute/base/base_frame.h"
+#include "engines/wintermute/base/base_game.h"
 #include "engines/wintermute/base/base_object.h"
 #include "engines/wintermute/base/base_dynamic_buffer.h"
 #include "engines/wintermute/base/sound/base_sound_manager.h"
@@ -79,6 +80,11 @@ bool BaseFrame::draw(int x, int y, BaseObject *registerOwner, float zoomX, float
 	bool res;
 
 	for (uint32 i = 0; i < _subframes.size(); i++) {
+		// filter out subframes unsupported by current renderer
+		if (!allFrames) {
+			if ((_subframes[i]->_2DOnly && _gameRef->_useD3D) || (_subframes[i]->_3DOnly && !_gameRef->_useD3D))
+				continue;
+		}
 		res = _subframes[i]->draw(x, y, registerOwner, zoomX, zoomY, precise, alpha, rotate, blendMode);
 		if (DID_FAIL(res)) {
 			return res;
diff --git a/engines/wintermute/base/base_game.cpp b/engines/wintermute/base/base_game.cpp
index b11bd303334..7aa40329ec0 100644
--- a/engines/wintermute/base/base_game.cpp
+++ b/engines/wintermute/base/base_game.cpp
@@ -1889,18 +1889,15 @@ bool BaseGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack
 	//////////////////////////////////////////////////////////////////////////
 	else if (strcmp(name, "SetSavingScreen") == 0) {
 		stack->correctParams(3);
-		/* ScValue *val = */stack->pop();
+		ScValue *val = stack->pop();
 		int saveImageX = stack->pop()->getInt();
 		int saveImageY = stack->pop()->getInt();
 
-		// FIXME: Dead code or bug?
-#if 0
 		if (val->isNULL()) {
 			_renderer->setSaveImage(NULL, saveImageX, saveImageY);
 		} else {
-#endif
-			_renderer->setSaveImage(NULL, saveImageX, saveImageY);
-		//}
+			_renderer->setSaveImage(val->getString(), saveImageX, saveImageY);
+		}
 		stack->pushNULL();
 		return STATUS_OK;
 	}
diff --git a/engines/wintermute/base/gfx/x/modelx.cpp b/engines/wintermute/base/gfx/x/modelx.cpp
index 2bf701581bd..fa002fd596e 100644
--- a/engines/wintermute/base/gfx/x/modelx.cpp
+++ b/engines/wintermute/base/gfx/x/modelx.cpp
@@ -930,6 +930,9 @@ bool ModelX::persist(BasePersistenceManager *persistMgr) {
 		}
 	}
 
+	if (!persistMgr->getIsSaving())
+		initializeSimple();
+
 	return true;
 }
 




More information about the Scummvm-git-logs mailing list