d3dapp.h
上传用户:sycq158
上传日期:2008-10-22
资源大小:15361k
文件大小:7k
源码类别:

游戏

开发平台:

Visual C++

  1. //-----------------------------------------------------------------------------
  2. // File: D3DApp.h
  3. //
  4. // Desc: Application class for the Direct3D samples framework library.
  5. //
  6. // Copyright (c) Microsoft Corporation. All rights reserved.
  7. //-----------------------------------------------------------------------------
  8. #ifndef D3DAPP_H
  9. #define D3DAPP_H
  10. //-----------------------------------------------------------------------------
  11. // Error codes
  12. //-----------------------------------------------------------------------------
  13. enum APPMSGTYPE { MSG_NONE, MSGERR_APPMUSTEXIT, MSGWARN_SWITCHEDTOREF };
  14. #define D3DAPPERR_NODIRECT3D          0x82000001
  15. #define D3DAPPERR_NOWINDOW            0x82000002
  16. #define D3DAPPERR_NOCOMPATIBLEDEVICES 0x82000003
  17. #define D3DAPPERR_NOWINDOWABLEDEVICES 0x82000004
  18. #define D3DAPPERR_NOHARDWAREDEVICE    0x82000005
  19. #define D3DAPPERR_HALNOTCOMPATIBLE    0x82000006
  20. #define D3DAPPERR_NOWINDOWEDHAL       0x82000007
  21. #define D3DAPPERR_NODESKTOPHAL        0x82000008
  22. #define D3DAPPERR_NOHALTHISMODE       0x82000009
  23. #define D3DAPPERR_NONZEROREFCOUNT     0x8200000a
  24. #define D3DAPPERR_MEDIANOTFOUND       0x8200000b
  25. #define D3DAPPERR_RESETFAILED         0x8200000c
  26. #define D3DAPPERR_NULLREFDEVICE       0x8200000d
  27. //-----------------------------------------------------------------------------
  28. // Name: class CD3DApplication
  29. // Desc: A base class for creating sample D3D9 applications. To create a simple
  30. //       Direct3D application, simply derive this class into a class (such as
  31. //       class CMyD3DApplication) and override the following functions, as 
  32. //       needed:
  33. //          OneTimeSceneInit()    - To initialize app data (alloc mem, etc.)
  34. //          InitDeviceObjects()   - To initialize the 3D scene objects
  35. //          FrameMove()           - To animate the scene
  36. //          Render()              - To render the scene
  37. //          DeleteDeviceObjects() - To cleanup the 3D scene objects
  38. //          FinalCleanup()        - To cleanup app data (for exitting the app)
  39. //          MsgProc()             - To handle Windows messages
  40. //-----------------------------------------------------------------------------
  41. class CD3DApplication
  42. {
  43. protected:
  44.     CD3DEnumeration   m_d3dEnumeration;
  45.     CD3DSettings      m_d3dSettings;
  46.     // Internal variables for the state of the app
  47.     bool              m_bWindowed;
  48.     bool              m_bActive;
  49.     bool              m_bDeviceLost;
  50.     bool              m_bMinimized;
  51.     bool              m_bMaximized;
  52.     bool              m_bIgnoreSizeChange;
  53.     bool              m_bDeviceObjectsInited;
  54.     bool              m_bDeviceObjectsRestored;
  55.     // Internal variables used for timing
  56.     bool              m_bFrameMoving;
  57.     bool              m_bSingleStep;
  58.     // Internal error handling function
  59.     HRESULT DisplayErrorMsg( HRESULT hr, DWORD dwType );
  60.     // Internal functions to manage and render the 3D scene
  61.     static bool ConfirmDeviceHelper( D3DCAPS9* pCaps, VertexProcessingType vertexProcessingType, 
  62. D3DFORMAT adapterFormat, D3DFORMAT backBufferFormat );
  63.     bool    FindBestWindowedMode( bool bRequireHAL, bool bRequireREF );
  64.     bool    FindBestFullscreenMode( bool bRequireHAL, bool bRequireREF );
  65.     HRESULT LaunchReadme();
  66.     HRESULT ChooseInitialD3DSettings();
  67.     HRESULT Initialize3DEnvironment();
  68.     HRESULT HandlePossibleSizeChange();
  69.     HRESULT Reset3DEnvironment();
  70.     HRESULT ToggleFullscreen();
  71.     HRESULT ForceWindowed();
  72.     HRESULT UserSelectNewDevice();
  73.     void    Cleanup3DEnvironment();
  74.     HRESULT Render3DEnvironment();
  75.     virtual void BuildPresentParamsFromSettings();
  76.     virtual HRESULT AdjustWindowForChange();
  77.     virtual void UpdateStats();
  78. protected:
  79.     // Main objects used for creating and rendering the 3D scene
  80.     D3DPRESENT_PARAMETERS m_d3dpp;         // Parameters for CreateDevice/Reset
  81.     HWND              m_hWnd;              // The main app window
  82.     HWND              m_hWndFocus;         // The D3D focus window (usually same as m_hWnd)
  83.     HMENU             m_hMenu;             // App menu bar (stored here when fullscreen)
  84.     LPDIRECT3D9       m_pD3D;              // The main D3D object
  85.     LPDIRECT3DDEVICE9 m_pd3dDevice;        // The D3D rendering device
  86.     D3DCAPS9          m_d3dCaps;           // Caps for the device
  87.     D3DSURFACE_DESC   m_d3dsdBackBuffer;   // Surface desc of the backbuffer
  88.     DWORD             m_dwCreateFlags;     // Indicate sw or hw vertex processing
  89.     DWORD             m_dwWindowStyle;     // Saved window style for mode switches
  90.     RECT              m_rcWindowBounds;    // Saved window bounds for mode switches
  91.     RECT              m_rcWindowClient;    // Saved client area size for mode switches
  92.     // Variables for timing
  93.     FLOAT             m_fTime;             // Current time in seconds
  94.     FLOAT             m_fElapsedTime;      // Time elapsed since last frame
  95.     FLOAT             m_fFPS;              // Instanteous frame rate
  96.     TCHAR             m_strDeviceStats[90];// String to hold D3D device stats
  97.     TCHAR             m_strFrameStats[90]; // String to hold frame stats
  98.     // Overridable variables for the app
  99.     TCHAR*            m_strWindowTitle;    // Title for the app's window
  100.     DWORD             m_dwCreationWidth;   // Width used to create window
  101.     DWORD             m_dwCreationHeight;  // Height used to create window
  102.     bool              m_bShowCursorWhenFullscreen; // Whether to show cursor when fullscreen
  103.     bool              m_bClipCursorWhenFullscreen; // Whether to limit cursor pos when fullscreen
  104.     bool              m_bStartFullscreen;  // Whether to start up the app in fullscreen mode
  105.     bool              m_bCreateMultithreadDevice; // Whether to create a multithreaded device
  106.     bool              m_bAllowDialogBoxMode; // If enabled the framework will try to enable GDI dialogs while in fullscreen
  107.     // Overridable functions for the 3D scene created by the app
  108.     virtual HRESULT ConfirmDevice(D3DCAPS9*,DWORD,D3DFORMAT,D3DFORMAT) { return S_OK; }
  109.     virtual HRESULT OneTimeSceneInit()                         { return S_OK; }
  110.     virtual HRESULT InitDeviceObjects()                        { return S_OK; }
  111.     virtual HRESULT RestoreDeviceObjects()                     { return S_OK; }
  112.     virtual HRESULT FrameMove()                                { return S_OK; }
  113.     virtual HRESULT Render()                                   { return S_OK; }
  114.     virtual HRESULT InvalidateDeviceObjects()                  { return S_OK; }
  115.     virtual HRESULT DeleteDeviceObjects()                      { return S_OK; }
  116.     virtual HRESULT FinalCleanup()                             { return S_OK; }
  117. public:
  118.     // Functions to create, run, pause, and clean up the application
  119.     virtual HRESULT Create( HINSTANCE hInstance );
  120.     virtual INT     Run();
  121.     virtual LRESULT MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
  122.     virtual void    Pause( bool bPause );
  123.     virtual         ~CD3DApplication()                         { }
  124.     // Internal constructor
  125.     CD3DApplication();
  126. };
  127. #endif