D3DWIN.H
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:10k
源码类别:

Windows编程

开发平台:

Visual C++

  1. #ifndef D3DWIN_H
  2. #define D3DWIN_H
  3. /*
  4. **-----------------------------------------------------------------------------
  5. **  Name:       D3DWin.h
  6. **  Purpose:    Sample D3D framework
  7. **-----------------------------------------------------------------------------
  8. */
  9. /*
  10. **-----------------------------------------------------------------------------
  11. **  Includes
  12. **-----------------------------------------------------------------------------
  13. */
  14. #include "Common.h"
  15. #include "DrvMgr.h"
  16. /*
  17. **-----------------------------------------------------------------------------
  18. **  Defines
  19. **-----------------------------------------------------------------------------
  20. */
  21. // Windows messages
  22. #define D3DWIN_GET_VALID    (WM_USER+1000)
  23. #define D3DWIN_GET_POINTER  (WM_USER+1001)
  24. #define D3DWIN_GET_SURFACE  (WM_USER+1002)
  25. // Notification messages
  26. #define D3DWIN_INIT   (WM_USER+2000)
  27. #define D3DWIN_FINI   (WM_USER+2001)
  28. #define D3DWIN_CHANGED_DRIVER   (WM_USER+2002)
  29. #define D3DWIN_CHANGED_MODE   (WM_USER+2003)
  30. #define D3DWIN_CHANGED_DEVICE   (WM_USER+2004)
  31. // Minimum surface size
  32. #define D3DWIN_MIN_SIZE     64
  33. #define D3DWIN_DEF_SIZE    256
  34. /*
  35. **-----------------------------------------------------------------------------
  36. **  Typedefs
  37. **-----------------------------------------------------------------------------
  38. */
  39. class D3DScene; // Prevent having to include D3DScene.h
  40. typedef D3DScene * LPD3DScene;
  41. class D3DWindow;                    // Forward declaration
  42. typedef D3DWindow * LPD3DWindow;
  43. /*
  44. **-----------------------------------------------------------------------------
  45. **  Classes
  46. **-----------------------------------------------------------------------------
  47. */
  48. /*
  49. **-----------------------------------------------------------------------------
  50. **  Name:       D3DWindow
  51. **  Purpose:    Encapsulates D3D rendering info for a window
  52. **-----------------------------------------------------------------------------
  53. */
  54. class D3DWindow {
  55. protected:
  56. //
  57.     // Flags
  58. //
  59.     enum {
  60.         DWF_VISIBLE = 0x00000002,
  61.         DWF_ZBUFFER = 0x00000004,
  62. DWF_ACTIVE = 0x00000008,
  63.     } Attributes;
  64.     enum {
  65.         DWF_VALID_INTERFACE = 0x00000001,
  66. DWF_VALID_PRIMARY = 0x00000002,
  67. DWF_VALID_RENDER    = 0x00000004,
  68. DWF_VALID_VIEWPORT  = 0x00000008,
  69. DWF_VALID_SCENE = 0x00000010,
  70.         DWF_RECALC_RECTS    = 0x00000020,
  71.         DWF_PAINT           = 0x00000040,
  72. DWF_VALID     = 0x00000007, // DWF_VALID_INTERFACE | DWF_VALID_PRIMARY | DWF_VALID_RENDER
  73.     } Checks;
  74. public:
  75. //
  76.     // Creation Methods
  77. //
  78.     D3DWindow (void);
  79.     ~D3DWindow (void);
  80. HRESULT D3DWindow::Create (
  81. HWND   hWnd,
  82. LPGUID lpDDGuid = NULL,
  83. DWORD  dwW = 0L,
  84. DWORD  dwH = 0L,
  85. DWORD  dwBPP = 0L,
  86. DWORD  dwRefresh = 0L,
  87. LPGUID lpGuidD3D = NULL,
  88. BOOL   fUseZBuffer = TRUE,
  89. LPRECT lprSurf = NULL);
  90.     HRESULT Init (void);
  91. HRESULT Fini (void);
  92. //
  93.     // Window Methods
  94.     //
  95.     HRESULT DrawFrame (void);
  96.     HRESULT Move (long x, long y);
  97.     HRESULT Resize (DWORD w, DWORD h);
  98. HRESULT RealizePalette (void);
  99.     BOOL    isPaused (void)             { return (dwPaused != 0); }
  100.     HRESULT Pause (BOOL fOn);
  101. BOOL    isActive (void) { return ((fAttribs & DWF_ACTIVE) ? TRUE : FALSE); }
  102.     void turnActiveOn (void) { fAttribs |= DWF_ACTIVE; }
  103.     void turnActiveOff (void) { fAttribs &= ~DWF_ACTIVE; }
  104.     HRESULT Restore (void );
  105. //
  106. // Scene Methods
  107. //
  108. HRESULT    AttachScene (LPD3DScene lpNewScene);
  109. HRESULT    DetachScene (void);
  110.     
  111. //
  112.     // Driver Methods
  113.     //
  114. HRESULT ChangeDesktop (void);
  115.     HRESULT ChangeDriver (LPGUID lpGuidDD,
  116.   LPD3DDevInfo lpDevHint);
  117.     HRESULT ChangeDevice (LPGUID lpGuidD3D);
  118. //
  119. // Misc. Methods
  120. //
  121. BOOL isValid (void)         { return (((fChecks & DWF_VALID) == DWF_VALID) ? TRUE : FALSE); }
  122.     BOOL isCreateZBuffer (void) { return (fAttribs & DWF_ZBUFFER); }
  123.     void createZBufferOn (void) { fAttribs |= DWF_ZBUFFER; }
  124.     void createZBufferOff (void){ fAttribs &= ~DWF_ZBUFFER; }
  125.     
  126. //
  127. // Member methods
  128. //
  129. HWND   GetWindow (void) { return hWindow; }
  130. LPDDDrvInfo   GetDriverInfo (void) { return lpCurrDriver; }
  131. LPDDModeInfo  GetModeInfo (void) { return lpCurrMode; }
  132. LPD3DDevInfo  GetDeviceInfo (void) { return lpCurrDevice; }
  133. LPGUID   GetDDGuid (void) { return ((lpCurrDriver) ? lpCurrDriver->GetGuid () : NULL); }
  134. BOOL   GetModeInfo (DWORD & w, DWORD & h, 
  135.    DWORD & bpp, DWORD & refresh)
  136. {
  137. if (! lpCurrMode)
  138. return FALSE;
  139. lpCurrMode->GetMode (w, h , bpp, refresh);
  140. return TRUE;
  141. }
  142. LPGUID   GetD3DGuid (void) { return ((lpCurrDevice) ? &(lpCurrDevice->guid) : NULL); }
  143. LPDIRECTDRAW  GetDD (void) { return lpDD; }
  144. LPDIRECTDRAW2 GetDD2 (void) { return lpDD2; }
  145. LPDIRECT3D2   GetD3D (void) { return lpD3D; }
  146. LPDIRECTDRAWSURFACE GetPrimary (void) { return lpddsPrimary; }
  147. LPDIRECTDRAWSURFACE GetFrontBuffer (void) { return lpddsPrimary; }
  148. LPDIRECTDRAWSURFACE GetBackBuffer (void) { return lpddsRender; }
  149. LPDIRECTDRAWPALETTE GetPalette (void) { return lpddpPalette; }
  150. LPDIRECTDRAWSURFACE GetRender (void) { return lpddsRender; }
  151. LPDIRECTDRAWSURFACE GetZBuffer (void) { return lpddsZBuff; }
  152. LPDIRECT3DDEVICE2   GetD3DDevice (void) { return lpd3dDevice; }
  153. LPDIRECT3DVIEWPORT2 GetViewport (void) { return lpd3dViewport; }
  154. HRESULT GetSurfaceRect (RECT & rSurface);
  155.     HRESULT GetPrimaryRect (RECT & rPrimary);
  156. HRESULT GetSrcRect (RECT & rSrc);
  157.     HRESULT GetDestRect (RECT & rDest);
  158. LPD3DScene GetScene (void) { return lpd3dScene; }
  159. protected:
  160. //
  161. // Protected Methods
  162. //
  163.     HRESULT ValidateDefaults (void);
  164. HRESULT CreateInterfaces (LPGUID lpGuidDD);
  165.     HRESULT InitInterfaces (void);
  166.     HRESULT FiniInterfaces (void);
  167. HRESULT InitWindow (void);
  168. HRESULT FiniWindow (void);
  169. HRESULT InitPrimary (void);
  170.     HRESULT FiniPrimary (void);
  171.     HRESULT InitPalette (void);
  172.     HRESULT FiniPalette (void);
  173. HRESULT ValidateSize (void);
  174.     HRESULT CreateRender (LPGUID lpD3DGuid, LPRECT lprSurf);
  175. HRESULT InitRender (void);
  176.     HRESULT FiniRender (void);
  177. HRESULT InitViewport (void);
  178. HRESULT FiniViewport (void);
  179. HRESULT UpdateViewport (void);
  180.     // Recalculate src,dest drawing rectangles
  181.     BOOL checkCalcRects (void) { return (fChecks & DWF_RECALC_RECTS); }
  182.     void turnCalcRectsOn (void) { fChecks |= DWF_RECALC_RECTS; }
  183.     void turnCalcRectsOff(void) { fChecks &= ~DWF_RECALC_RECTS; }
  184.     // Nothing to draw
  185.     BOOL checkPaint (void) { return (fChecks & DWF_PAINT); }
  186.     void turnPaintOn (void) { fChecks |= DWF_PAINT; }
  187.     void turnPaintOff(void) { fChecks &= ~DWF_PAINT; }
  188. // Track initialization
  189.     void turnValidInterfaceOn (void) { fChecks |= DWF_VALID_INTERFACE; }
  190.     void turnValidInterfaceOff(void) { fChecks &= ~DWF_VALID_INTERFACE; }
  191.     void turnValidPrimaryOn (void) { fChecks |= DWF_VALID_PRIMARY; }
  192.     void turnValidPrimaryOff (void) { fChecks &= ~DWF_VALID_PRIMARY; }
  193.     void turnValidRenderOn (void) { fChecks |= DWF_VALID_RENDER; }
  194.     void turnValidRenderOff(void) { fChecks &= ~DWF_VALID_RENDER; }
  195.     void turnValidViewportOn (void) { fChecks |= DWF_VALID_VIEWPORT; }
  196.     void turnValidViewportOff(void) { fChecks &= ~DWF_VALID_VIEWPORT; }
  197. void turnValidSceneOn (void) { fChecks |= DWF_VALID_SCENE; }
  198. void turnValidSceneOff (void) { fChecks &= ~DWF_VALID_SCENE;}
  199.     // Flags
  200.     BOOL isValidDefaults (void) { return ((lpCurrDriver && lpCurrMode && lpCurrDevice) ? TRUE : FALSE); }
  201.     BOOL isValidInterface (void){ return ((fChecks & DWF_VALID_INTERFACE) ? TRUE : FALSE); }
  202.     BOOL isValidPrimary (void)  { return ((fChecks & DWF_VALID_PRIMARY) ? TRUE : FALSE); }
  203.     BOOL isValidRender (void)   { return ((fChecks & DWF_VALID_RENDER) ? TRUE : FALSE); }
  204. BOOL isValidViewport (void) { return ((fChecks & DWF_VALID_VIEWPORT) ? TRUE : FALSE); }
  205. BOOL isValidScene (void) { return ((fChecks & DWF_VALID_SCENE) ? TRUE : FALSE); }
  206.     HRESULT CalcRects (void);
  207. //
  208. // Data members
  209. //
  210.     DWORD           dwSize;             // Structure Size
  211.     DWORD           fAttribs;           // Attribute Flags
  212.     DWORD           fChecks;            // Programming flags
  213.     // Window Data
  214. HWND            hWindow;            // Window handle
  215.     DWORD           dwPaused;           // Paused Semaphore
  216.     // Driver Defaults
  217. LPDDDrvInfo lpCurrDriver; // Current Driver
  218. LPDDModeInfo lpCurrMode; // Current Mode
  219. LPD3DDevInfo lpCurrDevice; // Current Device
  220.     
  221. // Interfaces
  222.     LPDIRECTDRAW    lpDD;               // DirectDraw Interface
  223.     LPDIRECTDRAW2   lpDD2;              // DirectDraw2 Interface
  224.     LPDIRECT3D2     lpD3D;              // Direct3D2 Interface
  225.     
  226.     // Primary Surface
  227.     LPDIRECTDRAWSURFACE  lpddsPrimary;  // Primary Surface
  228.     LPDIRECTDRAWPALETTE  lpddpPalette;  // Primary Palette
  229.     PALETTEENTRY *       lppePalette;   // Saved System palette entries
  230.     // Render Surface
  231.     LPDIRECTDRAWSURFACE  lpddsRender;   // Rendering surface
  232.     LPDIRECTDRAWSURFACE  lpddsZBuff;    // Z-Buffer surface
  233.     LPDIRECT3DDEVICE2    lpd3dDevice; // D3D Device
  234. LPDIRECT3DVIEWPORT2  lpd3dViewport; // D3D Viewport
  235.     // Misc.
  236.     RECT                rPrim;          // Current primary pos,size
  237.     RECT                rSurf;          // Current surface pos,size
  238.     RECT                rDrawDest; // Destination rectangle
  239.     RECT                rDrawSrc; // Source Rectangle
  240. // D3D Scene
  241. LPD3DScene lpd3dScene; // D3D Scene
  242. // Friends
  243. friend class D3DScene;
  244. }; // End D3DWindow
  245.    
  246. /*
  247. **-----------------------------------------------------------------------------
  248. **  End of File
  249. **-----------------------------------------------------------------------------
  250. */
  251. #endif // D3DWIN_H