summaryrefslogtreecommitdiff
path: root/src/viewport.cpp
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2012-03-25 19:06:59 +0000
committerrubidium <rubidium@openttd.org>2012-03-25 19:06:59 +0000
commit927734e6ce825f6b34380f73a2e73c74591dd16e (patch)
treec63e9e557e47cb68aff12e8ee01e8e41574ea900 /src/viewport.cpp
parentc8ce0faca49f85bbe72a3257bc327d14208f3d6c (diff)
downloadopenttd-927734e6ce825f6b34380f73a2e73c74591dd16e.tar.xz
(svn r24065) -Feature-ish [FS#5101]: debug option for showing the redrawn dirty blocks/rectangles
Diffstat (limited to 'src/viewport.cpp')
-rw-r--r--src/viewport.cpp26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/viewport.cpp b/src/viewport.cpp
index 2f134056f..3cce19c3b 100644
--- a/src/viewport.cpp
+++ b/src/viewport.cpp
@@ -47,6 +47,7 @@
#include "window_gui.h"
#include "table/strings.h"
+#include "table/palettes.h"
Point _tile_fract_coords;
@@ -148,6 +149,8 @@ static ViewportDrawer _vd;
TileHighlightData _thd;
static TileInfo *_cur_ti;
bool _draw_bounding_boxes = false;
+bool _draw_dirty_blocks = false;
+uint _dirty_block_colour = 0;
static Point MapXYZToViewport(const ViewPort *vp, int x, int y, int z)
{
@@ -1361,6 +1364,28 @@ static void ViewportDrawBoundingBoxes(const ParentSpriteToSortVector *psd)
}
}
+/**
+ * Draw/colour the blocks that have been redrawn.
+ */
+static void ViewportDrawDirtyBlocks()
+{
+ Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
+ const DrawPixelInfo *dpi = _cur_dpi;
+ void *dst;
+ int right = UnScaleByZoom(dpi->width, dpi->zoom);
+ int bottom = UnScaleByZoom(dpi->height, dpi->zoom);
+
+ int colour = _string_colourmap[_dirty_block_colour & 0xF];
+
+ dst = dpi->dst_ptr;
+
+ byte bo = UnScaleByZoom(dpi->left + dpi->top, dpi->zoom) & 1;
+ do {
+ for (int i = (bo ^= 1); i < right; i += 2) blitter->SetPixel(dst, i, 0, (uint8)colour);
+ dst = blitter->MoveTo(dst, 0, 1);
+ } while (--bottom > 0);
+}
+
static void ViewportDrawStrings(DrawPixelInfo *dpi, const StringSpriteToDrawVector *sstdv)
{
DrawPixelInfo dp;
@@ -1457,6 +1482,7 @@ void ViewportDoDraw(const ViewPort *vp, int left, int top, int right, int bottom
ViewportDrawParentSprites(&_vd.parent_sprites_to_sort, &_vd.child_screen_sprites_to_draw);
if (_draw_bounding_boxes) ViewportDrawBoundingBoxes(&_vd.parent_sprites_to_sort);
+ if (_draw_dirty_blocks) ViewportDrawDirtyBlocks();
if (_vd.string_sprites_to_draw.Length() != 0) ViewportDrawStrings(&_vd.dpi, &_vd.string_sprites_to_draw);