Yue Posted April 6 Posted April 6 On my screen resolution change the application starts in windowed mode, if I switch to full window it works fine, but if I switch back to windowed mode, although the resolution data is the same, the window occupies the entire surface of the desktop. Switch to full screen and back without changing resolution. I attach the project via inbox. File Windows.lua local title = title or "Ventana" local x = x or 0 local y = y or 0 local display = display or GetDisplays()[1] -- 🌟 Cargar configuración local settings = SettingsManager:New():Load() -- 📏 Si existe resolución guardada, usarla if settings["resolution"] then local w, h = settings["resolution"]:match("(%d+)%s*x%s*(%d+)") if w and h then width = tonumber(w) height = tonumber(h) Print("📐 Resolución cargada desde archivo: " .. width .. "x" .. height) else width = width or 800 height = height or 600 end else width = width or 800 height = height or 600 end -- 🖥️ Determinar si usar pantalla completa o modo ventana local fullscreen = false local fs = settings["fullscreen"] if fs then fs = fs:lower() if fs == "true" or fs == "1" or fs == "yes" then fullscreen = true end end if fullscreen then style = WINDOW_FULLSCREEN | WINDOW_CENTER Print("🖥️ Modo pantalla completa activado.") else style = WINDOW_TITLEBAR | WINDOW_CENTER Print("🪟 Modo ventana activado.") end -- 🪟 Crear ventana y framebuffer local window = CreateWindow(title, 0, 0, width, height, display, style) local framebuffer = CreateFramebuffer(window) Quote
Solution Yue Posted April 6 Author Solution Posted April 6 Topic: Resolution Issue When Switching Between Fullscreen and Windowed Mode Description of the problem: When switching between fullscreen and windowed mode, I encountered unexpected behavior: when the application entered fullscreen mode, the system resolution was adjusted to the resolution of the window. However, when switching back to windowed mode, the desktop resolution was not restored to its original value. Instead, the application continued using the fullscreen resolution, resulting in inconsistencies in display and issues with the graphical interface. Cause: This behavior is caused by how the Leadwerks engine handles fullscreen mode. When fullscreen is activated, the operating system changes the screen resolution to match the game window's resolution. When switching back to windowed mode, the engine does not automatically restore the original desktop resolution, causing the error. Solution: To resolve this issue, I implemented an approach in Lua to explicitly save the original desktop resolution before switching to fullscreen and then restore it when switching back to windowed mode. Below is the implemented code to handle this behavior correctly: -- Last update: April 6, 2025 Window = {} Window.__index = Window function Window:New(title, x, y, width, height, display, style) local this = setmetatable({}, Window) local title = title or "Window" local x = x or 0 local y = y or 0 local display = display or GetDisplays()[1] -- Save the original desktop resolution local originalWidth, originalHeight = display:GetSize().x, display:GetSize().y local savedWidth, savedHeight = width, height -- Load settings local settings = SettingsManager:New():Load() if settings["resolution"] then local w, h = settings["resolution"]:match("(%d+)%s*x%s*(%d+)") if w and h then savedWidth = tonumber(w) savedHeight = tonumber(h) end end -- Check if fullscreen mode is enabled local fullscreen = false local fs = settings["fullscreen"] if fs then fs = fs:lower() if fs == "true" or fs == "1" or fs == "yes" then fullscreen = true end end -- Set the window style based on fullscreen or windowed mode if fullscreen then style = WINDOW_FULLSCREEN else style = WINDOW_TITLEBAR end -- Create the window with the appropriate resolution local window = CreateWindow(title, 1920/2-(savedWidth/2), 1080/2-(savedHeight/2), savedWidth, savedHeight, display, style) local framebuffer = CreateFramebuffer(window) -- Method to restore the original resolution when switching back to windowed mode function this:RestoreOriginalResolution() if not fullscreen then window:SetSize(originalWidth, originalHeight) -- Restore the original resolution end end return this end return Window Explanation: Saving the original resolution: Before creating the window, the original desktop resolution is saved using display:GetSize(). Loading the saved resolution: If the configuration includes a saved resolution, it is used. If not, the default resolution is applied. Detecting fullscreen mode: It checks if fullscreen mode is enabled in the settings and adjusts the window style accordingly. Restoring the original resolution: I implemented the RestoreOriginalResolution() method that restores the desktop resolution when switching back to windowed mode. With this solution, the application now correctly handles the resolution change between fullscreen and windowed modes, maintaining the original desktop resolution. Conclusion: This behavior is not a bug in the engine but a common feature in many graphics engines that handle fullscreen as an "exclusive mode." By implementing this custom logic, I was able to resolve the issue and restore the original system resolution when switching between modes 1 Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.