1 //--------------------------------------------------------------------------------------
\r
4 // Various helper functionality that is shared between SDK samples
\r
6 // Copyright (c) Microsoft Corporation. All rights reserved
\r
7 //--------------------------------------------------------------------------------------
\r
13 //-----------------------------------------------------------------------------
\r
14 // Resource cache for textures, fonts, meshs, and effects.
\r
15 // Use DXUTGetGlobalResourceCache() to access the global cache
\r
16 //-----------------------------------------------------------------------------
\r
18 enum DXUTCACHE_SOURCELOCATION
\r
20 DXUTCACHE_LOCATION_FILE,
\r
21 DXUTCACHE_LOCATION_RESOURCE
\r
24 struct DXUTCache_Texture
\r
26 DXUTCACHE_SOURCELOCATION Location;
\r
27 WCHAR wszSource[MAX_PATH];
\r
37 D3D11_USAGE Usage11;
\r
47 UINT CpuAccessFlags;
\r
51 D3DRESOURCETYPE Type9;
\r
54 IDirect3DBaseTexture9* pTexture9;
\r
55 ID3D11ShaderResourceView* pSRV11;
\r
64 struct DXUTCache_Font : public D3DXFONT_DESC
\r
69 struct DXUTCache_Effect
\r
71 DXUTCACHE_SOURCELOCATION Location;
\r
72 WCHAR wszSource[MAX_PATH];
\r
75 ID3DXEffect* pEffect;
\r
79 class CDXUTResourceCache
\r
82 ~CDXUTResourceCache();
\r
84 HRESULT CreateTextureFromFile( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile,
\r
85 LPDIRECT3DTEXTURE9* ppTexture );
\r
86 HRESULT CreateTextureFromFile( LPDIRECT3DDEVICE9 pDevice, LPCSTR pSrcFile,
\r
87 LPDIRECT3DTEXTURE9* ppTexture );
\r
88 HRESULT CreateTextureFromFile( ID3D11Device* pDevice, ID3D11DeviceContext *pContext, LPCTSTR pSrcFile,
\r
89 ID3D11ShaderResourceView** ppOutputRV, bool bSRGB=false );
\r
90 HRESULT CreateTextureFromFile( ID3D11Device* pDevice, ID3D11DeviceContext *pContext, LPCSTR pSrcFile,
\r
91 ID3D11ShaderResourceView** ppOutputRV, bool bSRGB=false );
\r
92 HRESULT CreateTextureFromFileEx( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, UINT Width,
\r
93 UINT Height, UINT MipLevels, DWORD Usage, D3DFORMAT Format,
\r
94 D3DPOOL Pool, DWORD Filter, DWORD MipFilter, D3DCOLOR ColorKey,
\r
95 D3DXIMAGE_INFO* pSrcInfo, PALETTEENTRY* pPalette,
\r
96 LPDIRECT3DTEXTURE9* ppTexture );
\r
97 HRESULT CreateTextureFromFileEx( ID3D11Device* pDevice, ID3D11DeviceContext* pContext, LPCTSTR pSrcFile,
\r
98 D3DX11_IMAGE_LOAD_INFO* pLoadInfo, ID3DX11ThreadPump* pPump,
\r
99 ID3D11ShaderResourceView** ppOutputRV, bool bSRGB );
\r
100 HRESULT CreateTextureFromResource( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule,
\r
101 LPCTSTR pSrcResource, LPDIRECT3DTEXTURE9* ppTexture );
\r
102 HRESULT CreateTextureFromResourceEx( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule,
\r
103 LPCTSTR pSrcResource, UINT Width, UINT Height, UINT MipLevels,
\r
104 DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, DWORD Filter,
\r
105 DWORD MipFilter, D3DCOLOR ColorKey, D3DXIMAGE_INFO* pSrcInfo,
\r
106 PALETTEENTRY* pPalette, LPDIRECT3DTEXTURE9* ppTexture );
\r
107 HRESULT CreateCubeTextureFromFile( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile,
\r
108 LPDIRECT3DCUBETEXTURE9* ppCubeTexture );
\r
109 HRESULT CreateCubeTextureFromFileEx( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, UINT Size,
\r
110 UINT MipLevels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool,
\r
111 DWORD Filter, DWORD MipFilter, D3DCOLOR ColorKey,
\r
112 D3DXIMAGE_INFO* pSrcInfo, PALETTEENTRY* pPalette,
\r
113 LPDIRECT3DCUBETEXTURE9* ppCubeTexture );
\r
114 HRESULT CreateCubeTextureFromResource( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule,
\r
115 LPCTSTR pSrcResource,
\r
116 LPDIRECT3DCUBETEXTURE9* ppCubeTexture );
\r
117 HRESULT CreateCubeTextureFromResourceEx( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule,
\r
118 LPCTSTR pSrcResource, UINT Size, UINT MipLevels,
\r
119 DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, DWORD Filter,
\r
120 DWORD MipFilter, D3DCOLOR ColorKey,
\r
121 D3DXIMAGE_INFO* pSrcInfo, PALETTEENTRY* pPalette,
\r
122 LPDIRECT3DCUBETEXTURE9* ppCubeTexture );
\r
123 HRESULT CreateVolumeTextureFromFile( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile,
\r
124 LPDIRECT3DVOLUMETEXTURE9* ppVolumeTexture );
\r
125 HRESULT CreateVolumeTextureFromFileEx( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, UINT Width,
\r
126 UINT Height, UINT Depth, UINT MipLevels, DWORD Usage,
\r
127 D3DFORMAT Format, D3DPOOL Pool, DWORD Filter,
\r
128 DWORD MipFilter, D3DCOLOR ColorKey,
\r
129 D3DXIMAGE_INFO* pSrcInfo, PALETTEENTRY* pPalette,
\r
130 LPDIRECT3DVOLUMETEXTURE9* ppTexture );
\r
131 HRESULT CreateVolumeTextureFromResource( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule,
\r
132 LPCTSTR pSrcResource,
\r
133 LPDIRECT3DVOLUMETEXTURE9* ppVolumeTexture );
\r
134 HRESULT CreateVolumeTextureFromResourceEx( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule,
\r
135 LPCTSTR pSrcResource, UINT Width, UINT Height,
\r
136 UINT Depth, UINT MipLevels, DWORD Usage,
\r
137 D3DFORMAT Format, D3DPOOL Pool, DWORD Filter,
\r
138 DWORD MipFilter, D3DCOLOR ColorKey,
\r
139 D3DXIMAGE_INFO* pSrcInfo, PALETTEENTRY* pPalette,
\r
140 LPDIRECT3DVOLUMETEXTURE9* ppVolumeTexture );
\r
141 HRESULT CreateFont( LPDIRECT3DDEVICE9 pDevice, UINT Height, UINT Width, UINT Weight,
\r
142 UINT MipLevels, BOOL Italic, DWORD CharSet, DWORD OutputPrecision,
\r
143 DWORD Quality, DWORD PitchAndFamily, LPCTSTR pFacename, LPD3DXFONT* ppFont );
\r
144 HRESULT CreateFontIndirect( LPDIRECT3DDEVICE9 pDevice, CONST D3DXFONT_DESC *pDesc, LPD3DXFONT *ppFont );
\r
145 HRESULT CreateEffectFromFile( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile,
\r
146 const D3DXMACRO* pDefines, LPD3DXINCLUDE pInclude, DWORD Flags,
\r
147 LPD3DXEFFECTPOOL pPool, LPD3DXEFFECT* ppEffect,
\r
148 LPD3DXBUFFER* ppCompilationErrors );
\r
149 HRESULT CreateEffectFromResource( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule,
\r
150 LPCTSTR pSrcResource, const D3DXMACRO* pDefines,
\r
151 LPD3DXINCLUDE pInclude, DWORD Flags, LPD3DXEFFECTPOOL pPool,
\r
152 LPD3DXEFFECT* ppEffect, LPD3DXBUFFER* ppCompilationErrors );
\r
155 HRESULT OnCreateDevice( IDirect3DDevice9* pd3dDevice );
\r
156 HRESULT OnResetDevice( IDirect3DDevice9* pd3dDevice );
\r
157 HRESULT OnLostDevice();
\r
158 HRESULT OnDestroyDevice();
\r
161 friend CDXUTResourceCache& WINAPI DXUTGetGlobalResourceCache();
\r
162 friend HRESULT WINAPI DXUTInitialize3DEnvironment();
\r
163 friend HRESULT WINAPI DXUTReset3DEnvironment();
\r
164 friend void WINAPI DXUTCleanup3DEnvironment( bool bReleaseSettings );
\r
166 CDXUTResourceCache()
\r
170 CGrowableArray <DXUTCache_Texture> m_TextureCache;
\r
171 CGrowableArray <DXUTCache_Effect> m_EffectCache;
\r
172 CGrowableArray <DXUTCache_Font> m_FontCache;
\r
175 CDXUTResourceCache& WINAPI DXUTGetGlobalResourceCache();
\r
178 //--------------------------------------------------------------------------------------
\r
179 // Manages the insertion point when drawing text
\r
180 //--------------------------------------------------------------------------------------
\r
181 class CDXUTDialogResourceManager;
\r
182 class CDXUTTextHelper
\r
185 CDXUTTextHelper( ID3DXFont* pFont9 = NULL, ID3DXSprite* pSprite9 = NULL,
\r
186 int nLineHeight = 15 );
\r
187 CDXUTTextHelper( ID3D11Device* pd3d11Device, ID3D11DeviceContext* pd3dDeviceContext, CDXUTDialogResourceManager* pManager, int nLineHeight );
\r
188 ~CDXUTTextHelper();
\r
190 void Init( ID3DXFont* pFont9 = NULL, ID3DXSprite* pSprite9 = NULL,
\r
191 int nLineHeight = 15 );
\r
193 void SetInsertionPos( int x, int y )
\r
195 m_pt.x = x; m_pt.y = y;
\r
197 void SetForegroundColor( D3DXCOLOR clr )
\r
203 HRESULT DrawFormattedTextLine( const WCHAR* strMsg, ... );
\r
204 HRESULT DrawTextLine( const WCHAR* strMsg );
\r
205 HRESULT DrawFormattedTextLine( RECT& rc, DWORD dwFlags, const WCHAR* strMsg, ... );
\r
206 HRESULT DrawTextLine( RECT& rc, DWORD dwFlags, const WCHAR* strMsg );
\r
210 ID3DXFont* m_pFont9;
\r
211 ID3DXSprite* m_pSprite9;
\r
217 ID3D11Device* m_pd3d11Device;
\r
218 ID3D11DeviceContext* m_pd3d11DeviceContext;
\r
219 CDXUTDialogResourceManager* m_pManager;
\r
223 //--------------------------------------------------------------------------------------
\r
224 // Manages a persistent list of lines and draws them using ID3DXLine
\r
225 //--------------------------------------------------------------------------------------
\r
226 class CDXUTLineManager
\r
229 CDXUTLineManager();
\r
230 ~CDXUTLineManager();
\r
232 HRESULT OnCreatedDevice( IDirect3DDevice9* pd3dDevice );
\r
233 HRESULT OnResetDevice();
\r
234 HRESULT OnRender();
\r
235 HRESULT OnLostDevice();
\r
236 HRESULT OnDeletedDevice();
\r
238 HRESULT AddLine( int* pnLineID, D3DXVECTOR2* pVertexList, DWORD dwVertexListCount, D3DCOLOR Color, float fWidth,
\r
239 float fScaleRatio, bool bAntiAlias );
\r
240 HRESULT AddRect( int* pnLineID, RECT rc, D3DCOLOR Color, float fWidth, float fScaleRatio, bool bAntiAlias );
\r
241 HRESULT RemoveLine( int nLineID );
\r
242 HRESULT RemoveAllLines();
\r
252 D3DXVECTOR2* pVertexList;
\r
253 DWORD dwVertexListCount;
\r
256 CGrowableArray <LINE_NODE*> m_LinesList;
\r
257 IDirect3DDevice9* m_pd3dDevice;
\r
258 ID3DXLine* m_pD3DXLine;
\r
262 //--------------------------------------------------------------------------------------
\r
263 // Shared code for samples to ask user if they want to use a REF device or quit
\r
264 //--------------------------------------------------------------------------------------
\r
265 void WINAPI DXUTDisplaySwitchingToREFWarning( DXUTDeviceVersion ver );
\r
267 //--------------------------------------------------------------------------------------
\r
268 // Tries to finds a media file by searching in common locations
\r
269 //--------------------------------------------------------------------------------------
\r
270 HRESULT WINAPI DXUTFindDXSDKMediaFileCch( __in_ecount(cchDest) WCHAR* strDestPath,
\r
272 __in LPCWSTR strFilename );
\r
273 HRESULT WINAPI DXUTSetMediaSearchPath( LPCWSTR strPath );
\r
274 LPCWSTR WINAPI DXUTGetMediaSearchPath();
\r
277 //--------------------------------------------------------------------------------------
\r
278 // Returns a view matrix for rendering to a face of a cubemap.
\r
279 //--------------------------------------------------------------------------------------
\r
280 D3DXMATRIX WINAPI DXUTGetCubeMapViewMatrix( DWORD dwFace );
\r
283 //--------------------------------------------------------------------------------------
\r
284 // Simple helper stack class
\r
285 //--------------------------------------------------------------------------------------
\r
286 template <class T> class CDXUTStack
\r
290 UINT m_NumElements;
\r
293 bool EnsureStackSize( UINT64 iElements )
\r
295 if( m_MemorySize > iElements )
\r
298 T* pTemp = new T[ ( size_t )( iElements * 2 + 256 ) ];
\r
302 if( m_NumElements )
\r
304 CopyMemory( pTemp, m_pData, ( size_t )( m_NumElements * sizeof( T ) ) );
\r
307 if( m_pData ) delete []m_pData;
\r
315 m_pData = NULL; m_NumElements = 0; m_MemorySize = 0;
\r
319 if( m_pData ) delete []m_pData;
\r
324 return m_NumElements;
\r
332 if( m_NumElements < 1 )
\r
335 return m_pData[ m_NumElements - 1 ];
\r
338 T GetRelative( INT i )
\r
340 INT64 iVal = m_NumElements - 1 + i;
\r
343 return m_pData[ iVal ];
\r
346 bool Push( T pElem )
\r
348 if( !EnsureStackSize( m_NumElements + 1 ) )
\r
351 m_pData[m_NumElements] = pElem;
\r
359 if( m_NumElements < 1 )
\r
363 return m_pData[m_NumElements];
\r