diff --git a/src/openrct2-ui/drawing/engines/opengl/OpenGLDrawingEngine.cpp b/src/openrct2-ui/drawing/engines/opengl/OpenGLDrawingEngine.cpp index 73ea92a35e..48c99a424d 100644 --- a/src/openrct2-ui/drawing/engines/opengl/OpenGLDrawingEngine.cpp +++ b/src/openrct2-ui/drawing/engines/opengl/OpenGLDrawingEngine.cpp @@ -361,16 +361,20 @@ public: void PaintWindows() override { WindowResetVisibilities(); - WindowUpdateAllViewports(); if (ClimateIsRaining() || ClimateIsSnowing() || ClimateIsSnowingHeavily()) { + WindowUpdateAllViewports(); // OpenGL doesn't support restoring pixels, always redraw. // TODO: Render the weather to a texture and use that instead. WindowDrawAll(_bitsDPI, 0, 0, static_cast(_width), static_cast(_height)); } else { + // Redraw dirty regions before updating the viewports, otherwise + // when viewports get panned, they copy dirty pixels + DrawAllDirtyBlocks(); + WindowUpdateAllViewports(); DrawAllDirtyBlocks(); } }