您尚未登录。

#1 Re: 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » arm linux 下littlevgl设置成部分全透明的效果? » 2019-10-08 16:48:43

tango_zhu 说:
dean 说:

1. 在lvgl的配置文件中修改宏定义 => lvgl_conf.h , 是用来做图层叠加的,比如OSD之类的功能。
#define LV_COLOR_SCREEN_TRANSP    0
2. 修改源文件 src/lv_hal/lv_hal_disp.c,修改的目的就是把默认的显示变为32位位启用透明。
lv_disp_t * lv_disp_drv_register(lv_disp_drv_t * driver)
=> add lv_obj_set_style(disp->act_scr, &lv_style_transp);
此时假设你的视频输出在/dev/fb1上,而UI的话在/dev/fb0上就能够看到叠加效果了。

楼主的意思应该是在同一个/dev/fb0 上分为图形层和视频层,希望图形层也就是gui的东西不要挡住视频层的东西
您的意思是#define LV_COLOR_SCREEN_TRANSP    1
然后在src/lv_hal/lv_hal_disp.c 143行下面添加    lv_obj_set_style(disp->act_scr, &lv_style_transp); 么

是的,不过确实要有GPU支持才可以,一般的ARM处理器的GPU目前都有几个图层,是可以支持的。
像Android系统就是这么做的。

楼主的意思应该是在同一个/dev/fb0 上分为图形层和视频层,希望图形层也就是gui的东西不要挡住视频层的东西
=> 在同一个framebuffer,目前ARM或MCU软件做不出这个效果的,帧率不会超过10
=> 这样效果想实现也容易,就是灵活利用lvgl的三个图层
    disp->act_scr   = lv_obj_create(NULL, NULL); /*Create a default screen on the display*/
    disp->top_layer = lv_obj_create(NULL, NULL); /*Create top layer on the display*/
    disp->sys_layer = lv_obj_create(NULL, NULL); /*Create sys layer on the display*/

把视频YUV格式转换为RGB的显示模式,画在act_scr,然后把UI画在top_layer,这个效率很低。

#2 Re: 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » arm linux 下littlevgl设置成部分全透明的效果? » 2019-10-06 23:42:14

1. 在lvgl的配置文件中修改宏定义 => lvgl_conf.h , 是用来做图层叠加的,比如OSD之类的功能。
#define LV_COLOR_SCREEN_TRANSP    0
2. 修改源文件 src/lv_hal/lv_hal_disp.c,修改的目的就是把默认的显示变为32位位启用透明。
lv_disp_t * lv_disp_drv_register(lv_disp_drv_t * driver)
=> add lv_obj_set_style(disp->act_scr, &lv_style_transp);
此时假设你的视频输出在/dev/fb1上,而UI的话在/dev/fb0上就能够看到叠加效果了。

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn