diff --git a/src/video/SDL_video.c b/src/video/SDL_video.c index 71743d887..926a5b9d4 100644 --- a/src/video/SDL_video.c +++ b/src/video/SDL_video.c @@ -1353,9 +1353,14 @@ SDL_DestroyWindow(SDL_WindowID windowID) void SDL_AddRenderDriver(int displayIndex, const SDL_RenderDriver * driver) { - SDL_VideoDisplay *display = &_this->displays[displayIndex]; + SDL_VideoDisplay *display; SDL_RenderDriver *render_drivers; + if (displayIndex >= _this->num_displays) { + return; + } + display = &_this->displays[displayIndex]; + render_drivers = SDL_realloc(display->render_drivers, (display->num_render_drivers + diff --git a/src/video/win32/SDL_win32modes.c b/src/video/win32/SDL_win32modes.c index bcd75325a..b9225f362 100644 --- a/src/video/win32/SDL_win32modes.c +++ b/src/video/win32/SDL_win32modes.c @@ -110,6 +110,34 @@ WIN_GetDisplayMode(LPCTSTR deviceName, DWORD index, SDL_DisplayMode * mode) return SDL_TRUE; } +static void +WIN_AddDisplay(LPTSTR DeviceName) +{ + SDL_VideoDisplay display; + SDL_DisplayData *displaydata; + SDL_DisplayMode mode; + +#ifdef DEBUG_MODES + printf("Display: %s\n", WIN_StringToUTF8(DeviceName)); +#endif + if (!WIN_GetDisplayMode(DeviceName, ENUM_CURRENT_SETTINGS, &mode)) { + return; + } + + displaydata = (SDL_DisplayData *) SDL_malloc(sizeof(*displaydata)); + if (!displaydata) { + return; + } + SDL_memcpy(displaydata->DeviceName, DeviceName, + sizeof(displaydata->DeviceName)); + + SDL_zero(display); + display.desktop_mode = mode; + display.current_mode = mode; + display.driverdata = displaydata; + SDL_AddVideoDisplay(&display); +} + void WIN_InitModes(_THIS) { @@ -132,36 +160,16 @@ WIN_InitModes(_THIS) printf("Device: %s\n", WIN_StringToUTF8(DeviceName)); #endif for (j = 0;; ++j) { - SDL_VideoDisplay display; - SDL_DisplayData *displaydata; - SDL_DisplayMode mode; - if (!EnumDisplayDevices(DeviceName, j, &device, 0)) { break; } if (!(device.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP)) { continue; } -#ifdef DEBUG_MODES - printf("Monitor: %s\n", WIN_StringToUTF8(device.DeviceName)); -#endif - if (!WIN_GetDisplayMode(DeviceName, ENUM_CURRENT_SETTINGS, &mode)) { - break; - } - - displaydata = - (SDL_DisplayData *) SDL_malloc(sizeof(*displaydata)); - if (!displaydata) { - continue; - } - SDL_memcpy(displaydata->DeviceName, DeviceName, - sizeof(DeviceName)); - - SDL_zero(display); - display.desktop_mode = mode; - display.current_mode = mode; - display.driverdata = displaydata; - SDL_AddVideoDisplay(&display); + WIN_AddDisplay(device.DeviceName); + } + if (j == 0) { + WIN_AddDisplay(DeviceName); } } }