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

aquadran noreply at scummvm.org
Thu Oct 31 17:23:15 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:
f247aa24f0 WINTERMUTE: Synced renderer setSpriteBlendMode() with original


Commit: f247aa24f0f68e3e5c3479d6d99e40e2d54b9026
    https://github.com/scummvm/scummvm/commit/f247aa24f0f68e3e5c3479d6d99e40e2d54b9026
Author: Paweł Kołodziejski (aquadran at gmail.com)
Date: 2024-10-31T18:23:08+01:00

Commit Message:
WINTERMUTE: Synced renderer setSpriteBlendMode() with original

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


diff --git a/engines/wintermute/ad/ad_actor_3dx.cpp b/engines/wintermute/ad/ad_actor_3dx.cpp
index f946fdd9997..2f9f1e4dadb 100644
--- a/engines/wintermute/ad/ad_actor_3dx.cpp
+++ b/engines/wintermute/ad/ad_actor_3dx.cpp
@@ -403,7 +403,7 @@ bool AdActor3DX::display() {
 		_gameRef->_renderer3D->displayShadow(this, &lightPos, true);
 	}
 
-	_gameRef->_renderer3D->setSpriteBlendMode(_blendMode);
+	_gameRef->_renderer3D->setSpriteBlendMode(_blendMode, true);
 	_gameRef->_renderer3D->setWorldTransform(_worldMatrix);
 
 	bool res = _xmodel->render();
diff --git a/engines/wintermute/base/gfx/base_renderer3d.cpp b/engines/wintermute/base/gfx/base_renderer3d.cpp
index de38b2550d9..ec39098e8dc 100644
--- a/engines/wintermute/base/gfx/base_renderer3d.cpp
+++ b/engines/wintermute/base/gfx/base_renderer3d.cpp
@@ -36,6 +36,8 @@ BaseRenderer3D::BaseRenderer3D(Wintermute::BaseGame *inGame) : BaseRenderer(inGa
 	_nearClipPlane = DEFAULT_NEAR_PLANE;
 	_farClipPlane = DEFAULT_FAR_PLANE;
 
+	_blendMode = Graphics::BLEND_UNKNOWN;
+
 	_spriteBatchMode = false;
 
 	_ambientLightColor = 0x00000000;
diff --git a/engines/wintermute/base/gfx/base_renderer3d.h b/engines/wintermute/base/gfx/base_renderer3d.h
index 80ef6d59ede..35b3968b2b4 100644
--- a/engines/wintermute/base/gfx/base_renderer3d.h
+++ b/engines/wintermute/base/gfx/base_renderer3d.h
@@ -78,7 +78,8 @@ public:
 	virtual void displayShadow(BaseObject *object, const DXVector3 *light, bool lightPosRelative) = 0;
 	//HRESULT InvalidateTexture(LPDIRECT3DTEXTURE Texture);
 
-	virtual void setSpriteBlendMode(Graphics::TSpriteBlendMode blendMode) = 0;
+	Graphics::TSpriteBlendMode _blendMode;
+	virtual void setSpriteBlendMode(Graphics::TSpriteBlendMode blendMode, bool forceChange = false) = 0;
 	// declared in sub class: virtual const char* GetName();
 	// declared in sub class: virtual HRESULT DisplayDebugInfo();
 
diff --git a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
index 9b949386548..46c05314b2d 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
@@ -523,6 +523,8 @@ void BaseRenderOpenGL3D::fadeToColor(byte r, byte g, byte b, byte a) {
 	vertices[3 * vertexSize + 2] = b;
 	vertices[3 * vertexSize + 3] = a;
 
+	setSpriteBlendMode(Graphics::BLEND_UNKNOWN);
+
 	glDisable(GL_DEPTH_TEST);
 	glEnable(GL_BLEND);
 	glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
@@ -615,8 +617,13 @@ void BaseRenderOpenGL3D::displayShadow(BaseObject *object, const DXVector3 *ligh
 	glDepthMask(GL_TRUE);
 }
 
-void BaseRenderOpenGL3D::setSpriteBlendMode(Graphics::TSpriteBlendMode blendMode) {
-	switch (blendMode) {
+void BaseRenderOpenGL3D::setSpriteBlendMode(Graphics::TSpriteBlendMode blendMode, bool forceChange) {
+	if (blendMode == _blendMode && !forceChange)
+		return;
+
+	_blendMode = blendMode;
+
+	switch (_blendMode) {
 	case Graphics::BLEND_NORMAL:
 		glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
 		break;
@@ -626,12 +633,11 @@ void BaseRenderOpenGL3D::setSpriteBlendMode(Graphics::TSpriteBlendMode blendMode
 		break;
 
 	case Graphics::BLEND_SUBTRACTIVE:
-		// wme3d takes the color value here
 		glBlendFunc(GL_ZERO, GL_ONE_MINUS_SRC_COLOR);
 		break;
 
 	default:
-		warning("BaseRenderOpenGL3D::setSpriteBlendMode unsupported blend mode %i", blendMode);
+		break;
 	}
 }
 
@@ -774,6 +780,7 @@ void BaseRenderOpenGL3D::renderShadowGeometry(const BaseArray<AdWalkplane *> &pl
 	setWorldTransform(matIdentity);
 
 	// disable color write
+	setSpriteBlendMode(Graphics::BLEND_UNKNOWN);
 	glBlendFunc(GL_ZERO, GL_ONE);
 
 	glFrontFace(GL_CW);
diff --git a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.h b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.h
index 050d6797d8e..25fb97a6139 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.h
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.h
@@ -56,7 +56,7 @@ public:
 	BaseRenderOpenGL3D(BaseGame *inGame = nullptr);
 	~BaseRenderOpenGL3D() override;
 
-	void setSpriteBlendMode(Graphics::TSpriteBlendMode blendMode) override;
+	void setSpriteBlendMode(Graphics::TSpriteBlendMode blendMode, bool forceChange = false) override;
 
 	void setAmbientLightRenderState() override;
 
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 2b55d58664b..6552c03f745 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
@@ -480,6 +480,8 @@ void BaseRenderOpenGL3DShader::fadeToColor(byte r, byte g, byte b, byte a) {
 	color.z() = b / 255.0f;
 	color.w() = a / 255.0f;
 
+	setSpriteBlendMode(Graphics::BLEND_UNKNOWN);
+
 	glDisable(GL_DEPTH_TEST);
 	glEnable(GL_BLEND);
 	glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
@@ -537,8 +539,14 @@ bool BaseRenderOpenGL3DShader::stencilSupported() {
 	return true;
 }
 
-void BaseRenderOpenGL3DShader::setSpriteBlendMode(Graphics::TSpriteBlendMode blendMode) {
-	switch (blendMode) {
+void BaseRenderOpenGL3DShader::setSpriteBlendMode(Graphics::TSpriteBlendMode blendMode, bool forceChange) {
+
+	if (blendMode == _blendMode && !forceChange)
+		return;
+
+	_blendMode = blendMode;
+
+	switch (_blendMode) {
 	case Graphics::BLEND_NORMAL:
 		glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
 		break;
@@ -548,12 +556,11 @@ void BaseRenderOpenGL3DShader::setSpriteBlendMode(Graphics::TSpriteBlendMode ble
 		break;
 
 	case Graphics::BLEND_SUBTRACTIVE:
-		// wme3d takes the color value here
 		glBlendFunc(GL_ZERO, GL_ONE_MINUS_SRC_COLOR);
 		break;
 
 	default:
-		warning("BaseRenderOpenGL3DShader::setSpriteBlendMode unsupported blend mode %i", blendMode);
+		break;
 	}
 }
 
@@ -628,6 +635,7 @@ void BaseRenderOpenGL3DShader::renderShadowGeometry(const BaseArray<AdWalkplane
 	setWorldTransform(matIdentity);
 
 	// disable color write
+	setSpriteBlendMode(Graphics::BLEND_UNKNOWN);
 	glBlendFunc(GL_ZERO, GL_ONE);
 
 	glFrontFace(GL_CW);
diff --git a/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.h b/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.h
index 99eeb7c416a..d21df31773b 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.h
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.h
@@ -46,7 +46,7 @@ public:
 	BaseRenderOpenGL3DShader(BaseGame *inGame = nullptr);
 	~BaseRenderOpenGL3DShader() override;
 
-	void setSpriteBlendMode(Graphics::TSpriteBlendMode blendMode) override;
+	void setSpriteBlendMode(Graphics::TSpriteBlendMode blendMode, bool forceChange = false) override;
 
 	void setAmbientLightRenderState() override;
 




More information about the Scummvm-git-logs mailing list