Report the correct desktop video mode on the iMX6

This commit is contained in:
Sam Lantinga 2014-09-10 08:59:19 -07:00
parent 50cc4efec8
commit 0e65e62367
3 changed files with 32 additions and 12 deletions

View File

@ -150,8 +150,6 @@ MX6_GLES_LoadLibrary(_THIS, const char *egl_path) {
LOAD_VIV_FUNC(fbDestroyPixmap); LOAD_VIV_FUNC(fbDestroyPixmap);
displaydata = SDL_GetDisplayDriverData(0); 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); _this->egl_data->egl_display = _this->egl_data->eglGetDisplay(displaydata->native_display);
if (!_this->egl_data->egl_display) { if (!_this->egl_data->egl_display) {

View File

@ -124,6 +124,36 @@ VideoBootStrap MX6_bootstrap = {
MX6_Create 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, &current_mode.w, &current_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 */ /* SDL Video and Display initialization/handling functions */
/*****************************************************************************/ /*****************************************************************************/
@ -138,16 +168,9 @@ MX6_VideoInit(_THIS)
if (data == NULL) { if (data == NULL) {
return SDL_OutOfMemory(); 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(display);
SDL_zero(current_mode);
display.desktop_mode = current_mode; display.desktop_mode = current_mode;
display.current_mode = current_mode; display.current_mode = current_mode;
display.driverdata = data; display.driverdata = data;
@ -156,6 +179,7 @@ MX6_VideoInit(_THIS)
if (SDL_GL_LoadLibrary(NULL) < 0) { if (SDL_GL_LoadLibrary(NULL) < 0) {
return -1; return -1;
} }
MX6_UpdateDisplay(_this);
#ifdef SDL_INPUT_LINUXEV #ifdef SDL_INPUT_LINUXEV
SDL_EVDEV_Init(); SDL_EVDEV_Init();

View File

@ -35,8 +35,6 @@ typedef struct SDL_DisplayData
{ {
EGLNativeDisplayType native_display; EGLNativeDisplayType native_display;
EGLDisplay egl_display; EGLDisplay egl_display;
int width;
int height;
} SDL_DisplayData; } SDL_DisplayData;
typedef struct SDL_WindowData typedef struct SDL_WindowData