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; }