OpenTTD Source  1.11.0-beta2
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

const char * Start (const StringList &param) override
 Start this driver. More...
 
void Stop () override
 Stop this driver.
 
void MakeDirty (int left, int top, int width, int height) override
 Mark a particular area dirty. More...
 
void MainLoop () override
 Perform the actual drawing.
 
bool ChangeResolution (int w, int h) override
 Change the resolution of the window. More...
 
bool ToggleFullscreen (bool fullscreen) override
 Change the full screen setting. More...
 
bool AfterBlitterChange () override
 Callback invoked after the blitter was changed. More...
 
void AcquireBlitterLock () override
 Acquire any lock(s) required to be held when changing blitters. More...
 
void ReleaseBlitterLock () override
 Release any lock(s) required to be held when changing blitters. More...
 
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.
 
const char * GetName () const override
 Get the name of this driver. More...
 
- Public Member Functions inherited from VideoDriver
virtual bool UseSystemCursor ()
 Get whether the mouse cursor is drawn by the video driver. More...
 
virtual void ClearSystemSprites ()
 Clear all cached sprites.
 
virtual bool HasGUI () const
 Whether the driver has a graphical user interface with the end user. More...
 
virtual bool HasEfficient8Bpp () const
 Has this video driver an efficient code path for palette animated 8-bpp sprites? More...
 
virtual bool HasAnimBuffer ()
 Does this video driver support a separate animation buffer in addition to the colour buffer? More...
 
virtual uint8 * GetAnimBuffer ()
 Get a pointer to the animation buffer of the video back-end. More...
 
virtual ZoomLevel GetSuggestedUIZoom ()
 Get a suggested default GUI zoom taking screen DPI into account.
 

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. More...
 
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. More...
 
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. More...
 
void UpdateAutoResolution ()
 Apply resolution auto-detection and clamp to sensible defaults.
 
virtual void Paint ()
 Paint the window.
 
virtual void PaintThread ()
 Thread function for threaded drawing.
 
bool Tick ()
 Run the game for a single tick, processing boththe game-tick and draw-tick. More...
 
void SleepTillNextTick ()
 Sleep till the next tick is about to happen.
 
std::chrono::steady_clock::duration GetGameInterval ()
 
std::chrono::steady_clock::duration GetDrawInterval ()
 

Protected Attributes

struct SDL_Window * sdl_window
 Main SDL window.
 
Palette local_palette
 Copy of _cur_palette.
 
bool draw_threaded
 Whether the drawing is/may be done in a separate thread.
 
std::recursive_mutex * draw_mutex = nullptr
 Mutex to keep the access to the shared memory controlled.
 
std::condition_variable_any * draw_signal = nullptr
 Signal to draw the next frame.
 
volatile bool draw_continue
 Should we keep continue drawing?
 
bool buffer_locked
 Video buffer was locked by the main thread.
 
Rect dirty_rect
 Rectangle encompassing the dirty area of the video buffer.
 
- 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.
 

Private Member Functions

void LoopOnce ()
 
void MainLoopCleanup ()
 
bool CreateMainSurface (uint w, uint h, bool resize)
 
const char * Initialize ()
 

Static Private Member Functions

static void PaintThreadThunk (VideoDriver_SDL_Base *drv)
 

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
 
std::thread draw_thread
 
std::unique_lock< std::recursive_mutex > draw_lock
 

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.
 

Detailed Description

The SDL video driver.

Definition at line 18 of file sdl2_v.h.

Member Function Documentation

◆ AcquireBlitterLock()

void VideoDriver_SDL_Base::AcquireBlitterLock ( )
overridevirtual

Acquire any lock(s) required to be held when changing blitters.

These lock(s) may not be acquired recursively.

Reimplemented from VideoDriver.

Definition at line 775 of file sdl2_v.cpp.

References draw_mutex.

◆ AfterBlitterChange()

bool VideoDriver_SDL_Base::AfterBlitterChange ( )
overridevirtual

Callback invoked after the blitter was changed.

This may only be called between AcquireBlitterLock and ReleaseBlitterLock.

Returns
True if no error.

Reimplemented from VideoDriver.

Definition at line 767 of file sdl2_v.cpp.

References BlitterFactory::GetCurrentBlitter(), and sdl_window.

◆ 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 726 of file sdl2_v.cpp.

References draw_mutex, and lock.

◆ GetName()

const char* VideoDriver_SDL_Base::GetName ( ) const
inlineoverridevirtual

Get the name of this driver.

Returns
The name of the driver.

Implements Driver.

Definition at line 46 of file sdl2_v.h.

◆ 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 793 of file sdl2_v.cpp.

References buffer_locked, and draw_threaded.

◆ 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 39 of file sdl2_v.cpp.

References BoundingRect(), and dirty_rect.

Referenced by CheckPaletteAnim().

◆ PollEvent()

bool VideoDriver_SDL_Base::PollEvent ( )
overrideprotectedvirtual

Process a single system event.

Returns
False if there are no more events to process.

Reimplemented from VideoDriver.

Definition at line 372 of file sdl2_v.cpp.

◆ ReleaseBlitterLock()

void VideoDriver_SDL_Base::ReleaseBlitterLock ( )
overridevirtual

Release any lock(s) required to be held when changing blitters.

These lock(s) may not be acquired recursively.

Reimplemented from VideoDriver.

Definition at line 780 of file sdl2_v.cpp.

References draw_mutex.

◆ Start()

const char * VideoDriver_SDL_Base::Start ( const StringList parm)
overridevirtual

Start this driver.

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

Implements Driver.

Definition at line 550 of file sdl2_v.cpp.

References error(), and BlitterFactory::GetCurrentBlitter().

Referenced by VideoDriver_SDL_OpenGL::Start().

◆ 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 734 of file sdl2_v.cpp.

References DEBUG, draw_mutex, lock, and sdl_window.


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