summaryrefslogtreecommitdiff
path: root/engine/ivideomode.h
diff options
context:
space:
mode:
Diffstat (limited to 'engine/ivideomode.h')
-rw-r--r--engine/ivideomode.h121
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