[1777] | 1 | //--------------------------------------------------------------------------------------
|
---|
| 2 | // File: DXUT.h
|
---|
| 3 | //
|
---|
| 4 | // Copyright (c) Microsoft Corporation. All rights reserved.
|
---|
| 5 | //--------------------------------------------------------------------------------------
|
---|
| 6 | #pragma once
|
---|
| 7 | #ifndef DXUT_H
|
---|
| 8 | #define DXUT_H
|
---|
| 9 |
|
---|
| 10 | #ifndef UNICODE
|
---|
| 11 | #error "DXUT requires a Unicode build. See the nearby comments for details"
|
---|
| 12 | //
|
---|
| 13 | // If you are using Microsoft Visual C++ .NET, under the General tab of the project
|
---|
| 14 | // properties change the Character Set to 'Use Unicode Character Set'.
|
---|
| 15 | //
|
---|
| 16 | // Windows XP and later are native Unicode so Unicode applications will perform better.
|
---|
| 17 | // For Windows 98 and Windows Me support, consider using the Microsoft Layer for Unicode (MSLU).
|
---|
| 18 | //
|
---|
| 19 | // To use MSLU, link against a set of libraries similar to this
|
---|
| 20 | // /nod:kernel32.lib /nod:advapi32.lib /nod:user32.lib /nod:gdi32.lib /nod:shell32.lib /nod:comdlg32.lib /nod:version.lib /nod:mpr.lib /nod:rasapi32.lib /nod:winmm.lib /nod:winspool.lib /nod:vfw32.lib /nod:secur32.lib /nod:oleacc.lib /nod:oledlg.lib /nod:sensapi.lib UnicoWS.lib kernel32.lib advapi32.lib user32.lib gdi32.lib shell32.lib comdlg32.lib version.lib mpr.lib rasapi32.lib winmm.lib winspool.lib vfw32.lib secur32.lib oleacc.lib oledlg.lib sensapi.lib dxerr.lib dxguid.lib d3dx9d.lib d3d9.lib comctl32.lib
|
---|
| 21 | // and put the unicows.dll (available for download from msdn.microsoft.com) in the exe's folder.
|
---|
| 22 | //
|
---|
| 23 | // For more details see the MSDN article titled:
|
---|
| 24 | // "MSLU: Develop Unicode Applications for Windows 9x Platforms with the Microsoft Layer for Unicode"
|
---|
| 25 | // at http://msdn.microsoft.com/msdnmag/issues/01/10/MSLU/default.aspx
|
---|
| 26 | //
|
---|
| 27 | #endif
|
---|
| 28 |
|
---|
| 29 | //--------------------------------------------------------------------------------------
|
---|
| 30 | // Structs
|
---|
| 31 | //--------------------------------------------------------------------------------------
|
---|
| 32 | class CD3DEnumeration;
|
---|
| 33 |
|
---|
| 34 | struct DXUTDeviceSettings
|
---|
| 35 | {
|
---|
| 36 | UINT AdapterOrdinal;
|
---|
| 37 | D3DDEVTYPE DeviceType;
|
---|
| 38 | D3DFORMAT AdapterFormat;
|
---|
| 39 | DWORD BehaviorFlags;
|
---|
| 40 | D3DPRESENT_PARAMETERS pp;
|
---|
| 41 | };
|
---|
| 42 |
|
---|
| 43 |
|
---|
| 44 | //--------------------------------------------------------------------------------------
|
---|
| 45 | // Error codes
|
---|
| 46 | //--------------------------------------------------------------------------------------
|
---|
| 47 | #define DXUTERR_NODIRECT3D MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0901)
|
---|
| 48 | #define DXUTERR_NOCOMPATIBLEDEVICES MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0902)
|
---|
| 49 | #define DXUTERR_MEDIANOTFOUND MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0903)
|
---|
| 50 | #define DXUTERR_NONZEROREFCOUNT MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0904)
|
---|
| 51 | #define DXUTERR_CREATINGDEVICE MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0905)
|
---|
| 52 | #define DXUTERR_RESETTINGDEVICE MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0906)
|
---|
| 53 | #define DXUTERR_CREATINGDEVICEOBJECTS MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0907)
|
---|
| 54 | #define DXUTERR_RESETTINGDEVICEOBJECTS MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0908)
|
---|
| 55 | #define DXUTERR_INCORRECTVERSION MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0909)
|
---|
| 56 |
|
---|
| 57 |
|
---|
| 58 | //--------------------------------------------------------------------------------------
|
---|
| 59 | // Callback registration
|
---|
| 60 | //--------------------------------------------------------------------------------------
|
---|
| 61 | typedef bool (CALLBACK *LPDXUTCALLBACKISDEVICEACCEPTABLE)( D3DCAPS9* pCaps, D3DFORMAT AdapterFormat, D3DFORMAT BackBufferFormat, bool bWindowed, void* pUserContext );
|
---|
| 62 | typedef bool (CALLBACK *LPDXUTCALLBACKMODIFYDEVICESETTINGS)( DXUTDeviceSettings* pDeviceSettings, const D3DCAPS9* pCaps, void* pUserContext );
|
---|
| 63 | typedef HRESULT (CALLBACK *LPDXUTCALLBACKDEVICECREATED)( IDirect3DDevice9* pd3dDevice, const D3DSURFACE_DESC* pBackBufferSurfaceDesc, void* pUserContext );
|
---|
| 64 | typedef HRESULT (CALLBACK *LPDXUTCALLBACKDEVICERESET)( IDirect3DDevice9* pd3dDevice, const D3DSURFACE_DESC* pBackBufferSurfaceDesc, void* pUserContext );
|
---|
| 65 | typedef void (CALLBACK *LPDXUTCALLBACKDEVICEDESTROYED)( void* pUserContext );
|
---|
| 66 | typedef void (CALLBACK *LPDXUTCALLBACKDEVICELOST)( void* pUserContext );
|
---|
| 67 | typedef void (CALLBACK *LPDXUTCALLBACKFRAMEMOVE)( IDirect3DDevice9* pd3dDevice, double fTime, float fElapsedTime, void* pUserContext );
|
---|
| 68 | typedef void (CALLBACK *LPDXUTCALLBACKFRAMERENDER)( IDirect3DDevice9* pd3dDevice, double fTime, float fElapsedTime, void* pUserContext );
|
---|
| 69 | typedef void (CALLBACK *LPDXUTCALLBACKKEYBOARD)( UINT nChar, bool bKeyDown, bool bAltDown, void* pUserContext );
|
---|
| 70 | typedef void (CALLBACK *LPDXUTCALLBACKMOUSE)( bool bLeftButtonDown, bool bRightButtonDown, bool bMiddleButtonDown, bool bSideButton1Down, bool bSideButton2Down, int nMouseWheelDelta, int xPos, int yPos, void* pUserContext );
|
---|
| 71 | typedef LRESULT (CALLBACK *LPDXUTCALLBACKMSGPROC)( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, bool* pbNoFurtherProcessing, void* pUserContext );
|
---|
| 72 | typedef void (CALLBACK *LPDXUTCALLBACKTIMER)( UINT idEvent, void* pUserContext );
|
---|
| 73 |
|
---|
| 74 | // Device callbacks
|
---|
| 75 | void DXUTSetCallbackDeviceCreated( LPDXUTCALLBACKDEVICECREATED pCallbackDeviceCreated, void* pUserContext = NULL );
|
---|
| 76 | void DXUTSetCallbackDeviceReset( LPDXUTCALLBACKDEVICERESET pCallbackDeviceReset, void* pUserContext = NULL );
|
---|
| 77 | void DXUTSetCallbackDeviceLost( LPDXUTCALLBACKDEVICELOST pCallbackDeviceLost, void* pUserContext = NULL );
|
---|
| 78 | void DXUTSetCallbackDeviceDestroyed( LPDXUTCALLBACKDEVICEDESTROYED pCallbackDeviceDestroyed, void* pUserContext = NULL );
|
---|
| 79 | void DXUTSetCallbackDeviceChanging( LPDXUTCALLBACKMODIFYDEVICESETTINGS pCallbackModifyDeviceSettings, void* pUserContext = NULL );
|
---|
| 80 |
|
---|
| 81 | // Frame callbacks
|
---|
| 82 | void DXUTSetCallbackFrameMove( LPDXUTCALLBACKFRAMEMOVE pCallbackFrameMove, void* pUserContext = NULL );
|
---|
| 83 | void DXUTSetCallbackFrameRender( LPDXUTCALLBACKFRAMERENDER pCallbackFrameRender, void* pUserContext = NULL );
|
---|
| 84 |
|
---|
| 85 | // Message callbacks
|
---|
| 86 | void DXUTSetCallbackKeyboard( LPDXUTCALLBACKKEYBOARD pCallbackKeyboard, void* pUserContext = NULL );
|
---|
| 87 | void DXUTSetCallbackMouse( LPDXUTCALLBACKMOUSE pCallbackMouse, bool bIncludeMouseMove = false, void* pUserContext = NULL );
|
---|
| 88 | void DXUTSetCallbackMsgProc( LPDXUTCALLBACKMSGPROC pCallbackMsgProc, void* pUserContext = NULL );
|
---|
| 89 |
|
---|
| 90 |
|
---|
| 91 | //--------------------------------------------------------------------------------------
|
---|
| 92 | // Initialization
|
---|
| 93 | //--------------------------------------------------------------------------------------
|
---|
| 94 | HRESULT DXUTInit( bool bParseCommandLine = true, bool bHandleDefaultHotkeys = true, bool bShowMsgBoxOnError = true, bool bHandleAltEnter = true );
|
---|
| 95 |
|
---|
| 96 | // Choose either DXUTCreateWindow or DXUTSetWindow. If using DXUTSetWindow, consider using DXUTStaticWndProc
|
---|
| 97 | HRESULT DXUTCreateWindow( const WCHAR* strWindowTitle = L"Direct3D Window",
|
---|
| 98 | HINSTANCE hInstance = NULL, HICON hIcon = NULL, HMENU hMenu = NULL,
|
---|
| 99 | int x = CW_USEDEFAULT, int y = CW_USEDEFAULT );
|
---|
| 100 | HRESULT DXUTSetWindow( HWND hWndFocus, HWND hWndDeviceFullScreen, HWND hWndDeviceWindowed, bool bHandleMessages = true );
|
---|
| 101 | LRESULT CALLBACK DXUTStaticWndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
|
---|
| 102 |
|
---|
| 103 | // Choose either DXUTCreateDevice or DXUTSetDevice or DXUTCreateDeviceFromSettings
|
---|
| 104 | HRESULT DXUTCreateDevice( UINT AdapterOrdinal = D3DADAPTER_DEFAULT, bool bWindowed = true,
|
---|
| 105 | int nSuggestedWidth = 0, int nSuggestedHeight = 0,
|
---|
| 106 | LPDXUTCALLBACKISDEVICEACCEPTABLE pCallbackIsDeviceAcceptable = NULL,
|
---|
| 107 | LPDXUTCALLBACKMODIFYDEVICESETTINGS pCallbackModifyDeviceSettings = NULL,
|
---|
| 108 | void* pUserContext = NULL );
|
---|
| 109 | HRESULT DXUTCreateDeviceFromSettings( DXUTDeviceSettings* pDeviceSettings, bool bPreserveInput = false, bool bClipWindowToSingleAdapter = true );
|
---|
| 110 | HRESULT DXUTSetDevice( IDirect3DDevice9* pd3dDevice );
|
---|
| 111 |
|
---|
| 112 | // Choose either DXUTMainLoop or implement your own main loop
|
---|
| 113 | HRESULT DXUTMainLoop( HACCEL hAccel = NULL );
|
---|
| 114 |
|
---|
| 115 | // If not using DXUTMainLoop consider using DXUTRender3DEnvironment
|
---|
| 116 | void DXUTRender3DEnvironment();
|
---|
| 117 |
|
---|
| 118 |
|
---|
| 119 | //--------------------------------------------------------------------------------------
|
---|
| 120 | // Finding valid device settings
|
---|
| 121 | //--------------------------------------------------------------------------------------
|
---|
| 122 | enum DXUT_MATCH_TYPE
|
---|
| 123 | {
|
---|
| 124 | DXUTMT_IGNORE_INPUT = 0, // Use the closest valid value to a default
|
---|
| 125 | DXUTMT_PRESERVE_INPUT, // Use input without change, but may cause no valid device to be found
|
---|
| 126 | DXUTMT_CLOSEST_TO_INPUT // Use the closest valid value to the input
|
---|
| 127 | };
|
---|
| 128 |
|
---|
| 129 | struct DXUTMatchOptions
|
---|
| 130 | {
|
---|
| 131 | DXUT_MATCH_TYPE eAdapterOrdinal;
|
---|
| 132 | DXUT_MATCH_TYPE eDeviceType;
|
---|
| 133 | DXUT_MATCH_TYPE eWindowed;
|
---|
| 134 | DXUT_MATCH_TYPE eAdapterFormat;
|
---|
| 135 | DXUT_MATCH_TYPE eVertexProcessing;
|
---|
| 136 | DXUT_MATCH_TYPE eResolution;
|
---|
| 137 | DXUT_MATCH_TYPE eBackBufferFormat;
|
---|
| 138 | DXUT_MATCH_TYPE eBackBufferCount;
|
---|
| 139 | DXUT_MATCH_TYPE eMultiSample;
|
---|
| 140 | DXUT_MATCH_TYPE eSwapEffect;
|
---|
| 141 | DXUT_MATCH_TYPE eDepthFormat;
|
---|
| 142 | DXUT_MATCH_TYPE eStencilFormat;
|
---|
| 143 | DXUT_MATCH_TYPE ePresentFlags;
|
---|
| 144 | DXUT_MATCH_TYPE eRefreshRate;
|
---|
| 145 | DXUT_MATCH_TYPE ePresentInterval;
|
---|
| 146 | };
|
---|
| 147 |
|
---|
| 148 | HRESULT DXUTFindValidDeviceSettings( DXUTDeviceSettings* pOut, DXUTDeviceSettings* pIn = NULL, DXUTMatchOptions* pMatchOptions = NULL );
|
---|
| 149 |
|
---|
| 150 |
|
---|
| 151 | //--------------------------------------------------------------------------------------
|
---|
| 152 | // Common Tasks
|
---|
| 153 | //--------------------------------------------------------------------------------------
|
---|
| 154 | void DXUTSetCursorSettings( bool bShowCursorWhenFullScreen, bool bClipCursorWhenFullScreen );
|
---|
| 155 | void DXUTSetMultimonSettings( bool bAutoChangeAdapter );
|
---|
| 156 | void DXUTSetShortcutKeySettings( bool bAllowWhenFullscreen = false, bool bAllowWhenWindowed = true ); // Controls the Windows key, and accessibility shortcut keys
|
---|
| 157 | void DXUTSetWindowSettings( bool bCallDefWindowProc = true );
|
---|
| 158 | void DXUTSetConstantFrameTime( bool bConstantFrameTime, float fTimePerFrame = 0.0333f );
|
---|
| 159 | HRESULT DXUTSetTimer( LPDXUTCALLBACKTIMER pCallbackTimer, float fTimeoutInSecs = 1.0f, UINT* pnIDEvent = NULL, void* pCallbackUserContext = NULL );
|
---|
| 160 | HRESULT DXUTKillTimer( UINT nIDEvent );
|
---|
| 161 | HRESULT DXUTToggleFullScreen();
|
---|
| 162 | HRESULT DXUTToggleREF();
|
---|
| 163 | void DXUTPause( bool bPauseTime, bool bPauseRendering );
|
---|
| 164 | void DXUTResetFrameworkState();
|
---|
| 165 | void DXUTShutdown( int nExitCode = 0 );
|
---|
| 166 |
|
---|
| 167 |
|
---|
| 168 | //--------------------------------------------------------------------------------------
|
---|
| 169 | // State Retrieval
|
---|
| 170 | //--------------------------------------------------------------------------------------
|
---|
| 171 | IDirect3D9* DXUTGetD3DObject(); // Does not addref unlike typical Get* APIs
|
---|
| 172 | IDirect3DDevice9* DXUTGetD3DDevice(); // Does not addref unlike typical Get* APIs
|
---|
| 173 | DXUTDeviceSettings DXUTGetDeviceSettings();
|
---|
| 174 | D3DPRESENT_PARAMETERS DXUTGetPresentParameters();
|
---|
| 175 | const D3DSURFACE_DESC* DXUTGetBackBufferSurfaceDesc();
|
---|
| 176 | const D3DCAPS9* DXUTGetDeviceCaps();
|
---|
| 177 | HINSTANCE DXUTGetHINSTANCE();
|
---|
| 178 | HWND DXUTGetHWND();
|
---|
| 179 | HWND DXUTGetHWNDFocus();
|
---|
| 180 | HWND DXUTGetHWNDDeviceFullScreen();
|
---|
| 181 | HWND DXUTGetHWNDDeviceWindowed();
|
---|
| 182 | RECT DXUTGetWindowClientRect();
|
---|
| 183 | RECT DXUTGetWindowClientRectAtModeChange(); // Useful for returning to windowed mode with the same resolution as before toggle to full screen mode
|
---|
| 184 | RECT DXUTGetFullsceenClientRectAtModeChange(); // Useful for returning to full screen mode with the same resolution as before toggle to windowed mode
|
---|
| 185 | double DXUTGetTime();
|
---|
| 186 | float DXUTGetElapsedTime();
|
---|
| 187 | bool DXUTIsWindowed();
|
---|
| 188 | float DXUTGetFPS();
|
---|
| 189 | LPCWSTR DXUTGetWindowTitle();
|
---|
| 190 | LPCWSTR DXUTGetFrameStats( bool bIncludeFPS = false );
|
---|
| 191 | LPCWSTR DXUTGetDeviceStats();
|
---|
| 192 | bool DXUTIsRenderingPaused();
|
---|
| 193 | bool DXUTIsTimePaused();
|
---|
| 194 | bool DXUTIsActive();
|
---|
| 195 | int DXUTGetExitCode();
|
---|
| 196 | bool DXUTGetShowMsgBoxOnError();
|
---|
| 197 | bool DXUTGetHandleDefaultHotkeys();
|
---|
| 198 | bool DXUTIsKeyDown( BYTE vKey ); // Pass a virtual-key code, ex. VK_F1, 'A', VK_RETURN, VK_LSHIFT, etc
|
---|
| 199 | bool DXUTIsMouseButtonDown( BYTE vButton ); // Pass a virtual-key code: VK_LBUTTON, VK_RBUTTON, VK_MBUTTON, VK_XBUTTON1, VK_XBUTTON2
|
---|
| 200 | bool DXUTGetAutomation(); // Returns true if -automation parameter is used to launch the app
|
---|
| 201 |
|
---|
| 202 | #endif
|
---|
| 203 |
|
---|
| 204 |
|
---|
| 205 |
|
---|
| 206 |
|
---|