[Scummvm-git-logs] scummvm master -> 0091e190f34d64b922e30d13f874d5eaa675f2de

aquadran noreply at scummvm.org
Sat May 24 14:47:13 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:
0091e190f3 WINTERMUTE: Fixed scene shadow rendering for shader renderer


Commit: 0091e190f34d64b922e30d13f874d5eaa675f2de
    https://github.com/scummvm/scummvm/commit/0091e190f34d64b922e30d13f874d5eaa675f2de
Author: Paweł Kołodziejski (aquadran at gmail.com)
Date: 2025-05-24T16:47:08+02:00

Commit Message:
WINTERMUTE: Fixed scene shadow rendering for shader renderer

Changed paths:
    engines/wintermute/base/gfx/3dmesh.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/mesh3ds_opengl.cpp
    engines/wintermute/base/gfx/opengl/mesh3ds_opengl.h
    engines/wintermute/base/gfx/opengl/mesh3ds_opengl_shader.cpp
    engines/wintermute/base/gfx/opengl/mesh3ds_opengl_shader.h


diff --git a/engines/wintermute/base/gfx/3dmesh.h b/engines/wintermute/base/gfx/3dmesh.h
index 3e3dc1eff31..de172d959e9 100644
--- a/engines/wintermute/base/gfx/3dmesh.h
+++ b/engines/wintermute/base/gfx/3dmesh.h
@@ -62,7 +62,7 @@ public:
 	virtual ~Mesh3DS();
 	virtual void fillVertexBuffer() = 0;
 	bool fillVertexBuffer(uint32 color);
-	virtual void render() = 0;
+	virtual void render(bool color = false) = 0;
 
 	Face3D *_faces;
 	uint16 _numFaces;
diff --git a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
index 048e4662cc5..a9e8c19651b 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
@@ -807,21 +807,21 @@ void BaseRenderOpenGL3D::renderSceneGeometry(const BaseArray<AdWalkplane *> &pla
 	// render walk planes
 	for (uint i = 0; i < planes.size(); i++) {
 		if (planes[i]->_active) {
-			planes[i]->_mesh->render();
+			planes[i]->_mesh->render(true);
 		}
 	}
 
 	// render blocks
 	for (uint i = 0; i < blocks.size(); i++) {
 		if (blocks[i]->_active) {
-			blocks[i]->_mesh->render();
+			blocks[i]->_mesh->render(true);
 		}
 	}
 
 	// render generic objects
 	for (uint i = 0; i < generics.size(); i++) {
 		if (generics[i]->_active) {
-			generics[i]->_mesh->render();
+			generics[i]->_mesh->render(true);
 		}
 	}
 
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 81c57354e73..71042f7ae07 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
@@ -900,21 +900,21 @@ void BaseRenderOpenGL3DShader::renderSceneGeometry(const BaseArray<AdWalkplane *
 
 	for (uint i = 0; i < planes.size(); i++) {
 		if (planes[i]->_active) {
-			planes[i]->_mesh->render();
+			planes[i]->_mesh->render(true);
 		}
 	}
 
 	// render blocks
 	for (uint i = 0; i < blocks.size(); i++) {
 		if (blocks[i]->_active) {
-			blocks[i]->_mesh->render();
+			blocks[i]->_mesh->render(true);
 		}
 	}
 
 	// render generic objects
 	for (uint i = 0; i < generics.size(); i++) {
 		if (generics[i]->_active) {
-			generics[i]->_mesh->render();
+			generics[i]->_mesh->render(true);
 		}
 	}
 
diff --git a/engines/wintermute/base/gfx/opengl/mesh3ds_opengl.cpp b/engines/wintermute/base/gfx/opengl/mesh3ds_opengl.cpp
index 7d08499a4eb..c00a452299a 100644
--- a/engines/wintermute/base/gfx/opengl/mesh3ds_opengl.cpp
+++ b/engines/wintermute/base/gfx/opengl/mesh3ds_opengl.cpp
@@ -42,14 +42,15 @@ void Mesh3DSOpenGL::fillVertexBuffer() {
 	_vertexData = (Mesh3DSVertex *)_vb.ptr();
 }
 
-void Mesh3DSOpenGL::render() {
+void Mesh3DSOpenGL::render(bool color) {
 	if (_vertexCount == 0)
 		return;
 
 	glEnableClientState(GL_VERTEX_ARRAY);
 	glEnableClientState(GL_COLOR_ARRAY);
 	glVertexPointer(3, GL_FLOAT, sizeof(Mesh3DSVertex), &_vertexData[0]._x);
-	glColorPointer(4, GL_FLOAT, sizeof(Mesh3DSVertex), &_vertexData[0]._r);
+	if (color)
+		glColorPointer(4, GL_FLOAT, sizeof(Mesh3DSVertex), &_vertexData[0]._r);
 	glDrawArrays(GL_TRIANGLES, 0, _vertexCount);
 	glDisableClientState(GL_COLOR_ARRAY);
 	glDisableClientState(GL_VERTEX_ARRAY);
diff --git a/engines/wintermute/base/gfx/opengl/mesh3ds_opengl.h b/engines/wintermute/base/gfx/opengl/mesh3ds_opengl.h
index 352f4a945f1..7756e5c4910 100644
--- a/engines/wintermute/base/gfx/opengl/mesh3ds_opengl.h
+++ b/engines/wintermute/base/gfx/opengl/mesh3ds_opengl.h
@@ -33,7 +33,7 @@ public:
 	Mesh3DSOpenGL(BaseGame *inGame);
 	~Mesh3DSOpenGL();
 	void fillVertexBuffer() override;
-	void render() override;
+	void render(bool color) override;
 
 private:
 	Mesh3DSVertex *_vertexData;
diff --git a/engines/wintermute/base/gfx/opengl/mesh3ds_opengl_shader.cpp b/engines/wintermute/base/gfx/opengl/mesh3ds_opengl_shader.cpp
index 2a65e90ed07..60bcbd14b7a 100644
--- a/engines/wintermute/base/gfx/opengl/mesh3ds_opengl_shader.cpp
+++ b/engines/wintermute/base/gfx/opengl/mesh3ds_opengl_shader.cpp
@@ -49,12 +49,13 @@ void Mesh3DSOpenGLShader::fillVertexBuffer() {
 	glBindBuffer(GL_ARRAY_BUFFER, 0);
 }
 
-void Mesh3DSOpenGLShader::render() {
+void Mesh3DSOpenGLShader::render(bool color) {
 	if (_vertexCount == 0)
 		return;
 
 	_shader->enableVertexAttribute("position", _vertexBuffer, 3, GL_FLOAT, false, sizeof(Mesh3DSVertex), 0);
-	_shader->enableVertexAttribute("color", _vertexBuffer, 4, GL_FLOAT, false, sizeof(Mesh3DSVertex), 24);
+	if (color)
+		_shader->enableVertexAttribute("color", _vertexBuffer, 4, GL_FLOAT, false, sizeof(Mesh3DSVertex), 24);
 	_shader->use(true);
 
 	glDrawArrays(GL_TRIANGLES, 0, _vertexCount);
diff --git a/engines/wintermute/base/gfx/opengl/mesh3ds_opengl_shader.h b/engines/wintermute/base/gfx/opengl/mesh3ds_opengl_shader.h
index 079eb002dae..4fb8bf23aea 100644
--- a/engines/wintermute/base/gfx/opengl/mesh3ds_opengl_shader.h
+++ b/engines/wintermute/base/gfx/opengl/mesh3ds_opengl_shader.h
@@ -35,7 +35,7 @@ public:
 	Mesh3DSOpenGLShader(BaseGame *inGame, OpenGL::Shader *shader);
 	~Mesh3DSOpenGLShader();
 	void fillVertexBuffer() override;
-	void render() override;
+	void render(bool color) override;
 
 private:
 	Mesh3DSVertex *_vertexData;




More information about the Scummvm-git-logs mailing list