OpenTTD Source 20241224-master-gf74b0cf984
VideoDriver_Win32Base Class Referenceabstract

Base class for Windows video drivers. More...

#include <win32_v.h>

Inheritance diagram for VideoDriver_Win32Base:
VideoDriver Driver VideoDriver_Win32GDI

Public Member Functions

 VideoDriver_Win32Base (bool uses_hardware_acceleration=false)
 
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 ClaimMousePointer () override
 
void EditBoxLostFocus () override
 An edit box lost the input focus.
 
std::vector< int > GetListOfMonitorRefreshRates () override
 Get a list of refresh rates of each available monitor.
 
- Public Member Functions inherited from VideoDriver
 VideoDriver (bool uses_hardware_acceleration=false)
 
virtual void ToggleVsync (bool vsync)
 Change the vsync setting.
 
virtual bool AfterBlitterChange ()
 Callback invoked after the blitter was changed.
 
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 void EditBoxGainedFocus ()
 An edit box gained the input focus.
 
virtual int GetSuggestedUIScale ()
 Get a suggested default GUI scale taking screen DPI into account.
 
virtual std::string_view GetInfoString () const
 
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::optional< std::string_view > Start (const StringList &parm)=0
 Start this 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.
 
float GetDPIScale () override
 Get DPI scaling factor of the screen OTTD is displayed on.
 
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 Initialize ()
 
bool MakeWindow (bool full_screen, bool resize=true)
 Instantiate a new window.
 
void ClientSizeChanged (int w, int h, bool force=false)
 
virtual uint8_t GetFullscreenBpp ()
 Get screen depth to use for fullscreen mode.
 
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 ()
 Hand video buffer back to the painting backend.
 
virtual void PaletteChanged (HWND hWnd)=0
 Palette of the window has changed.
 
- Protected Member Functions inherited from VideoDriver
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

HWND main_wnd
 Handle to system window.
 
bool fullscreen
 Whether to use (true) fullscreen mode.
 
bool has_focus = false
 Does our window have system focus?
 
Rect dirty_rect
 Region of the screen that needs redrawing.
 
int width = 0
 Width in pixels of our display surface.
 
int height = 0
 Height in pixels of our display surface.
 
int width_org = 0
 Original monitor resolution width, before we changed it.
 
int height_org = 0
 Original monitor resolution height, before we changed it.
 
bool buffer_locked
 Video buffer was locked by the main thread.
 
- 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
 

Friends

LRESULT CALLBACK WndProcGdi (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 

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

Base class for Windows video drivers.

Definition at line 19 of file win32_v.h.

Constructor & Destructor Documentation

◆ VideoDriver_Win32Base()

VideoDriver_Win32Base::VideoDriver_Win32Base ( bool  uses_hardware_acceleration = false)
inline

Definition at line 21 of file win32_v.h.

Member Function Documentation

◆ AllocateBackingStore()

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

(Re-)create the backing store.

Implemented in VideoDriver_Win32GDI.

◆ ChangeResolution()

bool VideoDriver_Win32Base::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 912 of file win32_v.cpp.

References height, height_org, main_wnd, MakeWindow(), width, and width_org.

Referenced by MakeWindow().

◆ CheckPaletteAnim()

void VideoDriver_Win32Base::CheckPaletteAnim ( )
overrideprotectedvirtual

Process any pending palette animation.

Reimplemented from VideoDriver.

Definition at line 842 of file win32_v.cpp.

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

◆ ClaimMousePointer()

bool VideoDriver_Win32Base::ClaimMousePointer ( )
overridevirtual

Reimplemented from VideoDriver.

Definition at line 52 of file win32_v.cpp.

◆ ClientSizeChanged()

void VideoDriver_Win32Base::ClientSizeChanged ( int  w,
int  h,
bool  force = false 
)
protected

Definition at line 900 of file win32_v.cpp.

◆ EditBoxLostFocus()

void VideoDriver_Win32Base::EditBoxLostFocus ( )
overridevirtual

An edit box lost the input focus.

Abort character compositing if necessary.

Reimplemented from VideoDriver.

Definition at line 930 of file win32_v.cpp.

References CancelIMEComposition(), main_wnd, SetCandidatePos(), and SetCompositionPos().

◆ GetDPIScale()

float VideoDriver_Win32Base::GetDPIScale ( )
overrideprotectedvirtual

Get DPI scaling factor of the screen OTTD is displayed on.

Returns
1.0 for default platform DPI, > 1.0 for higher DPI values, and < 1.0 for smaller DPI values.

Reimplemented from VideoDriver.

Definition at line 966 of file win32_v.cpp.

References LibraryLoader::GetFunction(), and main_wnd.

◆ GetFullscreenBpp()

uint8_t VideoDriver_Win32Base::GetFullscreenBpp ( )
protectedvirtual

Get screen depth to use for fullscreen mode.

Colour depth to use for fullscreen display modes.

Definition at line 126 of file win32_v.cpp.

References BlitterFactory::GetCurrentBlitter(), Blitter::GetScreenDepth(), and S8BPP_HARDWARE.

Referenced by MakeWindow().

◆ GetListOfMonitorRefreshRates()

std::vector< int > VideoDriver_Win32Base::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 954 of file win32_v.cpp.

◆ GetScreenSize()

Dimension VideoDriver_Win32Base::GetScreenSize ( ) const
overrideprotectedvirtual

Get the resolution of the main screen.

Reimplemented from VideoDriver.

Definition at line 961 of file win32_v.cpp.

◆ GetVideoPointer()

virtual void * VideoDriver_Win32Base::GetVideoPointer ( )
protectedpure virtual

Get a pointer to the video buffer.

Implemented in VideoDriver_Win32GDI.

Referenced by LockVideoBuffer().

◆ Initialize()

void VideoDriver_Win32Base::Initialize ( )
protected

Definition at line 815 of file win32_v.cpp.

◆ InputLoop()

void VideoDriver_Win32Base::InputLoop ( )
overrideprotectedvirtual

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

Reimplemented from VideoDriver.

Definition at line 848 of file win32_v.cpp.

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

◆ LockVideoBuffer()

bool VideoDriver_Win32Base::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 1007 of file win32_v.cpp.

References buffer_locked, and GetVideoPointer().

◆ MainLoop()

void VideoDriver_Win32Base::MainLoop ( )
overridevirtual

Perform the actual drawing.

Implements VideoDriver.

Definition at line 886 of file win32_v.cpp.

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

◆ MakeDirty()

void VideoDriver_Win32Base::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 836 of file win32_v.cpp.

References BoundingRect(), dirty_rect, height, and width.

Referenced by CheckPaletteAnim(), and VideoDriver_Win32GDI::PaletteChanged().

◆ MakeWindow()

bool VideoDriver_Win32Base::MakeWindow ( bool  full_screen,
bool  resize = true 
)
protected

Instantiate a new window.

Parameters
full_screenWhether to make a full screen window or not.
resizeWhether to change window size.
Returns
True if the window could be created.

Definition at line 138 of file win32_v.cpp.

References ChangeResolution(), fullscreen, GameSizeChanged(), VideoDriver::GetCaption(), BlitterFactory::GetCurrentBlitter(), GetFullscreenBpp(), height, height_org, main_wnd, MakeWindow(), OTTD2FS(), Blitter::PostResize(), settings, width, and width_org.

Referenced by VideoDriver_Win32GDI::AfterBlitterChange(), ChangeResolution(), MakeWindow(), VideoDriver_Win32GDI::Start(), and ToggleFullscreen().

◆ PaletteChanged()

virtual void VideoDriver_Win32Base::PaletteChanged ( HWND  hWnd)
protectedpure virtual

Palette of the window has changed.

Implemented in VideoDriver_Win32GDI.

◆ PollEvent()

bool VideoDriver_Win32Base::PollEvent ( )
overrideprotectedvirtual

Process a single system event.

Returns
False if there are no more events to process.

Reimplemented from VideoDriver.

Definition at line 873 of file win32_v.cpp.

References EditBoxInGlobalFocus().

◆ ReleaseVideoPointer()

virtual void VideoDriver_Win32Base::ReleaseVideoPointer ( )
inlineprotectedvirtual

Hand video buffer back to the painting backend.

Definition at line 70 of file win32_v.h.

Referenced by UnlockVideoBuffer().

◆ Stop()

void VideoDriver_Win32Base::Stop ( )
overridevirtual

Stop this driver.

Implements Driver.

Reimplemented in VideoDriver_Win32GDI.

Definition at line 829 of file win32_v.cpp.

References fullscreen, and main_wnd.

Referenced by VideoDriver_Win32GDI::Stop().

◆ ToggleFullscreen()

bool VideoDriver_Win32Base::ToggleFullscreen ( bool  fullscreen)
overridevirtual

Change the full screen setting.

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

Implements VideoDriver.

Definition at line 922 of file win32_v.cpp.

References InvalidateWindowClassesData(), MakeWindow(), and WC_GAME_OPTIONS.

◆ UnlockVideoBuffer()

void VideoDriver_Win32Base::UnlockVideoBuffer ( )
overrideprotectedvirtual

Unlock a previously locked video buffer.

Reimplemented from VideoDriver.

Definition at line 1018 of file win32_v.cpp.

References buffer_locked, and ReleaseVideoPointer().

Friends And Related Symbol Documentation

◆ WndProcGdi

LRESULT CALLBACK WndProcGdi ( HWND  hwnd,
UINT  msg,
WPARAM  wParam,
LPARAM  lParam 
)
friend

Definition at line 400 of file win32_v.cpp.

Field Documentation

◆ buffer_locked

bool VideoDriver_Win32Base::buffer_locked
protected

Video buffer was locked by the main thread.

Definition at line 49 of file win32_v.h.

Referenced by LockVideoBuffer(), and UnlockVideoBuffer().

◆ dirty_rect

Rect VideoDriver_Win32Base::dirty_rect
protected

Region of the screen that needs redrawing.

Definition at line 43 of file win32_v.h.

Referenced by MakeDirty(), and VideoDriver_Win32GDI::Paint().

◆ fullscreen

bool VideoDriver_Win32Base::fullscreen
protected

Whether to use (true) fullscreen mode.

Definition at line 41 of file win32_v.h.

Referenced by MakeWindow(), and Stop().

◆ has_focus

bool VideoDriver_Win32Base::has_focus = false
protected

Does our window have system focus?

Definition at line 42 of file win32_v.h.

Referenced by InputLoop().

◆ height

int VideoDriver_Win32Base::height = 0
protected

Height in pixels of our display surface.

Definition at line 45 of file win32_v.h.

Referenced by VideoDriver_Win32GDI::AllocateBackingStore(), ChangeResolution(), MakeDirty(), MakeWindow(), and VideoDriver_Win32GDI::Paint().

◆ height_org

int VideoDriver_Win32Base::height_org = 0
protected

Original monitor resolution height, before we changed it.

Definition at line 47 of file win32_v.h.

Referenced by ChangeResolution(), and MakeWindow().

◆ main_wnd

HWND VideoDriver_Win32Base::main_wnd
protected

Handle to system window.

Definition at line 40 of file win32_v.h.

Referenced by ChangeResolution(), EditBoxLostFocus(), GetDPIScale(), MakeWindow(), VideoDriver_Win32GDI::Paint(), and Stop().

◆ width

int VideoDriver_Win32Base::width = 0
protected

Width in pixels of our display surface.

Definition at line 44 of file win32_v.h.

Referenced by VideoDriver_Win32GDI::AllocateBackingStore(), ChangeResolution(), MakeDirty(), MakeWindow(), and VideoDriver_Win32GDI::Paint().

◆ width_org

int VideoDriver_Win32Base::width_org = 0
protected

Original monitor resolution width, before we changed it.

Definition at line 46 of file win32_v.h.

Referenced by ChangeResolution(), and MakeWindow().


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