[Scummvm-git-logs] scummvm master -> 3ff5054f0276af2a17e69392374dac95d09330d8

aquadran noreply at scummvm.org
Fri May 23 08:06:32 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:
3ff5054f02 WINTERMUTE: Implemented debug scene draw for shader renderer


Commit: 3ff5054f0276af2a17e69392374dac95d09330d8
    https://github.com/scummvm/scummvm/commit/3ff5054f0276af2a17e69392374dac95d09330d8
Author: Paweł Kołodziejski (aquadran at gmail.com)
Date: 2025-05-23T10:06:27+02:00

Commit Message:
WINTERMUTE: Implemented debug scene draw 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/mesh3ds_opengl_shader.h


diff --git a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
index 7fad6916fc1..7b106705813 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
@@ -825,59 +825,6 @@ void BaseRenderOpenGL3D::renderSceneGeometry(const BaseArray<AdWalkplane *> &pla
 		}
 	}
 
-	// render lights lines
-	for (uint i = 0; i < lights.size(); ++i) {
-		if (lights[i]->_active) {
-			LineVertex vertices[12];
-			vertices[0].x = lights[i]->_pos._x;
-			vertices[0].y = lights[i]->_pos._y;
-			vertices[0].z = lights[i]->_pos._z;
-			vertices[1].x = lights[i]->_pos._x + 1000.0f;
-			vertices[1].y = lights[i]->_pos._y;
-			vertices[1].z = lights[i]->_pos._z;
-			vertices[2].x = lights[i]->_pos._x;
-			vertices[2].y = lights[i]->_pos._y;
-			vertices[2].z = lights[i]->_pos._z;
-			vertices[3].x = lights[i]->_pos._x;
-			vertices[3].y = lights[i]->_pos._y + 1000.0f;
-			vertices[3].z = lights[i]->_pos._z;
-			vertices[4].x = lights[i]->_pos._x;
-			vertices[4].y = lights[i]->_pos._y;
-			vertices[4].z = lights[i]->_pos._z;
-			vertices[5].x = lights[i]->_pos._x;
-			vertices[5].y = lights[i]->_pos._y;
-			vertices[5].z = lights[i]->_pos._z + 1000.0f;
-			vertices[6].x = lights[i]->_pos._x;
-			vertices[6].y = lights[i]->_pos._y;
-			vertices[6].z = lights[i]->_pos._z;
-			vertices[7].x = lights[i]->_pos._x - 1000.0f;
-			vertices[7].y = lights[i]->_pos._y;
-			vertices[7].z = lights[i]->_pos._z;
-			vertices[8].x = lights[i]->_pos._x;
-			vertices[8].y = lights[i]->_pos._y;
-			vertices[8].z = lights[i]->_pos._z;
-			vertices[9].x = lights[i]->_pos._x;
-			vertices[9].y = lights[i]->_pos._y - 1000.0f;
-			vertices[9].z = lights[i]->_pos._z;
-			vertices[10].x = lights[i]->_pos._x;
-			vertices[10].y = lights[i]->_pos._y;
-			vertices[10].z = lights[i]->_pos._z;
-			vertices[11].x = lights[i]->_pos._x;
-			vertices[11].y = lights[i]->_pos._y;
-			vertices[11].z = lights[i]->_pos._z - 1000.0f;
-
-			glColor3f(1.0f, 1.0f, 0.0f);
-
-			glEnableClientState(GL_VERTEX_ARRAY);
-
-			glVertexPointer(3, GL_FLOAT, sizeof(LineVertex), &vertices[0].x);
-
-			glDrawArrays(GL_LINES, 0, 12);
-
-			glDisableClientState(GL_VERTEX_ARRAY);
-		}
-	}
-
 	// render waypoints
 	AdScene *scene = ((AdGame *)_gameRef)->_scene;
 	AdSceneGeometry *geom = scene->_geom;
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 8bc746b8869..df6b562cc84 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
@@ -20,11 +20,16 @@
  */
 
 #include "engines/wintermute/ad/ad_block.h"
+#include "engines/wintermute/ad/ad_game.h"
 #include "engines/wintermute/ad/ad_generic.h"
+#include "engines/wintermute/ad/ad_scene.h"
+#include "engines/wintermute/ad/ad_scene_geometry.h"
 #include "engines/wintermute/ad/ad_walkplane.h"
+#include "engines/wintermute/ad/ad_waypoint_group3d.h"
 #include "engines/wintermute/base/base_game.h"
 #include "engines/wintermute/base/gfx/base_image.h"
 #include "engines/wintermute/base/gfx/3dcamera.h"
+#include "engines/wintermute/base/gfx/3dlight.h"
 
 #include "graphics/opengl/system_headers.h"
 
@@ -97,7 +102,7 @@ bool BaseRenderOpenGL3DShader::initRenderer(int width, int height, bool windowed
 
 	glGenBuffers(1, &_spriteVBO);
 	glBindBuffer(GL_ARRAY_BUFFER, _spriteVBO);
-	glBufferData(GL_ARRAY_BUFFER, 4 * sizeof(SpriteVertex), nullptr, GL_DYNAMIC_DRAW);
+	glBufferData(GL_ARRAY_BUFFER, 4 * sizeof(SpriteVertex), nullptr, GL_STATIC_DRAW);
 	glBindBuffer(GL_ARRAY_BUFFER, 0);
 
 	static const char *spriteAttributes[] = { "position", "texcoord", "color", nullptr };
@@ -145,7 +150,7 @@ bool BaseRenderOpenGL3DShader::initRenderer(int width, int height, bool windowed
 
 	glGenBuffers(1, &_fadeVBO);
 	glBindBuffer(GL_ARRAY_BUFFER, _fadeVBO);
-	glBufferData(GL_ARRAY_BUFFER, 4 * sizeof(LineVertex), nullptr, GL_DYNAMIC_DRAW);
+	glBufferData(GL_ARRAY_BUFFER, 4 * sizeof(LineVertex), nullptr, GL_STATIC_DRAW);
 	glBindBuffer(GL_ARRAY_BUFFER, 0);
 
 	static const char *fadeAttributes[] = { "position", nullptr };
@@ -154,7 +159,7 @@ bool BaseRenderOpenGL3DShader::initRenderer(int width, int height, bool windowed
 
 	glGenBuffers(1, &_lineVBO);
 	glBindBuffer(GL_ARRAY_BUFFER, _lineVBO);
-	glBufferData(GL_ARRAY_BUFFER, 2 * sizeof(LineVertex), nullptr, GL_DYNAMIC_DRAW);
+	glBufferData(GL_ARRAY_BUFFER, 2 * sizeof(LineVertex), nullptr, GL_STATIC_DRAW);
 	glBindBuffer(GL_ARRAY_BUFFER, 0);
 
 	static const char *lineAttributes[] = { "position", nullptr };
@@ -289,13 +294,13 @@ bool BaseRenderOpenGL3DShader::setup3D(Camera3D *camera, bool force) {
 	Math::Matrix4 viewMatrix, projectionMatrix;
 	viewMatrix.setData(_viewMatrix);
 	projectionMatrix.setData(_glProjectionMatrix);
+
 	_xmodelShader->use();
 	_xmodelShader->setUniform("viewMatrix", viewMatrix);
 	_xmodelShader->setUniform("projMatrix", projectionMatrix);
 	_xmodelShader->setUniform1f("alphaRef", _alphaRef);
 	_xmodelShader->setUniform("alphaTest", true);
 
-
 	_geometryShader->use();
 	_geometryShader->setUniform("viewMatrix", viewMatrix);
 	_geometryShader->setUniform("projMatrix", projectionMatrix);
@@ -853,7 +858,62 @@ void BaseRenderOpenGL3DShader::setLightParameters(int index, const DXVector3 &po
 // backend layer AdSceneGeometry::Render
 void BaseRenderOpenGL3DShader::renderSceneGeometry(const BaseArray<AdWalkplane *> &planes, const BaseArray<AdBlock *> &blocks,
 	                                           const BaseArray<AdGeneric *> &generics, const BaseArray<Light3D *> &lights, Camera3D *camera) {
-	// don't render scene geometry, as OpenGL ES 2 has no wireframe rendering and we don't have a shader alternative yet
+	DXMatrix matIdentity;
+	DXMatrixIdentity(&matIdentity);
+
+	if (camera)
+		_gameRef->_renderer3D->setup3D(camera, true);
+	
+	setWorldTransform(matIdentity);
+
+	glDisable(GL_DEPTH_TEST);
+	glFrontFace(GL_CW); // WME DX have CCW
+	glEnable(GL_BLEND);
+	glBindTexture(GL_TEXTURE_2D, 0);
+	glDisable(GL_TEXTURE_2D);
+
+	for (uint i = 0; i < planes.size(); i++) {
+		if (planes[i]->_active) {
+			planes[i]->_mesh->render();
+		}
+	}
+
+	// render blocks
+	for (uint i = 0; i < blocks.size(); i++) {
+		if (blocks[i]->_active) {
+			blocks[i]->_mesh->render();
+		}
+	}
+
+	// render generic objects
+	for (uint i = 0; i < generics.size(); i++) {
+		if (generics[i]->_active) {
+			generics[i]->_mesh->render();
+		}
+	}
+
+	// render waypoints
+	AdScene *scene = ((AdGame *)_gameRef)->_scene;
+	AdSceneGeometry *geom = scene->_geom;
+	if (geom && geom->_wptMarker) {
+		DXMatrix viewMat, projMat, worldMat;
+		DXVector3 vec2d(0.0f, 0.0f, 0.0f);
+
+		getViewTransform(&viewMat);
+		getProjectionTransform(&projMat);
+		DXMatrixIdentity(&worldMat);
+
+		DXViewport vport = getViewPort();
+
+		setup2D();
+
+		for (uint i = 0; i < geom->_waypointGroups.size(); i++) {
+			for (uint j = 0; j < geom->_waypointGroups[i]->_points.size(); j++) {
+				DXVec3Project(&vec2d, geom->_waypointGroups[i]->_points[j], &vport, &projMat, &viewMat, &worldMat);
+				geom->_wptMarker->display(vec2d._x + scene->getOffsetLeft() - _drawOffsetX, vec2d._y + scene->getOffsetTop() - _drawOffsetY);
+			}
+		}
+	}
 }
 
 // backend layer 3DShadowVolume::Render()
@@ -967,6 +1027,9 @@ bool BaseRenderOpenGL3DShader::setWorldTransform(const DXMatrix &transform) {
 	_xmodelShader->setUniform("modelMatrix", modelMatrix);
 	_xmodelShader->setUniform("normalMatrix", normalMatrix);
 
+	_geometryShader->use();
+	_geometryShader->setUniform("modelMatrix", modelMatrix);
+
 	_simpleShadowShader->use();
 	_simpleShadowShader->setUniform("modelMatrix", modelMatrix);
 
diff --git a/engines/wintermute/base/gfx/opengl/mesh3ds_opengl_shader.cpp b/engines/wintermute/base/gfx/opengl/mesh3ds_opengl_shader.cpp
index dd58112d873..2a65e90ed07 100644
--- a/engines/wintermute/base/gfx/opengl/mesh3ds_opengl_shader.cpp
+++ b/engines/wintermute/base/gfx/opengl/mesh3ds_opengl_shader.cpp
@@ -34,12 +34,10 @@ Mesh3DSOpenGLShader::Mesh3DSOpenGLShader(BaseGame *inGame, OpenGL::Shader *shade
 	_vertexData = nullptr;
 
 	glGenBuffers(1, &_vertexBuffer);
-	glGenBuffers(1, &_indexBuffer);
 }
 
 Mesh3DSOpenGLShader::~Mesh3DSOpenGLShader() {
 	glDeleteBuffers(1, &_vertexBuffer);
-	glDeleteBuffers(1, &_indexBuffer);
 }
 
 void Mesh3DSOpenGLShader::fillVertexBuffer() {
@@ -57,8 +55,6 @@ 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);
 
 	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 420619f9836..079eb002dae 100644
--- a/engines/wintermute/base/gfx/opengl/mesh3ds_opengl_shader.h
+++ b/engines/wintermute/base/gfx/opengl/mesh3ds_opengl_shader.h
@@ -41,7 +41,6 @@ private:
 	Mesh3DSVertex *_vertexData;
 	uint16 _vertexCount;
 	GLuint _vertexBuffer;
-	GLuint _indexBuffer;
 	OpenGL::Shader *_shader;
 };
 




More information about the Scummvm-git-logs mailing list