From c9bba5ee63b388dcfdf49810e0454f7cad92e75d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=CE=B6eh=20Matt?= <5415177+ZehMatt@users.noreply.github.com> Date: Sun, 6 Apr 2025 18:43:45 +0300 Subject: [PATCH] Workaround for OpenGL renderer viewport panning, turn it into a hybrid --- .../drawing/engines/opengl/OpenGLDrawingEngine.cpp | 7 ++++++- src/openrct2/interface/Viewport.cpp | 8 ++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/openrct2-ui/drawing/engines/opengl/OpenGLDrawingEngine.cpp b/src/openrct2-ui/drawing/engines/opengl/OpenGLDrawingEngine.cpp index 6ab230c533..b245d8d81f 100644 --- a/src/openrct2-ui/drawing/engines/opengl/OpenGLDrawingEngine.cpp +++ b/src/openrct2-ui/drawing/engines/opengl/OpenGLDrawingEngine.cpp @@ -343,6 +343,11 @@ public: void PaintWindows() override { + WindowResetVisibilities(); + + // Redraw dirty regions before updating the viewports, otherwise + // when viewports get panned, they copy dirty pixels + DrawAllDirtyBlocks(); WindowUpdateAllViewports(); DrawAllDirtyBlocks(); } @@ -435,7 +440,7 @@ public: DrawingEngineFlags GetFlags() override { - return DrawingEngineFlag::dirtyOptimisations; + return {}; } void InvalidateImage(uint32_t image) override diff --git a/src/openrct2/interface/Viewport.cpp b/src/openrct2/interface/Viewport.cpp index c5f2e088a6..101e5c3ea0 100644 --- a/src/openrct2/interface/Viewport.cpp +++ b/src/openrct2/interface/Viewport.cpp @@ -526,6 +526,10 @@ namespace OpenRCT2 WindowDrawAll(dpi, left, top, right, bottom); return; } + else + { + GfxInvalidateScreen(); + } } Viewport view_copy = *viewport; @@ -573,6 +577,10 @@ namespace OpenRCT2 DrawPixelInfo& dpi = DrawingEngineGetDpi(); ViewportShiftPixels(dpi, w, viewport, x_diff, y_diff); } + else + { + GfxInvalidateScreen(); + } *viewport = view_copy; }