Changeset - r24912:d785e8bae96e
[Not reviewed]
master
0 2 0
Patric Stout - 4 years ago 2021-01-16 14:26:37
truebrain@openttd.org
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.
2 files changed with 24 insertions and 11 deletions:
0 comments (0 inline, 0 general)
src/video/sdl2_v.cpp
Show inline comments
 
@@ -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));
 

	
src/video/sdl2_v.h
Show inline comments
 
@@ -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. */
0 comments (0 inline, 0 general)