//========= 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