diff options
Diffstat (limited to 'engine/ivideomode.h')
| -rw-r--r-- | engine/ivideomode.h | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/engine/ivideomode.h b/engine/ivideomode.h new file mode 100644 index 0000000..a265b64 --- /dev/null +++ b/engine/ivideomode.h @@ -0,0 +1,121 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $Workfile: $ +// $Date: $ +// $NoKeywords: $ +//=============================================================================// + +#ifndef IVIDEOMODE_H +#define IVIDEOMODE_H + +#ifdef _WIN32 +#pragma once +#endif + +#include "vmodes.h" +#include "vtf/vtf.h" + +struct MovieInfo_t; + + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +abstract_class IVideoMode +{ +public: + virtual ~IVideoMode() {} + virtual bool Init( ) = 0; + virtual void Shutdown( void ) = 0; + + // Shows the start-up graphics based on the mod + // (Filesystem path for the mod must be set up first) + virtual void DrawStartupGraphic() = 0; + + // Creates the game window, plays the startup movie, starts up the material system + virtual bool CreateGameWindow( int nWidth, int nHeight, bool bWindowed ) = 0; + + // Sets the game window in editor mode + virtual void SetGameWindow( void *hWnd ) = 0; + + // Sets the video mode, and re-sizes the window + virtual bool SetMode( int nWidth, int nHeight, bool bWindowed ) = 0; + + // Returns the fullscreen modes for the adapter the game was started on + virtual int GetModeCount( void ) = 0; + virtual struct vmode_s *GetMode( int num ) = 0; + + // Purpose: This is called in response to a WM_MOVE message + // or whatever the equivalent that would be under linux + virtual void UpdateWindowPosition( void ) = 0; + + // Alt-tab handling + virtual void RestoreVideo( void ) = 0; + virtual void ReleaseVideo( void ) = 0; + + virtual void DrawNullBackground( void *hdc, int w, int h ) = 0; + virtual void InvalidateWindow() = 0; + + // Returns the video mode width + height. In the case of windowed mode, + // it returns the width and height of the drawable region of the window. + // (it doesn't include the window borders) + virtual int GetModeWidth() const = 0; + virtual int GetModeHeight() const = 0; + virtual bool IsWindowedMode() const = 0; + + // Returns the video mode width + height for a single stereo display. + // if the game isn't running in side by side stereo, this is the same + // as GetModeWidth and GetModeHeight + virtual int GetModeStereoWidth() const = 0; + virtual int GetModeStereoHeight() const = 0; + + // Returns the size of full screen UI. This might be wider than a single + // eye on displays like the Oculus Rift where a single eye is very narrow. + // if the game isn't running in side by side stereo, this is the same + // as GetModeWidth and GetModeHeight + virtual int GetModeUIWidth() const = 0; + virtual int GetModeUIHeight() const = 0; + + // Returns the subrect to draw the client view into. + // Coordinates are measured relative to the drawable region of the window + virtual const vrect_t & GetClientViewRect( ) const = 0; + virtual void SetClientViewRect( const vrect_t &viewRect ) = 0; + + // Lazily recomputes client view rect + virtual void MarkClientViewRectDirty() = 0; + + virtual void TakeSnapshotTGA( const char *pFileName ) = 0; + virtual void TakeSnapshotTGARect( const char *pFilename, int x, int y, int w, int h, int resampleWidth, int resampleHeight, bool bPFM = false, CubeMapFaceIndex_t faceIndex = CUBEMAP_FACE_RIGHT ) = 0; + virtual void WriteMovieFrame( const MovieInfo_t& info ) = 0; + + // Takes snapshots + virtual void TakeSnapshotJPEG( const char *pFileName, int quality ) = 0; + virtual bool TakeSnapshotJPEGToBuffer( CUtlBuffer& buf, int quality ) = 0; + + virtual void ReadScreenPixels( int x, int y, int w, int h, void *pBuffer, ImageFormat format ) = 0; +}; + + +//----------------------------------------------------------------------------- +// Utilities for virtual screen coordinates +//----------------------------------------------------------------------------- +#define XRES(x) ( x * ( ( float )videomode->GetModeStereoWidth() / 640.0 ) ) +#define YRES(y) ( y * ( ( float )videomode->GetModeStereoHeight() / 480.0 ) ) + + +//----------------------------------------------------------------------------- +// Singleton accessor +//----------------------------------------------------------------------------- +extern IVideoMode *videomode; + + +//----------------------------------------------------------------------------- +// Class factory +//----------------------------------------------------------------------------- +void VideoMode_Create(); +void VideoMode_Destroy(); + + +#endif // IVIDEOMODE_H |