X-Git-Url: https://git.ayoreis.com/hackapet/Adafruit_Blinka_Displayio.git/blobdiff_plain/a0f10b55a919620936e1f697ae7e674f29d296dc..fd69c0e2397b5665769baceabf902fea01b81008:/displayio/_display.py diff --git a/displayio/_display.py b/displayio/_display.py index d06ccbe..022103d 100644 --- a/displayio/_display.py +++ b/displayio/_display.py @@ -18,7 +18,6 @@ displayio for Blinka """ import time -import struct from array import array from typing import Optional import digitalio @@ -329,7 +328,6 @@ class Display: def _refresh_area(self, area) -> bool: """Loop through dirty areas and redraw that area.""" # pylint: disable=too-many-locals - buffer_size = 128 clipped = Area() # Clip the area to the display by overlapping the areas. @@ -338,9 +336,12 @@ class Display: return True rows_per_buffer = clipped.height() - pixels_per_word = (struct.calcsize("I") * 8) // self._core.colorspace.depth + pixels_per_word = 32 // self._core.colorspace.depth pixels_per_buffer = clipped.size() + # We should have lots of memory + buffer_size = clipped.size() // pixels_per_word + subrectangles = 1 # for SH1107 and other boundary constrained controllers # write one single row at a time @@ -366,8 +367,6 @@ class Display: buffer_size = pixels_per_buffer // pixels_per_word if pixels_per_buffer % pixels_per_word: buffer_size += 1 - - # TODO: Optimize with memoryview mask_length = (pixels_per_buffer // 8) + 1 # 1 bit per pixel + 1 remaining_rows = clipped.height() @@ -391,8 +390,8 @@ class Display: 8 // self._core.colorspace.depth ) - buffer = bytearray([0] * (buffer_size * struct.calcsize("I"))) - mask = bytearray([0] * mask_length) + buffer = memoryview(bytearray([0] * (buffer_size * 4))) + mask = memoryview(bytearray([0] * mask_length)) self._core.fill_area(subrectangle, mask, buffer) self._core.begin_transaction() self._send_pixels(buffer[:subrectangle_size_bytes]) @@ -405,13 +404,13 @@ class Display: raise ValueError("Display must have a 16 bit colorspace.") area = Area(0, y, self._core.width, y + 1) - pixels_per_word = (struct.calcsize("I") * 8) // self._core.colorspace.depth + pixels_per_word = 32 // self._core.colorspace.depth buffer_size = self._core.width // pixels_per_word pixels_per_buffer = area.size() if pixels_per_buffer % pixels_per_word: buffer_size += 1 - buffer = bytearray([0] * (buffer_size * struct.calcsize("I"))) + buffer = bytearray([0] * (buffer_size * 4)) mask_length = (pixels_per_buffer // 32) + 1 mask = array("L", [0x00000000] * mask_length) self._core.fill_area(area, mask, buffer)