summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorScott Shawcroft <scott@tannewt.org>2019-03-27 10:58:07 -0700
committerGitHub <noreply@github.com>2019-03-27 10:58:07 -0700
commit94822ee2088960e6f68c9d4f05606cdb47c9ba5c (patch)
treedd9beeb504d2601772b7dc39d4e54c0f1b3c50bd
parent129cc7cb67be01c9125ed899bd71d39a6306e2d2 (diff)
parent374f210771cf62a35ee3e5c8ffac807ce980fe97 (diff)
Merge pull request #1714 from dhalbert/pixel-shader-bug
TileGrid: pixel_shader is not always a Palette
-rw-r--r--shared-module/displayio/ColorConverter.c8
-rw-r--r--shared-module/displayio/ColorConverter.h3
-rw-r--r--shared-module/displayio/TileGrid.c16
3 files changed, 25 insertions, 2 deletions
diff --git a/shared-module/displayio/ColorConverter.c b/shared-module/displayio/ColorConverter.c
index d20b24c01..3928e115a 100644
--- a/shared-module/displayio/ColorConverter.c
+++ b/shared-module/displayio/ColorConverter.c
@@ -39,3 +39,11 @@ bool common_hal_displayio_colorconverter_convert(displayio_colorconverter_t *sel
*output_color = __builtin_bswap16(packed);
return true;
}
+
+// Currently no refresh logic is needed for a ColorConverter.
+bool displayio_colorconverter_needs_refresh(displayio_colorconverter_t *self) {
+ return false;
+}
+
+void displayio_colorconverter_finish_refresh(displayio_colorconverter_t *self) {
+}
diff --git a/shared-module/displayio/ColorConverter.h b/shared-module/displayio/ColorConverter.h
index 62ef2eaab..7f3c1a0a0 100644
--- a/shared-module/displayio/ColorConverter.h
+++ b/shared-module/displayio/ColorConverter.h
@@ -36,4 +36,7 @@ typedef struct {
mp_obj_base_t base;
} displayio_colorconverter_t;
+bool displayio_colorconverter_needs_refresh(displayio_colorconverter_t *self);
+void displayio_colorconverter_finish_refresh(displayio_colorconverter_t *self);
+
#endif // MICROPY_INCLUDED_SHARED_MODULE_DISPLAYIO_COLORCONVERTER_H
diff --git a/shared-module/displayio/TileGrid.c b/shared-module/displayio/TileGrid.c
index bbbb11924..3212dfe8b 100644
--- a/shared-module/displayio/TileGrid.c
+++ b/shared-module/displayio/TileGrid.c
@@ -170,12 +170,24 @@ bool displayio_tilegrid_get_pixel(displayio_tilegrid_t *self, int16_t x, int16_t
}
bool displayio_tilegrid_needs_refresh(displayio_tilegrid_t *self) {
- return self->needs_refresh || displayio_palette_needs_refresh(self->pixel_shader);
+ if (self->needs_refresh) {
+ return true;
+ } else if (MP_OBJ_IS_TYPE(self->pixel_shader, &displayio_palette_type)) {
+ return displayio_palette_needs_refresh(self->pixel_shader);
+ } else if (MP_OBJ_IS_TYPE(self->pixel_shader, &displayio_colorconverter_type)) {
+ return displayio_colorconverter_needs_refresh(self->pixel_shader);
+ }
+
+ return false;
}
void displayio_tilegrid_finish_refresh(displayio_tilegrid_t *self) {
self->needs_refresh = false;
- displayio_palette_finish_refresh(self->pixel_shader);
+ if (MP_OBJ_IS_TYPE(self->pixel_shader, &displayio_palette_type)) {
+ displayio_palette_finish_refresh(self->pixel_shader);
+ } else if (MP_OBJ_IS_TYPE(self->pixel_shader, &displayio_colorconverter_type)) {
+ displayio_colorconverter_finish_refresh(self->pixel_shader);
+ }
// TODO(tannewt): We could double buffer changes to position and move them over here.
// That way they won't change during a refresh and tear.
}