From 6098811b493c205797d7745e70db1e6f07879f72 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sat, 16 Jan 2021 15:26:37 +0100 Subject: 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. --- src/video/sdl2_v.cpp | 34 +++++++++++++++++++++++----------- src/video/sdl2_v.h | 1 + 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. */ -- cgit v1.2.3-54-g00ecf