1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-15 11:03:00 +01:00

Fix invalidation debug paint

This commit is contained in:
ζeh Matt
2025-04-05 02:58:38 +03:00
parent 360bfbfb66
commit 4e8ac7ea12
3 changed files with 30 additions and 25 deletions

View File

@@ -213,17 +213,20 @@ public:
}
protected:
void OnDrawDirtyBlock(uint32_t left, uint32_t top, uint32_t columns, uint32_t rows) override
void OnDrawDirtyBlock(int32_t left, int32_t top, int32_t right, int32_t bottom) override
{
if (gShowDirtyVisuals)
{
uint32_t right = left + columns;
uint32_t bottom = top + rows;
for (uint32_t x = left; x < right; x++)
const auto columns = (right - left) / _invalidationGrid.getBlockWidth();
const auto rows = (bottom - top) / _invalidationGrid.getBlockHeight();
const auto firstRow = top / _invalidationGrid.getBlockHeight();
const auto firstColumn = left / _invalidationGrid.getBlockWidth();
for (uint32_t y = 0; y < rows; y++)
{
for (uint32_t y = top; y < bottom; y++)
for (uint32_t x = 0; x < columns; x++)
{
SetDirtyVisualTime(x, y, kDirtyVisualTime);
SetDirtyVisualTime(firstColumn + x, firstRow + y, kDirtyVisualTime);
}
}
}
@@ -330,7 +333,7 @@ private:
uint32_t GetDirtyVisualTime(uint32_t x, uint32_t y)
{
uint32_t result = 0;
uint32_t i = y * _dirtyGrid.BlockColumns + x;
uint32_t i = y * _invalidationGrid.getColumnCount() + x;
if (_dirtyVisualsTime.size() > i)
{
result = _dirtyVisualsTime[i];
@@ -340,7 +343,7 @@ private:
void SetDirtyVisualTime(uint32_t x, uint32_t y, uint32_t value)
{
uint32_t i = y * _dirtyGrid.BlockColumns + x;
uint32_t i = y * _invalidationGrid.getColumnCount() + x;
if (_dirtyVisualsTime.size() > i)
{
_dirtyVisualsTime[i] = value;
@@ -349,10 +352,13 @@ private:
void UpdateDirtyVisuals()
{
_dirtyVisualsTime.resize(_dirtyGrid.BlockRows * _dirtyGrid.BlockColumns);
for (uint32_t y = 0; y < _dirtyGrid.BlockRows; y++)
const auto rows = _invalidationGrid.getRowCount();
const auto columns = _invalidationGrid.getColumnCount();
_dirtyVisualsTime.resize(rows * columns);
for (uint32_t y = 0; y < rows; y++)
{
for (uint32_t x = 0; x < _dirtyGrid.BlockColumns; x++)
for (uint32_t x = 0; x < columns; x++)
{
auto timeLeft = GetDirtyVisualTime(x, y);
if (timeLeft > 0)
@@ -373,19 +379,19 @@ private:
float scaleY = Config::Get().general.WindowScale * renderY / static_cast<float>(windowY);
SDL_SetRenderDrawBlendMode(_sdlRenderer, SDL_BLENDMODE_BLEND);
for (uint32_t y = 0; y < _dirtyGrid.BlockRows; y++)
for (uint32_t y = 0; y < _invalidationGrid.getRowCount(); y++)
{
for (uint32_t x = 0; x < _dirtyGrid.BlockColumns; x++)
for (uint32_t x = 0; x < _invalidationGrid.getColumnCount(); x++)
{
auto timeLeft = GetDirtyVisualTime(x, y);
if (timeLeft > 0)
{
uint8_t alpha = static_cast<uint8_t>(timeLeft * 5 / 2);
SDL_Rect ddRect;
ddRect.x = static_cast<int32_t>(x * _dirtyGrid.BlockWidth * scaleX);
ddRect.y = static_cast<int32_t>(y * _dirtyGrid.BlockHeight * scaleY);
ddRect.w = static_cast<int32_t>(_dirtyGrid.BlockWidth * scaleX);
ddRect.h = static_cast<int32_t>(_dirtyGrid.BlockHeight * scaleY);
ddRect.x = static_cast<int32_t>(x * _invalidationGrid.getBlockWidth() * scaleX);
ddRect.y = static_cast<int32_t>(y * _invalidationGrid.getBlockHeight() * scaleY);
ddRect.w = static_cast<int32_t>(_invalidationGrid.getBlockWidth() * scaleX);
ddRect.h = static_cast<int32_t>(_invalidationGrid.getBlockHeight() * scaleY);
SDL_SetRenderDrawColor(_sdlRenderer, 255, 255, 255, alpha);
SDL_RenderFillRect(_sdlRenderer, &ddRect);

View File

@@ -319,8 +319,7 @@ void X8DrawingEngine::ConfigureBits(uint32_t width, uint32_t height, uint32_t pi
}
}
void X8DrawingEngine::OnDrawDirtyBlock(
[[maybe_unused]] uint32_t x, [[maybe_unused]] uint32_t y, [[maybe_unused]] uint32_t columns, [[maybe_unused]] uint32_t rows)
void X8DrawingEngine::OnDrawDirtyBlock(int32_t, int32_t, int32_t, int32_t)
{
}
@@ -334,16 +333,16 @@ void X8DrawingEngine::ConfigureDirtyGrid()
void X8DrawingEngine::DrawAllDirtyBlocks()
{
_invalidationGrid.traverseDirtyCells(
[this](int32_t left, int32_t top, int32_t right, int32_t bottom) {
DrawDirtyBlocks(left, top, right, bottom);
});
_invalidationGrid.traverseDirtyCells([this](int32_t left, int32_t top, int32_t right, int32_t bottom) {
// Draw region
DrawDirtyBlocks(left, top, right, bottom);
});
}
void X8DrawingEngine::DrawDirtyBlocks(int32_t left, int32_t top, int32_t right, int32_t bottom)
{
// Draw region
//OnDrawDirtyBlock(x, y, columns, rows);
OnDrawDirtyBlock(left, top, right, bottom);
WindowDrawAll(_bitsDPI, left, top, right, bottom);
}

View File

@@ -117,7 +117,7 @@ namespace OpenRCT2
protected:
void ConfigureBits(uint32_t width, uint32_t height, uint32_t pitch);
virtual void OnDrawDirtyBlock(uint32_t x, uint32_t y, uint32_t columns, uint32_t rows);
virtual void OnDrawDirtyBlock(int32_t left, int32_t top, int32_t right, int32_t bottom);
private:
void ConfigureDirtyGrid();