Files
lvgl/src/draw/vg_lite/lv_draw_vg_lite_layer.c

75 lines
1.7 KiB
C

/**
* @file lv_draw_vg_lite_layer.c
*
*/
/*********************
* INCLUDES
*********************/
#include "lv_draw_vg_lite.h"
#if LV_USE_DRAW_VG_LITE
#include "lv_vg_lite_utils.h"
#include "lv_draw_vg_lite_type.h"
/*********************
* DEFINES
*********************/
/**********************
* TYPEDEFS
**********************/
/**********************
* STATIC PROTOTYPES
**********************/
/**********************
* STATIC VARIABLES
**********************/
/**********************
* MACROS
**********************/
/**********************
* GLOBAL FUNCTIONS
**********************/
void lv_draw_vg_lite_layer(lv_draw_unit_t * draw_unit, const lv_draw_image_dsc_t * draw_dsc,
const lv_area_t * coords)
{
lv_layer_t * layer = (lv_layer_t *)draw_dsc->src;
struct lv_draw_vg_lite_unit_t * u = (struct lv_draw_vg_lite_unit_t *)draw_unit;
/*It can happen that nothing was draw on a layer and therefore its buffer is not allocated.
*In this case just return. */
if(layer->draw_buf == NULL)
return;
LV_PROFILER_BEGIN;
/* The GPU output should already be premultiplied RGB */
if(!lv_draw_buf_has_flag(layer->draw_buf, LV_IMAGE_FLAGS_PREMULTIPLIED)) {
LV_LOG_WARN("Non-premultiplied layer buffer for GPU to draw.");
}
lv_draw_image_dsc_t new_draw_dsc = *draw_dsc;
new_draw_dsc.src = layer->draw_buf;
lv_draw_vg_lite_img(draw_unit, &new_draw_dsc, coords, true);
/* Wait for the GPU drawing to complete here,
* otherwise it may cause the drawing to fail. */
lv_vg_lite_finish(u);
LV_PROFILER_END;
}
/**********************
* STATIC FUNCTIONS
**********************/
#endif /*LV_USE_DRAW_VG_LITE*/