You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
643 lines
22 KiB
643 lines
22 KiB
//========= 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
|
|
|