From fa340cb5a1ff5045e2115859b3533e25f1195b97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=CE=B6eh=20Matt?= <5415177+ZehMatt@users.noreply.github.com> Date: Wed, 6 Oct 2021 17:24:39 +0300 Subject: [PATCH] Add parallel drawing if engine allows it --- src/openrct2/interface/Viewport.cpp | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/src/openrct2/interface/Viewport.cpp b/src/openrct2/interface/Viewport.cpp index c16ddeb253..73450b4978 100644 --- a/src/openrct2/interface/Viewport.cpp +++ b/src/openrct2/interface/Viewport.cpp @@ -931,8 +931,6 @@ static void viewport_paint_column(paint_session* session) { PaintDrawMoneyStructs(&session->DPI, session->PSStringHead); } - - PaintSessionFree(session); } /** @@ -1011,7 +1009,7 @@ void viewport_paint( recorded_sessions->resize(columnCount); } - // Splits the area into 32 pixel columns and renders them + // Generate and sort columns. for (x = alignedX; x < rightBorder; x += 32, index++) { paint_session* session = PaintSessionAlloc(&dpi1, viewFlags); @@ -1052,9 +1050,27 @@ void viewport_paint( _paintJobs->Join(); } - for (auto column : _paintColumns) + // Paint columns. + for (auto* session : _paintColumns) { - viewport_paint_column(column); + if (useParallelDrawing) + { + _paintJobs->AddTask([session]() -> void { viewport_paint_column(session); }); + } + else + { + viewport_paint_column(session); + } + } + if (useParallelDrawing) + { + _paintJobs->Join(); + } + + // Release resources. + for (auto* session : _paintColumns) + { + PaintSessionFree(session); } }