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:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user