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

aquadran noreply at scummvm.org
Mon Jul 27 21:03:39 UTC 2026


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:
f8642d2b41 WINTERMUTE: Added brightness support for 'JULIA'


Commit: f8642d2b41569e848efeb096b263cda65ae3cef5
    https://github.com/scummvm/scummvm/commit/f8642d2b41569e848efeb096b263cda65ae3cef5
Author: Paweł Kołodziejski (aquadran at gmail.com)
Date: 2026-07-27T23:03:27+02:00

Commit Message:
WINTERMUTE: Added brightness support for 'JULIA'

Changed paths:
  A engines/wintermute/base/gfx/opengl/shaders/wme_brightness_julia.fragment
  A engines/wintermute/base/gfx/opengl/shaders/wme_brightness_julia.vertex
    dists/scummvm.rc
    engines/wintermute/ad/ad_game.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_shader.cpp
    engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.h


diff --git a/dists/scummvm.rc b/dists/scummvm.rc
index 866e401e665..219cfe4e1bf 100644
--- a/dists/scummvm.rc
+++ b/dists/scummvm.rc
@@ -100,6 +100,8 @@ shaders/stark_shadow.fragment        FILE    "engines/stark/shaders/stark_shadow
 shaders/stark_shadow.vertex          FILE    "engines/stark/shaders/stark_shadow.vertex"
 #endif
 #if PLUGIN_ENABLED_STATIC(WINTERMUTE)
+shaders/wme_brightness_julia.fragment   FILE    "engines/wintermute/base/gfx/opengl/shaders/wme_brightness_julia.fragment"
+shaders/wme_brightness_julia.vertex     FILE    "engines/wintermute/base/gfx/opengl/shaders/wme_brightness_julia.vertex"
 shaders/wme_brightness_oknytt.fragment  FILE    "engines/wintermute/base/gfx/opengl/shaders/wme_brightness_oknytt.fragment"
 shaders/wme_brightness_oknytt.vertex    FILE    "engines/wintermute/base/gfx/opengl/shaders/wme_brightness_oknytt.vertex"
 shaders/wme_fade.fragment               FILE    "engines/wintermute/base/gfx/opengl/shaders/wme_fade.fragment"
diff --git a/engines/wintermute/ad/ad_game.cpp b/engines/wintermute/ad/ad_game.cpp
index e2a965cdcda..b176cfb4919 100644
--- a/engines/wintermute/ad/ad_game.cpp
+++ b/engines/wintermute/ad/ad_game.cpp
@@ -28,6 +28,7 @@
 #include "engines/wintermute/ad/ad_actor.h"
 #ifdef ENABLE_WME3D
 #include "engines/wintermute/ad/ad_actor_3dx.h"
+#include "engines/wintermute/base/gfx/base_renderer3d.h"
 #endif
 #include "engines/wintermute/ad/ad_game.h"
 #include "engines/wintermute/ad/ad_entity.h"
@@ -958,6 +959,21 @@ bool AdGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack,
 		return STATUS_OK;
 	}
 
+	else if (strcmp(name, "SetBrightness") == 0) {
+		stack->correctParams(1);
+
+		float gamma = stack->pop()->getFloat(0.0f);
+
+#ifdef ENABLE_WME3D
+		if (_renderer3D)
+			_renderer3D->setBrightnessJulia(gamma);
+#endif
+
+		stack->pushBool(true);
+
+		return STATUS_OK;
+	}
+
 #ifdef ENABLE_FOXTAIL
 	//////////////////////////////////////////////////////////////////////////
 	// [FoxTail] SetInventoryBoxHideSelected
diff --git a/engines/wintermute/base/gfx/base_renderer3d.cpp b/engines/wintermute/base/gfx/base_renderer3d.cpp
index 7ce53f0ce50..808bd318a91 100644
--- a/engines/wintermute/base/gfx/base_renderer3d.cpp
+++ b/engines/wintermute/base/gfx/base_renderer3d.cpp
@@ -46,6 +46,7 @@ BaseRenderer3D::BaseRenderer3D(Wintermute::BaseGame *inGame) : BaseRenderer(inGa
 	DXMatrixIdentity(&_projectionMatrix);
 
 	_brightnessOknytt = -1;
+	_brightnessJulia = -1.0f;
 }
 
 BaseRenderer3D::~BaseRenderer3D() {
diff --git a/engines/wintermute/base/gfx/base_renderer3d.h b/engines/wintermute/base/gfx/base_renderer3d.h
index 789b6100eea..2793ec502a1 100644
--- a/engines/wintermute/base/gfx/base_renderer3d.h
+++ b/engines/wintermute/base/gfx/base_renderer3d.h
@@ -161,6 +161,9 @@ public:
 	float getBrightnessOknytt() {
 		return _brightnessOknytt;
 	}
+	void setBrightnessJulia(float brightness) {
+		_brightnessJulia = brightness;
+	}
 
 	// ScummVM specific methods <--
 
@@ -176,6 +179,7 @@ protected:
 	PostFilter _postFilterMode;
 	bool _flipInProgress;
 	int32 _brightnessOknytt;
+	float _brightnessJulia;
 
 	virtual void setAmbientLightRenderState() = 0;
 };
diff --git a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
index a51977c3c8a..0d5eb4b2e21 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
@@ -1116,6 +1116,62 @@ void BaseRenderOpenGL3D::postfilter() {
 		return;
 	}
 
+	// This is for game 'J.U.L.I.A.'
+	if (_brightnessJulia != -1.0f) {
+		setup2D();
+		glViewport(0, 0, _width, _height);
+
+		glMatrixMode(GL_PROJECTION);
+		glLoadIdentity();
+
+		glMatrixMode(GL_TEXTURE);
+		glLoadIdentity();
+
+		glMatrixMode(GL_MODELVIEW);
+		glLoadIdentity();
+
+		glDisable(GL_BLEND);
+		glDisable(GL_ALPHA_TEST);
+		glDisable(GL_CULL_FACE);
+
+		glEnable(GL_TEXTURE_2D);
+		glBindTexture(GL_TEXTURE_2D, _postfilterTexture);
+
+		g_system->presentBuffer();
+		glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, _width, _height, 0);
+
+		glEnableClientState(GL_VERTEX_ARRAY);
+		glEnableClientState(GL_TEXTURE_COORD_ARRAY);
+		glVertexPointer(2, GL_FLOAT, 0, vertices);
+		glTexCoordPointer(2, GL_FLOAT, 0, texCoords);
+
+		if (_brightnessJulia <= 1.0f) {
+			glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+			glColor4f(_brightnessJulia, _brightnessJulia, _brightnessJulia, 1.0f);
+			glDrawArrays(GL_QUADS, 0, 4);
+		} else {
+			glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
+			glDrawArrays(GL_QUADS, 0, 4);
+			float alpha = (_brightnessJulia - 1.0f) * 0.2f;
+			glDisable(GL_TEXTURE_2D);
+			glEnable(GL_BLEND);
+			glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+			glColor4f(1.0f, 1.0f, 1.0f, alpha);
+			glDrawArrays(GL_QUADS, 0, 4);
+			glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
+			glDisable(GL_BLEND);
+		}
+
+		glDisableClientState(GL_VERTEX_ARRAY);
+		glDisableClientState(GL_TEXTURE_COORD_ARRAY);
+
+		glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+		glBindTexture(GL_TEXTURE_2D, 0);
+		glDisable(GL_TEXTURE_2D);
+
+		return;
+	}
+
 	if (_postFilterMode == kPostFilterOff)
 		return;
 
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 b440e5a7639..efea67c9e19 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
@@ -191,9 +191,12 @@ bool BaseRenderOpenGL3DShader::initRenderer(int width, int height, bool windowed
 	glBindBuffer(GL_ARRAY_BUFFER, 0);
 
 	static const char *brightnessAttributes[] = { "position", "texcoord", nullptr };
-	_brightnessShader = OpenGL::Shader::fromFiles("wme_brightness_oknytt", brightnessAttributes);
-	_brightnessShader->enableVertexAttribute("position", _brightnessVBO, 2, GL_FLOAT, false, 4 * sizeof(GLfloat), 0);
-	_brightnessShader->enableVertexAttribute("texcoord", _brightnessVBO, 2, GL_FLOAT, false, 4 * sizeof(GLfloat), 8);
+	_brightnessShaderOknytt = OpenGL::Shader::fromFiles("wme_brightness_oknytt", brightnessAttributes);
+	_brightnessShaderOknytt->enableVertexAttribute("position", _brightnessVBO, 2, GL_FLOAT, false, 4 * sizeof(GLfloat), 0);
+	_brightnessShaderOknytt->enableVertexAttribute("texcoord", _brightnessVBO, 2, GL_FLOAT, false, 4 * sizeof(GLfloat), 8);
+	_brightnessShaderJulia = OpenGL::Shader::fromFiles("wme_brightness_julia", brightnessAttributes);
+	_brightnessShaderJulia->enableVertexAttribute("position", _brightnessVBO, 2, GL_FLOAT, false, 4 * sizeof(GLfloat), 0);
+	_brightnessShaderJulia->enableVertexAttribute("texcoord", _brightnessVBO, 2, GL_FLOAT, false, 4 * sizeof(GLfloat), 8);
 
 	glGenTextures(1, &_postfilterTexture);
 	glBindTexture(GL_TEXTURE_2D, _postfilterTexture);
@@ -1171,12 +1174,36 @@ void BaseRenderOpenGL3DShader::postfilter() {
 		glDisable(GL_BLEND);
 		glDisable(GL_CULL_FACE);
 
-		_brightnessShader->use();
+		_brightnessShaderOknytt->use();
 
 		glActiveTexture(GL_TEXTURE0);
 		glBindTexture(GL_TEXTURE_2D, _postfilterTexture);
-		glUniform1i(_brightnessShader->getUniformLocation("tex"), 0);
-		_brightnessShader->setUniform1f("brightnessValue", _brightnessOknytt);
+		glUniform1i(_brightnessShaderOknytt->getUniformLocation("tex"), 0);
+		_brightnessShaderOknytt->setUniform1f("brightnessValue", _brightnessOknytt);
+
+		g_system->presentBuffer();
+		glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, _width, _height, 0);
+
+		glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
+
+		glBindTexture(GL_TEXTURE_2D, 0);
+
+		return;
+	}
+
+	// This is for game 'J.U.L.I.A.'
+	if (_brightnessJulia != -1.0f) {
+		setup2D();
+		glViewport(0, 0, _width, _height);
+		glDisable(GL_BLEND);
+		glDisable(GL_CULL_FACE);
+
+		_brightnessShaderJulia->use();
+
+		glActiveTexture(GL_TEXTURE0);
+		glBindTexture(GL_TEXTURE_2D, _postfilterTexture);
+		glUniform1i(_brightnessShaderJulia->getUniformLocation("tex"), 0);
+		_brightnessShaderJulia->setUniform1f("brightnessValue", _brightnessJulia);
 
 		g_system->presentBuffer();
 		glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, _width, _height, 0);
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 d4d9099a012..e82c51de742 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.h
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.h
@@ -191,7 +191,8 @@ private:
 	OpenGL::Shader *_shadowVolumeShader{};
 	OpenGL::Shader *_lineShader{};
 	OpenGL::Shader *_postfilterShader{};
-	OpenGL::Shader *_brightnessShader{};
+	OpenGL::Shader *_brightnessShaderOknytt{};
+	OpenGL::Shader *_brightnessShaderJulia{};
 	GLuint _postfilterTexture;
 };
 
diff --git a/engines/wintermute/base/gfx/opengl/shaders/wme_brightness_julia.fragment b/engines/wintermute/base/gfx/opengl/shaders/wme_brightness_julia.fragment
new file mode 100644
index 00000000000..5f37f2ff105
--- /dev/null
+++ b/engines/wintermute/base/gfx/opengl/shaders/wme_brightness_julia.fragment
@@ -0,0 +1,11 @@
+varying vec2 texPos;
+
+uniform sampler2D tex;
+uniform float brightnessValue;
+
+OUTPUT
+
+void main() {
+	vec4 color = texture2D(tex, texPos);
+	outColor = vec4(pow(color.rgb, vec3(1.0 / brightnessValue)), 1.0);
+}
diff --git a/engines/wintermute/base/gfx/opengl/shaders/wme_brightness_julia.vertex b/engines/wintermute/base/gfx/opengl/shaders/wme_brightness_julia.vertex
new file mode 100644
index 00000000000..0ab72b31e36
--- /dev/null
+++ b/engines/wintermute/base/gfx/opengl/shaders/wme_brightness_julia.vertex
@@ -0,0 +1,9 @@
+in vec2 position;
+in vec2 texcoord;
+
+varying vec2 texPos;
+
+void main() {
+	gl_Position = vec4(position, 0.0, 1.0);
+	texPos = texcoord;
+}




More information about the Scummvm-git-logs mailing list