[Scummvm-git-logs] scummvm master -> f3cebb3386405b5cc8865d65648228dcd0f22ce3
aquadran
noreply at scummvm.org
Wed Aug 5 11:55:41 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:
f3cebb3386 WINTERMUTE: Added D3D effect shader support for 'Miskatonic - Part One: The Inhuman Stain'
Commit: f3cebb3386405b5cc8865d65648228dcd0f22ce3
https://github.com/scummvm/scummvm/commit/f3cebb3386405b5cc8865d65648228dcd0f22ce3
Author: PaweÅ KoÅodziejski (aquadran at gmail.com)
Date: 2026-08-05T13:55:27+02:00
Commit Message:
WINTERMUTE: Added D3D effect shader support for 'Miskatonic - Part One: The Inhuman Stain'
Changed paths:
engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
engines/wintermute/base/gfx/opengl/meshx_opengl_shader.cpp
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 9e347ef4d7c..b6601b1b385 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
@@ -374,6 +374,9 @@ bool BaseRenderOpenGL3DShader::setup3D(Camera3D *camera, bool force) {
_shadowVolumeShader->setUniform("viewMatrix", viewMatrix);
_shadowVolumeShader->setUniform("projMatrix", projectionMatrix);
+ projectionMatrix.setData(_projectionMatrix);
+ _xmodelShader->setUniform("d3dProjMatrix", projectionMatrix);
+
return true;
}
diff --git a/engines/wintermute/base/gfx/opengl/meshx_opengl_shader.cpp b/engines/wintermute/base/gfx/opengl/meshx_opengl_shader.cpp
index 13c7972f63f..2393edb3a2a 100644
--- a/engines/wintermute/base/gfx/opengl/meshx_opengl_shader.cpp
+++ b/engines/wintermute/base/gfx/opengl/meshx_opengl_shader.cpp
@@ -153,6 +153,12 @@ bool XMeshOpenGLShader::render(XModel *model) {
_shader->setUniform("ambient", diffuse);
_shader->setUniform("effectId", 0);
+ Math::Vector4d shadowLightPos;
+ shadowLightPos.x() = model->_shadowLightPos._x;
+ shadowLightPos.y() = model->_shadowLightPos._y;
+ shadowLightPos.z() = model->_shadowLightPos._z;
+ shadowLightPos.w() = 0.0f;
+ _shader->setUniform("shadowLightPos", shadowLightPos);
setupEffect(mat, false);
size_t offsetFace = 4 * attrs[i]._faceStart * 3;
glDrawElements(GL_TRIANGLES, attrs[i]._faceCount * 3, GL_UNSIGNED_INT, (void *)offsetFace);
@@ -324,6 +330,11 @@ bool XMeshOpenGLShader::setupEffect(Material *material, bool secondPassNeeded) {
}
return true;
}
+ case 0x2AD31E3B: // "effects\\outer_glow.fx"
+ {
+ _shader->setUniform("effectId", 2);
+ return false;
+ }
default:
warning("Unknown effect hash: %x", effectId);
return false;
diff --git a/engines/wintermute/base/gfx/opengl/shaders/wme_modelx.fragment b/engines/wintermute/base/gfx/opengl/shaders/wme_modelx.fragment
index 3250a2ef177..422e5364868 100644
--- a/engines/wintermute/base/gfx/opengl/shaders/wme_modelx.fragment
+++ b/engines/wintermute/base/gfx/opengl/shaders/wme_modelx.fragment
@@ -36,5 +36,7 @@ void main() {
} else {
outColor = Color;
}
+ } else if (effectId == 2) {
+ outColor = texture(tex, Texcoord) * max(vec4(0.4), Color);
}
}
diff --git a/engines/wintermute/base/gfx/opengl/shaders/wme_modelx.vertex b/engines/wintermute/base/gfx/opengl/shaders/wme_modelx.vertex
index 96df1acdda2..18fff5b4c38 100644
--- a/engines/wintermute/base/gfx/opengl/shaders/wme_modelx.vertex
+++ b/engines/wintermute/base/gfx/opengl/shaders/wme_modelx.vertex
@@ -6,10 +6,12 @@ uniform highp mat4 modelMatrix;
uniform highp mat4 viewMatrix;
uniform highp mat4 projMatrix;
uniform highp mat4 normalMatrix;
+uniform highp mat4 d3dProjMatrix;
uniform vec4 ambientLight;
uniform vec4 diffuse;
uniform vec4 ambient;
+uniform vec4 shadowLightPos;
uniform int effectId;
uniform UBOOL effectSecondPass;
@@ -93,5 +95,14 @@ void main() {
}
gl_Position = pos;
+ } else if (effectId == 2) {
+ Texcoord = texcoord;
+
+ vec4 viewCoords = viewMatrix * modelMatrix * vec4(position, 1.0);
+ gl_Position = projMatrix * viewCoords;
+
+ vec4 lightDir = vec4((viewMatrix * shadowLightPos).xyz, 0.0) - d3dProjMatrix * viewCoords;
+ lightDir /= length(lightDir);
+ Color = vec4(dot(normal, lightDir.xyz));
}
}
More information about the Scummvm-git-logs
mailing list