aboutsummaryrefslogtreecommitdiff
path: root/samples/DX_APIUsage/DXUT/Optional/SDKmisc.h
diff options
context:
space:
mode:
authorDave Clark <[email protected]>2018-02-28 17:22:22 -0500
committerDave Clark <[email protected]>2018-02-28 17:22:22 -0500
commit25528fd230f5f4298c35123a833cdb112675808e (patch)
treef5aca3f5ee5a7734df41e7b974a04c37ddff528e /samples/DX_APIUsage/DXUT/Optional/SDKmisc.h
parentPush GfeSDK #173 (diff)
downloadgfesdk-25528fd230f5f4298c35123a833cdb112675808e.tar.xz
gfesdk-25528fd230f5f4298c35123a833cdb112675808e.zip
Push SDK # 1.1.186
Documentation updates.
Diffstat (limited to 'samples/DX_APIUsage/DXUT/Optional/SDKmisc.h')
-rw-r--r--samples/DX_APIUsage/DXUT/Optional/SDKmisc.h368
1 files changed, 368 insertions, 0 deletions
diff --git a/samples/DX_APIUsage/DXUT/Optional/SDKmisc.h b/samples/DX_APIUsage/DXUT/Optional/SDKmisc.h
new file mode 100644
index 0000000..b625b87
--- /dev/null
+++ b/samples/DX_APIUsage/DXUT/Optional/SDKmisc.h
@@ -0,0 +1,368 @@
+//--------------------------------------------------------------------------------------
+// File: SDKMisc.h
+//
+// Various helper functionality that is shared between SDK samples
+//
+// Copyright (c) Microsoft Corporation. All rights reserved
+//--------------------------------------------------------------------------------------
+#pragma once
+#ifndef SDKMISC_H
+#define SDKMISC_H
+
+
+//-----------------------------------------------------------------------------
+// Resource cache for textures, fonts, meshs, and effects.
+// Use DXUTGetGlobalResourceCache() to access the global cache
+//-----------------------------------------------------------------------------
+
+enum DXUTCACHE_SOURCELOCATION
+{
+ DXUTCACHE_LOCATION_FILE,
+ DXUTCACHE_LOCATION_RESOURCE
+};
+
+struct DXUTCache_Texture
+{
+ DXUTCACHE_SOURCELOCATION Location;
+ WCHAR wszSource[MAX_PATH];
+ HMODULE hSrcModule;
+ UINT Width;
+ UINT Height;
+ UINT Depth;
+ UINT MipLevels;
+ UINT MiscFlags;
+ union
+ {
+ DWORD Usage9;
+ D3D11_USAGE Usage11;
+ };
+ union
+ {
+ D3DFORMAT Format9;
+ DXGI_FORMAT Format;
+ };
+ union
+ {
+ D3DPOOL Pool9;
+ UINT CpuAccessFlags;
+ };
+ union
+ {
+ D3DRESOURCETYPE Type9;
+ UINT BindFlags;
+ };
+ IDirect3DBaseTexture9* pTexture9;
+ ID3D11ShaderResourceView* pSRV11;
+
+ DXUTCache_Texture()
+ {
+ pTexture9 = NULL;
+ pSRV11 = NULL;
+ }
+};
+
+struct DXUTCache_Font : public D3DXFONT_DESC
+{
+ ID3DXFont* pFont;
+};
+
+struct DXUTCache_Effect
+{
+ DXUTCACHE_SOURCELOCATION Location;
+ WCHAR wszSource[MAX_PATH];
+ HMODULE hSrcModule;
+ DWORD dwFlags;
+ ID3DXEffect* pEffect;
+};
+
+
+class CDXUTResourceCache
+{
+public:
+ ~CDXUTResourceCache();
+
+ HRESULT CreateTextureFromFile( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile,
+ LPDIRECT3DTEXTURE9* ppTexture );
+ HRESULT CreateTextureFromFile( LPDIRECT3DDEVICE9 pDevice, LPCSTR pSrcFile,
+ LPDIRECT3DTEXTURE9* ppTexture );
+ HRESULT CreateTextureFromFile( ID3D11Device* pDevice, ID3D11DeviceContext *pContext, LPCTSTR pSrcFile,
+ ID3D11ShaderResourceView** ppOutputRV, bool bSRGB=false );
+ HRESULT CreateTextureFromFile( ID3D11Device* pDevice, ID3D11DeviceContext *pContext, LPCSTR pSrcFile,
+ ID3D11ShaderResourceView** ppOutputRV, bool bSRGB=false );
+ HRESULT CreateTextureFromFileEx( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, UINT Width,
+ UINT Height, UINT MipLevels, DWORD Usage, D3DFORMAT Format,
+ D3DPOOL Pool, DWORD Filter, DWORD MipFilter, D3DCOLOR ColorKey,
+ D3DXIMAGE_INFO* pSrcInfo, PALETTEENTRY* pPalette,
+ LPDIRECT3DTEXTURE9* ppTexture );
+ HRESULT CreateTextureFromFileEx( ID3D11Device* pDevice, ID3D11DeviceContext* pContext, LPCTSTR pSrcFile,
+ D3DX11_IMAGE_LOAD_INFO* pLoadInfo, ID3DX11ThreadPump* pPump,
+ ID3D11ShaderResourceView** ppOutputRV, bool bSRGB );
+ HRESULT CreateTextureFromResource( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule,
+ LPCTSTR pSrcResource, LPDIRECT3DTEXTURE9* ppTexture );
+ HRESULT CreateTextureFromResourceEx( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule,
+ LPCTSTR pSrcResource, UINT Width, UINT Height, UINT MipLevels,
+ DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, DWORD Filter,
+ DWORD MipFilter, D3DCOLOR ColorKey, D3DXIMAGE_INFO* pSrcInfo,
+ PALETTEENTRY* pPalette, LPDIRECT3DTEXTURE9* ppTexture );
+ HRESULT CreateCubeTextureFromFile( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile,
+ LPDIRECT3DCUBETEXTURE9* ppCubeTexture );
+ HRESULT CreateCubeTextureFromFileEx( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, UINT Size,
+ UINT MipLevels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool,
+ DWORD Filter, DWORD MipFilter, D3DCOLOR ColorKey,
+ D3DXIMAGE_INFO* pSrcInfo, PALETTEENTRY* pPalette,
+ LPDIRECT3DCUBETEXTURE9* ppCubeTexture );
+ HRESULT CreateCubeTextureFromResource( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule,
+ LPCTSTR pSrcResource,
+ LPDIRECT3DCUBETEXTURE9* ppCubeTexture );
+ HRESULT CreateCubeTextureFromResourceEx( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule,
+ LPCTSTR pSrcResource, UINT Size, UINT MipLevels,
+ DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, DWORD Filter,
+ DWORD MipFilter, D3DCOLOR ColorKey,
+ D3DXIMAGE_INFO* pSrcInfo, PALETTEENTRY* pPalette,
+ LPDIRECT3DCUBETEXTURE9* ppCubeTexture );
+ HRESULT CreateVolumeTextureFromFile( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile,
+ LPDIRECT3DVOLUMETEXTURE9* ppVolumeTexture );
+ HRESULT CreateVolumeTextureFromFileEx( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, UINT Width,
+ UINT Height, UINT Depth, UINT MipLevels, DWORD Usage,
+ D3DFORMAT Format, D3DPOOL Pool, DWORD Filter,
+ DWORD MipFilter, D3DCOLOR ColorKey,
+ D3DXIMAGE_INFO* pSrcInfo, PALETTEENTRY* pPalette,
+ LPDIRECT3DVOLUMETEXTURE9* ppTexture );
+ HRESULT CreateVolumeTextureFromResource( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule,
+ LPCTSTR pSrcResource,
+ LPDIRECT3DVOLUMETEXTURE9* ppVolumeTexture );
+ HRESULT CreateVolumeTextureFromResourceEx( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule,
+ LPCTSTR pSrcResource, UINT Width, UINT Height,
+ UINT Depth, UINT MipLevels, DWORD Usage,
+ D3DFORMAT Format, D3DPOOL Pool, DWORD Filter,
+ DWORD MipFilter, D3DCOLOR ColorKey,
+ D3DXIMAGE_INFO* pSrcInfo, PALETTEENTRY* pPalette,
+ LPDIRECT3DVOLUMETEXTURE9* ppVolumeTexture );
+ HRESULT CreateFont( LPDIRECT3DDEVICE9 pDevice, UINT Height, UINT Width, UINT Weight,
+ UINT MipLevels, BOOL Italic, DWORD CharSet, DWORD OutputPrecision,
+ DWORD Quality, DWORD PitchAndFamily, LPCTSTR pFacename, LPD3DXFONT* ppFont );
+ HRESULT CreateFontIndirect( LPDIRECT3DDEVICE9 pDevice, CONST D3DXFONT_DESC *pDesc, LPD3DXFONT *ppFont );
+ HRESULT CreateEffectFromFile( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile,
+ const D3DXMACRO* pDefines, LPD3DXINCLUDE pInclude, DWORD Flags,
+ LPD3DXEFFECTPOOL pPool, LPD3DXEFFECT* ppEffect,
+ LPD3DXBUFFER* ppCompilationErrors );
+ HRESULT CreateEffectFromResource( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule,
+ LPCTSTR pSrcResource, const D3DXMACRO* pDefines,
+ LPD3DXINCLUDE pInclude, DWORD Flags, LPD3DXEFFECTPOOL pPool,
+ LPD3DXEFFECT* ppEffect, LPD3DXBUFFER* ppCompilationErrors );
+
+public:
+ HRESULT OnCreateDevice( IDirect3DDevice9* pd3dDevice );
+ HRESULT OnResetDevice( IDirect3DDevice9* pd3dDevice );
+ HRESULT OnLostDevice();
+ HRESULT OnDestroyDevice();
+
+protected:
+ friend CDXUTResourceCache& WINAPI DXUTGetGlobalResourceCache();
+ friend HRESULT WINAPI DXUTInitialize3DEnvironment();
+ friend HRESULT WINAPI DXUTReset3DEnvironment();
+ friend void WINAPI DXUTCleanup3DEnvironment( bool bReleaseSettings );
+
+ CDXUTResourceCache()
+ {
+ }
+
+ CGrowableArray <DXUTCache_Texture> m_TextureCache;
+ CGrowableArray <DXUTCache_Effect> m_EffectCache;
+ CGrowableArray <DXUTCache_Font> m_FontCache;
+};
+
+CDXUTResourceCache& WINAPI DXUTGetGlobalResourceCache();
+
+
+//--------------------------------------------------------------------------------------
+// Manages the insertion point when drawing text
+//--------------------------------------------------------------------------------------
+class CDXUTDialogResourceManager;
+class CDXUTTextHelper
+{
+public:
+ CDXUTTextHelper( ID3DXFont* pFont9 = NULL, ID3DXSprite* pSprite9 = NULL,
+ int nLineHeight = 15 );
+ CDXUTTextHelper( ID3D11Device* pd3d11Device, ID3D11DeviceContext* pd3dDeviceContext, CDXUTDialogResourceManager* pManager, int nLineHeight );
+ ~CDXUTTextHelper();
+
+ void Init( ID3DXFont* pFont9 = NULL, ID3DXSprite* pSprite9 = NULL,
+ int nLineHeight = 15 );
+
+ void SetInsertionPos( int x, int y )
+ {
+ m_pt.x = x; m_pt.y = y;
+ }
+ void SetForegroundColor( D3DXCOLOR clr )
+ {
+ m_clr = clr;
+ }
+
+ void Begin();
+ HRESULT DrawFormattedTextLine( const WCHAR* strMsg, ... );
+ HRESULT DrawTextLine( const WCHAR* strMsg );
+ HRESULT DrawFormattedTextLine( RECT& rc, DWORD dwFlags, const WCHAR* strMsg, ... );
+ HRESULT DrawTextLine( RECT& rc, DWORD dwFlags, const WCHAR* strMsg );
+ void End();
+
+protected:
+ ID3DXFont* m_pFont9;
+ ID3DXSprite* m_pSprite9;
+ D3DXCOLOR m_clr;
+ POINT m_pt;
+ int m_nLineHeight;
+
+ // D3D11 font
+ ID3D11Device* m_pd3d11Device;
+ ID3D11DeviceContext* m_pd3d11DeviceContext;
+ CDXUTDialogResourceManager* m_pManager;
+};
+
+
+//--------------------------------------------------------------------------------------
+// Manages a persistent list of lines and draws them using ID3DXLine
+//--------------------------------------------------------------------------------------
+class CDXUTLineManager
+{
+public:
+ CDXUTLineManager();
+ ~CDXUTLineManager();
+
+ HRESULT OnCreatedDevice( IDirect3DDevice9* pd3dDevice );
+ HRESULT OnResetDevice();
+ HRESULT OnRender();
+ HRESULT OnLostDevice();
+ HRESULT OnDeletedDevice();
+
+ HRESULT AddLine( int* pnLineID, D3DXVECTOR2* pVertexList, DWORD dwVertexListCount, D3DCOLOR Color, float fWidth,
+ float fScaleRatio, bool bAntiAlias );
+ HRESULT AddRect( int* pnLineID, RECT rc, D3DCOLOR Color, float fWidth, float fScaleRatio, bool bAntiAlias );
+ HRESULT RemoveLine( int nLineID );
+ HRESULT RemoveAllLines();
+
+protected:
+ struct LINE_NODE
+ {
+ int nLineID;
+ D3DCOLOR Color;
+ float fWidth;
+ bool bAntiAlias;
+ float fScaleRatio;
+ D3DXVECTOR2* pVertexList;
+ DWORD dwVertexListCount;
+ };
+
+ CGrowableArray <LINE_NODE*> m_LinesList;
+ IDirect3DDevice9* m_pd3dDevice;
+ ID3DXLine* m_pD3DXLine;
+};
+
+
+//--------------------------------------------------------------------------------------
+// Shared code for samples to ask user if they want to use a REF device or quit
+//--------------------------------------------------------------------------------------
+void WINAPI DXUTDisplaySwitchingToREFWarning( DXUTDeviceVersion ver );
+
+//--------------------------------------------------------------------------------------
+// Tries to finds a media file by searching in common locations
+//--------------------------------------------------------------------------------------
+HRESULT WINAPI DXUTFindDXSDKMediaFileCch( __out_ecount(cchDest) WCHAR* strDestPath,
+ __in int cchDest,
+ __in LPCWSTR strFilename );
+HRESULT WINAPI DXUTSetMediaSearchPath( LPCWSTR strPath );
+LPCWSTR WINAPI DXUTGetMediaSearchPath();
+
+
+//--------------------------------------------------------------------------------------
+// Returns a view matrix for rendering to a face of a cubemap.
+//--------------------------------------------------------------------------------------
+D3DXMATRIX WINAPI DXUTGetCubeMapViewMatrix( DWORD dwFace );
+
+
+//--------------------------------------------------------------------------------------
+// Simple helper stack class
+//--------------------------------------------------------------------------------------
+template <class T> class CDXUTStack
+{
+private:
+ UINT m_MemorySize;
+ UINT m_NumElements;
+ T* m_pData;
+
+ bool EnsureStackSize( UINT64 iElements )
+ {
+ if( m_MemorySize > iElements )
+ return true;
+
+ T* pTemp = new T[ ( size_t )( iElements * 2 + 256 ) ];
+ if( !pTemp )
+ return false;
+
+ if( m_NumElements )
+ {
+ CopyMemory( pTemp, m_pData, ( size_t )( m_NumElements * sizeof( T ) ) );
+ }
+
+ if( m_pData ) delete []m_pData;
+ m_pData = pTemp;
+ return true;
+ }
+
+public:
+ CDXUTStack()
+ {
+ m_pData = NULL; m_NumElements = 0; m_MemorySize = 0;
+ }
+ ~CDXUTStack()
+ {
+ if( m_pData ) delete []m_pData;
+ }
+
+ UINT GetCount()
+ {
+ return m_NumElements;
+ }
+ T GetAt( UINT i )
+ {
+ return m_pData[i];
+ }
+ T GetTop()
+ {
+ if( m_NumElements < 1 )
+ return NULL;
+
+ return m_pData[ m_NumElements - 1 ];
+ }
+
+ T GetRelative( INT i )
+ {
+ INT64 iVal = m_NumElements - 1 + i;
+ if( iVal < 0 )
+ return NULL;
+ return m_pData[ iVal ];
+ }
+
+ bool Push( T pElem )
+ {
+ if( !EnsureStackSize( m_NumElements + 1 ) )
+ return false;
+
+ m_pData[m_NumElements] = pElem;
+ m_NumElements++;
+
+ return true;
+ }
+
+ T Pop()
+ {
+ if( m_NumElements < 1 )
+ return NULL;
+
+ m_NumElements --;
+ return m_pData[m_NumElements];
+ }
+};
+
+
+#endif