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 / pplane / d3dwin.h < prev    next >
C/C++ Source or Header  |  1997-07-14  |  10KB  |  329 lines

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