diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /vguimatsurface/MatSystemSurface.h | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'vguimatsurface/MatSystemSurface.h')
| -rw-r--r-- | vguimatsurface/MatSystemSurface.h | 643 |
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 |