OpenTTD Source 20241224-master-gf74b0cf984
|
The SDL video driver. More...
#include <sdl2_v.h>
Public Member Functions | |
VideoDriver_SDL_Base (bool uses_hardware_acceleration=false) | |
std::optional< std::string_view > | Start (const StringList ¶m) 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 VideoDriver * | GetInstance () |
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) |
|
inline |
|
overridevirtual |
Callback invoked after the blitter was changed.
Reimplemented from VideoDriver.
Definition at line 722 of file sdl2_v.cpp.
References BlitterFactory::GetCurrentBlitter(), and sdl_window.
|
protectedpure virtual |
(Re-)create the backing store.
Implemented in VideoDriver_SDL_Default, and VideoDriver_SDL_OpenGL.
Referenced by ClientSizeChanged().
|
overridevirtual |
Change the resolution of the window.
w | The new width. |
h | The new height. |
Implements VideoDriver.
Definition at line 687 of file sdl2_v.cpp.
|
overrideprotectedvirtual |
Process any pending palette animation.
Reimplemented from VideoDriver.
Definition at line 38 of file sdl2_v.cpp.
References CopyPalette(), local_palette, and MakeDirty().
|
overridevirtual |
Reimplemented from VideoDriver.
Definition at line 199 of file sdl2_v.cpp.
|
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().
|
private |
Definition at line 182 of file sdl2_v.cpp.
|
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().
|
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.
|
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.
|
inlineoverridevirtual |
Reimplemented from VideoDriver.
|
overridevirtual |
Get a list of refresh rates of each available monitor.
Reimplemented from VideoDriver.
Definition at line 230 of file sdl2_v.cpp.
|
overrideprotectedvirtual |
Get the resolution of the main screen.
Reimplemented from VideoDriver.
Definition at line 730 of file sdl2_v.cpp.
References VideoDriver::GetScreenSize().
|
protectedpure virtual |
Get a pointer to the video buffer.
Implemented in VideoDriver_SDL_Default, and VideoDriver_SDL_OpenGL.
Referenced by LockVideoBuffer().
|
private |
Definition at line 542 of file sdl2_v.cpp.
|
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().
|
overrideprotectedvirtual |
Make sure the video buffer is ready for drawing.
Reimplemented from VideoDriver.
Definition at line 738 of file sdl2_v.cpp.
References buffer_locked, and GetVideoPointer().
|
private |
Definition at line 635 of file sdl2_v.cpp.
|
overridevirtual |
Perform the actual drawing.
Implements VideoDriver.
Definition at line 671 of file sdl2_v.cpp.
References VideoDriver::StartGameThread(), and VideoDriver::StopGameThread().
|
overridevirtual |
Mark a particular area dirty.
left | The left most line of the dirty area. |
top | The top most line of the dirty area. |
width | The width of the dirty area. |
height | The 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().
|
overrideprotectedvirtual |
Process a single system event.
Reimplemented from VideoDriver.
Definition at line 380 of file sdl2_v.cpp.
References _left_button_clicked, _left_button_down, _right_button_clicked, _right_button_down, _rightclick_emulate, _settings_client, ConvertSdlKeycodeIntoMy(), CS_ALPHANUMERAL, edit_box_focused, CursorVars::fix_at, FocusedWindowIsConsole(), ClientSettings::gui, HandleKeypress(), HandleMouseEvents(), HandleTextInput(), CursorVars::in_window, IsValidChar(), MakeDirty(), CursorVars::pos, GUISettings::scrollwheel_multiplier, sdl_window, CursorVars::UpdateCursorPosition(), Utf8Decode(), and CursorVars::wheel.
|
protectedpure virtual |
Hand video buffer back to the painting backend.
Implemented in VideoDriver_SDL_Default, and VideoDriver_SDL_OpenGL.
Referenced by UnlockVideoBuffer().
|
overridevirtual |
Start this driver.
parm | Parameters passed to the driver. |
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().
|
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().
|
overridevirtual |
Change the full screen setting.
fullscreen | The new setting. |
Implements VideoDriver.
Definition at line 692 of file sdl2_v.cpp.
References Debug, InvalidateWindowClassesData(), sdl_window, and WC_GAME_OPTIONS.
|
overrideprotectedvirtual |
Unlock a previously locked video buffer.
Reimplemented from VideoDriver.
Definition at line 749 of file sdl2_v.cpp.
References buffer_locked, and ReleaseVideoPointer().
|
protected |
Video buffer was locked by the main thread.
Definition at line 49 of file sdl2_v.h.
Referenced by LockVideoBuffer(), and UnlockVideoBuffer().
|
protected |
Rectangle encompassing the dirty area of the video buffer.
Definition at line 50 of file sdl2_v.h.
Referenced by VideoDriver_SDL_Default::AllocateBackingStore(), VideoDriver_SDL_OpenGL::AllocateBackingStore(), MakeDirty(), VideoDriver_SDL_Default::Paint(), and VideoDriver_SDL_OpenGL::ReleaseVideoPointer().
|
protected |
Information string about selected driver.
Definition at line 51 of file sdl2_v.h.
Referenced by VideoDriver_SDL_OpenGL::Start(), and Start().
|
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().
|
protected |
Current palette to use for drawing.
Definition at line 48 of file sdl2_v.h.
Referenced by VideoDriver_SDL_OpenGL::AllocateBackingStore(), CheckPaletteAnim(), ClientSizeChanged(), VideoDriver_SDL_Default::Paint(), and VideoDriver_SDL_OpenGL::Paint().
|
protected |
Main SDL window.
Definition at line 47 of file sdl2_v.h.
Referenced by AfterBlitterChange(), VideoDriver_SDL_Default::AllocateBackingStore(), VideoDriver_SDL_OpenGL::AllocateBackingStore(), CreateMainWindow(), VideoDriver_SDL_Default::Paint(), VideoDriver_SDL_OpenGL::Paint(), PollEvent(), VideoDriver_SDL_OpenGL::Start(), and ToggleFullscreen().