[Scummvm-git-logs] scummvm master -> 4ad957333a33e5ace6e8a824bc270e8cce761a3a
aquadran
noreply at scummvm.org
Fri May 23 09:17:38 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:
4ad957333a WINTERMUTE: Implemented fog support for shader renderer
Commit: 4ad957333a33e5ace6e8a824bc270e8cce761a3a
https://github.com/scummvm/scummvm/commit/4ad957333a33e5ace6e8a824bc270e8cce761a3a
Author: PaweÅ KoÅodziejski (aquadran at gmail.com)
Date: 2025-05-23T11:17:33+02:00
Commit Message:
WINTERMUTE: Implemented fog support for shader renderer
Changed paths:
engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
engines/wintermute/base/gfx/opengl/shaders/wme_flat_shadow_modelx.fragment
engines/wintermute/base/gfx/opengl/shaders/wme_modelx.fragment
engines/wintermute/base/gfx/opengl/shaders/wme_modelx.vertex
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 df6b562cc84..371190e05ef 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
@@ -278,14 +278,17 @@ bool BaseRenderOpenGL3DShader::setup3D(Camera3D *camera, bool force) {
_gameRef->getFogParams(&fogEnabled, &fogColor, &fogStart, &fogEnd);
if (fogEnabled) {
- // TODO: Implement fog
- GLfloat color[4] = { RGBCOLGetR(fogColor) / 255.0f,
- RGBCOLGetG(fogColor) / 255.0f,
- RGBCOLGetB(fogColor) / 255.0f,
- RGBCOLGetA(fogColor) / 255.0f };
- debug(5, "BaseRenderOpenGL3DShader::setup3D fog not yet implemented! [%f %f %f %f]", color[0], color[1], color[2], color[3]);
+ Math::Vector4d color;
+ color.x() = RGBCOLGetR(fogColor) / 255.0f;
+ color.y() = RGBCOLGetG(fogColor) / 255.0f;
+ color.z() = RGBCOLGetB(fogColor) / 255.0f;
+ color.w() = RGBCOLGetA(fogColor) / 255.0f;
+ _xmodelShader->setUniform("enableFog", true);
+ _xmodelShader->setUniform("fogColor", color);
+ _xmodelShader->setUniform1f("fogStart", fogStart);
+ _xmodelShader->setUniform1f("fogEnd", fogEnd);
} else {
- // TODO: Disable fog in shader
+ _xmodelShader->setUniform("enableFog", false);
}
setProjection();
diff --git a/engines/wintermute/base/gfx/opengl/shaders/wme_flat_shadow_modelx.fragment b/engines/wintermute/base/gfx/opengl/shaders/wme_flat_shadow_modelx.fragment
index 0296908835f..46d6aa9a300 100644
--- a/engines/wintermute/base/gfx/opengl/shaders/wme_flat_shadow_modelx.fragment
+++ b/engines/wintermute/base/gfx/opengl/shaders/wme_flat_shadow_modelx.fragment
@@ -1,5 +1,4 @@
uniform vec4 shadowColor;
-uniform float alphaRef;
OUTPUT
diff --git a/engines/wintermute/base/gfx/opengl/shaders/wme_modelx.fragment b/engines/wintermute/base/gfx/opengl/shaders/wme_modelx.fragment
index 1952c7bd500..9fde1f0b73b 100644
--- a/engines/wintermute/base/gfx/opengl/shaders/wme_modelx.fragment
+++ b/engines/wintermute/base/gfx/opengl/shaders/wme_modelx.fragment
@@ -5,15 +5,22 @@ uniform sampler2D tex;
uniform float alphaRef;
uniform UBOOL alphaTest;
uniform UBOOL useTexture;
+uniform UBOOL enableFog;
+uniform vec4 fogColor;
+
+varying float fogFactor;
OUTPUT
void main() {
+ outColor = Color;
+
if (useTexture) {
- vec4 texColor = texture(tex, Texcoord);
- outColor.rgba = texColor.rgba * Color.rgba;
- } else {
- outColor.rgba = Color.rgba;
+ outColor = texture(tex, Texcoord) * outColor;
+ }
+
+ if (enableFog) {
+ outColor = mix(fogColor, outColor, fogFactor);
}
if (UBOOL_TEST(alphaTest) && outColor.a < alphaRef) {
diff --git a/engines/wintermute/base/gfx/opengl/shaders/wme_modelx.vertex b/engines/wintermute/base/gfx/opengl/shaders/wme_modelx.vertex
index 0e9a37ab539..b3f88d386ec 100644
--- a/engines/wintermute/base/gfx/opengl/shaders/wme_modelx.vertex
+++ b/engines/wintermute/base/gfx/opengl/shaders/wme_modelx.vertex
@@ -8,10 +8,13 @@ uniform highp mat4 projMatrix;
uniform highp mat4 normalMatrix;
uniform vec4 ambientLight;
-
uniform vec4 diffuse;
uniform vec4 ambient;
+uniform float fogStart;
+uniform float fogEnd;
+varying float fogFactor;
+
struct Light {
vec4 _position;
vec4 _direction;
@@ -36,6 +39,9 @@ void main() {
vec3 light = vec3(0.0, 0.0, 0.0);
vec3 normalEye = normalize((normalMatrix * vec4(normal, 0.0)).xyz);
+ float fogCoord = abs(viewCoords.z);
+ fogFactor = clamp((fogEnd - fogCoord) / (fogEnd - fogStart), 0.0, 1.0);
+
for (int i = 0; i < maxLights; ++i) {
if (lights[i].enabled < 0.0) {
continue;
More information about the Scummvm-git-logs
mailing list