diff options
author | rubidium <rubidium@openttd.org> | 2012-03-25 19:06:59 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2012-03-25 19:06:59 +0000 |
commit | 927734e6ce825f6b34380f73a2e73c74591dd16e (patch) | |
tree | c63e9e557e47cb68aff12e8ee01e8e41574ea900 /src/viewport.cpp | |
parent | c8ce0faca49f85bbe72a3257bc327d14208f3d6c (diff) | |
download | openttd-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.cpp | 26 |
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); |