diff options
| author | Scott Shawcroft <scott@tannewt.org> | 2019-05-16 16:45:38 -0700 |
|---|---|---|
| committer | Scott Shawcroft <scott@tannewt.org> | 2019-05-21 17:41:06 -0700 |
| commit | 3fad7de8db7f1f317ab6d00a00a82e406ec6fb33 (patch) | |
| tree | d3c50c49fdbb62c69feec210531b5b02e3e6304d /shared-module/displayio/TileGrid.h | |
| parent | a888fe4c8e12144141b9c0730d3d25ebea33cbc7 (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.h | 8 |
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); |
