diff --git a/src/modules/graphics/metal/Graphics.mm b/src/modules/graphics/metal/Graphics.mm index 4bf647bcf..19d31a24d 100644 --- a/src/modules/graphics/metal/Graphics.mm +++ b/src/modules/graphics/metal/Graphics.mm @@ -361,18 +361,13 @@ Graphics::Graphics() { window->setGraphics(this); + // Recreate the window using the current renderer, if needed. if (window->isOpen()) { int w, h; love::window::WindowSettings settings; window->getWindow(w, h, settings); - - double dpiW = w; - double dpiH = h; - window->windowToDPICoords(&dpiW, &dpiH); - - void *context = nullptr; // TODO - setMode(context, (int) dpiW, (int) dpiH, window->getPixelWidth(), window->getPixelHeight(), settings.stencil, settings.depth); + window->setWindow(w, h, &settings); } } }} diff --git a/src/modules/graphics/opengl/Graphics.cpp b/src/modules/graphics/opengl/Graphics.cpp index e1955366e..5859f0631 100644 --- a/src/modules/graphics/opengl/Graphics.cpp +++ b/src/modules/graphics/opengl/Graphics.cpp @@ -131,18 +131,13 @@ Graphics::Graphics() { window->setGraphics(this); + // Recreate the window using the current renderer, if needed. if (window->isOpen()) { int w, h; - love::window::WindowSettings s; - window->getWindow(w, h, s); - - double dpiW = w; - double dpiH = h; - window->windowToDPICoords(&dpiW, &dpiH); - - void *context = nullptr; // TODO - setMode(context, (int) dpiW, (int) dpiH, window->getPixelWidth(), window->getPixelHeight(), s.stencil, s.msaa); + love::window::WindowSettings settings; + window->getWindow(w, h, settings); + window->setWindow(w, h, &settings); } } } diff --git a/src/modules/window/sdl/Window.cpp b/src/modules/window/sdl/Window.cpp index 8038fa451..d917f514e 100644 --- a/src/modules/window/sdl/Window.cpp +++ b/src/modules/window/sdl/Window.cpp @@ -552,6 +552,9 @@ bool Window::setWindow(int width, int height, WindowSettings *settings) } } + if (renderer != windowRenderer && isOpen()) + close(); + if (isOpen()) { if (SDL_SetWindowFullscreen(window, sdlflags) == 0 && renderer == graphics::Graphics::RENDERER_OPENGL) @@ -613,6 +616,8 @@ bool Window::setWindow(int width, int height, WindowSettings *settings) updateSettings(f, false); + windowRenderer = renderer; + if (graphics.get()) { double scaledw, scaledh; diff --git a/src/modules/window/sdl/Window.h b/src/modules/window/sdl/Window.h index ed3597aae..7d96915ea 100644 --- a/src/modules/window/sdl/Window.h +++ b/src/modules/window/sdl/Window.h @@ -172,6 +172,8 @@ private: SDL_MetalView metalView; #endif + graphics::Graphics::Renderer windowRenderer = graphics::Graphics::RENDERER_NONE; + bool displayedWindowError; bool hasSDL203orEarlier; ContextAttribs contextAttribs;