72 Log::info(
"Failed to initialize display modes: %s", SDL_GetError());
75 SDL_DisplayMode displayMode;
79 SDL_DisplayMode requestedMode;
80 requestedMode.format = 0;
83 requestedMode.refresh_rate = 0;
84 requestedMode.driverdata =
nullptr;
86 if (SDL_GetClosestDisplayMode(
mSettings.
display, &requestedMode, &displayMode) ==
nullptr)
88 Log::info(
"SDL_GetClosestDisplayMode failed: %s, falling back to borderless mode", SDL_GetError());
93 int windowFlags = SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI;
94 const char *videoMode =
"windowed";
102 windowFlags |= SDL_WINDOW_HIDDEN;
105 windowFlags |= SDL_WINDOW_FULLSCREEN;
106 videoMode =
"fullscreen";
109 windowFlags |= SDL_WINDOW_FULLSCREEN_DESKTOP;
113 windowFlags |= SDL_WINDOW_HIDDEN;
114 videoMode =
"windowed fullscreen";
119 windowFlags |= SDL_WINDOW_OPENGL;
127 mWindow = SDL_CreateWindow(
"Mana",
128 SDL_WINDOWPOS_UNDEFINED,
129 SDL_WINDOWPOS_UNDEFINED,
136 Log::critical(
strprintf(
"Failed to create window: %s", SDL_GetError()));
140 SDL_SetWindowMinimumSize(
mWindow, WINDOW_MIN_WIDTH, WINDOW_MIN_HEIGHT);
144 if (SDL_SetWindowDisplayMode(
mWindow, &displayMode) != 0)
146 Log::info(
"SDL_SetWindowDisplayMode failed: %s", SDL_GetError());
159 Log::info(
"Failed to create OpenGL context, falling back to SDL renderer: %s",
182 SDL_DisplayMode displayMode;
183 if (SDL_GetWindowDisplayMode(
mWindow, &displayMode) != 0)
185 Log::critical(
strprintf(
"SDL_GetCurrentDisplayMode failed: %s", SDL_GetError()));
194 if (SDL_GetWindowFlags(
mWindow) & SDL_WINDOW_FULLSCREEN)
195 SDL_SetWindowFullscreen(
mWindow, 0);
201 if (SDL_SetWindowDisplayMode(
mWindow, &displayMode) != 0)
203 Log::critical(
strprintf(
"SDL_SetWindowDisplayMode failed: %s", SDL_GetError()));
215 windowFlags = SDL_WINDOW_FULLSCREEN_DESKTOP;
218 windowFlags = SDL_WINDOW_FULLSCREEN;
222 if (SDL_SetWindowFullscreen(
mWindow, windowFlags) != 0)
224 Log::critical(
strprintf(
"SDL_SetWindowFullscreen failed: %s", SDL_GetError()));
235 if (!(SDL_GetWindowFlags(
mWindow) & SDL_WINDOW_MAXIMIZED))
272 SDL_DisplayMode mode;
273 if (SDL_GetDesktopDisplayMode(displayIndex, &mode) != 0)
280 const int numModes = SDL_GetNumDisplayModes(displayIndex);
281 for (
int i = 0; i < numModes; i++)
283 if (SDL_GetDisplayMode(displayIndex, i, &mode) != 0)
287 if (mode.w < WINDOW_MIN_WIDTH || mode.h < WINDOW_MIN_HEIGHT)
295 return mode.w == other.width && mode.h == other.height;