[Scummvm-git-logs] scummvm master -> 90114aefb29e7b6007105c4ad3dd514fc05a82d5
aquadran
noreply at scummvm.org
Sun Sep 28 14:21:51 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:
90114aefb2 WINTERMUTE: Restored DrawLine/DrawRect
Commit: 90114aefb29e7b6007105c4ad3dd514fc05a82d5
https://github.com/scummvm/scummvm/commit/90114aefb29e7b6007105c4ad3dd514fc05a82d5
Author: PaweÅ KoÅodziejski (aquadran at gmail.com)
Date: 2025-09-28T16:21:46+02:00
Commit Message:
WINTERMUTE: Restored DrawLine/DrawRect
Changed paths:
engines/wintermute/base/gfx/base_renderer.cpp
engines/wintermute/base/gfx/base_renderer.h
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/base_render_opengl3d_shader.h
engines/wintermute/base/gfx/osystem/base_render_osystem.cpp
engines/wintermute/base/gfx/osystem/base_render_osystem.h
diff --git a/engines/wintermute/base/gfx/base_renderer.cpp b/engines/wintermute/base/gfx/base_renderer.cpp
index c4ce8db9f35..6acc659693d 100644
--- a/engines/wintermute/base/gfx/base_renderer.cpp
+++ b/engines/wintermute/base/gfx/base_renderer.cpp
@@ -154,6 +154,23 @@ bool BaseRenderer::setup3D(Camera3D *camera, bool force) {
}
#endif
+//////////////////////////////////////////////////////////////////////////
+bool BaseRenderer::drawLine(int x1, int y1, int x2, int y2, uint32 color) {
+ return STATUS_FAILED;
+}
+
+//////////////////////////////////////////////////////////////////////////
+bool BaseRenderer::drawRect(int x1, int y1, int x2, int y2, uint32 color, int width) {
+ for (int i = 0; i < width; i++) {
+ drawLine(x1 + i, y1 + i, x2 - i, y1 + i, color); // up
+ drawLine(x1 + i, y2 - i, x2 - i + 1, y2 - i, color); // down
+
+ drawLine(x1 + i, y1 + i, x1 + i, y2 - i, color); // left
+ drawLine(x2 - i, y1 + i, x2 - i, y2 - i + 1, color); // right
+ }
+ return STATUS_OK;
+}
+
//////////////////////////////////////////////////////////////////////////
bool BaseRenderer::fillRect(int x, int y, int w, int h, uint32 color) {
return STATUS_FAILED;
diff --git a/engines/wintermute/base/gfx/base_renderer.h b/engines/wintermute/base/gfx/base_renderer.h
index e63ef8594f6..e912133d717 100644
--- a/engines/wintermute/base/gfx/base_renderer.h
+++ b/engines/wintermute/base/gfx/base_renderer.h
@@ -87,6 +87,8 @@ public:
*/
virtual bool fadeToColor(byte r, byte g, byte b, byte a) = 0;
+ virtual bool drawLine(int x1, int y1, int x2, int y2, uint32 color);
+ virtual bool drawRect(int x1, int y1, int x2, int y2, uint32 color, int width = 1);
virtual bool fillRect(int x, int y, int w, int h, uint32 color); // Unused outside indicator-display
BaseRenderer(BaseGame *inGame = nullptr);
~BaseRenderer() override;
diff --git a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
index f16468e0150..012ae45c0b2 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
@@ -539,6 +539,44 @@ bool BaseRenderOpenGL3D::setProjection() {
return setProjectionTransform(matProj);
}
+bool BaseRenderOpenGL3D::drawLine(int x1, int y1, int x2, int y2, uint32 color) {
+ setupLines();
+
+ x1 += _drawOffsetX;
+ x2 += _drawOffsetX;
+ y1 += _drawOffsetY;
+ y2 += _drawOffsetY;
+
+ // position coords
+ RectangleVertex 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);
+
+ glViewport(0, 0, _width, _height);
+ setProjection2D();
+
+ glColor4ub(r, g, b, a);
+
+ glEnableClientState(GL_VERTEX_ARRAY);
+
+ glVertexPointer(3, GL_FLOAT, sizeof(RectangleVertex), &vertices[0].x);
+
+ glDrawArrays(GL_LINES, 0, 2);
+
+ glDisableClientState(GL_VERTEX_ARRAY);
+
+ return true;
+}
+
bool BaseRenderOpenGL3D::fillRect(int x, int y, int w, int h, uint32 color) {
setupLines();
diff --git a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.h b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.h
index b2f12a31352..ad2031653c9 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.h
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.h
@@ -103,6 +103,7 @@ public:
bool clear() override;
bool setViewport(int left, int top, int right, int bottom) override;
+ bool drawLine(int x1, int y1, int x2, int y2, uint32 color) override;
bool fillRect(int x, int y, int w, int h, uint32 color) override;
DXMatrix *buildMatrix(DXMatrix* out, const DXVector2 *centre, const DXVector2 *scaling, float angle);
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 5c2f9a58188..4ef5c58d315 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
@@ -625,6 +625,51 @@ bool BaseRenderOpenGL3DShader::setProjection() {
return setProjectionTransform(matProj);
}
+bool BaseRenderOpenGL3DShader::drawLine(int x1, int y1, int x2, int y2, uint32 color) {
+ setupLines();
+
+ x1 += _drawOffsetX;
+ x2 += _drawOffsetX;
+ y1 += _drawOffsetY;
+ y2 += _drawOffsetY;
+
+ // position coords
+ RectangleVertex 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;
+
+ glBindBuffer(GL_ARRAY_BUFFER, _rectangleVBO);
+
+ glBufferSubData(GL_ARRAY_BUFFER, 0, 2 * sizeof(RectangleVertex), vertices);
+
+ byte a = RGBCOLGetA(color);
+ byte r = RGBCOLGetR(color);
+ byte g = RGBCOLGetG(color);
+ byte b = RGBCOLGetB(color);
+
+ Math::Vector4d colorValue;
+ colorValue.x() = r / 255.0f;
+ colorValue.y() = g / 255.0f;
+ colorValue.z() = b / 255.0f;
+ colorValue.w() = a / 255.0f;
+
+ _lineShader->use();
+ _lineShader->setUniform("color", colorValue);
+
+ glViewport(0, 0, _width, _height);
+
+ setProjection2D(_lineShader);
+
+ glDrawArrays(GL_LINES, 0, 2);
+
+ glBindBuffer(GL_ARRAY_BUFFER, 0);
+ return true;
+}
+
bool BaseRenderOpenGL3DShader::fillRect(int x, int y, int w, int h, uint32 color) {
setupLines();
diff --git a/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.h b/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.h
index 20aed511443..e1631ef2c3e 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.h
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.h
@@ -104,6 +104,7 @@ public:
bool clear() override;
bool setViewport(int left, int top, int right, int bottom) override;
+ bool drawLine(int x1, int y1, int x2, int y2, uint32 color) override;
bool fillRect(int x, int y, int w, int h, uint32 color) override;
DXMatrix *buildMatrix(DXMatrix* out, const DXVector2 *centre, const DXVector2 *scaling, float angle);
diff --git a/engines/wintermute/base/gfx/osystem/base_render_osystem.cpp b/engines/wintermute/base/gfx/osystem/base_render_osystem.cpp
index c2f2c896053..e94554a2eb8 100644
--- a/engines/wintermute/base/gfx/osystem/base_render_osystem.cpp
+++ b/engines/wintermute/base/gfx/osystem/base_render_osystem.cpp
@@ -448,6 +448,28 @@ void BaseRenderOSystem::drawFromSurface(RenderTicket *ticket, Common::Rect *dstR
ticket->drawToSurface(_renderSurface, dstRect, clipRect);
}
+//////////////////////////////////////////////////////////////////////////
+bool BaseRenderOSystem::drawLine(int x1, int y1, int x2, int y2, uint32 color) {
+ byte r = RGBCOLGetR(color);
+ byte g = RGBCOLGetG(color);
+ byte b = RGBCOLGetB(color);
+ byte a = RGBCOLGetA(color);
+
+ Common::Point32 point1, point2;
+ point1.x = x1;
+ point1.y = y1;
+ pointToScreen(&point1);
+
+ point2.x = x2;
+ point2.y = y2;
+ pointToScreen(&point2);
+
+ // TODO
+ //uint32 colorVal = _renderSurface->format.ARGBToColor(a, r, g, b);
+ //_renderSurface->drawLine(point1.x, point1.y, point2.x + 1, point2.y + 1, colorVal);
+ return STATUS_OK;
+}
+
//////////////////////////////////////////////////////////////////////////
bool BaseRenderOSystem::fillRect(int x, int y, int w, int h, uint32 color) {
// This function isn't used outside of indicator-displaying, and thus quite unused in
@@ -461,8 +483,6 @@ bool BaseRenderOSystem::fillRect(int x, int y, int w, int h, uint32 color) {
byte b = RGBCOLGetB(color);
byte a = RGBCOLGetA(color);
- //SDL_SetRenderDrawBlendMode(_renderer, SDL_BLENDMODE_BLEND);
-
Common::Rect fillRect(x, y, x + w, y + w);
modTargetRect(&fillRect);
diff --git a/engines/wintermute/base/gfx/osystem/base_render_osystem.h b/engines/wintermute/base/gfx/osystem/base_render_osystem.h
index 406e4684c67..be98fceb9f7 100644
--- a/engines/wintermute/base/gfx/osystem/base_render_osystem.h
+++ b/engines/wintermute/base/gfx/osystem/base_render_osystem.h
@@ -76,6 +76,7 @@ public:
bool fade(uint16 alpha) override;
bool fadeToColor(byte r, byte g, byte b, byte a) override;
+ bool drawLine(int x1, int y1, int x2, int y2, uint32 color) override;
bool fillRect(int x, int y, int w, int h, uint32 color) override;
BaseImage *takeScreenshot(int newWidth = 0, int newHeight = 0) override;
More information about the Scummvm-git-logs
mailing list