From f2419735855445f3273be0c2d7a15598cee49baf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=CE=B6eh=20Matt?= <5415177+ZehMatt@users.noreply.github.com> Date: Wed, 7 May 2025 23:26:33 +0300 Subject: [PATCH] Fix paint debug to visualize invalidation --- .../engines/HardwareDisplayDrawingEngine.cpp | 40 ++++++------------- 1 file changed, 12 insertions(+), 28 deletions(-) diff --git a/src/openrct2-ui/drawing/engines/HardwareDisplayDrawingEngine.cpp b/src/openrct2-ui/drawing/engines/HardwareDisplayDrawingEngine.cpp index f6a5a24586..85f70fbf54 100644 --- a/src/openrct2-ui/drawing/engines/HardwareDisplayDrawingEngine.cpp +++ b/src/openrct2-ui/drawing/engines/HardwareDisplayDrawingEngine.cpp @@ -30,7 +30,8 @@ using namespace OpenRCT2::Ui; class HardwareDisplayDrawingEngine final : public X8DrawingEngine { private: - constexpr static uint32_t kDirtyVisualTime = 32; + constexpr static uint32_t kDirtyVisualTime = 40; + constexpr static uint32_t kDirtyRegionAlpha = 100; std::shared_ptr const _uiContext; SDL_Window* _window = nullptr; @@ -211,10 +212,6 @@ public: X8DrawingEngine::EndDraw(); Display(); - if (gShowDirtyVisuals) - { - UpdateDirtyVisuals(); - } } protected: @@ -222,8 +219,8 @@ protected: { if (gShowDirtyVisuals) { - const auto columns = (right - left) / _invalidationGrid.getBlockWidth(); - const auto rows = (bottom - top) / _invalidationGrid.getBlockHeight(); + const auto columns = ((right - left) + (_invalidationGrid.getBlockWidth() - 1)) / _invalidationGrid.getBlockWidth(); + const auto rows = ((bottom - top) + (_invalidationGrid.getBlockHeight() - 1)) / _invalidationGrid.getBlockHeight(); const auto firstRow = top / _invalidationGrid.getBlockHeight(); const auto firstColumn = left / _invalidationGrid.getBlockWidth(); @@ -231,7 +228,7 @@ protected: { for (uint32_t x = 0; x < columns; x++) { - SetDirtyVisualTime(firstColumn + x, firstRow + y, kDirtyVisualTime); + SetDirtyVisualTime(firstColumn + x, firstRow + y, gCurrentRealTimeTicks + kDirtyVisualTime); } } } @@ -347,30 +344,16 @@ private: } void SetDirtyVisualTime(uint32_t x, uint32_t y, uint32_t value) - { - uint32_t i = y * _invalidationGrid.getColumnCount() + x; - if (_dirtyVisualsTime.size() > i) - { - _dirtyVisualsTime[i] = value; - } - } - - void UpdateDirtyVisuals() { const auto rows = _invalidationGrid.getRowCount(); const auto columns = _invalidationGrid.getColumnCount(); _dirtyVisualsTime.resize(rows * columns); - for (uint32_t y = 0; y < rows; y++) + + uint32_t i = y * _invalidationGrid.getColumnCount() + x; + if (_dirtyVisualsTime.size() > i) { - for (uint32_t x = 0; x < columns; x++) - { - auto timeLeft = GetDirtyVisualTime(x, y); - if (timeLeft > 0) - { - SetDirtyVisualTime(x, y, timeLeft - 1); - } - } + _dirtyVisualsTime[i] = value; } } @@ -388,10 +371,11 @@ private: { for (uint32_t x = 0; x < _invalidationGrid.getColumnCount(); x++) { - auto timeLeft = GetDirtyVisualTime(x, y); + const auto timeEnd = GetDirtyVisualTime(x, y); + const auto timeLeft = gCurrentRealTimeTicks < timeEnd ? timeEnd - gCurrentRealTimeTicks : 0; if (timeLeft > 0) { - uint8_t alpha = static_cast(timeLeft * 5 / 2); + uint8_t alpha = timeLeft * kDirtyRegionAlpha / kDirtyVisualTime; SDL_Rect ddRect; ddRect.x = static_cast(x * _invalidationGrid.getBlockWidth() * scaleX); ddRect.y = static_cast(y * _invalidationGrid.getBlockHeight() * scaleY);