summaryrefslogtreecommitdiff
path: root/vguimatsurface/MatSystemSurface.h
diff options
context:
space:
mode:
Diffstat (limited to 'vguimatsurface/MatSystemSurface.h')
-rw-r--r--vguimatsurface/MatSystemSurface.h643
1 files changed, 643 insertions, 0 deletions
diff --git a/vguimatsurface/MatSystemSurface.h b/vguimatsurface/MatSystemSurface.h
new file mode 100644
index 0000000..5be5bf3
--- /dev/null
+++ b/vguimatsurface/MatSystemSurface.h
@@ -0,0 +1,643 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//===========================================================================//
+
+#ifndef MATSYSTEMSURFACE_H
+#define MATSYSTEMSURFACE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include <vgui/VGUI.h>
+#include <vgui/ISurface.h>
+#include <vgui/IPanel.h>
+#include <vgui/IClientPanel.h>
+#include <vgui_controls/Panel.h>
+#include <vgui/IInput.h>
+#include <vgui_controls/Controls.h>
+#include <vgui/Point.h>
+#include "materialsystem/imaterialsystem.h"
+#include "VGuiMatSurface/IMatSystemSurface.h"
+#include "materialsystem/imesh.h"
+#include "materialsystem/imaterial.h"
+#include "utlvector.h"
+#include "utlsymbol.h"
+#include "materialsystem/MaterialSystemUtil.h"
+#include "tier1/utldict.h"
+#include "tier3/tier3.h"
+
+using namespace vgui;
+
+class IImage;
+
+extern class IMaterialSystem *g_pMaterialSystem;
+//-----------------------------------------------------------------------------
+// The default material system embedded panel
+//-----------------------------------------------------------------------------
+class CMatEmbeddedPanel : public vgui::Panel
+{
+ typedef vgui::Panel BaseClass;
+public:
+ CMatEmbeddedPanel();
+ virtual void OnThink();
+
+ VPANEL IsWithinTraverse(int x, int y, bool traversePopups);
+};
+
+//-----------------------------------------------------------------------------
+//
+// Implementation of the VGUI surface on top of the material system
+//
+//-----------------------------------------------------------------------------
+class CMatSystemSurface : public CTier3AppSystem< IMatSystemSurface >
+{
+ typedef CTier3AppSystem< IMatSystemSurface > BaseClass;
+
+public:
+ CMatSystemSurface();
+ virtual ~CMatSystemSurface();
+
+ // Methods of IAppSystem
+ virtual bool Connect( CreateInterfaceFn factory );
+ virtual void Disconnect();
+ virtual void *QueryInterface( const char *pInterfaceName );
+ virtual InitReturnVal_t Init();
+ virtual void Shutdown();
+
+ // initialization
+ virtual void SetEmbeddedPanel(vgui::VPANEL pEmbeddedPanel);
+
+ // returns true if a panel is minimzed
+ bool IsMinimized(vgui::VPANEL panel);
+
+ // Sets the only panel to draw. Set to NULL to clear.
+ void RestrictPaintToSinglePanel(vgui::VPANEL panel);
+
+ // frame
+ virtual void RunFrame();
+
+ // implementation of vgui::ISurface
+ virtual vgui::VPANEL GetEmbeddedPanel();
+
+ // drawing context
+ virtual void PushMakeCurrent(vgui::VPANEL panel,bool useInSets);
+ virtual void PopMakeCurrent(vgui::VPANEL panel);
+
+ // rendering functions
+ virtual void DrawSetColor(int r,int g,int b,int a);
+ virtual void DrawSetColor(Color col);
+
+ virtual void DrawLine( int x0, int y0, int x1, int y1 );
+ virtual void DrawTexturedLine( const vgui::Vertex_t &a, const vgui::Vertex_t &b );
+ virtual void DrawPolyLine(int *px, int *py, int numPoints);
+ virtual void DrawTexturedPolyLine( const vgui::Vertex_t *p, int n );
+
+ virtual void DrawFilledRect(int x0, int y0, int x1, int y1);
+ virtual void DrawFilledRectArray( IntRect *pRects, int numRects );
+ virtual void DrawFilledRectFastFade( int x0, int y0, int x1, int y1, int fadeStartPt, int fadeEndPt, unsigned int alpha0, unsigned int alpha1, bool bHorizontal );
+ virtual void DrawFilledRectFade( int x0, int y0, int x1, int y1, unsigned int alpha0, unsigned int alpha1, bool bHorizontal );
+ virtual void DrawOutlinedRect(int x0, int y0, int x1, int y1);
+ virtual void DrawOutlinedCircle(int x, int y, int radius, int segments);
+
+ // textured rendering functions
+ virtual int CreateNewTextureID( bool procedural = false );
+ virtual bool IsTextureIDValid(int id);
+
+ virtual bool DrawGetTextureFile(int id, char *filename, int maxlen );
+ virtual int DrawGetTextureId( char const *filename );
+ virtual int DrawGetTextureId( ITexture *pTexture );
+ virtual void DrawSetTextureFile(int id, const char *filename, int hardwareFilter, bool forceReload);
+ virtual void DrawSetTexture(int id);
+ virtual void DrawGetTextureSize(int id, int &wide, int &tall);
+ virtual bool DeleteTextureByID(int id);
+
+ virtual IVguiMatInfo *DrawGetTextureMatInfoFactory(int id);
+
+ virtual void DrawSetTextureRGBA(int id, const unsigned char *rgba, int wide, int tall, int hardwareFilter, bool forceReload);
+
+ virtual void DrawTexturedRect(int x0, int y0, int x1, int y1);
+ virtual void DrawTexturedSubRect( int x0, int y0, int x1, int y1, float texs0, float text0, float texs1, float text1 );
+
+ virtual void DrawTexturedPolygon(int n, vgui::Vertex_t *pVertices, bool bClipVertices = true );
+
+ virtual void DrawPrintText(const wchar_t *text, int textLen, FontDrawType_t drawType = FONT_DRAW_DEFAULT);
+ virtual void DrawUnicodeChar(wchar_t wch, FontDrawType_t drawType = FONT_DRAW_DEFAULT );
+ virtual void DrawUnicodeString( const wchar_t *pwString, FontDrawType_t drawType = FONT_DRAW_DEFAULT );
+ virtual void DrawSetTextFont(vgui::HFont font);
+ virtual void DrawFlushText();
+
+ virtual void DrawSetTextColor(int r, int g, int b, int a);
+ virtual void DrawSetTextColor(Color col);
+ virtual void DrawSetTextScale(float sx, float sy);
+ virtual void DrawSetTextPos(int x, int y);
+ virtual void DrawGetTextPos(int& x,int& y);
+
+ virtual vgui::IHTML *CreateHTMLWindow(vgui::IHTMLEvents *events,vgui::VPANEL context);
+ virtual void PaintHTMLWindow(vgui::IHTML *htmlwin);
+ virtual void DeleteHTMLWindow(vgui::IHTML *htmlwin);
+ virtual bool BHTMLWindowNeedsPaint(IHTML *htmlwin);
+
+ virtual void GetScreenSize(int &wide, int &tall);
+ virtual void SetAsTopMost(vgui::VPANEL panel, bool state);
+ virtual void BringToFront(vgui::VPANEL panel);
+ virtual void SetForegroundWindow (vgui::VPANEL panel);
+ virtual void SetPanelVisible(vgui::VPANEL panel, bool state);
+ virtual void SetMinimized(vgui::VPANEL panel, bool state);
+ virtual void FlashWindow(vgui::VPANEL panel, bool state);
+ virtual void SetTitle(vgui::VPANEL panel, const wchar_t *title);
+ virtual const wchar_t *GetTitle( vgui::VPANEL panel );
+
+ virtual void SetAsToolBar(vgui::VPANEL panel, bool state); // removes the window's task bar entry (for context menu's, etc.)
+
+ // windows stuff
+ virtual void CreatePopup(VPANEL panel, bool minimized, bool showTaskbarIcon = true, bool disabled = false, bool mouseInput = true , bool kbInput = true);
+
+ virtual void SwapBuffers(vgui::VPANEL panel);
+ virtual void Invalidate(vgui::VPANEL panel);
+
+ virtual void SetCursor(vgui::HCursor cursor);
+ virtual bool IsCursorVisible();
+ virtual void SetCursorAlwaysVisible(bool visible);
+
+ virtual void ApplyChanges();
+ virtual bool IsWithin(int x, int y);
+ virtual bool HasFocus();
+
+ virtual bool SupportsFeature(SurfaceFeature_e feature);
+
+ // engine-only focus handling (replacing WM_FOCUS windows handling)
+ virtual void SetTopLevelFocus(vgui::VPANEL panel);
+
+ // fonts
+ virtual vgui::HFont CreateFont();
+ virtual bool SetFontGlyphSet(vgui::HFont font, const char *windowsFontName, int tall, int weight, int blur, int scanlines, int flags, int nRangeMin = 0, int nRangeMax = 0);
+ virtual bool SetBitmapFontGlyphSet(vgui::HFont font, const char *windowsFontName, float scalex, float scaley, int flags);
+ virtual int GetFontTall(HFont font);
+ virtual int GetFontTallRequested(HFont font);
+ virtual int GetFontAscent(HFont font, wchar_t wch);
+ virtual bool IsFontAdditive(HFont font);
+ virtual void GetCharABCwide(HFont font, int ch, int &a, int &b, int &c);
+ virtual void GetTextSize(HFont font, const wchar_t *text, int &wide, int &tall);
+ virtual int GetCharacterWidth(vgui::HFont font, int ch);
+ virtual bool AddCustomFontFile(const char *fontName, const char *fontFileName);
+ virtual bool AddBitmapFontFile(const char *fontFileName);
+ virtual void SetBitmapFontName( const char *pName, const char *pFontFilename );
+ virtual const char *GetBitmapFontName( const char *pName );
+ virtual void PrecacheFontCharacters(HFont font, const wchar_t *pCharacters);
+ virtual void ClearTemporaryFontCache( void );
+ virtual const char *GetFontName( HFont font );
+ virtual const char *GetFontFamilyName( HFont font );
+
+ // GameUI-only accessed functions
+ // uploads a part of a texture, used for font rendering
+ void DrawSetSubTextureRGBA(int textureID, int drawX, int drawY, unsigned const char *rgba, int subTextureWide, int subTextureTall);
+ void DrawUpdateRegionTextureRGBA( int nTextureID, int x, int y, const unsigned char *pchData, int wide, int tall, ImageFormat imageFormat );
+
+ // notify icons?!?
+ virtual vgui::VPANEL GetNotifyPanel();
+ virtual void SetNotifyIcon(vgui::VPANEL context, vgui::HTexture icon, vgui::VPANEL panelToReceiveMessages, const char *text);
+
+ // plays a sound
+ virtual void PlaySound(const char *fileName);
+
+ //!! these functions Should not be accessed directly, but only through other vgui items
+ //!! need to move these to seperate interface
+ virtual int GetPopupCount();
+ virtual vgui::VPANEL GetPopup( int index );
+ virtual bool ShouldPaintChildPanel(vgui::VPANEL childPanel);
+ virtual bool RecreateContext(vgui::VPANEL panel);
+ virtual void AddPanel(vgui::VPANEL panel);
+ virtual void ReleasePanel(vgui::VPANEL panel);
+ virtual void MovePopupToFront(vgui::VPANEL panel);
+
+ virtual void SolveTraverse(vgui::VPANEL panel, bool forceApplySchemeSettings);
+ virtual void PaintTraverse(vgui::VPANEL panel);
+
+ virtual void EnableMouseCapture(vgui::VPANEL panel, bool state);
+
+ virtual void SetWorkspaceInsets( int left, int top, int right, int bottom );
+ virtual void GetWorkspaceBounds(int &x, int &y, int &wide, int &tall);
+
+ // Hook needed to Get input to work
+ virtual void AttachToWindow( void *hwnd, bool bLetAppDriveInput );
+ virtual bool HandleInputEvent( const InputEvent_t &event );
+
+ void InitFullScreenBuffer( const char *pszRenderTargetName );
+ virtual void Set3DPaintTempRenderTarget( const char *pRenderTargetName );
+ virtual void Reset3DPaintTempRenderTarget( void );
+
+ // Begins, ends 3D painting
+ virtual void Begin3DPaint( int iLeft, int iTop, int iRight, int iBottom, bool bRenderToTexture = true );
+ virtual void End3DPaint();
+
+ virtual void BeginSkinCompositionPainting() OVERRIDE;
+ virtual void EndSkinCompositionPainting() OVERRIDE;
+
+ // Disable clipping during rendering
+ virtual void DisableClipping( bool bDisable ) OVERRIDE;
+ virtual void GetClippingRect( int &left, int &top, int &right, int &bottom, bool &bClippingDisabled ) OVERRIDE;
+ virtual void SetClippingRect( int left, int top, int right, int bottom ) OVERRIDE;
+
+ // Prevents vgui from changing the cursor
+ virtual bool IsCursorLocked() const;
+
+ // Sets the mouse Get + Set callbacks
+ virtual void SetMouseCallbacks( GetMouseCallback_t GetFunc, SetMouseCallback_t SetFunc );
+
+ // Tells the surface to ignore windows messages
+ virtual void EnableWindowsMessages( bool bEnable );
+
+ // Installs a function to play sounds
+ virtual void InstallPlaySoundFunc( PlaySoundFunc_t soundFunc );
+
+ // Some drawing methods that cannot be accomplished under Win32
+ virtual void DrawColoredCircle( int centerx, int centery, float radius, int r, int g, int b, int a );
+ virtual int DrawColoredText( vgui::HFont font, int x, int y, int r, int g, int b, int a, PRINTF_FORMAT_STRING const char *fmt, ... );
+ virtual void DrawColoredTextRect( vgui::HFont font, int x, int y, int w, int h, int r, int g, int b, int a, PRINTF_FORMAT_STRING const char *fmt, ... );
+ virtual void DrawTextHeight( vgui::HFont font, int w, int& h, PRINTF_FORMAT_STRING const char *fmt, ... );
+
+ // Returns the length in pixels of the text
+ virtual int DrawTextLen( vgui::HFont font, PRINTF_FORMAT_STRING const char *fmt, ... );
+
+ // Draws a panel in 3D space.
+ virtual void DrawPanelIn3DSpace( vgui::VPANEL pRootPanel, const VMatrix &panelCenterToWorld, int pw, int ph, float sw, float sh );
+
+ // Only visible within vguimatsurface
+ void DrawSetTextureMaterial(int id, IMaterial *pMaterial);
+ void ReferenceProceduralMaterial( int id, int referenceId, IMaterial *pMaterial );
+
+ // new stuff for Alfreds VGUI2 port!!
+ virtual bool InEngine() { return true; }
+ void GetProportionalBase( int &width, int &height ) { width = BASE_WIDTH; height = BASE_HEIGHT; }
+ virtual bool HasCursorPosFunctions() { return true; }
+
+ virtual void SetModalPanel(VPANEL );
+ virtual VPANEL GetModalPanel();
+ virtual void UnlockCursor();
+ virtual void LockCursor();
+ virtual void SetTranslateExtendedKeys(bool state);
+ virtual VPANEL GetTopmostPopup();
+ virtual void GetAbsoluteWindowBounds(int &x, int &y, int &wide, int &tall);
+ virtual void CalculateMouseVisible();
+ virtual bool NeedKBInput();
+ virtual void SurfaceGetCursorPos(int &x, int &y);
+ virtual void SurfaceSetCursorPos(int x, int y);
+ virtual void MovePopupToBack(VPANEL panel);
+
+ virtual bool IsInThink( VPANEL panel);
+
+ virtual bool DrawGetUnicodeCharRenderInfo( wchar_t ch, CharRenderInfo& info );
+ virtual void DrawRenderCharFromInfo( const CharRenderInfo& info );
+
+ // global alpha setting functions
+ // affect all subsequent draw calls - shouldn't normally be used directly, only in Panel::PaintTraverse()
+ virtual void DrawSetAlphaMultiplier( float alpha /* [0..1] */ );
+ virtual float DrawGetAlphaMultiplier();
+
+ // web browser
+ virtual void SetAllowHTMLJavaScript( bool state );
+
+ // video mode changing
+ virtual void OnScreenSizeChanged( int nOldWidth, int nOldHeight );
+
+ virtual vgui::HCursor CreateCursorFromFile( char const *curOrAniFile, char const *pPathID );
+
+ virtual void PaintTraverseEx(VPANEL panel, bool paintPopups = false );
+
+ virtual float GetZPos() const;
+
+ virtual void SetPanelForInput( VPANEL vpanel );
+
+ virtual vgui::IImage *GetIconImageForFullPath( char const *pFullPath );
+
+ virtual void DestroyTextureID( int id );
+
+
+ virtual const char *GetResolutionKey( void ) const;
+
+ virtual bool ForceScreenSizeOverride( bool bState, int wide, int tall );
+ // LocalToScreen, ParentLocalToScreen fixups for explicit PaintTraverse calls on Panels not at 0, 0 position
+ virtual bool ForceScreenPosOffset( bool bState, int x, int y );
+
+ virtual void OffsetAbsPos( int &x, int &y );
+
+ virtual void GetKernedCharWidth( HFont font, wchar_t ch, wchar_t chBefore, wchar_t chAfter, float &wide, float &flabcA );
+
+
+ virtual const char *GetWebkitHTMLUserAgentString() { return "Valve Client"; }
+
+ virtual void *Deprecated_AccessChromeHTMLController() { return NULL; }
+
+ virtual void SetFullscreenViewport( int x, int y, int w, int h ) OVERRIDE;
+ virtual void SetFullscreenViewportAndRenderTarget( int x, int y, int w, int h, ITexture *pRenderTarget ) OVERRIDE;
+ virtual void GetFullscreenViewportAndRenderTarget( int & x, int & y, int & w, int & h, ITexture **ppRenderTarget ) OVERRIDE;
+ virtual void GetFullscreenViewport( int & x, int & y, int & w, int & h ) OVERRIDE;
+ virtual void PushFullscreenViewport() OVERRIDE;
+ virtual void PopFullscreenViewport() OVERRIDE;
+
+ // support for software cursors
+ virtual void SetSoftwareCursor( bool bUseSoftwareCursor ) OVERRIDE;
+ virtual void PaintSoftwareCursor() OVERRIDE;
+
+ // Methods of ILocalizeTextQuery
+public:
+ //virtual int ComputeTextWidth( const wchar_t *pString );
+
+ // Causes fonts to get reloaded, etc.
+ virtual void ResetFontCaches();
+
+ virtual bool IsScreenSizeOverrideActive( void );
+ virtual bool IsScreenPosOverrideActive( void );
+
+ virtual IMaterial *DrawGetTextureMaterial( int id );
+
+ virtual int GetTextureNumFrames( int id );
+ virtual void DrawSetTextureFrame( int id, int nFrame, unsigned int *pFrameCache );
+
+private:
+ //void DrawRenderCharInternal( const FontCharRenderInfo& info );
+ void DrawRenderCharInternal( const CharRenderInfo& info );
+
+private:
+ enum { BASE_HEIGHT = 480, BASE_WIDTH = 640 };
+
+ struct PaintState_t
+ {
+ vgui::VPANEL m_pPanel;
+ int m_iTranslateX;
+ int m_iTranslateY;
+ int m_iScissorLeft;
+ int m_iScissorRight;
+ int m_iScissorTop;
+ int m_iScissorBottom;
+ };
+
+ // material Setting method
+ void InternalSetMaterial( IMaterial *material = NULL );
+
+ // Draws the fullscreen buffer into the panel
+ void DrawFullScreenBuffer( int nLeft, int nTop, int nRight, int nBottom );
+
+ // Helper method to initialize vertices (transforms them into screen space too)
+ void InitVertex( vgui::Vertex_t &vertex, int x, int y, float u, float v );
+
+ // Draws a quad + quad array
+ void DrawQuad( const vgui::Vertex_t &ul, const vgui::Vertex_t &lr, unsigned char *pColor );
+ void DrawQuadArray( int numQuads, vgui::Vertex_t *pVerts, unsigned char *pColor, bool bShouldClip = true );
+
+ // Necessary to wrap the rendering
+ void StartDrawing( void );
+ void StartDrawingIn3DSpace( const VMatrix &screenToWorld, int pw, int ph, float sw, float sh );
+ void FinishDrawing( void );
+
+ // Sets up a particular painting state...
+ void SetupPaintState( const PaintState_t &paintState );
+
+ void ResetPopupList();
+ void AddPopup( vgui::VPANEL panel );
+ void RemovePopup( vgui::VPANEL panel );
+ void AddPopupsToList( vgui::VPANEL panel );
+
+ // Helper for drawing colored text
+ int DrawColoredText( vgui::HFont font, int x, int y, int r, int g, int b, int a, const char *fmt, va_list argptr );
+ void SearchForWordBreak( vgui::HFont font, char *text, int& chars, int& pixels );
+
+ void InternalThinkTraverse(VPANEL panel);
+ void InternalSolveTraverse(VPANEL panel);
+ void InternalSchemeSettingsTraverse(VPANEL panel, bool forceApplySchemeSettings);
+
+ // handles mouse movement
+ void SetCursorPos(int x, int y);
+ void GetCursorPos(int &x, int &y);
+
+ void DrawTexturedLineInternal( const Vertex_t &a, const Vertex_t &b );
+
+ // Gets texture coordinates for drawing the full screen buffer
+ void GetFullScreenTexCoords( int x, int y, int w, int h, float *pMinU, float *pMinV, float *pMaxU, float *pMaxV );
+
+ // Is a panel under the restricted panel?
+ bool IsPanelUnderRestrictedPanel( VPANEL panel );
+
+ // Point Translation for current panel
+ int m_nTranslateX;
+ int m_nTranslateY;
+
+ // alpha multiplier for current panel [0..1]
+ float m_flAlphaMultiplier;
+
+ // The size of the window to draw into
+ int m_pSurfaceExtents[4];
+
+ // Color for drawing all non-text things
+ unsigned char m_DrawColor[4];
+
+ // Color for drawing text
+ unsigned char m_DrawTextColor[4];
+
+ // Location of text rendering
+ int m_pDrawTextPos[2];
+
+ // Meshbuilder used for drawing
+ IMesh* m_pMesh;
+ CMeshBuilder meshBuilder;
+
+ // White material used for drawing non-textured things
+ CMaterialReference m_pWhite;
+
+ // Used for 3D-rendered images
+ CTextureReference m_FullScreenBuffer;
+ CMaterialReference m_FullScreenBufferMaterial;
+ int m_nFullScreenBufferMaterialId;
+ CUtlString m_FullScreenBufferName;
+
+ bool m_bUsingTempFullScreenBufferMaterial;
+
+ // Root panel
+ vgui::VPANEL m_pEmbeddedPanel;
+ vgui::Panel *m_pDefaultEmbeddedPanel;
+ vgui::VPANEL m_pRestrictedPanel;
+
+ // List of pop-up panels based on the type enum above (draw order vs last clicked)
+ CUtlVector<vgui::HPanel> m_PopupList;
+
+ // Stack of paint state...
+ CUtlVector< PaintState_t > m_PaintStateStack;
+
+ vgui::HFont m_hCurrentFont;
+ vgui::HCursor _currentCursor;
+ bool m_cursorAlwaysVisible;
+
+ // The currently bound texture
+ int m_iBoundTexture;
+
+ // font drawing batching code
+ enum { MAX_BATCHED_CHAR_VERTS = 4096 };
+ vgui::Vertex_t m_BatchedCharVerts[ MAX_BATCHED_CHAR_VERTS ];
+ int m_nBatchedCharVertCount;
+
+ // What's the rectangle we're drawing in 3D paint mode?
+ int m_n3DLeft, m_n3DRight, m_n3DTop, m_n3DBottom;
+
+ // Are we painting in 3D? (namely drawing 3D objects *inside* the vgui panel)
+ bool m_bIn3DPaintMode : 1;
+
+ // If we are in 3d Paint mode, are we rendering to a texture? (Or directly to the screen)
+ bool m_b3DPaintRenderToTexture : 1;
+
+ // Are we drawing the vgui panel in the 3D world somewhere?
+ bool m_bDrawingIn3DWorld : 1;
+
+ // Is the app gonna call HandleInputEvent?
+ bool m_bAppDrivesInput : 1;
+
+ // Are we currently in the think() loop
+ bool m_bInThink : 1;
+
+ bool m_bNeedsKeyboard : 1;
+ bool m_bNeedsMouse : 1;
+ bool m_bAllowJavaScript : 1;
+
+ int m_nLastInputPollCount;
+
+ VPANEL m_CurrentThinkPanel;
+
+ // The attached HWND
+ void *m_HWnd;
+
+ // Installed function to play sounds
+ PlaySoundFunc_t m_PlaySoundFunc;
+
+ int m_WorkSpaceInsets[4];
+
+ class TitleEntry
+ {
+ public:
+ TitleEntry()
+ {
+ panel = NULL;
+ title[0] = 0;
+ }
+
+ vgui::VPANEL panel;
+ wchar_t title[128];
+ };
+
+ CUtlVector< TitleEntry > m_Titles;
+ CUtlVector< CUtlSymbol > m_CustomFontFileNames;
+ CUtlVector< CUtlSymbol > m_BitmapFontFileNames;
+ CUtlDict< int, int > m_BitmapFontFileMapping;
+
+ float m_flZPos;
+ CUtlDict< vgui::IImage *, unsigned short > m_FileTypeImages;
+
+ int GetTitleEntry( vgui::VPANEL panel );
+
+ virtual void DrawSetTextureRGBAEx(int id, const unsigned char *rgba, int wide, int tall, ImageFormat format );
+
+ struct ScreenOverride_t
+ {
+ ScreenOverride_t() : m_bActive( false )
+ {
+ m_nValue[ 0 ] = m_nValue[ 1 ] = 0;
+ }
+ bool m_bActive;
+ int m_nValue[ 2 ];
+ };
+
+ ScreenOverride_t m_ScreenSizeOverride;
+ ScreenOverride_t m_ScreenPosOverride;
+
+ int m_nFullscreenViewportX;
+ int m_nFullscreenViewportY;
+ int m_nFullscreenViewportWidth;
+ int m_nFullscreenViewportHeight;
+ ITexture *m_pFullscreenRenderTarget;
+
+#ifdef LINUX
+ struct font_entry
+ {
+ void *data;
+ int size;
+ };
+
+ static CUtlDict< font_entry, unsigned short > m_FontData;
+
+ static void *FontDataHelper( const char *pchFontName, int &size, const char *fontFileName );
+#endif
+};
+
+#if GLMDEBUG
+class MatSurfFuncLogger // rip off of GLMFuncLogger - figure out a way to reunify these soon
+{
+ public:
+
+ // simple function log
+ MatSurfFuncLogger( char *funcName )
+ {
+ CMatRenderContextPtr prc( g_pMaterialSystem );
+
+ m_funcName = funcName;
+ m_earlyOut = false;
+
+ prc->Printf( ">%s", m_funcName );
+ };
+
+ // more advanced version lets you pass args (i.e. called parameters or anything else of interest)
+ // no macro for this one, since no easy way to pass through the args as well as the funcname
+ MatSurfFuncLogger( char *funcName, PRINTF_FORMAT_STRING const char *fmt, ... )
+ {
+ CMatRenderContextPtr prc( g_pMaterialSystem );
+
+ m_funcName = funcName;
+ m_earlyOut = false;
+
+ // this acts like GLMPrintf here
+ // all the indent policy is down in GLMPrintfVA
+ // which means we need to inject a ">" at the front of the format string to make this work... sigh.
+
+ char modifiedFmt[2000];
+ modifiedFmt[0] = '>';
+ strcpy( modifiedFmt+1, fmt );
+
+ va_list vargs;
+ va_start(vargs, fmt);
+ prc->PrintfVA( modifiedFmt, vargs );
+ va_end( vargs );
+ }
+
+ ~MatSurfFuncLogger( )
+ {
+ CMatRenderContextPtr prc( g_pMaterialSystem );
+ if (m_earlyOut)
+ {
+ prc->Printf( "<%s (early out)", m_funcName );
+ }
+ else
+ {
+ prc->Printf( "<%s", m_funcName );
+ }
+ };
+
+ void EarlyOut( void )
+ {
+ m_earlyOut = true;
+ };
+
+
+ char *m_funcName; // set at construction time
+ bool m_earlyOut;
+};
+
+// handy macro to go with the helper class
+#define MAT_FUNC MatSurfFuncLogger _logger_ ( __FUNCTION__ )
+
+#else
+
+#define MAT_FUNC
+
+#endif
+
+#endif // MATSYSTEMSURFACE_H