Skip to content

Commit 94822ee

Browse files
authored
Merge pull request #1714 from dhalbert/pixel-shader-bug
TileGrid: pixel_shader is not always a Palette
2 parents 129cc7c + 374f210 commit 94822ee

File tree

3 files changed

+25
-2
lines changed

3 files changed

+25
-2
lines changed

shared-module/displayio/ColorConverter.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,3 +39,11 @@ bool common_hal_displayio_colorconverter_convert(displayio_colorconverter_t *sel
3939
*output_color = __builtin_bswap16(packed);
4040
return true;
4141
}
42+
43+
// Currently no refresh logic is needed for a ColorConverter.
44+
bool displayio_colorconverter_needs_refresh(displayio_colorconverter_t *self) {
45+
return false;
46+
}
47+
48+
void displayio_colorconverter_finish_refresh(displayio_colorconverter_t *self) {
49+
}

shared-module/displayio/ColorConverter.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,7 @@ typedef struct {
3636
mp_obj_base_t base;
3737
} displayio_colorconverter_t;
3838

39+
bool displayio_colorconverter_needs_refresh(displayio_colorconverter_t *self);
40+
void displayio_colorconverter_finish_refresh(displayio_colorconverter_t *self);
41+
3942
#endif // MICROPY_INCLUDED_SHARED_MODULE_DISPLAYIO_COLORCONVERTER_H

shared-module/displayio/TileGrid.c

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,12 +170,24 @@ bool displayio_tilegrid_get_pixel(displayio_tilegrid_t *self, int16_t x, int16_t
170170
}
171171

172172
bool displayio_tilegrid_needs_refresh(displayio_tilegrid_t *self) {
173-
return self->needs_refresh || displayio_palette_needs_refresh(self->pixel_shader);
173+
if (self->needs_refresh) {
174+
return true;
175+
} else if (MP_OBJ_IS_TYPE(self->pixel_shader, &displayio_palette_type)) {
176+
return displayio_palette_needs_refresh(self->pixel_shader);
177+
} else if (MP_OBJ_IS_TYPE(self->pixel_shader, &displayio_colorconverter_type)) {
178+
return displayio_colorconverter_needs_refresh(self->pixel_shader);
179+
}
180+
181+
return false;
174182
}
175183

176184
void displayio_tilegrid_finish_refresh(displayio_tilegrid_t *self) {
177185
self->needs_refresh = false;
178-
displayio_palette_finish_refresh(self->pixel_shader);
186+
if (MP_OBJ_IS_TYPE(self->pixel_shader, &displayio_palette_type)) {
187+
displayio_palette_finish_refresh(self->pixel_shader);
188+
} else if (MP_OBJ_IS_TYPE(self->pixel_shader, &displayio_colorconverter_type)) {
189+
displayio_colorconverter_finish_refresh(self->pixel_shader);
190+
}
179191
// TODO(tannewt): We could double buffer changes to position and move them over here.
180192
// That way they won't change during a refresh and tear.
181193
}

0 commit comments

Comments
 (0)