void DXUTHelper::Render() { // Set general DXUT callbacks DXUTSetCallbackFrameMove(OnFrameMove); DXUTSetCallbackKeyboard(OnKeyboard); DXUTSetCallbackMouse(OnMouse); DXUTSetCallbackMsgProc(MsgProc); DXUTSetCallbackDeviceChanging(ModifyDeviceSettings); DXUTSetCallbackDeviceRemoved(OnDeviceRemoved); DXUTSetCallbackD3D11DeviceAcceptable(IsD3D11DeviceAcceptable); DXUTSetCallbackD3D11DeviceCreated(OnD3D11CreateDevice); DXUTSetCallbackD3D11SwapChainResized(OnD3D11ResizedSwapChain); DXUTSetCallbackD3D11FrameRender(OnD3D11FrameRender); DXUTSetCallbackD3D11SwapChainReleasing(OnD3D11ReleasingSwapChain); DXUTSetCallbackD3D11DeviceDestroyed(OnD3D11DestroyDevice); DXUTInit(true, true, nullptr); // Parse the command line, show msgboxes on error, no extra command line params DXUTSetCursorSettings(true, true); // Show the cursor and clip it when in full screen DXUTCreateWindow(L"Tutorial08"); DXUTCreateDevice(D3D_FEATURE_LEVEL_11_0, true, m_ScreenWidth, m_ScreenHeight); DXUTMainLoop(); }
int WINAPI wWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow ) { // Enable run-time memory check for debug builds. #if defined(DEBUG) | defined(_DEBUG) _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); #endif Initialize(); // Set DXUT callbacks DXUTSetCallbackDeviceChanging( ModifyDeviceSettings ); DXUTSetCallbackMsgProc( MsgProc ); DXUTSetCallbackKeyboard( OnKeyboard ); DXUTSetCallbackMouse( OnMouse, true ); DXUTSetCallbackD3D11DeviceAcceptable( IsD3D11DeviceAcceptable ); DXUTSetCallbackD3D11DeviceCreated( OnD3D11CreateDevice ); DXUTSetCallbackD3D11SwapChainResized( OnD3D11ResizedSwapChain ); DXUTSetCallbackD3D11FrameRender( OnD3D11FrameRender ); DXUTSetCallbackD3D11SwapChainReleasing( OnD3D11ReleasingSwapChain ); DXUTSetCallbackD3D11DeviceDestroyed( OnD3D11DestroyDevice ); InitApp(); if (gMultithreaded) { InitWin32Threads(); } DXUTInit( true, true, NULL ); DXUTSetCursorSettings( true, true ); DXUTCreateWindow( L"ISPC HDR Texture Compressor" ); // Try to create a device with DX11 feature set DXUTCreateDevice (D3D_FEATURE_LEVEL_11_0, true, 1280, 1024 ); BOOL DX11Available = false; // If we don't have an adequate driver, then we revert to DX10 feature set... DXUTDeviceSettings settings = DXUTGetDeviceSettings(); if(settings.d3d11.DriverType == D3D_DRIVER_TYPE_UNKNOWN || settings.d3d11.DriverType == D3D_DRIVER_TYPE_NULL) { DXUTCreateDevice(D3D_FEATURE_LEVEL_10_1, true, 1280, 1024); // !HACK! Force enumeration here in order to relocate hardware with new feature level DXUTGetD3D11Enumeration(true); DXUTCreateDevice(D3D_FEATURE_LEVEL_10_1, true, 1280, 1024); const TCHAR *noDx11msg = _T("Your hardware does not seem to support DX11. BC7 Compression is disabled."); MessageBox(NULL, noDx11msg, _T("Error"), MB_OK); } else { DX11Available = true; } FillProfiles(DX11Available); DXUTMainLoop(); // Destroy all of the threads... DestroyThreads(); return DXUTGetExitCode(); }
int EditorMain(int *instancePtrAddress, int *hPrevInstancePtrAddress, int *hWndPtrAddress, int nCmdShow, int screenWidth, int screenHeight) { // C# passes HINSTANCE and HWND values to C++ DLL as (int *) HINSTANCE hInstance = (HINSTANCE)instancePtrAddress; HINSTANCE hPrevInstance = (HINSTANCE) hPrevInstancePtrAddress; HWND hWnd = (HWND)hWndPtrAddress; WCHAR *lpCmdLine = L""; // Set up checks for memory leaks. // Game Coding Complete reference - Chapter 12, page XXX // int tmpDbgFlag = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG); // set this flag to keep memory blocks around tmpDbgFlag |= _CRTDBG_DELAY_FREE_MEM_DF; // this flag will cause intermittent pauses in your game! // perform memory check for each alloc/dealloc //tmpDbgFlag |= _CRTDBG_CHECK_ALWAYS_DF; // remember this is VERY VERY SLOW! // always perform a leak check just before app exits. tmpDbgFlag |= _CRTDBG_LEAK_CHECK_DF; _CrtSetDbgFlag(tmpDbgFlag); // [rez] Initialize the logging system as the very first thing you ever do! LOL after the memory system flags are set, that is! Logger::Init("logging.xml"); g_pApp->m_Options.Init("EditorOptions.xml", lpCmdLine); // Set the callback functions. These functions allow the sample framework to notify // the application about device changes, user input, and windows messages. The // callbacks are optional so you need only set callbacks for events you're interested // in. However, if you don't handle the device reset/lost callbacks then the sample // framework won't be able to reset your device since the application must first // release all device resources before resetting. Likewise, if you don't handle the // device created/destroyed callbacks then the sample framework won't be able to // recreate your device resources. DXUTSetCallbackMsgProc( GameCodeApp::MsgProc ); DXUTSetCallbackFrameMove( GameCodeApp::OnUpdateGame ); DXUTSetCallbackDeviceChanging( GameCodeApp::ModifyDeviceSettings ); if (g_pApp->m_Options.m_Renderer == "Direct3D 9") { DXUTSetCallbackD3D9DeviceAcceptable( GameCodeApp::IsD3D9DeviceAcceptable ); DXUTSetCallbackD3D9DeviceCreated( GameCodeApp::OnD3D9CreateDevice ); DXUTSetCallbackD3D9DeviceReset( GameCodeApp::OnD3D9ResetDevice ); DXUTSetCallbackD3D9DeviceLost( GameCodeApp::OnD3D9LostDevice ); DXUTSetCallbackD3D9DeviceDestroyed( GameCodeApp::OnD3D9DestroyDevice ); DXUTSetCallbackD3D9FrameRender( GameCodeApp::OnD3D9FrameRender ); } else if (g_pApp->m_Options.m_Renderer == "Direct3D 11") { DXUTSetCallbackD3D11DeviceAcceptable( GameCodeApp::IsD3D11DeviceAcceptable ); DXUTSetCallbackD3D11DeviceCreated( GameCodeApp::OnD3D11CreateDevice ); DXUTSetCallbackD3D11SwapChainResized( GameCodeApp::OnD3D11ResizedSwapChain ); DXUTSetCallbackD3D11SwapChainReleasing( GameCodeApp::OnD3D11ReleasingSwapChain ); DXUTSetCallbackD3D11DeviceDestroyed( GameCodeApp::OnD3D11DestroyDevice ); DXUTSetCallbackD3D11FrameRender( GameCodeApp::OnD3D11FrameRender ); } else { GCC_ASSERT(0 && "Unknown renderer specified in game options."); return false; } // Show the cursor and clip it when in full screen DXUTSetCursorSettings( true, true ); // Perform application initialization if (!g_pApp->InitInstance (hInstance, lpCmdLine, hWnd, screenWidth, screenHeight)) { return FALSE; } // This is where the game would normally call the main loop, but the // C# application will control this, so we don’t need to call // DXUTMainLoop() here. return true; }