From 3f23cab95986cca6c3b4baccc27dfea3c5a46a88 Mon Sep 17 00:00:00 2001 From: Mike Gorchak Date: Mon, 8 Jun 2009 21:00:52 +0000 Subject: [PATCH] Fixed support for 4bpp video modes enumeration, otherwise mode with zero bpp appears in the list. --- src/video/win32/SDL_win32modes.c | 47 ++++++++++++++++++-------------- 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/src/video/win32/SDL_win32modes.c b/src/video/win32/SDL_win32modes.c index e65fc60d1..35162b574 100644 --- a/src/video/win32/SDL_win32modes.c +++ b/src/video/win32/SDL_win32modes.c @@ -96,29 +96,35 @@ WIN_GetDisplayMode(LPCTSTR deviceName, DWORD index, SDL_DisplayMode * mode) } } else if (bmi->bmiHeader.biBitCount == 8) { mode->format = SDL_PIXELFORMAT_INDEX8; + } else if (bmi->bmiHeader.biBitCount == 4) { + mode->format = SDL_PIXELFORMAT_INDEX4LSB; } } else #endif /* _WIN32_WCE */ { - /* FIXME: Can we tell what this will be? */ - switch (devmode.dmBitsPerPel) { - case 32: - mode->format = SDL_PIXELFORMAT_RGB888; - break; - case 24: - mode->format = SDL_PIXELFORMAT_RGB24; - break; - case 16: - mode->format = SDL_PIXELFORMAT_RGB565; - break; - case 15: - mode->format = SDL_PIXELFORMAT_RGB555; - break; - case 8: - mode->format = SDL_PIXELFORMAT_INDEX8; - break; - } + if ((devmode.dmFields & DM_BITSPERPEL)==DM_BITSPERPEL) { + switch (devmode.dmBitsPerPel) { + case 32: + mode->format = SDL_PIXELFORMAT_RGB888; + break; + case 24: + mode->format = SDL_PIXELFORMAT_RGB24; + break; + case 16: + mode->format = SDL_PIXELFORMAT_RGB565; + break; + case 15: + mode->format = SDL_PIXELFORMAT_RGB555; + break; + case 8: + mode->format = SDL_PIXELFORMAT_INDEX8; + break; + case 4: + mode->format = SDL_PIXELFORMAT_INDEX4LSB; + break; + } + } } return SDL_TRUE; } @@ -200,8 +206,9 @@ WIN_GetDisplayModes(_THIS) if (!WIN_GetDisplayMode(data->DeviceName, i, &mode)) { break; } - if (!SDL_AddDisplayMode(_this->current_display, &mode)) { - SDL_free(mode.driverdata); + if (mode.format != SDL_PIXELFORMAT_UNKNOWN) + if (!SDL_AddDisplayMode(_this->current_display, &mode)) { + SDL_free(mode.driverdata); } } }