[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