From 921c1d8daa3c5759101cc170efa7efde274197f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=CE=B6eh=20Matt?= <5415177+ZehMatt@users.noreply.github.com> Date: Sat, 5 Apr 2025 17:36:43 +0300 Subject: [PATCH] Make the invalidation grid size dynamic --- src/openrct2/drawing/InvalidationGrid.cpp | 7 ++++++- src/openrct2/drawing/InvalidationGrid.h | 3 ++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/openrct2/drawing/InvalidationGrid.cpp b/src/openrct2/drawing/InvalidationGrid.cpp index 01535e8cf9..992dfc81c6 100644 --- a/src/openrct2/drawing/InvalidationGrid.cpp +++ b/src/openrct2/drawing/InvalidationGrid.cpp @@ -33,6 +33,11 @@ namespace OpenRCT2::Drawing _rowCount = (height / blockHeight) + 1; _screenWidth = width; _screenHeight = height; + + _blocks.resize(_columnCount * _rowCount); + _blocks.shrink_to_fit(); + + std::fill(_blocks.begin(), _blocks.end(), 0); } void InvalidationGrid::invalidate(int32_t left, int32_t top, int32_t right, int32_t bottom) noexcept @@ -58,7 +63,7 @@ namespace OpenRCT2::Drawing bottom /= _blockHeight; // TODO: Remove this once _blocks is no longer interop wrapper. - auto& blocks = _blocks; + auto* blocks = _blocks.data(); const auto columnSize = right - left + 1; diff --git a/src/openrct2/drawing/InvalidationGrid.h b/src/openrct2/drawing/InvalidationGrid.h index 9423ff97a4..8485935242 100644 --- a/src/openrct2/drawing/InvalidationGrid.h +++ b/src/openrct2/drawing/InvalidationGrid.h @@ -2,6 +2,7 @@ #include #include +#include namespace OpenRCT2::Drawing { @@ -12,7 +13,7 @@ namespace OpenRCT2::Drawing uint32_t _columnCount{}; uint32_t _rowCount{}; - uint8_t _blocks[7500]{}; + std::vector _blocks; uint32_t _screenWidth{}; uint32_t _screenHeight{};