diff --git a/src/gfx.cpp b/src/gfx.cpp index 30458d6171..9145fa449d 100644 --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -1753,7 +1753,6 @@ void DrawDirtyBlocks() DrawOverlappedWindowFlags flags = DOWF_MARK_DIRTY; if (unlikely(HasBit(_gfx_debug_flags, GDF_SHOW_WINDOW_DIRTY))) { flags |= DOWF_SHOW_DEBUG; - _dirty_block_colour.fetch_add(1, std::memory_order_relaxed); } DrawOverlappedWindowWithClipping(w, w->left, w->top, w->left + w->width, w->top + w->height, flags); w->flags &= ~(WF_DIRTY | WF_WIDGETS_DIRTY); @@ -1765,7 +1764,6 @@ void DrawDirtyBlocks() DrawOverlappedWindowFlags flags = DOWF_MARK_DIRTY; if (unlikely(HasBit(_gfx_debug_flags, GDF_SHOW_WIDGET_DIRTY))) { flags |= DOWF_SHOW_DEBUG; - _dirty_block_colour.fetch_add(1, std::memory_order_relaxed); } DrawOverlappedWindowWithClipping(w, w->left + widget->pos_x, w->top + widget->pos_y, w->left + widget->pos_x + widget->current_x, w->top + widget->pos_y + widget->current_y, flags); } diff --git a/src/viewport.cpp b/src/viewport.cpp index 0fed27191d..7f8b420b44 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -2215,7 +2215,7 @@ void ViewportDrawDirtyBlocks(const DrawPixelInfo *dpi, bool increment_colour) int bottom = UnScaleByZoom(dpi->height, dpi->zoom); const uint dirty_block_colour = increment_colour ? _dirty_block_colour.fetch_add(1, std::memory_order_relaxed) : _dirty_block_colour.load(std::memory_order_relaxed); - int colour = _string_colourmap[dirty_block_colour]; + int colour = _string_colourmap[dirty_block_colour & 0xF]; dst = dpi->dst_ptr; diff --git a/src/window.cpp b/src/window.cpp index d5ea47a7c9..a4cd191795 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -948,8 +948,9 @@ void DrawOverlappedWindow(Window *w, int left, int top, int right, int bottom, D dp->zoom = ZOOM_LVL_NORMAL; w->OnPaint(); if (unlikely(flags & DOWF_SHOW_DEBUG)) { + if (w->viewport != nullptr) ViewportDoDrawProcessAllPending(); extern void ViewportDrawDirtyBlocks(const DrawPixelInfo *dpi, bool increment_colour); - ViewportDrawDirtyBlocks(_cur_dpi, false); + ViewportDrawDirtyBlocks(_cur_dpi, true); } if (flags & DOWF_MARK_DIRTY) { VideoDriver::GetInstance()->MakeDirty(left, top, right - left, bottom - top);