int r1 = (int) Math.max(0, Math.floor(viewY / Block.HEIGHT));
int r2 = (int) Math.min(blocks.length - 1, Math.ceil((viewY + 480) / Block.HEIGHT));
int c1 = (int) Math.max(0, Math.floor(viewX / Block.WIDTH));
int c2 = (int) Math.min(blocks[0].length - 1, Math.ceil((viewX + 640) / Block.WIDTH));
Colour grey = new Colour(128, 128, 128, 128);
for (int r = r1; r <= r2; r++) {
for (int c = c1; c <= c2; c++) {
if (blocks[r][c].getPolygon() != null) {
target.fillPolygon(blocks[r][c].getPolygon(), grey);
}