1*4882a593SmuzhiyunFrom 4eff59e80820a7d346f1199570e21d21b18cb030 Mon Sep 17 00:00:00 2001 2*4882a593SmuzhiyunFrom: Jiajian Wu <jair.wu@rock-chips.com> 3*4882a593SmuzhiyunDate: Wed, 21 Dec 2022 14:36:15 +0800 4*4882a593SmuzhiyunSubject: [PATCH 5/6] HACK: use sdl to get display size 5*4882a593Smuzhiyun 6*4882a593SmuzhiyunSigned-off-by: Jiajian Wu <jair.wu@rock-chips.com> 7*4882a593Smuzhiyun--- 8*4882a593Smuzhiyun lv_drv_conf.h | 4 ++-- 9*4882a593Smuzhiyun sdl/sdl_gpu.c | 22 +++++++++++++++++++--- 10*4882a593Smuzhiyun 2 files changed, 21 insertions(+), 5 deletions(-) 11*4882a593Smuzhiyun 12*4882a593Smuzhiyundiff --git a/lv_drv_conf.h b/lv_drv_conf.h 13*4882a593Smuzhiyunindex 6dd6af1..345762a 100644 14*4882a593Smuzhiyun--- a/lv_drv_conf.h 15*4882a593Smuzhiyun+++ b/lv_drv_conf.h 16*4882a593Smuzhiyun@@ -95,8 +95,8 @@ 17*4882a593Smuzhiyun #endif 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun #if USE_SDL || USE_SDL_GPU 20*4882a593Smuzhiyun-# define SDL_HOR_RES 720 21*4882a593Smuzhiyun-# define SDL_VER_RES 1280 22*4882a593Smuzhiyun+//# define SDL_HOR_RES 720 23*4882a593Smuzhiyun+//# define SDL_VER_RES 1280 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun /* Scale window by this factor (useful when simulating small screens) */ 26*4882a593Smuzhiyun # define SDL_ZOOM 1 27*4882a593Smuzhiyundiff --git a/sdl/sdl_gpu.c b/sdl/sdl_gpu.c 28*4882a593Smuzhiyunindex 1a459f6..51ce536 100644 29*4882a593Smuzhiyun--- a/sdl/sdl_gpu.c 30*4882a593Smuzhiyun+++ b/sdl/sdl_gpu.c 31*4882a593Smuzhiyun@@ -48,6 +48,8 @@ 32*4882a593Smuzhiyun **********************/ 33*4882a593Smuzhiyun typedef struct { 34*4882a593Smuzhiyun lv_draw_sdl_drv_param_t drv_param; 35*4882a593Smuzhiyun+ lv_coord_t hor_res; 36*4882a593Smuzhiyun+ lv_coord_t ver_res; 37*4882a593Smuzhiyun SDL_Window * window; 38*4882a593Smuzhiyun SDL_Texture * texture; 39*4882a593Smuzhiyun }monitor_t; 40*4882a593Smuzhiyun@@ -92,7 +94,11 @@ void sdl_init(void) 41*4882a593Smuzhiyun void sdl_disp_drv_init(lv_disp_drv_t * disp_drv, lv_coord_t hor_res, lv_coord_t ver_res) 42*4882a593Smuzhiyun { 43*4882a593Smuzhiyun monitor_t *m = lv_mem_alloc(sizeof(monitor_t)); 44*4882a593Smuzhiyun+ m->hor_res = hor_res; 45*4882a593Smuzhiyun+ m->ver_res = ver_res; 46*4882a593Smuzhiyun window_create(m); 47*4882a593Smuzhiyun+ hor_res = m->hor_res; 48*4882a593Smuzhiyun+ ver_res = m->ver_res; 49*4882a593Smuzhiyun lv_disp_drv_init(disp_drv); 50*4882a593Smuzhiyun disp_drv->direct_mode = 1; 51*4882a593Smuzhiyun disp_drv->flush_cb = monitor_flush; 52*4882a593Smuzhiyun@@ -244,13 +250,22 @@ static void monitor_sdl_clean_up(void) 53*4882a593Smuzhiyun static void window_create(monitor_t * m) 54*4882a593Smuzhiyun { 55*4882a593Smuzhiyun // SDL_SetHint( SDL_HINT_RENDER_SCALE_QUALITY, "1"); 56*4882a593Smuzhiyun+ SDL_Rect rect; 57*4882a593Smuzhiyun+ 58*4882a593Smuzhiyun+ if (!m->hor_res || !m->ver_res) { 59*4882a593Smuzhiyun+ SDL_GetDisplayBounds(0, &rect); 60*4882a593Smuzhiyun+ m->hor_res = rect.w; 61*4882a593Smuzhiyun+ m->ver_res = rect.h; 62*4882a593Smuzhiyun+ } 63*4882a593Smuzhiyun+ 64*4882a593Smuzhiyun m->window = SDL_CreateWindow("TFT Simulator", 65*4882a593Smuzhiyun SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 66*4882a593Smuzhiyun- SDL_HOR_RES * SDL_ZOOM, SDL_VER_RES * SDL_ZOOM, SDL_WINDOW_RESIZABLE); 67*4882a593Smuzhiyun+ m->hor_res * SDL_ZOOM, m->ver_res * SDL_ZOOM, 68*4882a593Smuzhiyun+ SDL_WINDOW_RESIZABLE); 69*4882a593Smuzhiyun 70*4882a593Smuzhiyun m->drv_param.renderer = SDL_CreateRenderer(m->window, -1, SDL_RENDERER_ACCELERATED); 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun- m->texture = lv_draw_sdl_create_screen_texture(m->drv_param.renderer, SDL_HOR_RES, SDL_VER_RES); 73*4882a593Smuzhiyun+ m->texture = lv_draw_sdl_create_screen_texture(m->drv_param.renderer, m->hor_res, m->ver_res); 74*4882a593Smuzhiyun /* For first frame */ 75*4882a593Smuzhiyun SDL_SetRenderTarget(m->drv_param.renderer, m->texture); 76*4882a593Smuzhiyun } 77*4882a593Smuzhiyun@@ -258,13 +273,14 @@ static void window_create(monitor_t * m) 78*4882a593Smuzhiyun static void window_update(lv_disp_drv_t *disp_drv, void * buf) 79*4882a593Smuzhiyun { 80*4882a593Smuzhiyun SDL_Renderer *renderer = ((lv_draw_sdl_drv_param_t *) disp_drv->user_data)->renderer; 81*4882a593Smuzhiyun+ monitor_t *m = (monitor_t *)disp_drv->user_data; 82*4882a593Smuzhiyun SDL_Texture *texture = buf; 83*4882a593Smuzhiyun SDL_SetRenderTarget(renderer, NULL); 84*4882a593Smuzhiyun SDL_RenderClear(renderer); 85*4882a593Smuzhiyun #if LV_COLOR_SCREEN_TRANSP 86*4882a593Smuzhiyun SDL_SetRenderDrawColor(renderer, 0xff, 0, 0, 0xff); 87*4882a593Smuzhiyun SDL_Rect r; 88*4882a593Smuzhiyun- r.x = 0; r.y = 0; r.w = SDL_HOR_RES; r.h = SDL_VER_RES; 89*4882a593Smuzhiyun+ r.x = 0; r.y = 0; r.w = m->hor_res; r.h = m->ver_res; 90*4882a593Smuzhiyun SDL_RenderDrawRect(renderer, &r); 91*4882a593Smuzhiyun #endif 92*4882a593Smuzhiyun 93*4882a593Smuzhiyun-- 94*4882a593Smuzhiyun2.25.1 95*4882a593Smuzhiyun 96