5 log(
"Initializing SDL...");
8 SDL_SetHint(SDL_HINT_VIDEO_DRIVER,
"wayland,x11");
11 if (!SDL_Init(SDL_INIT_VIDEO)) {
12 const char* error = SDL_GetError();
13 log(
"SDL_Init failed: %s", error);
17 const char* driver = SDL_GetCurrentVideoDriver();
18 log(
"Active Video Driver: %s", driver ? driver :
"Unknown");
20 log(
"Creating window with resolution: %i X %i", resx, resy);
22 log(
"Creating window...");
23 window = SDL_CreateWindow(
27 SDL_WINDOW_VULKAN | SDL_WINDOW_HIGH_PIXEL_DENSITY | SDL_WINDOW_RESIZABLE
34 log(LogLevel::ERROR,
"Could not create window: %s", SDL_GetError());
40 SDL_DestroyWindow(window);
43 std::cout <<
"Window closed" << std::endl;
55 Uint64 currentTime = SDL_GetPerformanceCounter();
59 log(LogLevel::WARNING,
"Fullscreen toggle requested too rapidly (debounced). Last toggle was %lld ms ago, minimum interval is %llu ms.",
66 log(
"Attempting fullscreen state change: %s (mode: %s)",
67 enabled ?
"ENTER fullscreen" :
"EXIT fullscreen",
68 exclusive ?
"exclusive" :
"borderless windowed");
72 const SDL_DisplayMode* mode = SDL_GetCurrentDisplayMode(SDL_GetDisplayForWindow(window));
74 SDL_SetWindowFullscreenMode(window, mode);
75 log(
"Set exclusive fullscreen mode: %ux%u @ %.1f Hz",
76 mode->w, mode->h, mode->refresh_rate);
78 log(LogLevel::WARNING,
"Could not query current display mode for exclusive fullscreen");
81 SDL_SetWindowFullscreenMode(window, NULL);
82 log(
"Set borderless windowed fullscreen mode");
85 if (!SDL_SetWindowFullscreen(window,
true)) {
86 log(LogLevel::ERROR,
"Failed to enter fullscreen: %s", SDL_GetError());
89 log(
"Successfully entered fullscreen mode");
91 if (!SDL_SetWindowFullscreen(window,
false)) {
92 log(LogLevel::ERROR,
"Failed to exit fullscreen: %s", SDL_GetError());
95 log(
"Successfully exited fullscreen mode");
103 return (SDL_GetWindowFlags(window) & SDL_WINDOW_FULLSCREEN) != 0;
107 SDL_DisplayID displayID = SDL_GetDisplayForWindow(window);
108 if (displayID == 0) {
109 log(LogLevel::ERROR,
"Could not get display for window: %s", SDL_GetError());
113 const SDL_DisplayMode* mode = SDL_GetCurrentDisplayMode(displayID);
115 return mode->refresh_rate > 0.0f ? mode->refresh_rate : 60.0f;
This file defines Window class.
bool isFullscreen()
Getter for fullscreen mode.
bool m_cachedExclusiveMode
Cached exclusive mode setting.
float getRefreshRate()
Gets the refresh rate of the display the window is currently on.
void setFullscreen(bool enabled, bool exclusive=false)
Setter for fullscreen mode.
SDL_Window * GetSDLWindow()
Getter for SDL_Window pointer.
static constexpr Uint64 FULLSCREEN_DEBOUNCE_MS
Debounce interval in milliseconds to prevent rapid fullscreen toggles.
Window(std::string title, int resx=480, int resy=640)
Constructor for Window class.
Uint64 m_lastFullscreenChangeTime
Timestamp of last fullscreen state change (in SDL performance counter units).
bool m_cachedFullscreenState
Cached fullscreen state to prevent redundant SDL calls.
void VEX_EXPORT throw_error(const std::string &msg)
Throws an error or terminates the application.
void VEX_EXPORT log(const char *fmt,...)
Logs a formatted message.