d3dapp.h
上传用户:garry_shen
上传日期:2015-04-15
资源大小:45647k
文件大小:18k
源码类别:

游戏引擎

开发平台:

Visual C++

  1. #ifndef __D3DAPP_H__
  2. #define __D3DAPP_H__
  3. #define D3DAPP_WINDOWMINIMUM 50     /* smallest buffer size allowed */
  4. #define D3DAPP_DEFAULTWINDOWDIM 320 /* replaces window size if invalid */
  5. #define D3DAPP_MINBUFFERSIZE 15360  /* minimum "maximum buffer size" for a
  6.                                        D3D driver to be accepted */
  7. #define D3DAPP_MINVERTEXCOUNT 320   /* minimum "maximum vertex count" for a
  8.                                        D3D driver to be accepted */
  9. #define D3DAPP_MAXD3DDRIVERS 5      /* maximum Direct3D drivers ever expected
  10.                                        to find */
  11. #define D3DAPP_MAXDDDRIVERS 3       /* maximum DirectDraw drivers ever expected
  12.                                        to find */
  13. #define D3DAPP_MAXTEXTUREFORMATS 50 /* maximum texture formats */
  14. #define D3DAPP_MAXMODES 50          /* maximum display modes ever expected to
  15.                                        be reported by DirectDraw */
  16. #define D3DAPP_MAXTEXTURES 15       /* maximum number of textures that wil be
  17.                                        loaded and managed */
  18. #define D3DAPP_MAXCLEARRECTS 30     /* maximum num. rectangles (ie extents)
  19.                                        for clearing */
  20. #define D3DAPP_BOGUS -100           /* unused parameters accept this */
  21. #define D3DAPP_YOUDECIDE -25        /* Use this for certain parameters to
  22.                                        have D3DApp decide an appropriate
  23.                                        value for you */
  24. #define D3DAPP_USEWINDOW -24        /* Used in place of fullscreen mode */
  25. /*
  26.  * DATA STRUCTURES
  27.  */
  28. /*
  29.  * D3DAppDDDriver structure
  30.  * Describes a DD driver
  31.  */
  32. typedef struct tagD3DAppDDDriver {
  33.     char    Name[30];   /* short name of the driver */
  34.     DDCAPS  HWCaps;     /* Hardware capabilities */
  35.     GUID    Guid;       /* it's GUID */
  36.     BOOL    bIsPrimary; /* is this the primary device */
  37. } D3DAppDDDriver;
  38. /*
  39.  * D3DAppD3DDriver structure
  40.  * Describes a D3D driver
  41.  */
  42. typedef struct tagD3DAppD3DDriver {
  43.     char Name[30];      /* short name of the driver */
  44.     char About[50];     /* short string about the driver */
  45.     D3DDEVICEDESC Desc; /* D3DDEVICEDESC for complete information */
  46.     GUID Guid;          /* it's GUID */
  47.     BOOL bIsHardware;   /* does this driver represent a hardware device? */
  48.     BOOL bDoesTextures; /* does this driver do texture mapping? */
  49.     BOOL bDoesZBuffer;  /* can this driver use a z-buffer? */
  50.     BOOL bCanDoWindow;  /* can it render to Window's display depth? */
  51. } D3DAppD3DDriver;
  52. /*
  53.  * D3DAppTextureFormat stucture
  54.  * Describes a texture format
  55.  */
  56. typedef struct tagD3DAppTextureFormat {
  57.     DDSURFACEDESC ddsd; /* DDSURFACEDESC for complete information */
  58.     BOOL bPalettized;   /* is this format palettized */
  59.     int RedBPP;         /* number of red, */
  60.     int BlueBPP;        /* blue, */
  61.     int GreenBPP;       /* and green bits per pixel */
  62.     int IndexBPP;       /* number of bits in palette index */
  63. } D3DAppTextureFormat;
  64. /*
  65.  * D3DAppMode structure
  66.  * Describes a display mode
  67.  */
  68. typedef struct tagD3DAppMode {
  69.     int     w;                /* width */
  70.     int     h;                /* height */
  71.     int     bpp;              /* bits per pixel */
  72.     BOOL    bThisDriverCanDo; /* can current D3D driver render in this mode?*/
  73. } D3DAppMode;
  74. /*
  75.  * D3DAppInfo structure
  76.  * Contains all the information D3DApp makes available to the application. A
  77.  * pointer to the internal, read only copy is returned by the initializing
  78.  * function.
  79.  */
  80. typedef struct tagD3DAppInfo {
  81.     HWND                    hwnd;          /*handle of window being managed*/
  82.     /*
  83.      * Direct3D objects and information
  84.      */
  85.     LPDIRECT3D2             lpD3D;         /* D3D object */
  86.     LPDIRECT3DDEVICE2       lpD3DDevice;   /* D3D device */
  87.     LPDIRECT3DVIEWPORT   lpD3DViewport; /* D3D viewport, created by
  88.                                               application */
  89.     int                     NumDrivers;    /* number of D3D drivers avail. */
  90.     int                     CurrDriver;    /* number of curr. D3D driver */
  91.     D3DAppD3DDriver         Driver[D3DAPP_MAXD3DDRIVERS]; /* avail. drivers*/
  92.     D3DAppD3DDriver         ThisDriver;    /* description of this driver,
  93.                                            identical to Driver[CurrDriver] */
  94.     int                     NumTextureFormats; /* num texture formats avail*/
  95.     int                     CurrTextureFormat; /* current texture format
  96.                   will only change if driver changes or when app changes it*/
  97.     D3DAppTextureFormat     TextureFormat[D3DAPP_MAXTEXTUREFORMATS];
  98.                                       /* description of all avail. formats */
  99.     D3DAppTextureFormat     ThisTextureFormat; /* description of this format,
  100.                              identical to TextureFormat[CurrTextureFormat] */
  101.     int                     NumTextures;    // number of textures in D3DApp's
  102.                                             // texture list 
  103.     char                    ImageFile[D3DAPP_MAXTEXTURES][50]; // files 
  104.     D3DTEXTUREHANDLE        TextureHandle[D3DAPP_MAXTEXTURES]; // handles 
  105.     LPDIRECTDRAWSURFACE     lpTextureSurf[D3DAPP_MAXTEXTURES]; // surfaces 
  106.     LPDIRECT3DTEXTURE2      lpTexture[D3DAPP_MAXTEXTURES]; // texture objs 
  107.     int                     NumUsableTextures; /* the number of currently usable
  108.                                                   textures (e.g. for a hardware
  109.                                                   device there may not be enough
  110.                                                   video memory*/
  111.     //
  112.     // DirectDraw objects and information
  113.     //
  114. #ifdef _DIRECTX7
  115.     LPDIRECTDRAW7 lpDD; // DirectDraw object 
  116. #else
  117.     LPDIRECTDRAW lpDD; // DirectDraw object
  118. #endif
  119. BOOL bIsPrimary; // Is this the primary DD device?
  120. //If FALSE, we're using a hardware DD device that cannot
  121. //display a window and so only fullscreen modes are available 
  122.     LPDIRECTDRAWSURFACE     lpFrontBuffer; // front buffer surface
  123.     LPDIRECTDRAWSURFACE     lpBackBuffer;  // back buffer surface 
  124.     LPDIRECTDRAWSURFACE     lpZBuffer;     // z-buffer surface 
  125.     
  126. BOOL                    bBackBufferInVideo; /* back buf in video mem? */
  127.     BOOL                    bZBufferInVideo;    /* is Z-buf in video mem? */
  128.     int                     NumModes; /* number of available display modes */
  129.     int                     CurrMode; /* number of current display mode (only
  130.                                          when fullscreen) */
  131.     D3DAppMode              Mode[D3DAPP_MAXMODES]; /* desc avail modes */
  132.     D3DAppMode              ThisMode; /* description of this mode, identical
  133.                                          to Mode[CurrMode] */
  134.     BOOL                    bFullscreen; /* in fullscreen exclusive mode? */
  135.     D3DAppMode              WindowsDisplay; /* current Windows disply mode */
  136.     SIZE                    szClient;         /* dimensions of client win */
  137.     POINT                   pClientOnPrimary; /* position of client win */
  138.     BOOL                    bPaused;           /* the app is paused */
  139.     BOOL                    bAppActive;        /* the app is active */
  140.     BOOL                    bTexturesDisabled; /* textures are disabled */
  141.     BOOL                    bOnlySystemMemory; /* all surfaces forced into
  142.                                                   system memory */
  143.     BOOL                    bOnlyEmulation;    /* no hardware DD or D3D
  144.                                                   devices allowed */
  145.     BOOL                    bMinimized;        /* app window is minimized */
  146.     BOOL                    bRenderingIsOK;    /* All objects etc. necessary
  147.                                                   for rendering are in ok */
  148. } D3DAppInfo;
  149. /*
  150.  * D3DAppRenderState structure
  151.  * The "render state" is the status of this collection of D3D options and
  152.  * variables.  This structure is used to get and set the render state.  The
  153.  * render state will only change during program initialization and when
  154.  * the application sets it.
  155.  */
  156. typedef struct tagD3DAppRenderState {
  157.     BOOL             bZBufferOn;    /* Z buffer is on */
  158.     BOOL             bPerspCorrect; /* perspective correction is on */
  159.     D3DSHADEMODE     ShadeMode;     /* flat, gouraud, phong? */
  160.     D3DTEXTUREFILTER TextureFilter; /* linear or bi-linear texture filter */
  161.     D3DTEXTUREBLEND  TextureBlend;  /* Use shade mode or copy mode? */
  162.     D3DFILLMODE      FillMode;      /* solid, lines or points? */
  163.     BOOL             bDithering;    /* dithering is on */
  164.     BOOL             bSpecular;     /* specular highlights are on */
  165.     BOOL             bAntialiasing; /* anti-aliasing is on */
  166.     BOOL             bFogEnabled;   /* fog is on */
  167.     D3DCOLOR         FogColor;      /* fog color */
  168.     D3DFOGMODE       FogMode;       /* linear, exp. etc. */
  169.     D3DVALUE         FogStart;      /* begining depth */
  170.     D3DVALUE         FogEnd;        /* ending depth */
  171. } D3DAppRenderState;
  172. /*
  173.  * FUNCTION PROTOTYPES
  174.  */
  175. /*
  176.  * D3DAppEnumerateDDDevices
  177.  *
  178.  * All the 3d capable DirectDraw devices including the primary display are
  179.  * found.  The driver information structures are filled in with appropriate
  180.  * information.  lpDriver must point to an array with at least D3DAPP_MAXDDDRIVERS
  181.  * elements.
  182.  */
  183. BOOL D3DAppEnumerateDDDevices(int* NumDevices, D3DAppDDDriver* lpDriver);
  184. /*
  185.  * D3DAppCreateFromHWND
  186.  *
  187.  * Call this before all other D3DApp functions (except AddTexture and DD enumeration).
  188.  * Initializes all DD and D3D objects necessary for rendering, enumerates the
  189.  * available display modes and drivers and loads textures specified by prior
  190.  * AddTexture() calls.  Caller passes the handle of the window to be manged
  191.  * and callback functions to execute for device creation and destruction.
  192.  *
  193.  * DeviceCreateCallback is executed AFTER the creation of D3D device and all
  194.  * objects D3DApp created using the device.  This allows an application to
  195.  * reconstruct the scene and create any additional objects.  The callback
  196.  * must create and return (in the variable provided) the DIRECT3DVIEWPORT
  197.  * from the given width and height.  The returned pointer is stored in the
  198.  * D3DAppInfo structure and used for clearing and setting the render state.
  199.  * A NULL pointer is fine if D3DApp is not used for either of these
  200.  * functions. The create callback will always be called before any calls to
  201.  * the destroy callback.  The boolean returned indicates success or failure.
  202.  *
  203.  * DeviceDestroyCallback is executed BEFORE the D3D device and objects
  204.  * created by D3DApp using the device are released.  This allows an
  205.  * application to save data regarding the scene or release any objects
  206.  * created from the device before it is destroyed.  The DIRECT3DVIEWPORT
  207.  * should be released in this callback.  The boolean returned indicates the
  208.  * success or failure.
  209.  *
  210.  * A pointer to the internal D3DAppInfo data structure is returned.  This
  211.  * should be READ ONLY!
  212.  *
  213.  * The Direct3D driver, display mode and texture format
  214.  * will all be chosen by D3DApp.  Hardware DD and D3D devices are prefered.
  215.  * Mono lighting D3D drivers are prefered.  Paletted texture formats are
  216.  * prefered.  If possible, the current window size will be used, otherwise
  217.  * a fullscreen mode will be selected.
  218.  *
  219.  * Call AddTexture() to add textures to be loaded upon initialization.
  220.  *
  221.  * Valid flags:
  222.  *    D3DAPP_ONLYSYSTEMMEMORY  Force all surfaces into system memory.  Also
  223.  *                             disables hardware DD and D3D drivers.
  224.  *    D3DAPP_ONLYD3DEMULATION  Disable D3D hardware
  225.  *    D3DAPP_ONLYDDEMULATION   Disable DD hardware
  226.  */
  227. #define D3DAPP_ONLYSYSTEMMEMORY 0x00000001
  228. #define D3DAPP_ONLYD3DEMULATION 0x00000002
  229. #define D3DAPP_ONLYDDEMULATION  0x00000004
  230. BOOL D3DAppCreateFromHWND(DWORD flags, HWND hwnd, LPGUID lpDDGuid,
  231.                           BOOL(*DeviceCreateCallback)(int, int,
  232.                                                       LPDIRECT3DVIEWPORT*,
  233.                                                       LPVOID),
  234.                           LPVOID lpCreateContext,
  235.                           BOOL(*DeviceDestroyCallback)(LPVOID),
  236.                           LPVOID lpDestroyContext,
  237.                           D3DAppInfo** D3DApp);
  238. /*
  239.  * D3DAppWindowProc
  240.  * To be truly effective, D3DApp should be allowed to trap incoming window
  241.  * messages such as WM_SIZE.  Call D3DAppWindowProc at the begining of the
  242.  * application's main window WindowProc with the message information.  If
  243.  * bStopProcessing is set to TRUE, stop processing the message and return
  244.  * lresult.
  245.  */
  246. BOOL D3DAppWindowProc(BOOL* bStopProcessing, LRESULT* lresult, HWND hwnd,
  247.                       UINT message, WPARAM wParam, LPARAM lParam);
  248. /*
  249.  * D3DAppFullscreen
  250.  * Places the app in a fullscreen mode using the current driver.
  251.  */
  252. BOOL D3DAppFullscreen(int mode);
  253. /*
  254.  * D3DAppWindow
  255.  * Places the application in windowed mode at the given client size.  If w
  256.  * and h are D3DAPP_YOUDECIDE, D3DApp will decide on a suitable client size.
  257.  * If called while in fullscreen, restores the display mode and returns the
  258.  * hooked window to the size it was before a call to D3DAppFullscreen or to
  259.  * the size specified.
  260.  */
  261. BOOL D3DAppWindow(int w, int h);
  262. /*
  263.  * D3DAppChangeDriver
  264.  * Changes the driver.  If the current display mode is incompatible with the
  265.  * driver, a new one will be selected and employed.  A new texture format is
  266.  * selected and textures are reloaded, hence their handles may change.  By
  267.  * default, paletted formats are prefered.
  268.  */
  269. BOOL D3DAppChangeDriver(int driver, DWORD flags);
  270. /*
  271.  * D3DAppAddTexture
  272.  * D3DApp has an internal list of textures which it maintains.  The image
  273.  * files will be reloaded when necessary and the texture handles, objects and
  274.  * surfaces will always be up to date and available in the D3DAppInfo
  275.  * structure.  D3DAppAddTextures adds the given PPM image file to this
  276.  * list.
  277.  *
  278.  * This is the only function which can be called before CreateD3DAppFromHWND.
  279.  * Use it to create a list of textures to load during this creation function.
  280.  *
  281.  * The handles and texture objects will change when the device or texture
  282.  * format changes.  To react to changes in the texture objects and surfaces,
  283.  * use the callback for D3D device creation/release and make necessary
  284.  * changes whenever calling D3DAppChangeTextureFormat.
  285.  *
  286.  * Image files are searched for in the current directory, D3DPATH env var,
  287.  * and the "SoftwareMicrosoftDirect3D4.0D3D Path" registry entry.
  288.  *
  289.  */
  290. BOOL D3DAppAddTexture(const char* imagefile);
  291. /*
  292.  * D3DAppChangeTextureFormat
  293.  * Changes all textures to the given format.  Texture handles and objects
  294.  * will change.
  295.  */
  296. BOOL D3DAppChangeTextureFormat(int format);
  297. /*
  298.  * D3DAppDisableTextures
  299.  * Disables the textures by turning handles to NULL.  If the driver changes,
  300.  * textures are not loaded until this state is toggled by another call with a
  301.  * TRUE flag.
  302.  */
  303. BOOL D3DAppDisableTextures(BOOL flag);
  304. /*
  305.  * D3DAppSwapTextures
  306.  * Swaps first texture with the second, second with third, etc. while keeping
  307.  * the handles array the same.
  308.  */
  309. BOOL D3DAppSwapTextures(void);
  310. /*
  311.  * D3DAppSetRenderState
  312.  * Uses a D3D execute buffer to set the render state.  If lpState is NULL,
  313.  * the current settings are reset.
  314.  */
  315. BOOL D3DAppSetRenderState(D3DAppRenderState* lpState);
  316. /*
  317.  * D3DAppGetRenderState
  318.  * Returns the current render state.
  319.  */
  320. BOOL D3DAppGetRenderState(D3DAppRenderState* lpState);
  321. /*
  322.  * D3DAppShowBackBuffer
  323.  * Blts or flips the back buffer to the primary surface.  In the windowed
  324.  * case, only the dirty portion of the front buffer is blt'ed over.  The
  325.  * dirty region of front and back buffers is maintained by calls to
  326.  * D3DAppRenderExtents(). D3DAPP_SHOWALL will force the entire front buffer
  327.  * to be updated.
  328.  */
  329. #define D3DAPP_SHOWALL 0x00000001
  330. BOOL D3DAppShowBackBuffer(DWORD flags);
  331. /*
  332.  * D3DAppRenderExtents
  333.  * Tells D3DApp the extents of all regions updated on the back buffer as a
  334.  * list of D3DRECTs (no more than D3DAPP_MAXCLEARRECTS).  Call this before
  335.  * clearing the back buffer.  If the D3DAPP_CLEARALL flag is set, the extents
  336.  * are ignored and the entire back buffer is assumed to have changed.
  337.  */
  338. #define D3DAPP_CLEARALL 0x00000001
  339. BOOL D3DAppRenderExtents(DWORD dwCount, LPD3DRECT extent, DWORD flags);
  340. //
  341. // D3DAppClearBackBuffer
  342. // Clears the back buffer and Z-buffer (if enabled).  D3DAPP_CLEARALL can be
  343. // used to clear the entire back buffer.
  344. //
  345. #define D3DAPP_CLEARALL 0x00000001
  346. BOOL D3DAppClearBackBuffer(DWORD flags);
  347. /*
  348.  * D3DAppCheckForLostSurfaces
  349.  * Checks all surfaces D3DApp has allocated and restores them if necessary.
  350.  * An error is returned on any type of failure, but it may be best to ignore
  351.  * it since restoring surface can fail for non-fatal reasons and the app may
  352.  * just want to spin.
  353.  */
  354. BOOL D3DAppCheckForLostSurfaces(void);
  355. //
  356. // D3DAppPause
  357. // Use D3DAppPause(TRUE) to pause the app and D3DAppPause(FALSE) to unpause.
  358. // When fullscreen, the menu bar is redrawn.  bPaused is updated to reflect
  359. // the current status.
  360. //
  361. BOOL D3DAppPause(BOOL flag);
  362. /*
  363.  * D3DAppErrorToString
  364.  * Converts a DirectDraw, Direct3D or Direct3D RM error code to a string.
  365.  */
  366. char* D3DAppErrorToString(HRESULT error);
  367. /*
  368.  * D3DAppCreateSurface
  369.  * Creates a surface described by ddsd.  Will force the surface into
  370.  * systemmemory if D3DApp was initialized with D3DAPP_ONLYSYSTEMMEMORY.
  371.  */
  372. BOOL D3DAppCreateSurface(DDSURFACEDESC *ddsd, LPDIRECTDRAWSURFACE *lplpSurf);
  373. /*
  374.  * D3DAppLastError
  375.  * D3DAppLastErrorString
  376.  * Returns the last D3DApp error as a string and HRESULT.
  377.  */
  378. HRESULT D3DAppLastError(void);
  379. char* D3DAppLastErrorString(void);
  380. /*
  381.  * D3DAppDestroy
  382.  * Destroys all objects including Direct Draw.  Call before program
  383.  * termination.
  384.  */
  385. BOOL D3DAppDestroy(void);
  386. #endif // __D3DAPP_H__