[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