Draw Units

A "Draw Unit" (lv_draw_unit_t) is any peripheral or system that can render something on the screen. This can be a CPU core, a GPU, a custom rendering library for specific draw tasks, or any entity capable of performing rendering.

LVGL supports several built-in draw units that can be enabled in lv_conf.h.

Software Rendering

A highly optimized renderer written in C. Even when no GPU is enabled, software rendering provides a performant, low-footprint, and very capable engine for rendering.

Rendering Features

The software renderer is capable of rendering most typical draw tasks, including:

  • fill rectangles with a color or gradient

  • rounded rectangles and borders

  • draw box shadows

  • blend, rotate, scale, or recolor images

  • draw labels, even with rotated letters

  • draw skew lines with perpendicular endings and any thickness

  • draw arcs with rounded or straight endings

  • blur an area

  • draw drop shadows for any shape

  • anti-alaising for all rendering

  • and many more

Color Format Support

It also supports the most common color formats as source and destination, such as RGB888, XRGB8888, ARGB8888, RGB565, L8, A8, I1, and more.

Multi-Core Rendering

In case of a multi-core system, each core can perform software rendering in parallel by setting LV_DRAW_SW_DRAW_UNIT_CNT to greater than 1, and setting LV_USE_OS to something other than LV_OS_NONE.

Assembly Acceleration

Software rendering can also use various assembly accelerators, such as:

  • Arm Neon: available on most Cortex-A cores

  • Arm Helium: available on Cortex-M55 and M85 cores

  • Arm-2D: a complete library supporting highly optimized Helium acceleration

  • RISC-V: uses SIMD instructions on RISC-V cores

These can be enabled in lv_conf.h and typically provide 10-30% faster rendering.

Vector Graphics

To render vector graphics (e.g. SVG), LVGL uses a third-party library called ThorVG. It supports most vector rendering features such as:

  • paths from lines, arcs, and Bézier curves

  • stroke with dashing and joint settings

  • fill with color, image, or gradient

  • and many more

To use it, enable LV_USE_THORVG_INTERNAL and LV_USE_VECTOR_GRAPHIC.

VG-Lite

A powerful vector graphics accelerator IP developed by Verisilicon. It is widely used by NXP and other chip vendors to provide hardware-accelerated 2D and vector rendering.

Key Features

  • Hardware-accelerated vector path rendering (lines, arcs, Bézier curves)

  • Fill and stroke support with solid colors and gradients

  • Image transformations such as scaling, rotation, and blending

  • Anti-aliasing for smoother edges

  • Efficient memory usage optimized for embedded systems

  • High performance with low CPU utilization

To enable VG-Lite support in LVGL, set LV_USE_DRAW_VG_LITE in lv_conf.h.

NemaGFX

NemaGFX is a graphics API and GPU family developed by Think Silicon. It is used in various embedded platforms, including STM32 devices with NeoChrom GPUs and Ambiq MCUs, to provide hardware-accelerated 2D rendering.

In addition to the 2D engine, some platforms also include NemaVG, which provides hardware-accelerated vector graphics rendering.

Key Features

  • Hardware-accelerated 2D rendering (fills, blits, compositing)

  • Image transformations such as scaling, rotation, and blending

  • Alpha blending and transparency support

  • Vector graphics acceleration via NemaVG (paths, fills, strokes)

  • Optimized for low-power embedded systems

  • Offloads rendering from the CPU for improved performance

To enable NemaGFX support in LVGL, set LV_USE_DRAW_NEMA_GFX in lv_conf.h.

Dave2D

Dave2D is a 2D graphics accelerator developed by TES and widely used on Renesas and Alif MCUs.

In Renesas FSP, the DRW peripheral is provided as a port of D/AVE 2D, which is the driver used by the LVGL Dave2D draw unit.

Key Features

  • Rectangle drawing, including gradients

  • Image drawing, scaling, and rotation

  • Letter drawing

  • Triangle drawing

  • Line drawing

  • Background rendering that reduces CPU load during drawing

To enable Dave2D support in LVGL, set LV_USE_DRAW_DAVE2D in lv_conf.h.