summaryrefslogtreecommitdiff
path: root/shared-module/displayio/TileGrid.h
diff options
context:
space:
mode:
authorScott Shawcroft <scott@tannewt.org>2019-05-16 16:45:38 -0700
committerScott Shawcroft <scott@tannewt.org>2019-05-21 17:41:06 -0700
commit3fad7de8db7f1f317ab6d00a00a82e406ec6fb33 (patch)
treed3c50c49fdbb62c69feec210531b5b02e3e6304d /shared-module/displayio/TileGrid.h
parenta888fe4c8e12144141b9c0730d3d25ebea33cbc7 (diff)
Rework the pixel computation to use areas
This changes the displayio pixel computation from per-pixel to per-area. This is precursor work to updating portions of the screen (#1169). It should provide mild speedups because bounds checks are done once per area rather than once per pixel. Filling by area also allows TileGrid to maintain a row-associative fill pattern even when the display's refresh is orthogonal to it.
Diffstat (limited to 'shared-module/displayio/TileGrid.h')
-rw-r--r--shared-module/displayio/TileGrid.h8
1 files changed, 3 insertions, 5 deletions
diff --git a/shared-module/displayio/TileGrid.h b/shared-module/displayio/TileGrid.h
index 59645553d..6157dfbe8 100644
--- a/shared-module/displayio/TileGrid.h
+++ b/shared-module/displayio/TileGrid.h
@@ -31,18 +31,16 @@
#include <stdint.h>
#include "py/obj.h"
+#include "shared-module/displayio/area.h"
typedef struct {
mp_obj_base_t base;
mp_obj_t bitmap;
mp_obj_t pixel_shader;
- uint16_t x;
- uint16_t y;
+ displayio_area_t area;
uint16_t bitmap_width_in_tiles;
uint16_t width_in_tiles;
uint16_t height_in_tiles;
- uint16_t total_width;
- uint16_t total_height;
uint16_t tile_width;
uint16_t tile_height;
uint16_t top_left_x;
@@ -52,7 +50,7 @@ typedef struct {
bool inline_tiles;
} displayio_tilegrid_t;
-bool displayio_tilegrid_get_pixel(displayio_tilegrid_t *self, int16_t x, int16_t y, uint16_t *pixel);
+bool displayio_tilegrid_get_area(displayio_tilegrid_t *self, displayio_buffer_transform_t* transform, displayio_area_t* area, uint32_t* mask, uint32_t *buffer);
bool displayio_tilegrid_needs_refresh(displayio_tilegrid_t *self);
void displayio_tilegrid_finish_refresh(displayio_tilegrid_t *self);