home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / graphics / directx / boids / d3dwin.h < prev    next >
Encoding:
C/C++ Source or Header  |  1997-07-15  |  10.0 KB  |  329 lines

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