[Scummvm-git-logs] scummvm master -> 616c8ea1beb6d8562b8a9cbb47fbd1d6b2324a29

aquadran noreply at scummvm.org
Mon Oct 21 19:52:37 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:
616c8ea1be WINTERMUTE: Synced with original code related to core and renderer


Commit: 616c8ea1beb6d8562b8a9cbb47fbd1d6b2324a29
    https://github.com/scummvm/scummvm/commit/616c8ea1beb6d8562b8a9cbb47fbd1d6b2324a29
Author: Paweł Kołodziejski (aquadran at gmail.com)
Date: 2024-10-21T21:52:32+02:00

Commit Message:
WINTERMUTE: Synced with original code related to core and renderer

Changed paths:
    engines/wintermute/ad/ad_game.cpp
    engines/wintermute/ad/ad_game.h
    engines/wintermute/ad/ad_scene.cpp
    engines/wintermute/ad/ad_scene_geometry.cpp
    engines/wintermute/base/gfx/base_renderer3d.cpp
    engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
    engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp


diff --git a/engines/wintermute/ad/ad_game.cpp b/engines/wintermute/ad/ad_game.cpp
index 39759fddb8c..a78d12b53f0 100644
--- a/engines/wintermute/ad/ad_game.cpp
+++ b/engines/wintermute/ad/ad_game.cpp
@@ -39,6 +39,7 @@
 #include "engines/wintermute/ad/ad_response_box.h"
 #include "engines/wintermute/ad/ad_response_context.h"
 #include "engines/wintermute/ad/ad_scene.h"
+#include "engines/wintermute/ad/ad_scene_geometry.h"
 #include "engines/wintermute/ad/ad_scene_state.h"
 #include "engines/wintermute/ad/ad_sentence.h"
 #include "engines/wintermute/base/base_engine.h"
@@ -2339,6 +2340,13 @@ char *AdGame::findSpeechFile(char *stringID) {
 	return nullptr;
 }
 
+//////////////////////////////////////////////////////////////////////////
+bool AdGame::renderShadowGeometry() {
+	if (_scene && _scene->_geom)
+		return _scene->_geom->renderShadowGeometry();
+	else
+		return true;
+}
 
 //////////////////////////////////////////////////////////////////////////
 bool AdGame::validMouse() {
diff --git a/engines/wintermute/ad/ad_game.h b/engines/wintermute/ad/ad_game.h
index d9e13894e6f..65d186e640e 100644
--- a/engines/wintermute/ad/ad_game.h
+++ b/engines/wintermute/ad/ad_game.h
@@ -56,6 +56,8 @@ public:
 
 	bool displayDebugInfo() override;
 
+	virtual bool renderShadowGeometry() override;
+
 	bool addSpeechDir(const char *dir);
 	bool removeSpeechDir(const char *dir);
 	char *findSpeechFile(char *StringID);
diff --git a/engines/wintermute/ad/ad_scene.cpp b/engines/wintermute/ad/ad_scene.cpp
index 0ce3163910c..0652f6bfaef 100644
--- a/engines/wintermute/ad/ad_scene.cpp
+++ b/engines/wintermute/ad/ad_scene.cpp
@@ -1212,11 +1212,13 @@ bool AdScene::traverseNodes(bool doUpdate) {
 		}
 
 #ifdef ENABLE_WME3D
+		// render depth info for stencil shadows
 		if (!doUpdate && _geom && _layers[j]->_main) {
 			_gameRef->getOffset(&mainOffsetX, &mainOffsetY);
 
-			if (_gameRef->getMaxShadowType() >= SHADOW_STENCIL) {
-				_geom->renderShadowGeometry();
+			TShadowType shadowType = _gameRef->getMaxShadowType();
+			if (shadowType >= SHADOW_STENCIL) {
+				_gameRef->renderShadowGeometry();
 			}
 		}
 #endif
diff --git a/engines/wintermute/ad/ad_scene_geometry.cpp b/engines/wintermute/ad/ad_scene_geometry.cpp
index 4b58698af2e..521cb021166 100644
--- a/engines/wintermute/ad/ad_scene_geometry.cpp
+++ b/engines/wintermute/ad/ad_scene_geometry.cpp
@@ -408,6 +408,8 @@ bool AdSceneGeometry::render(bool render) {
 
 //////////////////////////////////////////////////////////////////////////
 bool AdSceneGeometry::renderShadowGeometry() {
+	storeDrawingParams();
+
 	_gameRef->_renderer3D->renderShadowGeometry(_planes, _blocks, _generics, getActiveCamera());
 	return true;
 }
diff --git a/engines/wintermute/base/gfx/base_renderer3d.cpp b/engines/wintermute/base/gfx/base_renderer3d.cpp
index 968fabb58bd..3b9b60a1c22 100644
--- a/engines/wintermute/base/gfx/base_renderer3d.cpp
+++ b/engines/wintermute/base/gfx/base_renderer3d.cpp
@@ -39,6 +39,10 @@ BaseRenderer3D::BaseRenderer3D(Wintermute::BaseGame *inGame) : BaseRenderer(inGa
 
 	_ambientLightColor = 0x00000000;
 	_ambientLightOverride = false;
+
+	DXMatrixIdentity(&_worldMatrix);
+	DXMatrixIdentity(&_viewMatrix);
+	DXMatrixIdentity(&_projectionMatrix);
 }
 
 BaseRenderer3D::~BaseRenderer3D() {
diff --git a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
index 1589d9cd6e1..ae534415132 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
@@ -467,6 +467,8 @@ bool BaseRenderOpenGL3D::initRenderer(int width, int height, bool windowed) {
 	_simpleShadow[3].u = 1.0f;
 	_simpleShadow[3].v = 0.0f;
 
+	setProjection();
+
 	return true;
 }
 
@@ -742,9 +744,13 @@ bool BaseRenderOpenGL3D::drawSpriteEx(BaseSurfaceOpenGL3D &tex, const Wintermute
 
 void BaseRenderOpenGL3D::renderSceneGeometry(const BaseArray<AdWalkplane *> &planes, const BaseArray<AdBlock *> &blocks,
 	                                     const BaseArray<AdGeneric *> &generics, const BaseArray<Light3D *> &lights, Camera3D *camera) {
-	glMatrixMode(GL_MODELVIEW);
-	glLoadIdentity();
-	_gameRef->_renderer3D->setup3D(camera, true);
+	DXMatrix matIdentity;
+	DXMatrixIdentity(&matIdentity);
+
+	if (camera)
+		_gameRef->_renderer3D->setup3D(camera, true);
+
+	setWorldTransform(matIdentity);
 
 	glDisable(GL_LIGHTING);
 	glDisable(GL_DEPTH_TEST);
@@ -811,9 +817,13 @@ void BaseRenderOpenGL3D::renderSceneGeometry(const BaseArray<AdWalkplane *> &pla
 void BaseRenderOpenGL3D::renderShadowGeometry(const BaseArray<AdWalkplane *> &planes,
                                               const BaseArray<AdBlock *> &blocks,
                                               const BaseArray<AdGeneric *> &generics, Camera3D *camera) {
-	glMatrixMode(GL_MODELVIEW);
-	glLoadIdentity();
-	setup3D(camera, true);
+	DXMatrix matIdentity;
+	DXMatrixIdentity(&matIdentity);
+
+	if (camera)
+		_gameRef->_renderer3D->setup3D(camera, true);
+
+	setWorldTransform(matIdentity);
 
 	// disable color write
 	glBlendFunc(GL_ZERO, GL_ONE);
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 8038ea06706..1d614aae5c1 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
@@ -628,8 +628,9 @@ bool BaseRenderOpenGL3DShader::initRenderer(int width, int height, bool windowed
 	_flatShadowXModelShader = OpenGL::Shader::fromFiles("wme_flat_shadow_modelx", flatShadowXModelAttributes);
 
 	_active = true;
-	// setup a proper state
-	setup2D(true);
+
+	setProjection();
+
 	return true;
 }
 
@@ -876,7 +877,13 @@ void BaseRenderOpenGL3DShader::renderSceneGeometry(const BaseArray<AdWalkplane *
 
 void BaseRenderOpenGL3DShader::renderShadowGeometry(const BaseArray<AdWalkplane *> &planes, const BaseArray<AdBlock *> &blocks,
                                                     const BaseArray<AdGeneric *> &generics, Camera3D *camera) {
-	setup3D(camera, true);
+	DXMatrix matIdentity;
+	DXMatrixIdentity(&matIdentity);
+
+	if (camera)
+		_gameRef->_renderer3D->setup3D(camera, true);
+
+	setWorldTransform(matIdentity);
 
 	// disable color write
 	glBlendFunc(GL_ZERO, GL_ONE);




More information about the Scummvm-git-logs mailing list