Browse Source

Fix initializing the graphics module after a window is opened.

Alex Szpakowski 3 years ago
parent
commit
045f5ff0a5

+ 2 - 7
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);
 		}
 	}
 }}

+ 4 - 9
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);
 		}
 	}
 }

+ 5 - 0
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;

+ 2 - 0
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;