/////////////////////////////////////////////////////////////////////////////// // // ## ###### // ###### ### // ## ############### Shark 3D Engine (www.shark3d.com) // ########## # # # // ######## Copyright (c) 1996-2006 Spinor GmbH. // ######### # # # All rights reserved. // ## ########## // ## // /////////////////////////////////////////////////////////////////////////////// //@cpp #ifndef S3D_DRV_D3D9_INSPECT_H #define S3D_DRV_D3D9_INSPECT_H #include "drv_d3d9_types.h" #include "drv_d3d9_settings.h" #include "sys/win32api/sys_win32api_unicode.h" #include "util/mempool/util_mempool_strbuf.h" /////////////////////////////////////////////////////////////////////////////// #define S3D_DRV_D3D9_PIX_INSPBATCH_COLOR D3DCOLOR_XRGB(0, 255, 255) #define S3D_DRV_D3D9_PIX_INSPCHARGE_COLOR D3DCOLOR_XRGB(255, 0, 0) #define S3D_DRV_D3D9_PIX_STD_COLOR D3DCOLOR_XRGB(255, 0, 255) /////////////////////////////////////////////////////////////////////////////// class s3d_CDrvD3d9PixEvent { public: s3d_CDrvD3d9PixEvent(); ~s3d_CDrvD3d9PixEvent(); void Assign( const s3d_CSysChar *Name, const D3DCOLOR &Color); static void SetMarker( const s3d_CSysChar *Name, const D3DCOLOR &Color); static void InfoStrOfCharge( s3d_CUtilMemPool *MemPool, const s3d_CSysChar *Prefix, const s3d_CSysChar *ObjDesc, const s3d_CSysChar *MainInfo, const s3d_CSysChar *ObjInfo, s3d_CUtilMemPoolStrBuf &Info); private: #ifdef S3D_DRV_D3D9_PIX_ENABLE bool m_Enabled; #endif s3d_CDrvD3d9PixEvent(const s3d_CDrvD3d9PixEvent&); static const s3d_CSysChar *CutInfo( const s3d_CSysChar *Info); }; /////////////////////////////////////////////////////////////////////////////// // Implementations /////////////////////////////////////////////////////////////////////////////// S3D_SYS_INLINE s3d_CDrvD3d9PixEvent::s3d_CDrvD3d9PixEvent() { #ifdef S3D_DRV_D3D9_PIX_ENABLE m_Enabled = false; #endif } S3D_SYS_INLINE s3d_CDrvD3d9PixEvent::~s3d_CDrvD3d9PixEvent() { #ifdef S3D_DRV_D3D9_PIX_ENABLE if(m_Enabled) D3DPERF_EndEvent(); #endif } S3D_SYS_INLINE void s3d_CDrvD3d9PixEvent::Assign( const s3d_CSysChar *Name, const D3DCOLOR &Color) { #ifdef S3D_DRV_D3D9_PIX_ENABLE if(!m_Enabled) { m_Enabled = true; if(!Name) Name = ""; S3D_SYS_WIN32API_ALLOCA_WCHAR_OF_SYSCHAR( WinNameLen, WinName, Name); D3DPERF_BeginEvent(Color, WinName); } #endif } S3D_SYS_INLINE void s3d_CDrvD3d9PixEvent::SetMarker( const s3d_CSysChar *Name, const D3DCOLOR &Color) { #ifdef S3D_DRV_D3D9_PIX_ENABLE S3D_SYS_WIN32API_ALLOCA_WCHAR_OF_SYSCHAR(MarkerNameLen, MarkerName, Name); if(!MarkerName) MarkerName = L""; D3DPERF_SetMarker(Color, MarkerName); #endif } S3D_SYS_INLINE void s3d_CDrvD3d9PixEvent::InfoStrOfCharge( s3d_CUtilMemPool *MemPool, const s3d_CSysChar *Prefix, const s3d_CSysChar *ObjDesc, const s3d_CSysChar *MainInfo, const s3d_CSysChar *ObjInfo, s3d_CUtilMemPoolStrBuf &Info) { Info.Clear(); #ifdef S3D_DRV_D3D9_PIX_ENABLE if(!MemPool) return; Info.Append(MemPool, Prefix); Info.Append(MemPool, CutInfo(ObjDesc)); Info.Append(MemPool, " - "); Info.Append(MemPool, CutInfo(MainInfo)); Info.Append(MemPool, " - "); Info.Append(MemPool, CutInfo(ObjInfo)); #endif } S3D_SYS_INLINE const s3d_CSysChar *s3d_CDrvD3d9PixEvent::CutInfo( const s3d_CSysChar *Info) { if(!Info) Info = ""; const s3d_CSysChar *Result = Info + s3d_SysStrlen(Info); while(Result > Info && Result[-1] != '/') Result--; return Result; } /////////////////////////////////////////////////////////////////////////////// #endif