Skip to content

Commit 53bb95a

Browse files
committed
Rework to simplify
1 parent 10bc0d2 commit 53bb95a

1 file changed

Lines changed: 29 additions & 24 deletions

File tree

shared-bindings/displayio/Display.c

Lines changed: 29 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -415,31 +415,36 @@ STATIC mp_obj_t displayio_display_obj_fill_row(size_t n_args, const mp_obj_t *po
415415
buffer_size += 1;
416416
}
417417

418-
// Allocated and shared as a uint32_t array so the compiler knows the
419-
// alignment everywhere.
420-
uint32_t buffer[buffer_size];
421-
volatile uint32_t mask_length = (pixels_per_buffer / 32) + 1;
422-
uint32_t mask[mask_length];
423-
424-
for (uint16_t k = 0; k < mask_length; k++) {
425-
mask[k] = 0x00000000;
426-
}
427-
for (uint16_t k = 0; k < buffer_size; k++) {
428-
buffer[k] = 0x00000000;
429-
}
430-
431-
displayio_display_fill_area(self, &area, mask, buffer);
432-
433-
if ((result->len + result->free) >= (buffer_size * 4)) {
434-
int byte_offset = 0;
435-
for (int word_offset = 0; word_offset < buffer_size; word_offset++) {
436-
uint32_t word = buffer[word_offset];
437-
for (int byte_count = 0; byte_count < 4; byte_count++) {
438-
array_subscr(result, MP_OBJ_NEW_SMALL_INT(byte_offset), MP_OBJ_NEW_SMALL_INT(word & 0x000000FF));
439-
word >>= 8;
440-
byte_offset++;
441-
}
418+
mp_buffer_info_t bufinfo;
419+
mp_get_buffer_raise(result, &bufinfo, MP_BUFFER_WRITE);
420+
uint32_t *result_buffer = bufinfo.buf;
421+
size_t result_buffer_size = bufinfo.len;
422+
423+
if (result_buffer_size >= (buffer_size * 4)) {
424+
// Allocated and shared as a uint32_t array so the compiler knows the
425+
// alignment everywhere.
426+
/* uint32_t buffer[buffer_size]; */
427+
volatile uint32_t mask_length = (pixels_per_buffer / 32) + 1;
428+
uint32_t mask[mask_length];
429+
430+
for (uint16_t k = 0; k < mask_length; k++) {
431+
mask[k] = 0x00000000;
442432
}
433+
/* for (uint16_t k = 0; k < buffer_size; k++) { */
434+
/* buffer[k] = 0x00000000; */
435+
/* } */
436+
437+
438+
displayio_display_fill_area(self, &area, mask, result_buffer);
439+
/* int byte_offset = 0; */
440+
/* for (int word_offset = 0; word_offset < buffer_size; word_offset++) { */
441+
/* uint32_t word = buffer[word_offset]; */
442+
/* for (int byte_count = 0; byte_count < 4; byte_count++) { */
443+
/* array_subscr(result, MP_OBJ_NEW_SMALL_INT(byte_offset), MP_OBJ_NEW_SMALL_INT(word & 0x000000FF)); */
444+
/* word >>= 8; */
445+
/* byte_offset++; */
446+
/* } */
447+
/* } */
443448
return result;
444449
} else {
445450
mp_raise_ValueError(translate("Buffer is too small"));

0 commit comments

Comments
 (0)