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