@@ -112,7 +112,8 @@ void common_hal__pixelbuf_pixelbuf_set_brightness(mp_obj_t self_in, mp_float_t b
112
112
// Skip out if the brightness is already set. The default of self->brightness is 1.0. So, this
113
113
// also prevents the pre_brightness_buffer allocation when brightness is set to 1.0 again.
114
114
self -> brightness = brightness ;
115
- uint16_t new_scaled_brightness = (int )roundf (brightness * 256 );
115
+ // Use 256 steps of brightness so that we can do integer math below.
116
+ uint16_t new_scaled_brightness = (uint16_t )(brightness * 256 );
116
117
if (new_scaled_brightness == self -> scaled_brightness ) {
117
118
return ;
118
119
}
@@ -130,7 +131,7 @@ void common_hal__pixelbuf_pixelbuf_set_brightness(mp_obj_t self_in, mp_float_t b
130
131
if (self -> byteorder .is_dotstar && i % 4 == 0 ) {
131
132
continue ;
132
133
}
133
- self -> post_brightness_buffer [i ] = (self -> pre_brightness_buffer [i ] * self -> scaled_brightness ) >> 8 ;
134
+ self -> post_brightness_buffer [i ] = (self -> pre_brightness_buffer [i ] * self -> scaled_brightness ) / 256 ;
134
135
}
135
136
136
137
if (self -> auto_write ) {
@@ -224,13 +225,13 @@ void _pixelbuf_set_pixel_color(pixelbuf_pixelbuf_obj_t* self, size_t index, uint
224
225
if (scaled_buffer ) {
225
226
if (self -> bytes_per_pixel == 4 ) {
226
227
if (!self -> byteorder .is_dotstar ) {
227
- w = (w * self -> scaled_brightness ) >> 8 ;
228
+ w = (w * self -> scaled_brightness ) / 256 ;
228
229
}
229
230
scaled_buffer [rgbw_order -> w ] = w ;
230
231
}
231
- scaled_buffer [rgbw_order -> r ] = (r * self -> scaled_brightness ) >> 8 ;
232
- scaled_buffer [rgbw_order -> g ] = (g * self -> scaled_brightness ) >> 8 ;
233
- scaled_buffer [rgbw_order -> b ] = (b * self -> scaled_brightness ) >> 8 ;
232
+ scaled_buffer [rgbw_order -> r ] = (r * self -> scaled_brightness ) / 256 ;
233
+ scaled_buffer [rgbw_order -> g ] = (g * self -> scaled_brightness ) / 256 ;
234
+ scaled_buffer [rgbw_order -> b ] = (b * self -> scaled_brightness ) / 256 ;
234
235
}
235
236
}
236
237
@@ -331,23 +332,3 @@ void common_hal__pixelbuf_pixelbuf_fill(mp_obj_t self_in, mp_obj_t fill_color) {
331
332
common_hal__pixelbuf_pixelbuf_show (self_in );
332
333
}
333
334
}
334
-
335
- mp_int_t common_hal__pixelbuf_get_buffer (mp_obj_t self_in , mp_buffer_info_t * bufinfo , mp_uint_t flags ) {
336
- pixelbuf_pixelbuf_obj_t * self = native_pixelbuf (self_in );
337
- bufinfo -> buf = self -> pre_brightness_buffer ;
338
- if (self -> pre_brightness_buffer ) {
339
- // If we have a brightness setting, we must treat the buffer as
340
- // read-only (because we have no way to "fire" the
341
- // brightness-converting code as a side effect of mutation via the
342
- // buffer)
343
- if ((flags & MP_BUFFER_WRITE )) {
344
- return 1 ;
345
- }
346
- bufinfo -> buf = self -> pre_brightness_buffer ;
347
- } else {
348
- bufinfo -> buf = self -> post_brightness_buffer ;
349
- }
350
- bufinfo -> typecode = 'B' ;
351
- bufinfo -> len = self -> bytes_per_pixel * common_hal__pixelbuf_pixelbuf_get_len (self_in );
352
- return 0 ;
353
- }
0 commit comments