MTK平台有个图层的概念。每个层的数据存放在不同的buffer中,这些buffer可以从LCD对应的寄存器中读出。具体的自己去查对应平台的规格书吧。
MTK的平台是你在blockwrite中通过STARTLCDTRANSFER打开这个寄存器对应的位,然后硬件把每一层图像中对应的像素点取出,然后通过硬件合成,把合成后的数据通过你在LCD_DATA_ADDR中设置的端口地址找到LCD接口,送入LCD中显示。
1,首先由应用建立一个layer,开一个存放LCD数据的BUFFER,然后把这个BUFFER的地址赋给LCD寄存器
gdi_layer_blt_ext() >> CONFIG_HARDWARE_LAYER >> config_lcd_layer_window()
{......
DRV_WriteReg32(lcd_layer_base_addr+0x0C,layer_data->frame_buffer_address);
}
这样数据源已经关联起来了,其实这里还会设置宽度和高度这些信息.
2,准备好数据源之后开始发指令进行DMA传输
gdi_layer_blt_ext() >> lcd_fb_update() >> MainLCD->BlockWrite()
{
START_LCD_TRANSFER
}
--------------------------------------------------------------------------------------
每个背景就是一个图形或图像填充起来的矩形,只要初始化结构提UI_filled_area,然后交由函数gui_draw_filled_area画出来即可。
typedef struct _UI_filled_area
{
U32 flags; //总控制标志
PU8 b; //背景图像
gradient_color *gc; //递进颜色
color c; //背景色
color ac; //替换色
color border_color; //边框颜色
color shadow_color; //阴影颜色
UI_transparent_color_type transparent_color; //透明色
} UI_filled_area;
flags = 类型标志|边框标志|阴影标志;
颜色为背景
void EntryScreenInternet(void)
{
UI_filled_area filler = {0};
EntryNewScreen(SCR_INT_MAIN, NULL, EntryScreenInternet, NULL);
entry_full_screen();
clear_screen_with_color(gui_color(0, 255, 0));
filler.flags = UI_FILLED_AREA_TYPE_COLOR|UI_FILLED_AREA_BORDER|UI_FILLED_AREA_SHADOW;
filler.c = UI_COLOR_GREY;
filler.border_color = UI_COLOR_DARK_GREY;
filler.shadow_color = UI_COLOR_3D_FILLER;
gui_draw_filled_area(20, 20, 156, 150, &filler);
ShowCategoryInternet();
SetKeyHandler(GoBackHistory, KEY_RSK, KEY_EVENT_UP);
}
递进颜色为背景
void EntryScreenInternet(void)
{
UI_filled_area filler = {0};
static color g_color[3] = {
{255, 0, 0},{0, 255, 0},{0, 0, 255}};
static U8 perc