summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatric Stout <truebrain@openttd.org>2021-01-16 15:26:37 +0100
committerMichael Lutz <michi@icosahedron.de>2021-02-22 22:16:07 +0100
commit6098811b493c205797d7745e70db1e6f07879f72 (patch)
tree5845fcd60fe06f8d82b876f7a26283b2ca0de029
parent86c309ea75aecb47fc3b984462e07d62d0c70168 (diff)
downloadopenttd-6098811b493c205797d7745e70db1e6f07879f72.tar.xz
Codechange: [SDL2] Split Start() in a few more functions
This makes it a bit easier to follow what is going on, and allow future subdrivers to hook into a few of these functions. Reworked the code slighly while at it, to return early where possible.
-rw-r--r--src/video/sdl2_v.cpp34
-rw-r--r--src/video/sdl2_v.h1
2 files changed, 24 insertions, 11 deletions
diff --git a/src/video/sdl2_v.cpp b/src/video/sdl2_v.cpp
index 5b369e3fe..052396e6b 100644
--- a/src/video/sdl2_v.cpp
+++ b/src/video/sdl2_v.cpp
@@ -673,28 +673,40 @@ int VideoDriver_SDL::PollEvent()
return -1;
}
-const char *VideoDriver_SDL::Start(const StringList &parm)
+static const char *InitializeSDL()
{
- if (BlitterFactory::GetCurrentBlitter()->GetScreenDepth() == 0) return "Only real blitters supported";
-
/* Explicitly disable hardware acceleration. Enabling this causes
* UpdateWindowSurface() to update the window's texture instead of
* its surface. */
SDL_SetHint(SDL_HINT_FRAMEBUFFER_ACCELERATION, "0");
SDL_SetHint(SDL_HINT_MOUSE_RELATIVE_MODE_WARP, "1");
- /* Just on the offchance the audio subsystem started before the video system,
- * check whether any part of SDL has been initialised before getting here.
- * Slightly duplicated with sound/sdl_s.cpp */
- int ret_code = 0;
- if (SDL_WasInit(SDL_INIT_VIDEO) == 0) {
- ret_code = SDL_InitSubSystem(SDL_INIT_VIDEO);
- }
- if (ret_code < 0) return SDL_GetError();
+ /* Check if the video-driver is already initialized. */
+ if (SDL_WasInit(SDL_INIT_VIDEO) != 0) return nullptr;
+ if (SDL_InitSubSystem(SDL_INIT_VIDEO) < 0) return SDL_GetError();
+ return nullptr;
+}
+
+const char *VideoDriver_SDL::Initialize()
+{
this->UpdateAutoResolution();
+ const char *error = InitializeSDL();
+ if (error != nullptr) return error;
+
FindResolutions();
+ DEBUG(driver, 2, "Resolution for display: %ux%u", _cur_resolution.width, _cur_resolution.height);
+
+ return nullptr;
+}
+
+const char *VideoDriver_SDL::Start(const StringList &parm)
+{
+ if (BlitterFactory::GetCurrentBlitter()->GetScreenDepth() == 0) return "Only real blitters supported";
+
+ const char *error = this->Initialize();
+ if (error != nullptr) return error;
this->startup_display = FindStartupDisplay(GetDriverParamInt(parm, "display", -1));
diff --git a/src/video/sdl2_v.h b/src/video/sdl2_v.h
index 8c47d6aa0..35697991f 100644
--- a/src/video/sdl2_v.h
+++ b/src/video/sdl2_v.h
@@ -56,6 +56,7 @@ private:
void MainLoopCleanup();
bool CreateMainSurface(uint w, uint h, bool resize);
bool CreateMainWindow(uint w, uint h);
+ const char *Initialize();
#ifdef __EMSCRIPTEN__
/* Convert a constant pointer back to a non-constant pointer to a member function. */