Skip to content

Commit a3506a7

Browse files
authored
Merge pull request #10318 from FoamyGuy/tilepalettemapper_tilegrid
Integrate TilePaletteMapper and TileGrid further
2 parents 71ba3ad + 6fcdf14 commit a3506a7

File tree

11 files changed

+109
-78
lines changed

11 files changed

+109
-78
lines changed

locale/circuitpython.pot

+14-8
Original file line numberDiff line numberDiff line change
@@ -1056,7 +1056,8 @@ msgstr ""
10561056
msgid "File exists"
10571057
msgstr ""
10581058

1059-
#: shared-module/lvfontio/OnDiskFont.c shared-module/os/getenv.c
1059+
#: shared-bindings/supervisor/__init__.c shared-module/lvfontio/OnDiskFont.c
1060+
#: shared-module/os/getenv.c
10601061
msgid "File not found"
10611062
msgstr ""
10621063

@@ -1251,6 +1252,7 @@ msgstr ""
12511252
#: ports/raspberrypi/common-hal/picodvi/Framebuffer_RP2040.c py/argcheck.c
12521253
#: shared-bindings/digitalio/DigitalInOut.c
12531254
#: shared-bindings/epaperdisplay/EPaperDisplay.c shared-bindings/pwmio/PWMOut.c
1255+
#: shared-bindings/supervisor/__init__.c
12541256
#: shared-module/aurora_epaper/aurora_framebuffer.c
12551257
#: shared-module/lvfontio/OnDiskFont.c
12561258
msgid "Invalid %q"
@@ -2068,6 +2070,10 @@ msgstr ""
20682070
msgid "Tile width must exactly divide bitmap width"
20692071
msgstr ""
20702072

2073+
#: shared-module/tilepalettemapper/TilePaletteMapper.c
2074+
msgid "TilePaletteMapper may only be bound to a TileGrid once"
2075+
msgstr ""
2076+
20712077
#: shared-bindings/alarm/time/TimeAlarm.c
20722078
msgid "Time is in the past."
20732079
msgstr ""
@@ -2591,16 +2597,16 @@ msgstr ""
25912597
msgid "bits must be 32 or less"
25922598
msgstr ""
25932599

2600+
#: shared-bindings/audiofreeverb/Freeverb.c
2601+
msgid "bits_per_sample must be 16"
2602+
msgstr ""
2603+
25942604
#: shared-bindings/audiodelays/Chorus.c shared-bindings/audiodelays/Echo.c
25952605
#: shared-bindings/audiodelays/MultiTapDelay.c
25962606
#: shared-bindings/audiodelays/PitchShift.c
25972607
#: shared-bindings/audiofilters/Distortion.c
2598-
#: shared-bindings/audiodelays/Reverb.c
2599-
msgid "bits_per_sample must be 16"
2600-
msgstr ""
2601-
2602-
#: shared-bindings/audiodelays/Echo.c shared-bindings/audiofilters/Distortion.c
2603-
#: shared-bindings/audiofilters/Filter.c shared-bindings/audiomixer/Mixer.c
2608+
#: shared-bindings/audiofilters/Filter.c shared-bindings/audiofilters/Phaser.c
2609+
#: shared-bindings/audiomixer/Mixer.c
26042610
msgid "bits_per_sample must be 8 or 16"
26052611
msgstr ""
26062612

@@ -4017,7 +4023,7 @@ msgstr ""
40174023
msgid "rsplit(None,n)"
40184024
msgstr ""
40194025

4020-
#: shared-bindings/audiodelays/Reverb.c
4026+
#: shared-bindings/audiofreeverb/Freeverb.c
40214027
msgid "samples_signed must be true"
40224028
msgstr ""
40234029

ports/espressif/boards/ai_thinker_esp32-c3s/mpconfigboard.mk

+1
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,4 @@ CIRCUITPY_ESP_FLASH_SIZE = 4MB
1010
CIRCUITPY_LEGACY_4MB_FLASH_LAYOUT = 1
1111

1212
CIRCUITPY_ESP_USB_SERIAL_JTAG = 0
13+
CIRCUITPY_TILEPALETTEMAPPER = 0

ports/espressif/boards/beetle-esp32-c3/mpconfigboard.mk

+1
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,4 @@ CIRCUITPY_ESP_FLASH_SIZE=4MB
1111
CIRCUITPY_LEGACY_4MB_FLASH_LAYOUT = 1
1212

1313
CIRCUITPY_ESP_USB_SERIAL_JTAG = 1
14+
CIRCUITPY_TILEPALETTEMAPPER = 0

ports/espressif/boards/lolin_c3_mini/mpconfigboard.mk

+1
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,4 @@ CIRCUITPY_ESP_FLASH_SIZE=4MB
1010
CIRCUITPY_LEGACY_4MB_FLASH_LAYOUT = 1
1111

1212
CIRCUITPY_ESP_USB_SERIAL_JTAG = 1
13+
CIRCUITPY_TILEPALETTEMAPPER = 0

ports/espressif/boards/microdev_micro_c3/mpconfigboard.mk

+1
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,4 @@ CIRCUITPY_ESP_FLASH_SIZE = 4MB
1010
CIRCUITPY_LEGACY_4MB_FLASH_LAYOUT = 1
1111

1212
CIRCUITPY_ESP_USB_SERIAL_JTAG = 1
13+
CIRCUITPY_TILEPALETTEMAPPER = 0

shared-bindings/tilepalettemapper/TilePaletteMapper.c

+22-10
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include "shared-bindings/util.h"
1313
#include "shared-bindings/displayio/Palette.h"
1414
#include "shared-bindings/displayio/ColorConverter.h"
15+
#include "shared-bindings/displayio/TileGrid.h"
1516
#include "shared-bindings/tilepalettemapper/TilePaletteMapper.h"
1617

1718
//| class TilePaletteMapper:
@@ -21,33 +22,32 @@
2122
//| bitmap with a wider array of colors."""
2223
//|
2324
//| def __init__(
24-
//| self, palette: displayio.Palette, input_color_count: int, width: int, height: int
25+
//| self, palette: displayio.Palette, input_color_count: int
2526
//| ) -> None:
2627
//| """Create a TilePaletteMApper object to store a set of color mappings for tiles.
2728
//|
2829
//| :param Union[displayio.Palette, displayio.ColorConverter] pixel_shader:
2930
//| The palette or ColorConverter to get mapped colors from.
30-
//| :param int input_color_count: The number of colors in in the input bitmap.
31-
//| :param int width: The width of the grid in tiles.
32-
//| :param int height: The height of the grid in tiles."""
31+
//| :param int input_color_count: The number of colors in in the input bitmap."""
3332
//|
3433

3534
static mp_obj_t tilepalettemapper_tilepalettemapper_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *all_args) {
36-
enum { ARG_pixel_shader, ARG_input_color_count, ARG_width, ARG_height };
35+
enum { ARG_pixel_shader, ARG_input_color_count };
3736
static const mp_arg_t allowed_args[] = {
3837
{ MP_QSTR_pixel_shader, MP_ARG_OBJ | MP_ARG_REQUIRED },
3938
{ MP_QSTR_input_color_count, MP_ARG_INT | MP_ARG_REQUIRED },
40-
{ MP_QSTR_width, MP_ARG_INT | MP_ARG_REQUIRED },
41-
{ MP_QSTR_height, MP_ARG_INT | MP_ARG_REQUIRED },
39+
4240
};
4341
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
4442
mp_arg_parse_all_kw_array(n_args, n_kw, all_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
4543
mp_obj_t pixel_shader = args[ARG_pixel_shader].u_obj;
4644
if (!mp_obj_is_type(pixel_shader, &displayio_palette_type) && !mp_obj_is_type(pixel_shader, &displayio_colorconverter_type)) {
4745
mp_raise_TypeError_varg(MP_ERROR_TEXT("unsupported %q type"), MP_QSTR_pixel_shader);
4846
}
47+
48+
4949
tilepalettemapper_tilepalettemapper_t *self = mp_obj_malloc(tilepalettemapper_tilepalettemapper_t, &tilepalettemapper_tilepalettemapper_type);
50-
common_hal_tilepalettemapper_tilepalettemapper_construct(self, pixel_shader, args[ARG_input_color_count].u_int, args[ARG_width].u_int, args[ARG_height].u_int);
50+
common_hal_tilepalettemapper_tilepalettemapper_construct(self, pixel_shader, args[ARG_input_color_count].u_int);
5151

5252
return MP_OBJ_FROM_PTR(self);
5353
}
@@ -84,9 +84,20 @@ static mp_obj_t tilepalettemapper_tilepalettemapper_obj_get_pixel_shader(mp_obj_
8484
}
8585
MP_DEFINE_CONST_FUN_OBJ_1(tilepalettemapper_tilepalettemapper_get_pixel_shader_obj, tilepalettemapper_tilepalettemapper_obj_get_pixel_shader);
8686

87-
MP_PROPERTY_GETTER(tilepalettemapper_tilepalettemapper_palette_obj,
87+
MP_PROPERTY_GETTER(tilepalettemapper_tilepalettemapper_pixel_shader_obj,
8888
(mp_obj_t)&tilepalettemapper_tilepalettemapper_get_pixel_shader_obj);
8989

90+
//| tilegrid: displayio.TileGrid
91+
//| """The TileGrid that the TilePaletteMapper is used with."""
92+
//|
93+
static mp_obj_t tilepalettemapper_tilepalettemapper_obj_get_tilegrid(mp_obj_t self_in) {
94+
tilepalettemapper_tilepalettemapper_t *self = MP_OBJ_TO_PTR(self_in);
95+
return common_hal_tilepalettemapper_tilepalettemapper_get_tilegrid(self);
96+
}
97+
MP_DEFINE_CONST_FUN_OBJ_1(tilepalettemapper_tilepalettemapper_get_tilegrid_obj, tilepalettemapper_tilepalettemapper_obj_get_tilegrid);
98+
99+
MP_PROPERTY_GETTER(tilepalettemapper_tilepalettemapper_tilegrid_obj,
100+
(mp_obj_t)&tilepalettemapper_tilepalettemapper_get_tilegrid_obj);
90101

91102
//| def __getitem__(self, index: Union[Tuple[int, int], int]) -> Tuple[int]:
92103
//| """Returns the mapping for the given index. The index can either be an x,y tuple or an int equal
@@ -154,7 +165,8 @@ static mp_obj_t tilepalettemapper_subscr(mp_obj_t self_in, mp_obj_t index_obj, m
154165
static const mp_rom_map_elem_t tilepalettemapper_tilepalettemapper_locals_dict_table[] = {
155166
{ MP_ROM_QSTR(MP_QSTR_width), MP_ROM_PTR(&tilepalettemapper_tilepalettemapper_width_obj) },
156167
{ MP_ROM_QSTR(MP_QSTR_height), MP_ROM_PTR(&tilepalettemapper_tilepalettemapper_height_obj) },
157-
{ MP_ROM_QSTR(MP_QSTR_palette), MP_ROM_PTR(&tilepalettemapper_tilepalettemapper_palette_obj) },
168+
{ MP_ROM_QSTR(MP_QSTR_pixel_shader), MP_ROM_PTR(&tilepalettemapper_tilepalettemapper_pixel_shader_obj) },
169+
{ MP_ROM_QSTR(MP_QSTR_tilegrid), MP_ROM_PTR(&tilepalettemapper_tilepalettemapper_tilegrid_obj) },
158170
};
159171
static MP_DEFINE_CONST_DICT(tilepalettemapper_tilepalettemapper_locals_dict, tilepalettemapper_tilepalettemapper_locals_dict_table);
160172

shared-bindings/tilepalettemapper/TilePaletteMapper.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,12 @@
88
extern const mp_obj_type_t tilepalettemapper_tilepalettemapper_type;
99

1010
void common_hal_tilepalettemapper_tilepalettemapper_construct(tilepalettemapper_tilepalettemapper_t *self,
11-
mp_obj_t paltte, uint16_t input_color_count, uint16_t bitmap_width_in_tiles, uint16_t bitmap_height_in_tiles);
11+
mp_obj_t paltte, uint16_t input_color_count);
1212

1313

1414
uint16_t common_hal_tilepalettemapper_tilepalettemapper_get_width(tilepalettemapper_tilepalettemapper_t *self);
1515
uint16_t common_hal_tilepalettemapper_tilepalettemapper_get_height(tilepalettemapper_tilepalettemapper_t *self);
1616
mp_obj_t common_hal_tilepalettemapper_tilepalettemapper_get_pixel_shader(tilepalettemapper_tilepalettemapper_t *self);
17+
mp_obj_t common_hal_tilepalettemapper_tilepalettemapper_get_tilegrid(tilepalettemapper_tilepalettemapper_t *self);
1718
mp_obj_t common_hal_tilepalettemapper_tilepalettemapper_get_mapping(tilepalettemapper_tilepalettemapper_t *self, uint16_t x, uint16_t y);
1819
void common_hal_tilepalettemapper_tilepalettemapper_set_mapping(tilepalettemapper_tilepalettemapper_t *self, uint16_t x, uint16_t y, size_t len, mp_obj_t *items);

shared-module/displayio/TileGrid.c

+33-30
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,11 @@ void common_hal_displayio_tilegrid_construct(displayio_tilegrid_t *self, mp_obj_
8181
self->flip_y = false;
8282
self->transpose_xy = false;
8383
self->absolute_transform = NULL;
84+
#if CIRCUITPY_TILEPALETTEMAPPER
85+
if (mp_obj_is_type(self->pixel_shader, &tilepalettemapper_tilepalettemapper_type)) {
86+
tilepalettemapper_tilepalettemapper_bind(self->pixel_shader, self);
87+
}
88+
#endif
8489
}
8590

8691

@@ -231,6 +236,11 @@ mp_obj_t common_hal_displayio_tilegrid_get_pixel_shader(displayio_tilegrid_t *se
231236
void common_hal_displayio_tilegrid_set_pixel_shader(displayio_tilegrid_t *self, mp_obj_t pixel_shader) {
232237
self->pixel_shader = pixel_shader;
233238
self->full_change = true;
239+
#if CIRCUITPY_TILEPALETTEMAPPER
240+
if (mp_obj_is_type(self->pixel_shader, &tilepalettemapper_tilepalettemapper_type)) {
241+
tilepalettemapper_tilepalettemapper_bind(self->pixel_shader, self);
242+
}
243+
#endif
234244
}
235245

236246
mp_obj_t common_hal_displayio_tilegrid_get_bitmap(displayio_tilegrid_t *self) {
@@ -275,25 +285,7 @@ uint16_t common_hal_displayio_tilegrid_get_tile(displayio_tilegrid_t *self, uint
275285
}
276286
}
277287

278-
void common_hal_displayio_tilegrid_set_tile(displayio_tilegrid_t *self, uint16_t x, uint16_t y, uint16_t tile_index) {
279-
if (tile_index >= self->tiles_in_bitmap) {
280-
mp_raise_ValueError(MP_ERROR_TEXT("Tile index out of bounds"));
281-
}
282-
283-
void *tiles = self->tiles;
284-
if (self->inline_tiles) {
285-
tiles = &self->tiles;
286-
}
287-
if (tiles == NULL) {
288-
return;
289-
}
290-
291-
uint32_t index = y * self->width_in_tiles + x;
292-
if (self->tiles_in_bitmap > 255) {
293-
((uint16_t *)tiles)[index] = tile_index;
294-
} else {
295-
((uint8_t *)tiles)[index] = (uint8_t)tile_index;
296-
}
288+
void displayio_tilegrid_mark_tile_dirty(displayio_tilegrid_t *self, uint16_t x, uint16_t y) {
297289
displayio_area_t temp_area;
298290
displayio_area_t *tile_area;
299291
if (!self->partial_change) {
@@ -317,10 +309,31 @@ void common_hal_displayio_tilegrid_set_tile(displayio_tilegrid_t *self, uint16_t
317309
if (self->partial_change) {
318310
displayio_area_union(&self->dirty_area, &temp_area, &self->dirty_area);
319311
}
320-
321312
self->partial_change = true;
322313
}
323314

315+
void common_hal_displayio_tilegrid_set_tile(displayio_tilegrid_t *self, uint16_t x, uint16_t y, uint16_t tile_index) {
316+
if (tile_index >= self->tiles_in_bitmap) {
317+
mp_raise_ValueError(MP_ERROR_TEXT("Tile index out of bounds"));
318+
}
319+
320+
void *tiles = self->tiles;
321+
if (self->inline_tiles) {
322+
tiles = &self->tiles;
323+
}
324+
if (tiles == NULL) {
325+
return;
326+
}
327+
328+
uint32_t index = y * self->width_in_tiles + x;
329+
if (self->tiles_in_bitmap > 255) {
330+
((uint16_t *)tiles)[index] = tile_index;
331+
} else {
332+
((uint8_t *)tiles)[index] = (uint8_t)tile_index;
333+
}
334+
displayio_tilegrid_mark_tile_dirty(self, x, y);
335+
}
336+
324337
void common_hal_displayio_tilegrid_set_all_tiles(displayio_tilegrid_t *self, uint16_t tile_index) {
325338
if (tile_index >= self->tiles_in_bitmap) {
326339
mp_raise_ValueError(MP_ERROR_TEXT("Tile index out of bounds"));
@@ -613,11 +626,6 @@ void displayio_tilegrid_finish_refresh(displayio_tilegrid_t *self) {
613626
} else if (mp_obj_is_type(self->pixel_shader, &displayio_colorconverter_type)) {
614627
displayio_colorconverter_finish_refresh(self->pixel_shader);
615628
}
616-
#if CIRCUITPY_TILEPALETTEMAPPER
617-
if (mp_obj_is_type(self->pixel_shader, &tilepalettemapper_tilepalettemapper_type)) {
618-
tilepalettemapper_tilepalettemapper_finish_refresh(self->pixel_shader);
619-
}
620-
#endif
621629
if (mp_obj_is_type(self->bitmap, &displayio_bitmap_type)) {
622630
displayio_bitmap_finish_refresh(self->bitmap);
623631
} else if (mp_obj_is_type(self->bitmap, &displayio_ondiskbitmap_type)) {
@@ -671,11 +679,6 @@ displayio_area_t *displayio_tilegrid_get_refresh_areas(displayio_tilegrid_t *sel
671679
displayio_palette_needs_refresh(self->pixel_shader)) ||
672680
(mp_obj_is_type(self->pixel_shader, &displayio_colorconverter_type) &&
673681
displayio_colorconverter_needs_refresh(self->pixel_shader));
674-
#if CIRCUITPY_TILEPALETTEMAPPER
675-
self->full_change = self->full_change ||
676-
(mp_obj_is_type(self->pixel_shader, &tilepalettemapper_tilepalettemapper_type) &&
677-
tilepalettemapper_tilepalettemapper_needs_refresh(self->pixel_shader));
678-
#endif
679682

680683
if (self->full_change || first_draw) {
681684
self->current_area.next = tail;

shared-module/displayio/TileGrid.h

+2
Original file line numberDiff line numberDiff line change
@@ -68,3 +68,5 @@ void displayio_tilegrid_finish_refresh(displayio_tilegrid_t *self);
6868

6969
bool displayio_tilegrid_get_rendered_hidden(displayio_tilegrid_t *self);
7070
void displayio_tilegrid_validate_pixel_shader(mp_obj_t pixel_shader);
71+
72+
void displayio_tilegrid_mark_tile_dirty(displayio_tilegrid_t *self, uint16_t x, uint16_t y);

shared-module/tilepalettemapper/TilePaletteMapper.c

+29-25
Original file line numberDiff line numberDiff line change
@@ -8,29 +8,13 @@
88
#include "shared-bindings/tilepalettemapper/TilePaletteMapper.h"
99
#include "shared-bindings/displayio/Palette.h"
1010
#include "shared-bindings/displayio/ColorConverter.h"
11+
#include "shared-bindings/displayio/TileGrid.h"
1112

1213
void common_hal_tilepalettemapper_tilepalettemapper_construct(tilepalettemapper_tilepalettemapper_t *self,
13-
mp_obj_t pixel_shader, uint16_t input_color_count, uint16_t width, uint16_t height) {
14-
14+
mp_obj_t pixel_shader, uint16_t input_color_count) {
1515
self->pixel_shader = pixel_shader;
16-
self->width_in_tiles = width;
17-
self->height_in_tiles = height;
1816
self->input_color_count = input_color_count;
19-
self->needs_refresh = false;
20-
int mappings_len = width * height;
21-
self->tile_mappings = (uint32_t **)m_malloc(mappings_len * sizeof(uint32_t *));
22-
for (int i = 0; i < mappings_len; i++) {
23-
self->tile_mappings[i] = (uint32_t *)m_malloc_without_collect(input_color_count * sizeof(uint32_t));
24-
if (mp_obj_is_type(self->pixel_shader, &displayio_palette_type)) {
25-
for (uint16_t j = 0; j < input_color_count; j++) {
26-
self->tile_mappings[i][j] = j;
27-
}
28-
} else if (mp_obj_is_type(self->pixel_shader, &displayio_colorconverter_type)) {
29-
for (uint16_t j = 0; j < input_color_count; j++) {
30-
self->tile_mappings[i][j] = 0;
31-
}
32-
}
33-
}
17+
self->tilegrid = mp_const_none;
3418
}
3519

3620
uint16_t common_hal_tilepalettemapper_tilepalettemapper_get_width(tilepalettemapper_tilepalettemapper_t *self) {
@@ -45,6 +29,10 @@ mp_obj_t common_hal_tilepalettemapper_tilepalettemapper_get_pixel_shader(tilepal
4529
return self->pixel_shader;
4630
}
4731

32+
mp_obj_t common_hal_tilepalettemapper_tilepalettemapper_get_tilegrid(tilepalettemapper_tilepalettemapper_t *self) {
33+
return self->tilegrid;
34+
}
35+
4836
mp_obj_t common_hal_tilepalettemapper_tilepalettemapper_get_mapping(tilepalettemapper_tilepalettemapper_t *self, uint16_t x, uint16_t y) {
4937
int index = x + y * self->width_in_tiles;
5038
mp_obj_t result[self->input_color_count];
@@ -67,7 +55,7 @@ void common_hal_tilepalettemapper_tilepalettemapper_set_mapping(tilepalettemappe
6755
mp_arg_validate_int_range(mapping_val, 0, palette_max, MP_QSTR_mapping_value);
6856
self->tile_mappings[y * self->width_in_tiles + x][i] = mapping_val;
6957
}
70-
self->needs_refresh = true;
58+
displayio_tilegrid_mark_tile_dirty(self->tilegrid, x, y);
7159
}
7260

7361
void tilepalettemapper_tilepalettemapper_get_color(tilepalettemapper_tilepalettemapper_t *self, const _displayio_colorspace_t *colorspace, displayio_input_pixel_t *input_pixel, displayio_output_pixel_t *output_color, uint16_t x_tile_index, uint16_t y_tile_index) {
@@ -91,10 +79,26 @@ void tilepalettemapper_tilepalettemapper_get_color(tilepalettemapper_tilepalette
9179

9280
}
9381

94-
bool tilepalettemapper_tilepalettemapper_needs_refresh(tilepalettemapper_tilepalettemapper_t *self) {
95-
return self->needs_refresh;
96-
}
82+
void tilepalettemapper_tilepalettemapper_bind(tilepalettemapper_tilepalettemapper_t *self, displayio_tilegrid_t *tilegrid) {
83+
if (self->tilegrid != mp_const_none) {
84+
mp_raise_RuntimeError(MP_ERROR_TEXT("TilePaletteMapper may only be bound to a TileGrid once"));
85+
}
86+
self->tilegrid = tilegrid;
87+
self->width_in_tiles = common_hal_displayio_tilegrid_get_width(tilegrid);
88+
self->height_in_tiles = common_hal_displayio_tilegrid_get_height(tilegrid);
9789

98-
void tilepalettemapper_tilepalettemapper_finish_refresh(tilepalettemapper_tilepalettemapper_t *self) {
99-
self->needs_refresh = false;
90+
int mappings_len = self->width_in_tiles * self->height_in_tiles;
91+
self->tile_mappings = (uint32_t **)m_malloc(mappings_len * sizeof(uint32_t *));
92+
for (int i = 0; i < mappings_len; i++) {
93+
self->tile_mappings[i] = (uint32_t *)m_malloc_without_collect(self->input_color_count * sizeof(uint32_t));
94+
if (mp_obj_is_type(self->pixel_shader, &displayio_palette_type)) {
95+
for (uint16_t j = 0; j < self->input_color_count; j++) {
96+
self->tile_mappings[i][j] = j;
97+
}
98+
} else if (mp_obj_is_type(self->pixel_shader, &displayio_colorconverter_type)) {
99+
for (uint16_t j = 0; j < self->input_color_count; j++) {
100+
self->tile_mappings[i][j] = 0;
101+
}
102+
}
103+
}
100104
}

shared-module/tilepalettemapper/TilePaletteMapper.h

+3-4
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,17 @@
1212

1313
#include "py/obj.h"
1414
#include "shared-module/displayio/Palette.h"
15+
#include "shared-module/displayio/TileGrid.h"
1516

1617
typedef struct {
1718
mp_obj_base_t base;
1819
mp_obj_t pixel_shader;
20+
mp_obj_t tilegrid;
1921
uint16_t width_in_tiles;
2022
uint16_t height_in_tiles;
2123
uint16_t input_color_count;
2224
uint32_t **tile_mappings;
23-
bool needs_refresh;
2425
} tilepalettemapper_tilepalettemapper_t;
2526

26-
bool tilepalettemapper_tilepalettemapper_needs_refresh(tilepalettemapper_tilepalettemapper_t *self);
27-
void tilepalettemapper_tilepalettemapper_finish_refresh(tilepalettemapper_tilepalettemapper_t *self);
28-
2927
void tilepalettemapper_tilepalettemapper_get_color(tilepalettemapper_tilepalettemapper_t *self, const _displayio_colorspace_t *colorspace, displayio_input_pixel_t *input_pixel, displayio_output_pixel_t *output_color, uint16_t x_tile_index, uint16_t y_tile_index);
28+
void tilepalettemapper_tilepalettemapper_bind(tilepalettemapper_tilepalettemapper_t *self, displayio_tilegrid_t *tilegrid);

0 commit comments

Comments
 (0)