DXUT Basics
with Examples in C++ |
Prof. David Bernstein |
Computer Science Department |
bernstdh@jmu.edu |
WinMain
)// Initialize DXUT and create the desired Win32 window // and Direct3D device for the application // DXUTInit(true, // Parse the command line true, // Handle default hotkeys true); // Show msgboxes // Setup the cursor DXUTSetCursorSettings(true, // Show the cursor true ); // Clip the cursor in full screen mode // Create the window DXUTCreateWindow(L"Window"); // Title // Create the device/renderer DXUTCreateDevice(D3DADAPTER_DEFAULT, // Adapter true, // Windowed 640, 480, // Width, Height isDeviceAcceptable, // Acceptable Callback modifyDeviceSettings); // Settings Callback
/** * The function that is called when a key is pressed/released */ void CALLBACK keyPressed(UINT nChar, bool keyDown, bool altDown, void* userContext ) { }
// Register the keyboard callback DXUTSetCallbackKeyboard(keyPressed);
/** * The function that is called when the mouse is * moved or clicked */ void CALLBACK mouseEvent(bool leftDown, bool rightDown, bool middleDown, bool side1Down, bool side2Down, int wheelDelta, int x, int y, void* userContext) { }
// Register the mouse callback bool includeMouseMoveEvents = true; DXUTSetCallbackMouse(mouseEvent, includeMouseMoveEvents);
#include "dxstdafx.h" #include "resource.h" /** * An application that uses DXUT to create and display a window * * This application also illustrates how to use mouse and * keyboard callbacks * * @author Prof. David Bernstein, James Madison University * @version 1.0 */ /** * Checks to see if a device is acceptable * * @return false if the device isn't acceptable */ bool CALLBACK isDeviceAcceptable(D3DCAPS9* caps, D3DFORMAT adapterFormat, D3DFORMAT backBufferFormat, bool windowed, void* userContext ) { // Skip backbuffer formats that don't support alpha blending IDirect3D9* d3d = DXUTGetD3DObject(); if( FAILED(d3d->CheckDeviceFormat(caps->AdapterOrdinal, caps->DeviceType, adapterFormat, D3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING, D3DRTYPE_TEXTURE, backBufferFormat))) return false; return true; } /** * The function that is called when a key is pressed/released */ void CALLBACK keyPressed(UINT nChar, bool keyDown, bool altDown, void* userContext ) { } /** * Modify device settings (as needed) * * Note: This function is called before a device is created */ bool CALLBACK modifyDeviceSettings(DXUTDeviceSettings* deviceSettings, const D3DCAPS9* caps, void* userContext ) { // Nothing to change in this case return true; } /** * The function that is called when the mouse is * moved or clicked */ void CALLBACK mouseEvent(bool leftDown, bool rightDown, bool middleDown, bool side1Down, bool side2Down, int wheelDelta, int x, int y, void* userContext) { } /** * The function that is called to handle MS-Windows messages */ LRESULT CALLBACK MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, bool* pbNoFurtherProcessing, void* pUserContext ) { return 0; } /** * The function that is called when a device is created * * Note: This is where D3DPOOL_MANAGED resources should be created */ HRESULT CALLBACK onCreateDevice(IDirect3DDevice9* d3dDevice, const D3DSURFACE_DESC* backBufferSurfaceDesc, void* userContext ) { return S_OK; } /** * The function that is called when the device is destroyed * * Note: This function should release resources created in the * OnCreateDevice callback */ void CALLBACK onDestroyDevice(void* userContext ) { } /** * The function that is called before the call to the * rendering callback */ void CALLBACK onFrameMove(IDirect3DDevice9* d3dDevice, double time, float elapsedTime, void* userContext ) { } /** * The function that is called when the device is lost * * Note: This function should release resources created in the * OnResetDevice callback */ void CALLBACK onLostDevice(void* userContext) { } /** * The function that is called when a device is created * * Note: This is where D3DPOOL_DEFAULT resources should be created */ HRESULT CALLBACK onResetDevice(IDirect3DDevice9* d3dDevice, const D3DSURFACE_DESC* backBufferSurfaceDesc, void* userContext ) { return S_OK; } /** * The function that is called when the scene needs to be rendered */ void CALLBACK paint(IDirect3DDevice9* d3dDevice, double time, float elapsedTime, void* userContext ) { HRESULT hr; // Clear the render target and the zbuffer V(d3dDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_ARGB(0, 0, 0, 0), 1.0f, 0) ); // Render the scene if( SUCCEEDED(d3dDevice->BeginScene())) { // // Insert Rendering Code Here // V(d3dDevice->EndScene()); } } /** * The entry-point of the application */ INT WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { // Register the device-reated callbacks DXUTSetCallbackDeviceCreated(onCreateDevice); DXUTSetCallbackDeviceReset(onResetDevice); DXUTSetCallbackDeviceLost(onLostDevice); DXUTSetCallbackDeviceDestroyed(onDestroyDevice); // Register message callbacks DXUTSetCallbackMsgProc(MsgProc); // Register the pre-rendering callback DXUTSetCallbackFrameMove(onFrameMove); // Register the render/display callback DXUTSetCallbackFrameRender(paint); // Register the keyboard callback DXUTSetCallbackKeyboard(keyPressed); // Register the mouse callback bool includeMouseMoveEvents = true; DXUTSetCallbackMouse(mouseEvent, includeMouseMoveEvents); // // Insert application initialization here // // Initialize DXUT and create the desired Win32 window // and Direct3D device for the application // DXUTInit(true, // Parse the command line true, // Handle default hotkeys true); // Show msgboxes // Setup the cursor DXUTSetCursorSettings(true, // Show the cursor true ); // Clip the cursor in full screen mode // Create the window DXUTCreateWindow(L"Window"); // Title // Create the device/renderer DXUTCreateDevice(D3DADAPTER_DEFAULT, // Adapter true, // Windowed 640, 480, // Width, Height isDeviceAcceptable, // Acceptable Callback modifyDeviceSettings); // Settings Callback // Start the render loop DXUTMainLoop(); // // Insert application clean-up here // return DXUTGetExitCode(); }