75 lines
1.7 KiB
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*/
|