[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