[Scummvm-git-logs] scummvm master -> 83ebe6e1d11c9a989d7393ded7dd21892f614563
aquadran
noreply at scummvm.org
Tue May 20 08:58:59 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:
83ebe6e1d1 WINTERMUTE: Corrected texture mesh rendering for shader renderer
Commit: 83ebe6e1d11c9a989d7393ded7dd21892f614563
https://github.com/scummvm/scummvm/commit/83ebe6e1d11c9a989d7393ded7dd21892f614563
Author: PaweÅ KoÅodziejski (aquadran at gmail.com)
Date: 2025-05-20T10:58:52+02:00
Commit Message:
WINTERMUTE: Corrected texture mesh rendering for shader renderer
Changed paths:
engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
engines/wintermute/base/gfx/opengl/mesh3ds_opengl_shader.cpp
engines/wintermute/base/gfx/opengl/meshx_opengl.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_sprite.vertex
diff --git a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
index c13b3f5af7d..e7cadeca17c 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
@@ -285,8 +285,8 @@ bool BaseRenderOpenGL3D::setupLines() {
glEnable(GL_ALPHA_TEST);
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, value);
- glDisable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, 0);
+ glDisable(GL_TEXTURE_2D);
_lastTexture = nullptr;
}
@@ -792,8 +792,8 @@ void BaseRenderOpenGL3D::renderSceneGeometry(const BaseArray<AdWalkplane *> &pla
glFrontFace(GL_CW); // WME DX have CCW
glEnable(GL_BLEND);
glDisable(GL_ALPHA_TEST);
- glDisable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, 0);
+ glDisable(GL_TEXTURE_2D);
glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE);
glEnable(GL_COLOR_MATERIAL);
@@ -872,8 +872,8 @@ void BaseRenderOpenGL3D::renderShadowGeometry(const BaseArray<AdWalkplane *> &pl
// no texture
_lastTexture = nullptr;
- glDisable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, 0);
+ glDisable(GL_TEXTURE_2D);
glFrontFace(GL_CW); // WME DX have CCW
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 740c157a2c0..b33bd142c3f 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
@@ -300,8 +300,8 @@ bool BaseRenderOpenGL3DShader::setupLines() {
_lineShader->setUniform1f("alphaRef", _alphaRef);
_lineShader->setUniform("alphaTest", true);
- glDisable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, 0);
+ glDisable(GL_TEXTURE_2D);
_lastTexture = nullptr;
}
@@ -780,8 +780,8 @@ void BaseRenderOpenGL3DShader::renderShadowGeometry(const BaseArray<AdWalkplane
// no texture
_lastTexture = nullptr;
- glDisable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, 0);
+ glDisable(GL_TEXTURE_2D);
glFrontFace(GL_CW); // WME DX have CCW
diff --git a/engines/wintermute/base/gfx/opengl/mesh3ds_opengl_shader.cpp b/engines/wintermute/base/gfx/opengl/mesh3ds_opengl_shader.cpp
index b315d60a7fc..dd58112d873 100644
--- a/engines/wintermute/base/gfx/opengl/mesh3ds_opengl_shader.cpp
+++ b/engines/wintermute/base/gfx/opengl/mesh3ds_opengl_shader.cpp
@@ -57,6 +57,7 @@ void Mesh3DSOpenGLShader::render() {
_shader->enableVertexAttribute("position", _vertexBuffer, 3, GL_FLOAT, false, sizeof(Mesh3DSVertex), 0);
_shader->enableVertexAttribute("color", _vertexBuffer, 4, GL_FLOAT, false, sizeof(Mesh3DSVertex), 24);
+ _shader->setUniform("useTexture", false);
_shader->use(true);
diff --git a/engines/wintermute/base/gfx/opengl/meshx_opengl.cpp b/engines/wintermute/base/gfx/opengl/meshx_opengl.cpp
index 6aeb61d843a..cd606b4cd74 100644
--- a/engines/wintermute/base/gfx/opengl/meshx_opengl.cpp
+++ b/engines/wintermute/base/gfx/opengl/meshx_opengl.cpp
@@ -109,8 +109,8 @@ bool XMeshOpenGL::render(XModel *model) {
glEnable(GL_TEXTURE_2D);
static_cast<BaseSurfaceOpenGL3D *>(mat->getSurface())->setTexture();
} else {
- glDisable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, 0);
+ glDisable(GL_TEXTURE_2D);
}
if (mat->getEffect()) {
diff --git a/engines/wintermute/base/gfx/opengl/meshx_opengl_shader.cpp b/engines/wintermute/base/gfx/opengl/meshx_opengl_shader.cpp
index 6002e42f1a9..28618c3702e 100644
--- a/engines/wintermute/base/gfx/opengl/meshx_opengl_shader.cpp
+++ b/engines/wintermute/base/gfx/opengl/meshx_opengl_shader.cpp
@@ -130,22 +130,24 @@ bool XMeshOpenGLShader::render(XModel *model) {
_shader->enableVertexAttribute("position", _vertexBuffer, 3, GL_FLOAT, false, 4 * vertexSize, 0);
_shader->enableVertexAttribute("texcoord", _vertexBuffer, 2, GL_FLOAT, false, 4 * vertexSize, 4 * textureOffset);
_shader->enableVertexAttribute("normal", _vertexBuffer, 3, GL_FLOAT, false, 4 * vertexSize, 4 * normalOffset);
+ _shader->use(true);
for (uint32 i = 0; i < numAttrs; i++) {
Material *mat = _materials[attrs[i]._attribId];
if (mat->getSurface()) {
glEnable(GL_TEXTURE_2D);
static_cast<BaseSurfaceOpenGL3D *>(mat->getSurface())->setTexture();
+ _shader->setUniform("useTexture", true);
} else {
- glDisable(GL_TEXTURE_2D);
+ _shader->setUniform("useTexture", false);
glBindTexture(GL_TEXTURE_2D, 0);
+ glDisable(GL_TEXTURE_2D);
}
if (mat->getEffect()) {
renderEffect(mat);
} else {
Math::Vector4d diffuse(mat->_material._diffuse._data);
- _shader->use(true);
_shader->setUniform("diffuse", diffuse);
_shader->setUniform("ambient", diffuse);
}
@@ -202,7 +204,6 @@ bool XMeshOpenGLShader::update(FrameNode *parentFrame) {
void XMeshOpenGLShader::renderEffect(Material *material) {
Math::Vector4d diffuse(material->_material._diffuse._data);
- _shader->use(true);
_shader->setUniform("diffuse", diffuse);
_shader->setUniform("ambient", diffuse);
}
diff --git a/engines/wintermute/base/gfx/opengl/shaders/wme_modelx.fragment b/engines/wintermute/base/gfx/opengl/shaders/wme_modelx.fragment
index 7f6231e4d18..1952c7bd500 100644
--- a/engines/wintermute/base/gfx/opengl/shaders/wme_modelx.fragment
+++ b/engines/wintermute/base/gfx/opengl/shaders/wme_modelx.fragment
@@ -4,12 +4,17 @@ in vec4 Color;
uniform sampler2D tex;
uniform float alphaRef;
uniform UBOOL alphaTest;
+uniform UBOOL useTexture;
OUTPUT
void main() {
- vec4 texColor = texture(tex, Texcoord);
- outColor.rgba = texColor.rgba * Color.rgba;
+ if (useTexture) {
+ vec4 texColor = texture(tex, Texcoord);
+ outColor.rgba = texColor.rgba * Color.rgba;
+ } else {
+ outColor.rgba = Color.rgba;
+ }
if (UBOOL_TEST(alphaTest) && outColor.a < alphaRef) {
discard;
diff --git a/engines/wintermute/base/gfx/opengl/shaders/wme_sprite.vertex b/engines/wintermute/base/gfx/opengl/shaders/wme_sprite.vertex
index 76d15bc5e14..c01358b0a29 100644
--- a/engines/wintermute/base/gfx/opengl/shaders/wme_sprite.vertex
+++ b/engines/wintermute/base/gfx/opengl/shaders/wme_sprite.vertex
@@ -3,7 +3,6 @@ in vec2 texcoord;
in vec4 color;
uniform highp mat4 projMatrix;
-
uniform highp mat3 transform;
out vec2 Texcoord;
More information about the Scummvm-git-logs
mailing list