summaryrefslogtreecommitdiff
path: root/src/video.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/video.cpp')
-rw-r--r--src/video.cpp43
1 files changed, 25 insertions, 18 deletions
diff --git a/src/video.cpp b/src/video.cpp
index 7ab21d12..c71a9097 100644
--- a/src/video.cpp
+++ b/src/video.cpp
@@ -65,7 +65,7 @@ Graphics *Video::initialize(const VideoSettings &settings)
if (!initDisplayModes())
{
- logger->log("Failed to initialize display modes: %s", SDL_GetError());
+ Log::info("Failed to initialize display modes: %s", SDL_GetError());
}
SDL_DisplayMode displayMode;
@@ -81,7 +81,7 @@ Graphics *Video::initialize(const VideoSettings &settings)
if (SDL_GetClosestDisplayMode(mSettings.display, &requestedMode, &displayMode) == nullptr)
{
- logger->log("SDL_GetClosestDisplayMode failed: %s, falling back to borderless mode", SDL_GetError());
+ Log::info("SDL_GetClosestDisplayMode failed: %s, falling back to borderless mode", SDL_GetError());
mSettings.windowMode = WindowMode::WindowedFullscreen;
}
}
@@ -92,6 +92,10 @@ Graphics *Video::initialize(const VideoSettings &settings)
switch (mSettings.windowMode)
{
case WindowMode::Windowed:
+ // In windowed mode, the window is initially created hidden, we'll show
+ // it once we have finished setting it up and done an initial paint to
+ // avoid startup flicker on X11 and Windows.
+ windowFlags |= SDL_WINDOW_HIDDEN;
break;
case WindowMode::Fullscreen:
windowFlags |= SDL_WINDOW_FULLSCREEN;
@@ -99,6 +103,10 @@ Graphics *Video::initialize(const VideoSettings &settings)
break;
case WindowMode::WindowedFullscreen:
windowFlags |= SDL_WINDOW_FULLSCREEN_DESKTOP;
+ // On Windows, fullscreen desktop with OpenGL actually flickers worse
+ // when the window is initially hidden.
+ if (!mSettings.openGL)
+ windowFlags |= SDL_WINDOW_HIDDEN;
videoMode = "windowed fullscreen";
break;
}
@@ -106,10 +114,10 @@ Graphics *Video::initialize(const VideoSettings &settings)
if (mSettings.openGL)
windowFlags |= SDL_WINDOW_OPENGL;
- logger->log("Setting video mode %dx%d %s",
- mSettings.width,
- mSettings.height,
- videoMode);
+ Log::info("Setting video mode %dx%d %s",
+ mSettings.width,
+ mSettings.height,
+ videoMode);
mWindow = SDL_CreateWindow("Mana",
SDL_WINDOWPOS_UNDEFINED,
@@ -120,8 +128,7 @@ Graphics *Video::initialize(const VideoSettings &settings)
if (!mWindow)
{
- logger->error(strprintf("Failed to create window: %s",
- SDL_GetError()));
+ Log::critical(strprintf("Failed to create window: %s", SDL_GetError()));
return nullptr;
}
@@ -131,7 +138,7 @@ Graphics *Video::initialize(const VideoSettings &settings)
{
if (SDL_SetWindowDisplayMode(mWindow, &displayMode) != 0)
{
- logger->log("SDL_SetWindowDisplayMode failed: %s", SDL_GetError());
+ Log::info("SDL_SetWindowDisplayMode failed: %s", SDL_GetError());
}
}
@@ -144,7 +151,7 @@ Graphics *Video::initialize(const VideoSettings &settings)
mGraphics = OpenGLGraphics::create(mWindow, mSettings);
if (!mGraphics)
{
- logger->log("Failed to create OpenGL context, falling back to SDL renderer: %s",
+ Log::info("Failed to create OpenGL context, falling back to SDL renderer: %s",
SDL_GetError());
mSettings.openGL = false;
}
@@ -170,7 +177,7 @@ bool Video::apply(const VideoSettings &settings)
SDL_DisplayMode displayMode;
if (SDL_GetWindowDisplayMode(mWindow, &displayMode) != 0)
{
- logger->error(strprintf("SDL_GetCurrentDisplayMode failed: %s", SDL_GetError()));
+ Log::critical(strprintf("SDL_GetCurrentDisplayMode failed: %s", SDL_GetError()));
return false;
}
@@ -188,7 +195,7 @@ bool Video::apply(const VideoSettings &settings)
if (SDL_SetWindowDisplayMode(mWindow, &displayMode) != 0)
{
- logger->error(strprintf("SDL_SetWindowDisplayMode failed: %s", SDL_GetError()));
+ Log::critical(strprintf("SDL_SetWindowDisplayMode failed: %s", SDL_GetError()));
return false;
}
}
@@ -209,7 +216,7 @@ bool Video::apply(const VideoSettings &settings)
if (SDL_SetWindowFullscreen(mWindow, windowFlags) != 0)
{
- logger->error(strprintf("SDL_SetWindowFullscreen failed: %s", SDL_GetError()));
+ Log::critical(strprintf("SDL_SetWindowFullscreen failed: %s", SDL_GetError()));
return false;
}
@@ -235,12 +242,12 @@ bool Video::apply(const VideoSettings &settings)
return true;
}
-void Video::windowSizeChanged(int width, int height)
+void Video::updateWindowSize()
{
- mSettings.width = width;
- mSettings.height = height;
-
- mGraphics->updateSize(width, height, mSettings.scale());
+ SDL_GetWindowSize(mWindow, &mSettings.width, &mSettings.height);
+ mGraphics->updateSize(mSettings.width,
+ mSettings.height,
+ mSettings.scale());
}
bool Video::initDisplayModes()