[Scummvm-git-logs] scummvm master -> 80fafcb4fb829592e7997bb5bfc6d00b418fedfc

aquadran noreply at scummvm.org
Thu May 15 06:30:36 UTC 2025


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .

Summary:
80fafcb4fb WINTERMUTE: Added missing display3DContent()


Commit: 80fafcb4fb829592e7997bb5bfc6d00b418fedfc
    https://github.com/scummvm/scummvm/commit/80fafcb4fb829592e7997bb5bfc6d00b418fedfc
Author: Paweł Kołodziejski (aquadran at gmail.com)
Date: 2025-05-15T08:30:32+02:00

Commit Message:
WINTERMUTE: Added missing display3DContent()

Changed paths:
    engines/wintermute/ad/ad_scene.cpp
    engines/wintermute/ad/ad_scene.h
    engines/wintermute/base/gfx/base_renderer3d.cpp
    engines/wintermute/base/gfx/base_renderer3d.h


diff --git a/engines/wintermute/ad/ad_scene.cpp b/engines/wintermute/ad/ad_scene.cpp
index 8495cbfbd20..40e09743307 100644
--- a/engines/wintermute/ad/ad_scene.cpp
+++ b/engines/wintermute/ad/ad_scene.cpp
@@ -1313,6 +1313,48 @@ bool AdScene::traverseNodes(bool doUpdate) {
 	return STATUS_OK;
 }
 
+#ifdef ENABLE_WME3D
+//////////////////////////////////////////////////////////////////////////
+bool AdScene::display3DContent(DXMatrix &viewMat, DXMatrix &projMat) {
+	if (!_geom)
+		return STATUS_FAILED;
+
+	_gameRef->_renderer3D->setup3DCustom(viewMat, projMat);
+
+	// for each layer
+	for (uint32 j = 0; j < _layers.size(); j++) {
+		if (!_layers[j]->_active)
+			continue;
+
+		// render depth info for stencil shadows
+		TShadowType shadowType = _gameRef->getMaxShadowType();
+		if (shadowType >= SHADOW_STENCIL) {
+			_gameRef->renderShadowGeometry();
+		}
+
+
+		// for each node
+		for (uint32 k = 0; k < _layers[j]->_nodes.size(); k++) {
+			AdSceneNode *node = _layers[j]->_nodes[k];
+			if (node->_type == OBJECT_REGION) {
+				if (node->_region->isBlocked())
+					continue;
+				if (node->_region->hasDecoration())
+					continue;
+
+				displayRegionContent(node->_region, true);
+			}
+		} // each node
+
+		// display/update all objects which are off-regions
+		if (_layers[j]->_main) {
+			displayRegionContent(nullptr, true);
+		}
+	} // each layer
+
+	return STATUS_OK;
+}
+#endif
 
 //////////////////////////////////////////////////////////////////////////
 bool AdScene::display() {
@@ -3359,7 +3401,7 @@ BaseObject *AdScene::getNodeByName(const char *name) {
 		for (uint32 j = 0; j < layer->_nodes.size(); j++) {
 			AdSceneNode *node = layer->_nodes[j];
 			if ((node->_type == OBJECT_ENTITY && !scumm_stricmp(name, node->_entity->getName())) ||
-			        (node->_type == OBJECT_REGION && !scumm_stricmp(name, node->_region->getName()))) {
+			    (node->_type == OBJECT_REGION && !scumm_stricmp(name, node->_region->getName()))) {
 				switch (node->_type) {
 				case OBJECT_ENTITY:
 					ret = node->_entity;
diff --git a/engines/wintermute/ad/ad_scene.h b/engines/wintermute/ad/ad_scene.h
index 4ff0dfede61..4149233c517 100644
--- a/engines/wintermute/ad/ad_scene.h
+++ b/engines/wintermute/ad/ad_scene.h
@@ -64,6 +64,9 @@ public:
 	BaseObject *getPrevAccessObject(BaseObject *currObject);
 	bool getSceneObjects(BaseArray<AdObject *> &objects, bool interactiveOnly);
 	bool getRegionObjects(AdRegion *region, BaseArray<AdObject *> &objects, bool interactiveOnly);
+#ifdef ENABLE_WME3D
+	bool display3DContent(DXMatrix &viewMat, DXMatrix &projMat);
+#endif
 
 #ifdef ENABLE_WME3D
 	bool _2DPathfinding;
diff --git a/engines/wintermute/base/gfx/base_renderer3d.cpp b/engines/wintermute/base/gfx/base_renderer3d.cpp
index 1e348d80287..f50560b3c95 100644
--- a/engines/wintermute/base/gfx/base_renderer3d.cpp
+++ b/engines/wintermute/base/gfx/base_renderer3d.cpp
@@ -116,6 +116,17 @@ bool BaseRenderer3D::setDefaultAmbientLightColor() {
 	return true;
 }
 
+bool BaseRenderer3D::setup3DCustom(DXMatrix &viewMat, DXMatrix &projMat) {
+	setup3D();
+	_state = RSTATE_3D;
+	if (viewMat)
+		setViewTransform(viewMat);
+	if (projMat)
+		setProjectionTransform(projMat);
+
+	return true;
+}
+
 DXViewport BaseRenderer3D::getViewPort() {
 	return _viewport;
 }
diff --git a/engines/wintermute/base/gfx/base_renderer3d.h b/engines/wintermute/base/gfx/base_renderer3d.h
index 87064ea8407..9b53a5190ec 100644
--- a/engines/wintermute/base/gfx/base_renderer3d.h
+++ b/engines/wintermute/base/gfx/base_renderer3d.h
@@ -75,6 +75,7 @@ public:
 	bool _ambientLightOverride;
 
 	//virtual void DumpData(char* Filename);
+	bool setup3DCustom(DXMatrix &viewMat, DXMatrix &projMat);
 	virtual bool enableShadows() = 0;
 	virtual bool disableShadows() = 0;
 	virtual bool stencilSupported() = 0;




More information about the Scummvm-git-logs mailing list