summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/gfx.cpp32
1 files changed, 18 insertions, 14 deletions
diff --git a/src/gfx.cpp b/src/gfx.cpp
index 5f3faeea0..ce48ac8bd 100644
--- a/src/gfx.cpp
+++ b/src/gfx.cpp
@@ -64,8 +64,12 @@ static Rect _invalid_rect;
static const byte *_color_remap_ptr;
static byte _string_colorremap[3];
-#define DIRTY_BYTES_PER_LINE (MAX_SCREEN_WIDTH / 64)
-static byte _dirty_blocks[DIRTY_BYTES_PER_LINE * MAX_SCREEN_HEIGHT / 8];
+enum {
+ DIRTY_BLOCK_HEIGHT = 8,
+ DIRTY_BLOCK_WIDTH = 64,
+ DIRTY_BYTES_PER_LINE = MAX_SCREEN_WIDTH / DIRTY_BLOCK_WIDTH,
+};
+static byte _dirty_blocks[DIRTY_BYTES_PER_LINE * MAX_SCREEN_HEIGHT / DIRTY_BLOCK_HEIGHT];
void GfxScroll(int left, int top, int width, int height, int xo, int yo)
{
@@ -1033,8 +1037,8 @@ void RedrawScreenRect(int left, int top, int right, int bottom)
void DrawDirtyBlocks()
{
byte *b = _dirty_blocks;
- const int w = Align(_screen.width, 64);
- const int h = Align(_screen.height, 8);
+ const int w = Align(_screen.width, DIRTY_BLOCK_WIDTH);
+ const int h = Align(_screen.height, DIRTY_BLOCK_HEIGHT);
int x;
int y;
@@ -1047,7 +1051,7 @@ void DrawDirtyBlocks()
if (*b != 0) {
int left;
int top;
- int right = x + 64;
+ int right = x + DIRTY_BLOCK_WIDTH;
int bottom = y;
byte *p = b;
int h2;
@@ -1056,11 +1060,11 @@ void DrawDirtyBlocks()
do {
*p = 0;
p += DIRTY_BYTES_PER_LINE;
- bottom += 8;
+ bottom += DIRTY_BLOCK_HEIGHT;
} while (bottom != h && *p != 0);
/* Try coalescing to the right too. */
- h2 = (bottom - y) >> 3;
+ h2 = (bottom - y) / DIRTY_BLOCK_HEIGHT;
assert(h2 > 0);
p = b;
@@ -1075,7 +1079,7 @@ void DrawDirtyBlocks()
/* Wohoo, can combine it one step to the right!
* Do that, and clear the bits. */
- right += 64;
+ right += DIRTY_BLOCK_WIDTH;
h = h2;
p2 = p;
@@ -1099,8 +1103,8 @@ void DrawDirtyBlocks()
}
}
- } while (b++, (x += 64) != w);
- } while (b += -(w >> 6) + DIRTY_BYTES_PER_LINE, (y += 8) != h);
+ } while (b++, (x += DIRTY_BLOCK_WIDTH) != w);
+ } while (b += -(w / DIRTY_BLOCK_WIDTH) + DIRTY_BYTES_PER_LINE, (y += DIRTY_BLOCK_HEIGHT) != h);
_invalid_rect.left = w;
_invalid_rect.top = h;
@@ -1147,13 +1151,13 @@ void SetDirtyBlocks(int left, int top, int right, int bottom)
if (right > _invalid_rect.right ) _invalid_rect.right = right;
if (bottom > _invalid_rect.bottom) _invalid_rect.bottom = bottom;
- left >>= 6;
- top >>= 3;
+ left /= DIRTY_BLOCK_WIDTH;
+ top /= DIRTY_BLOCK_HEIGHT;
b = _dirty_blocks + top * DIRTY_BYTES_PER_LINE + left;
- width = ((right - 1) >> 6) - left + 1;
- height = ((bottom - 1) >> 3) - top + 1;
+ width = ((right - 1) / DIRTY_BLOCK_WIDTH) - left + 1;
+ height = ((bottom - 1) / DIRTY_BLOCK_HEIGHT) - top + 1;
assert(width > 0 && height > 0);