OpenTTD Source 20241224-master-gf74b0cf984
VideoDriver_SDL_Base Class Referenceabstract

The SDL video driver. More...

#include <sdl2_v.h>

Inheritance diagram for VideoDriver_SDL_Base:
VideoDriver Driver VideoDriver_SDL_Default VideoDriver_SDL_OpenGL

Public Member Functions

 VideoDriver_SDL_Base (bool uses_hardware_acceleration=false)
 
std::optional< std::string_view > Start (const StringList &param) override
 Start this driver.
 
void Stop () override
 Stop this driver.
 
void MakeDirty (int left, int top, int width, int height) override
 Mark a particular area dirty.
 
void MainLoop () override
 Perform the actual drawing.
 
bool ChangeResolution (int w, int h) override
 Change the resolution of the window.
 
bool ToggleFullscreen (bool fullscreen) override
 Change the full screen setting.
 
bool AfterBlitterChange () override
 Callback invoked after the blitter was changed.
 
bool ClaimMousePointer () override
 
void EditBoxGainedFocus () override
 This is called to indicate that an edit box has gained focus, text input mode should be enabled.
 
void EditBoxLostFocus () override
 This is called to indicate that an edit box has lost focus, text input mode should be disabled.
 
std::vector< int > GetListOfMonitorRefreshRates () override
 Get a list of refresh rates of each available monitor.
 
std::string_view GetInfoString () const override
 
- Public Member Functions inherited from VideoDriver
 VideoDriver (bool uses_hardware_acceleration=false)
 
virtual void ToggleVsync (bool vsync)
 Change the vsync setting.
 
virtual bool UseSystemCursor ()
 Get whether the mouse cursor is drawn by the video driver.
 
virtual void PopulateSystemSprites ()
 Populate all sprites in cache.
 
virtual void ClearSystemSprites ()
 Clear all cached sprites.
 
virtual bool HasGUI () const
 Whether the driver has a graphical user interface with the end user.
 
virtual bool HasEfficient8Bpp () const
 Has this video driver an efficient code path for palette animated 8-bpp sprites?
 
virtual bool HasAnimBuffer ()
 Does this video driver support a separate animation buffer in addition to the colour buffer?
 
virtual uint8_t * GetAnimBuffer ()
 Get a pointer to the animation buffer of the video back-end.
 
virtual int GetSuggestedUIScale ()
 Get a suggested default GUI scale taking screen DPI into account.
 
void QueueOnMainThread (std::function< void()> &&func)
 Queue a function to be called on the main thread with game state lock held and video buffer locked.
 
void GameLoopPause ()
 Pause the game-loop for a bit, releasing the game-state lock.
 
- Public Member Functions inherited from Driver
virtual std::string_view GetName () const =0
 Get the name of this driver.
 

Protected Member Functions

Dimension GetScreenSize () const override
 Get the resolution of the main screen.
 
void InputLoop () override
 Handle input logic, is CTRL pressed, should we fast-forward, etc.
 
bool LockVideoBuffer () override
 Make sure the video buffer is ready for drawing.
 
void UnlockVideoBuffer () override
 Unlock a previously locked video buffer.
 
void CheckPaletteAnim () override
 Process any pending palette animation.
 
bool PollEvent () override
 Process a single system event.
 
void ClientSizeChanged (int w, int h, bool force)
 Indicate to the driver the client-side might have changed.
 
virtual bool AllocateBackingStore (int w, int h, bool force=false)=0
 (Re-)create the backing store.
 
virtual void * GetVideoPointer ()=0
 Get a pointer to the video buffer.
 
virtual void ReleaseVideoPointer ()=0
 Hand video buffer back to the painting backend.
 
virtual bool CreateMainWindow (uint w, uint h, uint flags=0)
 Create the main window.
 
- Protected Member Functions inherited from VideoDriver
virtual float GetDPIScale ()
 Get DPI scaling factor of the screen OTTD is displayed on.
 
void UpdateAutoResolution ()
 Apply resolution auto-detection and clamp to sensible defaults.
 
virtual void Paint ()
 Paint the window.
 
void StartGameThread ()
 Start the loop for game-tick.
 
void StopGameThread ()
 Stop the loop for the game-tick.
 
void Tick ()
 Give the video-driver a tick.
 
void SleepTillNextTick ()
 Sleep till the next tick is about to happen.
 
std::chrono::steady_clock::duration GetGameInterval ()
 
std::chrono::steady_clock::duration GetDrawInterval ()
 
void DrainCommandQueue ()
 Execute all queued commands.
 

Protected Attributes

struct SDL_Window * sdl_window
 Main SDL window.
 
Palette local_palette
 Current palette to use for drawing.
 
bool buffer_locked
 Video buffer was locked by the main thread.
 
Rect dirty_rect
 Rectangle encompassing the dirty area of the video buffer.
 
std::string driver_info
 Information string about selected driver.
 
- Protected Attributes inherited from VideoDriver
const uint ALLOWED_DRIFT = 5
 How many times videodriver can miss deadlines without it being overly compensated.
 
std::chrono::steady_clock::time_point next_game_tick
 
std::chrono::steady_clock::time_point next_draw_tick
 
bool fast_forward_key_pressed
 The fast-forward key is being pressed.
 
bool fast_forward_via_key
 The fast-forward was enabled by key press.
 
bool is_game_threaded
 
std::thread game_thread
 
std::mutex game_state_mutex
 
std::mutex game_thread_wait_mutex
 
bool uses_hardware_acceleration
 

Private Member Functions

void LoopOnce ()
 
void MainLoopCleanup ()
 
bool CreateMainSurface (uint w, uint h, bool resize)
 
std::optional< std::string_view > Initialize ()
 

Private Attributes

bool edit_box_focused
 This is true to indicate that keyboard input is in text input mode, and SDL_TEXTINPUT events are enabled.
 
int startup_display
 

Additional Inherited Members

- Public Types inherited from Driver
enum  Type {
  DT_BEGIN = 0 , DT_MUSIC = 0 , DT_SOUND , DT_VIDEO ,
  DT_END
}
 The type of driver. More...
 
- Static Public Member Functions inherited from VideoDriver
static VideoDriverGetInstance ()
 Get the currently active instance of the video driver.
 
static std::string GetCaption ()
 Get the caption to use for the game's title bar.
 
- Static Protected Member Functions inherited from VideoDriver
static void GameThreadThunk (VideoDriver *drv)
 

Detailed Description

The SDL video driver.

Definition at line 18 of file sdl2_v.h.

Constructor & Destructor Documentation

◆ VideoDriver_SDL_Base()

VideoDriver_SDL_Base::VideoDriver_SDL_Base ( bool  uses_hardware_acceleration = false)
inline

Definition at line 20 of file sdl2_v.h.

Member Function Documentation

◆ AfterBlitterChange()

bool VideoDriver_SDL_Base::AfterBlitterChange ( )
overridevirtual

Callback invoked after the blitter was changed.

Returns
True if no error.

Reimplemented from VideoDriver.

Definition at line 722 of file sdl2_v.cpp.

References BlitterFactory::GetCurrentBlitter(), and sdl_window.

◆ AllocateBackingStore()

virtual bool VideoDriver_SDL_Base::AllocateBackingStore ( int  w,
int  h,
bool  force = false 
)
protectedpure virtual

(Re-)create the backing store.

Implemented in VideoDriver_SDL_Default, and VideoDriver_SDL_OpenGL.

Referenced by ClientSizeChanged().

◆ ChangeResolution()

bool VideoDriver_SDL_Base::ChangeResolution ( int  w,
int  h 
)
overridevirtual

Change the resolution of the window.

Parameters
wThe new width.
hThe new height.
Returns
True if the change succeeded.

Implements VideoDriver.

Definition at line 687 of file sdl2_v.cpp.

◆ CheckPaletteAnim()

void VideoDriver_SDL_Base::CheckPaletteAnim ( )
overrideprotectedvirtual

Process any pending palette animation.

Reimplemented from VideoDriver.

Definition at line 38 of file sdl2_v.cpp.

References CopyPalette(), local_palette, and MakeDirty().

◆ ClaimMousePointer()

bool VideoDriver_SDL_Base::ClaimMousePointer ( )
overridevirtual

Reimplemented from VideoDriver.

Definition at line 199 of file sdl2_v.cpp.

◆ ClientSizeChanged()

void VideoDriver_SDL_Base::ClientSizeChanged ( int  w,
int  h,
bool  force 
)
protected

Indicate to the driver the client-side might have changed.

Definition at line 124 of file sdl2_v.cpp.

References AllocateBackingStore(), CopyPalette(), GameSizeChanged(), BlitterFactory::GetCurrentBlitter(), local_palette, and Blitter::PostResize().

Referenced by VideoDriver_SDL_OpenGL::Start().

◆ CreateMainSurface()

bool VideoDriver_SDL_Base::CreateMainSurface ( uint  w,
uint  h,
bool  resize 
)
private

Definition at line 182 of file sdl2_v.cpp.

◆ CreateMainWindow()

bool VideoDriver_SDL_Base::CreateMainWindow ( uint  w,
uint  h,
uint  flags = 0 
)
protectedvirtual

Create the main window.

Reimplemented in VideoDriver_SDL_OpenGL.

Definition at line 136 of file sdl2_v.cpp.

References BASESET_DIR, Debug, FioFindFullPath(), VideoDriver::GetCaption(), and sdl_window.

Referenced by VideoDriver_SDL_OpenGL::CreateMainWindow().

◆ EditBoxGainedFocus()

void VideoDriver_SDL_Base::EditBoxGainedFocus ( )
overridevirtual

This is called to indicate that an edit box has gained focus, text input mode should be enabled.

Reimplemented from VideoDriver.

Definition at line 211 of file sdl2_v.cpp.

References edit_box_focused.

◆ EditBoxLostFocus()

void VideoDriver_SDL_Base::EditBoxLostFocus ( )
overridevirtual

This is called to indicate that an edit box has lost focus, text input mode should be disabled.

Reimplemented from VideoDriver.

Definition at line 222 of file sdl2_v.cpp.

References edit_box_focused.

◆ GetInfoString()

std::string_view VideoDriver_SDL_Base::GetInfoString ( ) const
inlineoverridevirtual

Reimplemented from VideoDriver.

Definition at line 44 of file sdl2_v.h.

◆ GetListOfMonitorRefreshRates()

std::vector< int > VideoDriver_SDL_Base::GetListOfMonitorRefreshRates ( )
overridevirtual

Get a list of refresh rates of each available monitor.

Returns
A vector of the refresh rates of all available monitors.

Reimplemented from VideoDriver.

Definition at line 230 of file sdl2_v.cpp.

◆ GetScreenSize()

Dimension VideoDriver_SDL_Base::GetScreenSize ( ) const
overrideprotectedvirtual

Get the resolution of the main screen.

Reimplemented from VideoDriver.

Definition at line 730 of file sdl2_v.cpp.

References VideoDriver::GetScreenSize().

◆ GetVideoPointer()

virtual void * VideoDriver_SDL_Base::GetVideoPointer ( )
protectedpure virtual

Get a pointer to the video buffer.

Implemented in VideoDriver_SDL_Default, and VideoDriver_SDL_OpenGL.

Referenced by LockVideoBuffer().

◆ Initialize()

std::optional< std::string_view > VideoDriver_SDL_Base::Initialize ( )
private

Definition at line 542 of file sdl2_v.cpp.

◆ InputLoop()

void VideoDriver_SDL_Base::InputLoop ( )
overrideprotectedvirtual

Handle input logic, is CTRL pressed, should we fast-forward, etc.

Reimplemented from VideoDriver.

Definition at line 611 of file sdl2_v.cpp.

References _ctrl_pressed, _dirkeys, _shift_pressed, VideoDriver::fast_forward_key_pressed, and HandleCtrlChanged().

◆ LockVideoBuffer()

bool VideoDriver_SDL_Base::LockVideoBuffer ( )
overrideprotectedvirtual

Make sure the video buffer is ready for drawing.

Returns
True if the video buffer has to be unlocked.

Reimplemented from VideoDriver.

Definition at line 738 of file sdl2_v.cpp.

References buffer_locked, and GetVideoPointer().

◆ LoopOnce()

void VideoDriver_SDL_Base::LoopOnce ( )
private

Definition at line 635 of file sdl2_v.cpp.

◆ MainLoop()

void VideoDriver_SDL_Base::MainLoop ( )
overridevirtual

Perform the actual drawing.

Implements VideoDriver.

Definition at line 671 of file sdl2_v.cpp.

References VideoDriver::StartGameThread(), and VideoDriver::StopGameThread().

◆ MakeDirty()

void VideoDriver_SDL_Base::MakeDirty ( int  left,
int  top,
int  width,
int  height 
)
overridevirtual

Mark a particular area dirty.

Parameters
leftThe left most line of the dirty area.
topThe top most line of the dirty area.
widthThe width of the dirty area.
heightThe height of the dirty area.

Implements VideoDriver.

Definition at line 32 of file sdl2_v.cpp.

References BoundingRect(), and dirty_rect.

Referenced by CheckPaletteAnim(), and PollEvent().

◆ PollEvent()

◆ ReleaseVideoPointer()

virtual void VideoDriver_SDL_Base::ReleaseVideoPointer ( )
protectedpure virtual

Hand video buffer back to the painting backend.

Implemented in VideoDriver_SDL_Default, and VideoDriver_SDL_OpenGL.

Referenced by UnlockVideoBuffer().

◆ Start()

std::optional< std::string_view > VideoDriver_SDL_Base::Start ( const StringList parm)
overridevirtual

Start this driver.

Parameters
parmParameters passed to the driver.
Returns
std::nullopt if everything went okay, otherwise an error message.

Implements Driver.

Reimplemented in VideoDriver_SDL_OpenGL.

Definition at line 555 of file sdl2_v.cpp.

References _cur_resolution, Debug, driver_info, edit_box_focused, BlitterFactory::GetCurrentBlitter(), GetDriverParamBool(), GetDriverParamInt(), Driver::GetName(), and MarkWholeScreenDirty().

Referenced by VideoDriver_SDL_OpenGL::Start().

◆ Stop()

void VideoDriver_SDL_Base::Stop ( )
overridevirtual

Stop this driver.

Implements Driver.

Reimplemented in VideoDriver_SDL_OpenGL.

Definition at line 603 of file sdl2_v.cpp.

Referenced by VideoDriver_SDL_OpenGL::Stop().

◆ ToggleFullscreen()

bool VideoDriver_SDL_Base::ToggleFullscreen ( bool  fullscreen)
overridevirtual

Change the full screen setting.

Parameters
fullscreenThe new setting.
Returns
True if the change succeeded.

Implements VideoDriver.

Definition at line 692 of file sdl2_v.cpp.

References Debug, InvalidateWindowClassesData(), sdl_window, and WC_GAME_OPTIONS.

◆ UnlockVideoBuffer()

void VideoDriver_SDL_Base::UnlockVideoBuffer ( )
overrideprotectedvirtual

Unlock a previously locked video buffer.

Reimplemented from VideoDriver.

Definition at line 749 of file sdl2_v.cpp.

References buffer_locked, and ReleaseVideoPointer().

Field Documentation

◆ buffer_locked

bool VideoDriver_SDL_Base::buffer_locked
protected

Video buffer was locked by the main thread.

Definition at line 49 of file sdl2_v.h.

Referenced by LockVideoBuffer(), and UnlockVideoBuffer().

◆ dirty_rect

Rect VideoDriver_SDL_Base::dirty_rect
protected

◆ driver_info

std::string VideoDriver_SDL_Base::driver_info
protected

Information string about selected driver.

Definition at line 51 of file sdl2_v.h.

Referenced by VideoDriver_SDL_OpenGL::Start(), and Start().

◆ edit_box_focused

bool VideoDriver_SDL_Base::edit_box_focused
private

This is true to indicate that keyboard input is in text input mode, and SDL_TEXTINPUT events are enabled.

Definition at line 86 of file sdl2_v.h.

Referenced by EditBoxGainedFocus(), EditBoxLostFocus(), PollEvent(), and Start().

◆ local_palette

Palette VideoDriver_SDL_Base::local_palette
protected

◆ sdl_window

◆ startup_display

int VideoDriver_SDL_Base::startup_display
private

Definition at line 88 of file sdl2_v.h.


The documentation for this class was generated from the following files: