diff options
| author | Dan Halbert <halbert@adafruit.com> | 2019-06-13 08:29:12 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-06-13 08:29:12 -0400 |
| commit | 6be7cf7440acb827d4b0f767b6083a859499b045 (patch) | |
| tree | 55834cab63123bb95a2b7d329ff78442f34cfe6b /shared-module/displayio/TileGrid.h | |
| parent | a06a97e2cba36233d229ba44c3acd9007affe1c9 (diff) | |
| parent | 6f6dcafd906b2ac49291f4220f3fcc7cea6112e1 (diff) | |
Merge pull request #1940 from tannewt/dirty_area
Add partial display update support.
Diffstat (limited to 'shared-module/displayio/TileGrid.h')
| -rw-r--r-- | shared-module/displayio/TileGrid.h | 33 |
1 files changed, 29 insertions, 4 deletions
diff --git a/shared-module/displayio/TileGrid.h b/shared-module/displayio/TileGrid.h index 6157dfbe8..4d97eccc2 100644 --- a/shared-module/displayio/TileGrid.h +++ b/shared-module/displayio/TileGrid.h @@ -37,7 +37,10 @@ typedef struct { mp_obj_base_t base; mp_obj_t bitmap; mp_obj_t pixel_shader; - displayio_area_t area; + int16_t x; + int16_t y; + uint16_t pixel_width; + uint16_t pixel_height; uint16_t bitmap_width_in_tiles; uint16_t width_in_tiles; uint16_t height_in_tiles; @@ -46,12 +49,34 @@ typedef struct { uint16_t top_left_x; uint16_t top_left_y; uint8_t* tiles; - bool needs_refresh; + const displayio_buffer_transform_t* absolute_transform; + displayio_area_t dirty_area; // Stored as a relative area until the refresh area is fetched. + displayio_area_t previous_area; // Stored as an absolute area. + displayio_area_t current_area; // Stored as an absolute area so it applies across frames. + bool partial_change; + bool full_change; + bool first_draw; + bool moved; bool inline_tiles; + bool in_group; + bool flip_x; + bool flip_y; + bool transpose_xy; } displayio_tilegrid_t; -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); +// Updating the screen is a three stage process. + +// The first stage is used to determine i +displayio_area_t* displayio_tilegrid_get_refresh_areas(displayio_tilegrid_t *self, displayio_area_t* tail); + +// Area is always in absolute screen coordinates. Update transform is used to inform TileGrids how +// they relate to it. +bool displayio_tilegrid_fill_area(displayio_tilegrid_t *self, const displayio_area_t* area, uint32_t* mask, uint32_t *buffer); +void displayio_tilegrid_update_transform(displayio_tilegrid_t *group, const displayio_buffer_transform_t* parent_transform); + +// Fills in area with the maximum bounds of all related pixels in the last rendered frame. Returns +// false if the tilegrid wasn't rendered in the last frame. +bool displayio_tilegrid_get_previous_area(displayio_tilegrid_t *self, displayio_area_t* area); void displayio_tilegrid_finish_refresh(displayio_tilegrid_t *self); #endif // MICROPY_INCLUDED_SHARED_MODULE_DISPLAYIO_TILEGRID_H |
