@@ -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