#include "typedef.h" #include "rect.h" #include "res/resfile.h" #include "dbi.h" #include "jlgpu_math.h" // matrix #include "jlgpu_driver.h" // gpu driver #include "ui_resource.h" // JL UI resource #include "ui_expand/ui_expand.h" // macro defined #include "gpu_port.h" // module head file #include "gpu_draw.h" // custom draw head file #include "ui_core.h" #include "ui_measure.h" #include "ui/lcd/lcd_drive.h" #include "res/mem_var.h" #include "football.h" #include "gpu_demo.h" #if defined GPU_DEMO_DITHER_ENABLE && GPU_DEMO_DITHER_ENABLE struct gpu_port_demo_priv { struct lcd_interface *lcd; struct lcd_info info; pJLGPUTaskHead_t gpu_task_head; uint8_t *buf1; uint8_t *buf2; /* uint8_t cur_buf; */ }; static struct gpu_port_demo_priv priv = {0}; #define __this (&priv) struct img_info_user { //图片基本参数 int width; //图片宽度 int height; //图片高度 int left; int top; u8 img_data_from; //图像数据的来源(ram/flash) u8 *data; //存放图像数据的地址 int format; //图像的格式 //(demo中目前支持的图片格式:GPU_FORMAT_RGB565, GPU_FORMAT_ARGB8565, GPU_FORMAT_L1) u8 dither_en; // 图片缩放 u8 scale_en; float ratio_w; float ratio_h; }; static u8 icon_good_rgb565[2310] ALIGNED(4) = { 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe7, 0x39, 0xe7, 0x39, 0xe7, 0x39, 0x08, 0x42, 0x6a, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe7, 0x39, 0xe7, 0x39, 0xe7, 0x39, 0x08, 0x42, 0x6a, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe7, 0x39, 0xe7, 0x39, 0xe7, 0x39, 0x08, 0x42, 0x6a, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe7, 0x39, 0xe7, 0x39, 0xe7, 0x39, 0x08, 0x42, 0x6a, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe7, 0x39, 0xe7, 0x39, 0xe7, 0x39, 0x08, 0x42, 0x6a, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe7, 0x39, 0xe7, 0x39, 0xe7, 0x39, 0x08, 0x42, 0x6a, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe7, 0x39, 0xe7, 0x39, 0xe7, 0x39, 0x08, 0x42, 0x6a, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe7, 0x39, 0xe7, 0x39, 0xe7, 0x39, 0x08, 0x42, 0x6a, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe7, 0x39, 0xe7, 0x39, 0xe7, 0x39, 0x08, 0x42, 0x6a, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe7, 0x39, 0xe7, 0x39, 0xe7, 0x39, 0x08, 0x42, 0x6a, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe7, 0x39, 0xe7, 0x39, 0xe7, 0x39, 0x08, 0x42, 0x6a, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe7, 0x39, 0xe7, 0x39, 0xe7, 0x39, 0x08, 0x42, 0x6a, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe7, 0x39, 0xe7, 0x39, 0xe7, 0x39, 0x08, 0x42, 0x6a, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe7, 0x39, 0xe7, 0x39, 0xe7, 0x39, 0x08, 0x42, 0x6a, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe7, 0x39, 0xe7, 0x39, 0xe7, 0x39, 0x08, 0x42, 0x6a, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe7, 0x39, 0xe7, 0x39, 0xe7, 0x39, 0x08, 0x42, 0x6a, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe7, 0x39, 0xe7, 0x39, 0xe7, 0x39, 0x08, 0x42, 0x6a, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe7, 0x39, 0xe7, 0x39, 0xe7, 0x39, 0x08, 0x42, 0x6a, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe7, 0x39, 0xe7, 0x39, 0xe7, 0x39, 0x08, 0x42, 0x6a, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe7, 0x39, 0xe7, 0x39, 0xe7, 0x39, 0x08, 0x42, 0x6a, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe7, 0x39, 0xe7, 0x39, 0xe7, 0x39, 0x08, 0x42, 0x6a, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe7, 0x39, 0xe7, 0x39, 0xe7, 0x39, 0x08, 0x42, 0x6a, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe7, 0x39, 0xe7, 0x39, 0xe7, 0x39, 0x08, 0x42, 0x6a, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe7, 0x39, 0xe7, 0x39, 0xe7, 0x39, 0x08, 0x42, 0x6a, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe7, 0x39, 0xe7, 0x39, 0xe7, 0x39, 0x08, 0x42, 0x6a, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe7, 0x39, 0xe7, 0x39, 0xe7, 0x39, 0x08, 0x42, 0x6a, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe7, 0x39, 0xe7, 0x39, 0xe7, 0x39, 0x08, 0x42, 0x6a, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe7, 0x39, 0xe7, 0x39, 0xe7, 0x39, 0x08, 0x42, 0x6a, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe7, 0x39, 0xe7, 0x39, 0xe7, 0x39, 0x08, 0x42, 0x6a, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe7, 0x39, 0xe7, 0x39, 0xe7, 0x39, 0x08, 0x42, 0x6a, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe7, 0x39, 0xe7, 0x39, 0xe7, 0x39, 0x08, 0x42, 0x6a, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe7, 0x39, 0xe7, 0x39, 0xe7, 0x39, 0x08, 0x42, 0x6a, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe7, 0x39, 0xe7, 0x39, 0xe7, 0x39, 0x08, 0x42, 0x6a, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe7, 0x39, 0xe7, 0x39, 0xe7, 0x39, 0x08, 0x42, 0x6a, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe8, 0x41, 0xe7, 0x39, 0xe7, 0x39, 0xe7, 0x39, 0x08, 0x42, 0x6a, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x52, }; static void *gpu_port_demo_malloc(int size, u32 ram_type, u32 module_type) { void *buf = (void *)malloc(size); return buf; } static void gpu_port_demo_free(void *buf, u32 ram_type, u32 module_type) { free(buf); } static void gpu_port_demo_lcd_init(void) { __this->lcd = lcd_get_hdl(); ASSERT(__this->lcd); ASSERT(__this->lcd->init); ASSERT(__this->lcd->get_screen_info); ASSERT(__this->lcd->buffer_malloc); ASSERT(__this->lcd->buffer_free); ASSERT(__this->lcd->draw); ASSERT(__this->lcd->set_draw_area); ASSERT(__this->lcd->backlight_ctrl); if (__this->lcd->init) { extern const struct ui_devices_cfg ui_cfg_data; __this->lcd->init((void *)&ui_cfg_data); } if (__this->lcd->get_screen_info) { __this->lcd->get_screen_info(&__this->info); } if (__this->lcd->clear_screen) { __this->lcd->clear_screen(0x000000, 0, __this->info.width - 1, 0, __this->info.height - 1); } if (__this->lcd->backlight_ctrl) { __this->lcd->backlight_ctrl(100); } mem_var_init(3 * 1024, false); ui_resfile_info_init(gpu_port_demo_malloc, gpu_port_demo_free); // UI 资源管理 } //初始化gpu_port模块接口 static void gpu_port_demo_port_init(void) { jlgpu_module_init(gpu_port_demo_malloc, gpu_port_demo_free, __this->info.width, __this->info.height); } void gpu_port_demo_task_init(int gpu_out_format) { //创建任务链 __this->gpu_task_head = jlgpu_create_task_list_head(); if (!__this->gpu_task_head) { printf(" gpu create task list head fail!!! "); return; } //设置任务链输出的格式 jlgpu_set_task_list_out_format(__this->gpu_task_head, gpu_out_format); } void gpu_port_demo_task_free(void) { if (__this->gpu_task_head) { //删除任务链 jlgpu_delete_task_list_head(__this->gpu_task_head); __this->gpu_task_head = NULL; } } //创建绘制背景颜色任务 static void gpu_port_demo_create_bg_task(struct rect draw_rect, u32 color) { u8 a = (color >> 24) & 0xff; u8 r = (color >> 16) & 0xff; u8 g = (color >> 8) & 0xff; u8 b = (color) & 0xff; //创建gpu绘制任务 jlgpu_task_fill_param_init(0, 0, a, r, g, b); memcpy(&task_param.draw, &draw_rect, sizeof(struct rect)); jlgpu_get_win_rect(&task_param.area); // 限制区域是整个GPU窗口区域 printf("<%s>----param->head:0x%p\n", __func__, __this->gpu_task_head); jlgpu_create_task(__this->gpu_task_head, &task_param); /* JLGPUTaskParam_t task_param = {0}; */ /* */ /* //创建gpu绘制任务 */ /* memcpy(&task_param.draw, &draw_rect, sizeof(struct rect)); */ /* jlgpu_get_win_rect(&task_param.area); // 限制区域是整个GPU窗口区域 */ /* task_param.acolor = color; */ /* task_param.task_type = GPU_TASK_FILL; */ /* */ /* printf("<%s>----param->head:0x%p\n", __func__, __this->gpu_task_head); */ /* */ /* jlgpu_create_task(__this->gpu_task_head, &task_param); */ } //创建绘制图片的任务,gpu_texture static void gpu_port_demo_create_img_task(struct img_info_user *img) { //JLGPUTaskParam_t task_param = {0}; /* pJLGPUTaskUnit_t taskp; */ jlgpu_task_texture_param_init(0, 0); //创建gpu绘制任务 task_param.draw.width = img->width; task_param.draw.height = img->height; task_param.draw.left = img->left; task_param.draw.top = img->top; jlgpu_get_win_rect(&task_param.area); // 限制区域是整个GPU窗口区域 //task_param.task_type = GPU_TASK_IMAGE; task_param.texture.data = img->data; task_param.format = img->format; //配置图片的大小 task_param.image.width = img->width; task_param.image.height = img->height; //配置图片缩放参数 if (img->scale_en) { task_param.scale_en = 1; task_param.texture.tran.ratio_w = img->ratio_w; //宽的缩放倍数 task_param.texture.tran.ratio_h = img->ratio_h; //高的缩放倍数 } if (img->dither_en) { task_param.dither_en = 1; } jlgpu_create_task(__this->gpu_task_head, &task_param); } static void gpu_port_demo_draw_image(struct img_info_user *img, u32 background) { //首先判断图片的基本参数配置是否合法 if (!img->width || !img->height || !img->data) { ASSERT(0, "The params of img is error!!!"); } //输出配置 int width = __this->info.width; int height = __this->info.height; int out_format = GPU_FORMAT_RGB565; int out_bpp = gpu_get_format_bpp(out_format) / 8; int out_stride = width * out_bpp; int block_height = 16; //分块输出到屏幕上,每块的大小(width * block_height) //申请输出的缓存空间 __this->buf1 = (uint8_t *)zalloc(block_height * out_stride); /* __this->buf2 = (uint8_t *)zalloc((height % block_height) * out_stride); */ struct rect draw_task_rect = {0}; //创建绘制背景颜色的任务 if (background) { draw_task_rect.left = 0; draw_task_rect.top = 0; draw_task_rect.width = __this->info.width; draw_task_rect.height = __this->info.height; gpu_port_demo_create_bg_task(draw_task_rect, background); } //创建绘制图片的任务 gpu_port_demo_create_img_task(img); //设置输出buf并且显示到屏幕上 int block_num = 0; block_num = (height % block_height) ? (height / block_height + 1) : (height / block_height); //设置推屏区域 lcd_set_draw_area(0, width - 1, 0, height - 1); struct rect draw_rect = {0}; int draw_height; for (int i = 0; i < block_num; i++) { if ((i + 1) * block_height < height) { draw_height = block_height; } else { draw_height = height - (i * block_height); } draw_rect.left = 0; draw_rect.top = i * block_height; draw_rect.width = width; draw_rect.height = draw_height; memset(__this->buf1, 0, draw_rect.width * draw_rect.height * 2); jlgpu_set_task_list_out_buf(__this->gpu_task_head, __this->buf1, &draw_rect, 0, 0); jlgpu_task_list_run(__this->gpu_task_head); /* jlgpu_dump_task_head(__this->gpu_task_head); */ if (!i) { /* 开始推屏时使用 kistart */ lcd_draw_kistart(__this->buf1, draw_rect.left, draw_rect.left + draw_rect.width - 1, draw_rect.top, draw_rect.top + draw_rect.height - 1); lcd_wait_busy(); } else { /* 之后推屏时使用 continue 续传 */ lcd_draw_continue(__this->buf1, draw_rect.left, draw_rect.left + draw_rect.width - 1, draw_rect.top, draw_rect.top + draw_rect.height - 1); lcd_wait_busy(); } } if (__this->buf1) { free(__this->buf1); __this->buf1 = NULL; } if (__this->buf2) { free(__this->buf2); __this->buf2 = NULL; } } void gpu_demo_texture(void *p) { gpu_port_demo_lcd_init(); //初始化lcd gpu_port_demo_port_init(); //初始化gpu_port接口 struct img_info_user img_user = {0}; img_user.width = 33; img_user.height = 35; img_user.left = 100; img_user.top = 100; img_user.data = icon_good_rgb565; img_user.format = GPU_FORMAT_RGB565; // dither开关 img_user.dither_en = 1; // 图片缩放 img_user.scale_en = 1; img_user.ratio_w = 2; img_user.ratio_h = 2; gpu_port_demo_task_init(GPU_FORMAT_RGB565); gpu_port_demo_draw_image(&img_user, 0xffffffff); gpu_port_demo_task_free(); //任务链用完之后删除任务链,同时创建的任务也会清除 while (1) { os_time_dly(100); } } int gpu_demo_dither_task(void) { printf(">>>>>>>>> %s()", __func__); int err; err = os_task_create(gpu_demo_texture, NULL, 10, 1024 * 5, 512, "gpu_demo_texture"); if (err != OS_NO_ERR) { printf("gpu task create fail %x\n", err); } return 0; } #endif