[Scummvm-git-logs] scummvm master -> 2922bcdbe47871ee31602e404077765c8cbd08ca

aquadran noreply at scummvm.org
Sun May 18 14:47:10 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:
2922bcdbe4 WINTERMUTE: Synced with original code for DrawLine in renderer


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

Commit Message:
WINTERMUTE: Synced with original code for DrawLine in renderer

Changed paths:
    engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
    engines/wintermute/base/gfx/opengl/base_render_opengl3d.h
    engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
    engines/wintermute/base/gfx/opengl/shaders/wme_line.vertex


diff --git a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
index 660ee90cbc8..9585e29a410 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
@@ -378,10 +378,10 @@ bool BaseRenderOpenGL3D::drawSpriteEx(BaseSurface *tex, const Wintermute::Rect32
 	byte b = RGBCOLGetB(color);
 
 	for (int i = 0; i < 4; ++i) {
-		vertices[i].r = r;
-		vertices[i].g = g;
-		vertices[i].b = b;
-		vertices[i].a = a;
+		vertices[i].r = r / 255.0f;
+		vertices[i].g = g / 255.0f;
+		vertices[i].b = b / 255.0f;
+		vertices[i].a = a / 255.0f;
 	}
 
 	setSpriteBlendMode(blendMode);
@@ -413,7 +413,7 @@ bool BaseRenderOpenGL3D::drawSpriteEx(BaseSurface *tex, const Wintermute::Rect32
 
 	glVertexPointer(3, GL_FLOAT, sizeof(SpriteVertex), &vertices[0].x);
 	glTexCoordPointer(2, GL_FLOAT, sizeof(SpriteVertex), &vertices[0].u);
-	glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(SpriteVertex), &vertices[0].r);
+	glColorPointer(4, GL_FLOAT, sizeof(SpriteVertex), &vertices[0].r);
 
 	glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
 
@@ -529,16 +529,32 @@ bool BaseRenderOpenGL3D::drawLine(int x1, int y1, int x2, int y2, uint32 color)
 	y1 += _drawOffsetY;
 	y2 += _drawOffsetY;
 
+	// position coords
+	LineVertex vertices[2];
+	vertices[0].x = x1;
+	vertices[0].y = y1;
+	vertices[0].z = 0.9f;
+	vertices[1].x = x2;
+	vertices[1].y = y2;
+	vertices[1].z = 0.9f;
+
 	byte a = RGBCOLGetA(color);
 	byte r = RGBCOLGetR(color);
 	byte g = RGBCOLGetG(color);
 	byte b = RGBCOLGetB(color);
 
-	glBegin(GL_LINES);
-		glColor4ub(r, g, b, a);
-		glVertex3f(x1, _height - y1, 0.9f);
-		glVertex3f(x2, _height - y2, 0.9f);
-	glEnd();
+	glViewport(0, 0, _width, _height);
+	setProjection2D();
+
+	glColor4ub(r, g, b, a);
+
+	glEnableClientState(GL_VERTEX_ARRAY);
+
+	glVertexPointer(3, GL_FLOAT, sizeof(LineVertex), &vertices[0].x);
+
+	glDrawArrays(GL_LINES, 0, 2);
+
+	glDisableClientState(GL_VERTEX_ARRAY);
 
 	return true;
 }
diff --git a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.h b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.h
index 42c05fad5eb..fc8173d7730 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.h
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.h
@@ -55,6 +55,12 @@ class BaseRenderOpenGL3D : public BaseRenderer3D {
 		uint8 a;
 	};
 
+	struct LineVertex {
+		float x;
+		float y;
+		float z;
+	};
+
 	struct SimpleShadowVertex {
 		float u;
 		float v;
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 fc1257819dd..3dc4c39d08c 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
@@ -114,12 +114,12 @@ bool BaseRenderOpenGL3DShader::initRenderer(int width, int height, bool windowed
 
 	glGenBuffers(1, &_lineVBO);
 	glBindBuffer(GL_ARRAY_BUFFER, _lineVBO);
-	glBufferData(GL_ARRAY_BUFFER, 2 * 8, nullptr, GL_DYNAMIC_DRAW);
+	glBufferData(GL_ARRAY_BUFFER, 2 * 12, nullptr, GL_DYNAMIC_DRAW);
 	glBindBuffer(GL_ARRAY_BUFFER, 0);
 
 	static const char *lineAttributes[] = { "position", nullptr };
 	_lineShader = OpenGL::Shader::fromFiles("wme_line", lineAttributes);
-	_lineShader->enableVertexAttribute("position", _lineVBO, 2, GL_FLOAT, false, 8, 0);
+	_lineShader->enableVertexAttribute("position", _lineVBO, 3, GL_FLOAT, false, 12, 0);
 
 
 
@@ -236,11 +236,10 @@ bool BaseRenderOpenGL3DShader::setup3D(Camera3D *camera, bool force) {
 		_gameRef->getFogParams(&fogEnabled, &fogColor, &fogStart, &fogEnd);
 		if (fogEnabled) {
 			// TODO: Implement fog
-			GLfloat color[4];
-			color[0] = RGBCOLGetR(fogColor) / 255.0f;
-			color[1] = RGBCOLGetG(fogColor) / 255.0f;
-			color[2] = RGBCOLGetB(fogColor) / 255.0f;
-			color[3] = RGBCOLGetA(fogColor) / 255.0f;
+			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]);
 		} else {
 			// TODO: Disable fog in shader
@@ -540,16 +539,23 @@ bool BaseRenderOpenGL3DShader::setProjection() {
 }
 
 bool BaseRenderOpenGL3DShader::drawLine(int x1, int y1, int x2, int y2, uint32 color) {
-	glBindBuffer(GL_ARRAY_BUFFER, _lineVBO);
-
-	float lineCoords[4];
+	x1 += _drawOffsetX;
+	x2 += _drawOffsetX;
+	y1 += _drawOffsetY;
+	y2 += _drawOffsetY;
 
+	// position coords
+	float lineCoords[6];
 	lineCoords[0] = x1;
-	lineCoords[1] = _height - y1;
-	lineCoords[2] = x2;
-	lineCoords[3] = _height - y2;
+	lineCoords[1] = y1;
+	lineCoords[2] = 0.9f;
+	lineCoords[3] = x2;
+	lineCoords[4] = y2;
+	lineCoords[5] = 0.9f;
+
+	glBindBuffer(GL_ARRAY_BUFFER, _lineVBO);
 
-	glBufferSubData(GL_ARRAY_BUFFER, 0, 2 * 8, lineCoords);
+	glBufferSubData(GL_ARRAY_BUFFER, 0, 2 * 12, lineCoords);
 
 	byte a = RGBCOLGetA(color);
 	byte r = RGBCOLGetR(color);
@@ -564,6 +570,9 @@ bool BaseRenderOpenGL3DShader::drawLine(int x1, int y1, int x2, int y2, uint32 c
 
 	_lineShader->use();
 	_lineShader->setUniform("color", colorValue);
+
+	glViewport(0, 0, _width, _height);
+
 	setProjection2D(_lineShader);
 
 	glDrawArrays(GL_LINES, 0, 2);
diff --git a/engines/wintermute/base/gfx/opengl/shaders/wme_line.vertex b/engines/wintermute/base/gfx/opengl/shaders/wme_line.vertex
index a2096ae4d8b..479282bc572 100644
--- a/engines/wintermute/base/gfx/opengl/shaders/wme_line.vertex
+++ b/engines/wintermute/base/gfx/opengl/shaders/wme_line.vertex
@@ -1,4 +1,4 @@
-in vec2 position;
+in vec3 position;
 
 uniform highp mat4 projMatrix;
 uniform vec4 color;
@@ -6,6 +6,6 @@ uniform vec4 color;
 out vec4 Color;
 
 void main() {
-	gl_Position = projMatrix * vec4(position, 0.0, 1.0);
+	gl_Position = projMatrix * vec4(position, 1.0);
 	Color = color;
 }




More information about the Scummvm-git-logs mailing list