From 0e65e62367b196397c7fdbaa8b426c2480cb89c8 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Wed, 10 Sep 2014 08:59:19 -0700 Subject: [PATCH] Report the correct desktop video mode on the iMX6 --- src/video/mx6/SDL_mx6opengles.c | 2 -- src/video/mx6/SDL_mx6video.c | 40 ++++++++++++++++++++++++++------- src/video/mx6/SDL_mx6video.h | 2 -- 3 files changed, 32 insertions(+), 12 deletions(-) diff --git a/src/video/mx6/SDL_mx6opengles.c b/src/video/mx6/SDL_mx6opengles.c index 9881dba749f30..375a14a58da3a 100644 --- a/src/video/mx6/SDL_mx6opengles.c +++ b/src/video/mx6/SDL_mx6opengles.c @@ -150,8 +150,6 @@ MX6_GLES_LoadLibrary(_THIS, const char *egl_path) { LOAD_VIV_FUNC(fbDestroyPixmap); displaydata = SDL_GetDisplayDriverData(0); - displaydata->native_display = egl_viv_data->fbGetDisplayByIndex(0); - egl_viv_data->fbGetDisplayGeometry(displaydata->native_display, &displaydata->width, &displaydata->height); _this->egl_data->egl_display = _this->egl_data->eglGetDisplay(displaydata->native_display); if (!_this->egl_data->egl_display) { diff --git a/src/video/mx6/SDL_mx6video.c b/src/video/mx6/SDL_mx6video.c index 06fe4a310df29..2f9c04f2a0537 100644 --- a/src/video/mx6/SDL_mx6video.c +++ b/src/video/mx6/SDL_mx6video.c @@ -124,6 +124,36 @@ VideoBootStrap MX6_bootstrap = { MX6_Create }; +static void +MX6_UpdateDisplay(_THIS) +{ + SDL_VideoDisplay *display = &_this->displays[0]; + SDL_DisplayData *data = (SDL_DisplayData*)display->driverdata; + EGLNativeDisplayType native_display = egl_viv_data->fbGetDisplayByIndex(0); + SDL_DisplayMode current_mode; + int pitch, bpp; + unsigned long pixels; + + /* Store the native EGL display */ + data->native_display = native_display; + + SDL_zero(current_mode); + egl_viv_data->fbGetDisplayInfo(native_display, ¤t_mode.w, ¤t_mode.h, &pixels, &pitch, &bpp); + /* FIXME: How do we query refresh rate? */ + current_mode.refresh_rate = 60; + + switch (bpp) + { + default: /* Is another format used? */ + case 16: + current_mode.format = SDL_PIXELFORMAT_RGB565; + break; + } + + display->desktop_mode = current_mode; + display->current_mode = current_mode; +} + /*****************************************************************************/ /* SDL Video and Display initialization/handling functions */ /*****************************************************************************/ @@ -138,16 +168,9 @@ MX6_VideoInit(_THIS) if (data == NULL) { return SDL_OutOfMemory(); } - - /* Actual data will be set in SDL_GL_LoadLibrary call below */ - SDL_zero(current_mode); - current_mode.w = 0; - current_mode.h = 0; - current_mode.refresh_rate = 60; - current_mode.format = SDL_PIXELFORMAT_RGB565; - current_mode.driverdata = NULL; SDL_zero(display); + SDL_zero(current_mode); display.desktop_mode = current_mode; display.current_mode = current_mode; display.driverdata = data; @@ -156,6 +179,7 @@ MX6_VideoInit(_THIS) if (SDL_GL_LoadLibrary(NULL) < 0) { return -1; } + MX6_UpdateDisplay(_this); #ifdef SDL_INPUT_LINUXEV SDL_EVDEV_Init(); diff --git a/src/video/mx6/SDL_mx6video.h b/src/video/mx6/SDL_mx6video.h index 93de1317ce53e..7827337f8fa10 100644 --- a/src/video/mx6/SDL_mx6video.h +++ b/src/video/mx6/SDL_mx6video.h @@ -35,8 +35,6 @@ typedef struct SDL_DisplayData { EGLNativeDisplayType native_display; EGLDisplay egl_display; - int width; - int height; } SDL_DisplayData; typedef struct SDL_WindowData