fix(i1): fix compiler and runtime issues with I1 rendering (#6714)
Co-authored-by: Liam <30486941+liamHowatt@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
6b8d420170
commit
3147fc2f52
@@ -136,7 +136,6 @@ or anything else to optimize while the waiting for flush.
|
||||
If ``flush_wait_cb`` is not set, LVGL assume that `lv_display_flush_ready`
|
||||
is used.
|
||||
|
||||
|
||||
Rotation
|
||||
--------
|
||||
|
||||
@@ -173,7 +172,7 @@ The default color format of the display is set according to :c:macro:`LV_COLOR_D
|
||||
- :c:macro:`LV_COLOR_DEPTH` ``24``: RGB888 (3 bytes/pixel)
|
||||
- :c:macro:`LV_COLOR_DEPTH` ``16``: RGB565 (2 bytes/pixel)
|
||||
- :c:macro:`LV_COLOR_DEPTH` ``8``: L8 (1 bytes/pixel)
|
||||
- :c:macro:`LV_COLOR_DEPTH` ``1``: I1 (1 bit/pixel) Only support for horizontal mapped buffers.
|
||||
- :c:macro:`LV_COLOR_DEPTH` ``1``: I1 (1 bit/pixel) Only support for horizontal mapped buffers. See :refr:`monochrome` for more details:
|
||||
|
||||
The ``color_format`` can be changed with
|
||||
:cpp:expr:`lv_display_set_color_depth(display, LV_COLOR_FORMAT_...)`.
|
||||
@@ -205,6 +204,40 @@ to
|
||||
|
||||
``GGG BBBBB | RRRRR GGG``.
|
||||
|
||||
.. _monochrome:
|
||||
|
||||
Monochrome Displays
|
||||
-------------------
|
||||
|
||||
LVGL supports rendering directly in a 1-bit format for monochrome displays.
|
||||
To enable it, set ``LV_COLOR_DEPTH 1`` or use :cpp:expr:`lv_display_set_color_format(display, LV_COLOR_FORMAT_I1)`.
|
||||
|
||||
The :cpp:expr:`LV_COLOR_FORMAT_I1` format assumes that bytes are mapped to rows (i.e., the bits of a byte are written next to each other).
|
||||
The order of bits is MSB first, which means:
|
||||
|
||||
.. code::
|
||||
|
||||
MSB LSB
|
||||
bits 7 6 5 4 3 2 1 0
|
||||
pixels 0 1 2 3 4 5 6 7
|
||||
Left Right
|
||||
|
||||
Ensure that the LCD controller is configured accordingly.
|
||||
|
||||
Internally, LVGL rounds the redrawn areas to byte boundaries. Therefore, updated areas will:
|
||||
|
||||
- Start on an ``Nx8`` coordinate.
|
||||
- End on an ``Nx8 - 1`` coordinate.
|
||||
|
||||
When setting up the buffers for rendering (:cpp:func:`lv_display_set_buffers`), make the buffer 8 bytes larger.
|
||||
This is necessary because LVGL reserves 2 x 4 bytes in the buffer, as these are assumed to be used as a palette.
|
||||
|
||||
To skip the palette, include the following line in your ``flush_cb`` function: ``px_map += 8``.
|
||||
|
||||
As usual, monochrome displays support partial, full, and direct rendering modes as well.
|
||||
In full and direct modes, the buffer size should be large enough for the whole screen, meaning ``(horizontal_resolution x vertical_resolution / 8) + 8`` bytes.
|
||||
As LVGL can not handle fractional width make sure to round the horizontal resolution to 8-
|
||||
(For example 90 to 96)
|
||||
|
||||
User data
|
||||
---------
|
||||
|
||||
Reference in New Issue
Block a user