f1c100s跑rttt+lvgl画面有撕裂感,已经启用了双缓冲模式,
flush函数如下,在这个函数print发现每次这个函数的area并不是液晶屏的尺寸,而是控件的尺寸,不是说定义了2个全尺寸的缓冲区之后每次都会全屏刷新的吗,
static void disp_flush(lv_disp_drv_t *disp_drv, const lv_area_t *area, lv_color_t *color_p)
{
int32_t x;
int32_t y;
for (y = area->y1; y <= area->y2; y++)
{
for (x = area->x1; x <= area->x2; x++)
{
/* Put a pixel to the display. For example: */
/* put_px(x, y, *color_p)*/
((uint16_t *)lcd_layer0.vram)[y * lcd_layer0.width + x] = color_p->full;
color_p++;
}
}
离线
我仔细看了一下源代码,好像如果液晶屏旋转90度也就是从竖屏改成横屏,全尺寸双缓冲就不支持了..............哭...
离线
@armstrong
static void lv_refr_vdb_rotate(lv_area_t * area, lv_color_t * color_p)
{
lv_disp_drv_t * drv = &disp_refr->driver;
if(lv_disp_is_true_double_buf(disp_refr) && drv->sw_rotate) {
LV_LOG_ERROR("cannot rotate a true double-buffered display!");
这个是lvtl7.11的源代码,而且7.11里面没有display_driver.full_refresh = 1; /* 双完整帧缓存模式需要置1 */这个功能,
不知道8.0以上能不能支持旋转90的双缓冲
离线