Subversion Repositories Games.Chess Giants

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. ///////////////////////////////////////////////////////////////////////////
  2. //
  3. //  Copyright (C) Microsoft Corporation.  All Rights Reserved.
  4. //
  5. //  File:       d3dx10core.h
  6. //  Content:    D3DX10 core types and functions
  7. //
  8. ///////////////////////////////////////////////////////////////////////////
  9.  
  10. #include "d3dx10.h"
  11.  
  12. #ifndef __D3DX10CORE_H__
  13. #define __D3DX10CORE_H__
  14.  
  15. // Current name of the DLL shipped in the same SDK as this header.
  16.  
  17.  
  18. #define D3DX10_DLL_W L"d3dx10_42.dll"
  19. #define D3DX10_DLL_A "d3dx10_42.dll"
  20.  
  21. #ifdef UNICODE
  22.     #define D3DX10_DLL D3DX10_DLL_W
  23. #else
  24.     #define D3DX10_DLL D3DX10_DLL_A
  25. #endif
  26.  
  27. #ifdef __cplusplus
  28. extern "C" {
  29. #endif //__cplusplus
  30.  
  31. ///////////////////////////////////////////////////////////////////////////
  32. // D3DX10_SDK_VERSION:
  33. // -----------------
  34. // This identifier is passed to D3DX10CheckVersion in order to ensure that an
  35. // application was built against the correct header files and lib files.
  36. // This number is incremented whenever a header (or other) change would
  37. // require applications to be rebuilt. If the version doesn't match,
  38. // D3DX10CreateVersion will return FALSE. (The number itself has no meaning.)
  39. ///////////////////////////////////////////////////////////////////////////
  40.  
  41.  
  42. #define D3DX10_SDK_VERSION 42
  43.  
  44.  
  45. ///////////////////////////////////////////////////////////////////////////
  46. // D3DX10CreateDevice
  47. // D3DX10CreateDeviceAndSwapChain
  48. // D3DX10GetFeatureLevel1
  49. ///////////////////////////////////////////////////////////////////////////
  50. HRESULT WINAPI D3DX10CreateDevice(IDXGIAdapter *pAdapter,
  51.                                   D3D10_DRIVER_TYPE DriverType,
  52.                                   HMODULE Software,
  53.                                   UINT Flags,
  54.                                   ID3D10Device **ppDevice);
  55.  
  56. HRESULT WINAPI D3DX10CreateDeviceAndSwapChain(IDXGIAdapter *pAdapter,
  57.                                               D3D10_DRIVER_TYPE DriverType,
  58.                                               HMODULE Software,
  59.                                               UINT Flags,
  60.                                               DXGI_SWAP_CHAIN_DESC *pSwapChainDesc,
  61.                                               IDXGISwapChain **ppSwapChain,    
  62.                                               ID3D10Device **ppDevice);
  63.  
  64. typedef interface ID3D10Device1 ID3D10Device1;
  65. HRESULT WINAPI D3DX10GetFeatureLevel1(ID3D10Device *pDevice, ID3D10Device1 **ppDevice1);
  66.  
  67.  
  68. #ifdef D3D_DIAG_DLL
  69. BOOL WINAPI D3DX10DebugMute(BOOL Mute);  
  70. #endif
  71. HRESULT WINAPI D3DX10CheckVersion(UINT D3DSdkVersion, UINT D3DX10SdkVersion);
  72.  
  73. #ifdef __cplusplus
  74. }
  75. #endif //__cplusplus
  76.  
  77.  
  78. //////////////////////////////////////////////////////////////////////////////
  79. // D3DX10_SPRITE flags:
  80. // -----------------
  81. // D3DX10_SPRITE_SAVE_STATE
  82. //   Specifies device state should be saved and restored in Begin/End.
  83. // D3DX10SPRITE_SORT_TEXTURE
  84. //   Sprites are sorted by texture prior to drawing.  This is recommended when
  85. //   drawing non-overlapping sprites of uniform depth.  For example, drawing
  86. //   screen-aligned text with ID3DX10Font.
  87. // D3DX10SPRITE_SORT_DEPTH_FRONT_TO_BACK
  88. //   Sprites are sorted by depth front-to-back prior to drawing.  This is
  89. //   recommended when drawing opaque sprites of varying depths.
  90. // D3DX10SPRITE_SORT_DEPTH_BACK_TO_FRONT
  91. //   Sprites are sorted by depth back-to-front prior to drawing.  This is
  92. //   recommended when drawing transparent sprites of varying depths.
  93. // D3DX10SPRITE_ADDREF_TEXTURES
  94. //   AddRef/Release all textures passed in to DrawSpritesBuffered
  95. //////////////////////////////////////////////////////////////////////////////
  96.  
  97. typedef enum _D3DX10_SPRITE_FLAG
  98. {
  99.     D3DX10_SPRITE_SORT_TEXTURE              = 0x01,
  100.     D3DX10_SPRITE_SORT_DEPTH_BACK_TO_FRONT  = 0x02,
  101.     D3DX10_SPRITE_SORT_DEPTH_FRONT_TO_BACK  = 0x04,
  102.     D3DX10_SPRITE_SAVE_STATE                = 0x08,
  103.     D3DX10_SPRITE_ADDREF_TEXTURES           = 0x10,
  104. } D3DX10_SPRITE_FLAG;
  105.  
  106. typedef struct _D3DX10_SPRITE
  107. {
  108.     D3DXMATRIX  matWorld;
  109.  
  110.     D3DXVECTOR2 TexCoord;
  111.     D3DXVECTOR2 TexSize;
  112.  
  113.     D3DXCOLOR   ColorModulate;
  114.  
  115.     ID3D10ShaderResourceView *pTexture;
  116.     UINT        TextureIndex;
  117. } D3DX10_SPRITE;
  118.  
  119.  
  120. //////////////////////////////////////////////////////////////////////////////
  121. // ID3DX10Sprite:
  122. // ------------
  123. // This object intends to provide an easy way to drawing sprites using D3D.
  124. //
  125. // Begin -
  126. //    Prepares device for drawing sprites.
  127. //
  128. // Draw -
  129. //    Draws a sprite
  130. //
  131. // Flush -
  132. //    Forces all batched sprites to submitted to the device.
  133. //
  134. // End -
  135. //    Restores device state to how it was when Begin was called.
  136. //
  137. //////////////////////////////////////////////////////////////////////////////
  138.  
  139. typedef interface ID3DX10Sprite ID3DX10Sprite;
  140. typedef interface ID3DX10Sprite *LPD3DX10SPRITE;
  141.  
  142.  
  143. // {BA0B762D-8D28-43ec-B9DC-2F84443B0614}
  144. DEFINE_GUID(IID_ID3DX10Sprite,
  145. 0xba0b762d, 0x8d28, 0x43ec, 0xb9, 0xdc, 0x2f, 0x84, 0x44, 0x3b, 0x6, 0x14);
  146.  
  147.  
  148. #undef INTERFACE
  149. #define INTERFACE ID3DX10Sprite
  150.  
  151. DECLARE_INTERFACE_(ID3DX10Sprite, IUnknown)
  152. {
  153.     // IUnknown
  154.     STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
  155.     STDMETHOD_(ULONG, AddRef)(THIS) PURE;
  156.     STDMETHOD_(ULONG, Release)(THIS) PURE;
  157.  
  158.     // ID3DX10Sprite
  159.     STDMETHOD(Begin)(THIS_ UINT flags) PURE;
  160.    
  161.     STDMETHOD(DrawSpritesBuffered)(THIS_ D3DX10_SPRITE *pSprites, UINT cSprites) PURE;
  162.     STDMETHOD(Flush)(THIS) PURE;
  163.  
  164.     STDMETHOD(DrawSpritesImmediate)(THIS_ D3DX10_SPRITE *pSprites, UINT cSprites, UINT cbSprite, UINT flags) PURE;
  165.     STDMETHOD(End)(THIS) PURE;
  166.  
  167.     STDMETHOD(GetViewTransform)(THIS_ D3DXMATRIX *pViewTransform) PURE;
  168.     STDMETHOD(SetViewTransform)(THIS_ D3DXMATRIX *pViewTransform) PURE;
  169.     STDMETHOD(GetProjectionTransform)(THIS_ D3DXMATRIX *pProjectionTransform) PURE;
  170.     STDMETHOD(SetProjectionTransform)(THIS_ D3DXMATRIX *pProjectionTransform) PURE;
  171.  
  172.     STDMETHOD(GetDevice)(THIS_ ID3D10Device** ppDevice) PURE;
  173. };
  174.  
  175.  
  176. #ifdef __cplusplus
  177. extern "C" {
  178. #endif //__cplusplus
  179.  
  180. HRESULT WINAPI
  181.     D3DX10CreateSprite(
  182.         ID3D10Device*         pDevice,
  183.         UINT                  cDeviceBufferSize,
  184.         LPD3DX10SPRITE*       ppSprite);
  185.  
  186. #ifdef __cplusplus
  187. }
  188. #endif //__cplusplus
  189.  
  190.  
  191. //////////////////////////////////////////////////////////////////////////////
  192. // ID3DX10ThreadPump:
  193. //////////////////////////////////////////////////////////////////////////////
  194.  
  195. #undef INTERFACE
  196. #define INTERFACE ID3DX10DataLoader
  197.  
  198. DECLARE_INTERFACE(ID3DX10DataLoader)
  199. {
  200.         STDMETHOD(Load)(THIS) PURE;
  201.         STDMETHOD(Decompress)(THIS_ void **ppData, SIZE_T *pcBytes) PURE;
  202.         STDMETHOD(Destroy)(THIS) PURE;
  203. };
  204.  
  205. #undef INTERFACE
  206. #define INTERFACE ID3DX10DataProcessor
  207.  
  208. DECLARE_INTERFACE(ID3DX10DataProcessor)
  209. {
  210.         STDMETHOD(Process)(THIS_ void *pData, SIZE_T cBytes) PURE;
  211.         STDMETHOD(CreateDeviceObject)(THIS_ void **ppDataObject) PURE;
  212.         STDMETHOD(Destroy)(THIS) PURE;
  213. };
  214.  
  215. // {C93FECFA-6967-478a-ABBC-402D90621FCB}
  216. DEFINE_GUID(IID_ID3DX10ThreadPump,
  217. 0xc93fecfa, 0x6967, 0x478a, 0xab, 0xbc, 0x40, 0x2d, 0x90, 0x62, 0x1f, 0xcb);
  218.  
  219. #undef INTERFACE
  220. #define INTERFACE ID3DX10ThreadPump
  221.  
  222. DECLARE_INTERFACE_(ID3DX10ThreadPump, IUnknown)
  223. {
  224.     // IUnknown
  225.     STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
  226.     STDMETHOD_(ULONG, AddRef)(THIS) PURE;
  227.     STDMETHOD_(ULONG, Release)(THIS) PURE;
  228.  
  229.     // ID3DX10ThreadPump
  230.     STDMETHOD(AddWorkItem)(THIS_ ID3DX10DataLoader *pDataLoader, ID3DX10DataProcessor *pDataProcessor, HRESULT *pHResult, void **ppDeviceObject) PURE;
  231.     STDMETHOD_(UINT, GetWorkItemCount)(THIS) PURE;
  232.      
  233.     STDMETHOD(WaitForAllItems)(THIS) PURE;
  234.     STDMETHOD(ProcessDeviceWorkItems)(THIS_ UINT iWorkItemCount);
  235.  
  236.     STDMETHOD(PurgeAllItems)(THIS) PURE;
  237.     STDMETHOD(GetQueueStatus)(THIS_ UINT *pIoQueue, UINT *pProcessQueue, UINT *pDeviceQueue) PURE;
  238.    
  239. };
  240.  
  241. HRESULT WINAPI D3DX10CreateThreadPump(UINT cIoThreads, UINT cProcThreads, ID3DX10ThreadPump **ppThreadPump);
  242.  
  243.  
  244. //////////////////////////////////////////////////////////////////////////////
  245. // ID3DX10Font:
  246. // ----------
  247. // Font objects contain the textures and resources needed to render a specific
  248. // font on a specific device.
  249. //
  250. // GetGlyphData -
  251. //    Returns glyph cache data, for a given glyph.
  252. //
  253. // PreloadCharacters/PreloadGlyphs/PreloadText -
  254. //    Preloads glyphs into the glyph cache textures.
  255. //
  256. // DrawText -
  257. //    Draws formatted text on a D3D device.  Some parameters are
  258. //    surprisingly similar to those of GDI's DrawText function.  See GDI
  259. //    documentation for a detailed description of these parameters.
  260. //    If pSprite is NULL, an internal sprite object will be used.
  261. //
  262. //////////////////////////////////////////////////////////////////////////////
  263.  
  264. typedef struct _D3DX10_FONT_DESCA
  265. {
  266.     INT Height;
  267.     UINT Width;
  268.     UINT Weight;
  269.     UINT MipLevels;
  270.     BOOL Italic;
  271.     BYTE CharSet;
  272.     BYTE OutputPrecision;
  273.     BYTE Quality;
  274.     BYTE PitchAndFamily;
  275.     CHAR FaceName[LF_FACESIZE];
  276.  
  277. } D3DX10_FONT_DESCA, *LPD3DX10_FONT_DESCA;
  278.  
  279. typedef struct _D3DX10_FONT_DESCW
  280. {
  281.     INT Height;
  282.     UINT Width;
  283.     UINT Weight;
  284.     UINT MipLevels;
  285.     BOOL Italic;
  286.     BYTE CharSet;
  287.     BYTE OutputPrecision;
  288.     BYTE Quality;
  289.     BYTE PitchAndFamily;
  290.     WCHAR FaceName[LF_FACESIZE];
  291.  
  292. } D3DX10_FONT_DESCW, *LPD3DX10_FONT_DESCW;
  293.  
  294. #ifdef UNICODE
  295. typedef D3DX10_FONT_DESCW D3DX10_FONT_DESC;
  296. typedef LPD3DX10_FONT_DESCW LPD3DX10_FONT_DESC;
  297. #else
  298. typedef D3DX10_FONT_DESCA D3DX10_FONT_DESC;
  299. typedef LPD3DX10_FONT_DESCA LPD3DX10_FONT_DESC;
  300. #endif
  301.  
  302.  
  303. typedef interface ID3DX10Font ID3DX10Font;
  304. typedef interface ID3DX10Font *LPD3DX10FONT;
  305.  
  306.  
  307. // {D79DBB70-5F21-4d36-BBC2-FF525C213CDC}
  308. DEFINE_GUID(IID_ID3DX10Font,
  309. 0xd79dbb70, 0x5f21, 0x4d36, 0xbb, 0xc2, 0xff, 0x52, 0x5c, 0x21, 0x3c, 0xdc);
  310.  
  311.  
  312. #undef INTERFACE
  313. #define INTERFACE ID3DX10Font
  314.  
  315. DECLARE_INTERFACE_(ID3DX10Font, IUnknown)
  316. {
  317.     // IUnknown
  318.     STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
  319.     STDMETHOD_(ULONG, AddRef)(THIS) PURE;
  320.     STDMETHOD_(ULONG, Release)(THIS) PURE;
  321.  
  322.     // ID3DX10Font
  323.     STDMETHOD(GetDevice)(THIS_ ID3D10Device** ppDevice) PURE;
  324.     STDMETHOD(GetDescA)(THIS_ D3DX10_FONT_DESCA *pDesc) PURE;
  325.     STDMETHOD(GetDescW)(THIS_ D3DX10_FONT_DESCW *pDesc) PURE;
  326.     STDMETHOD_(BOOL, GetTextMetricsA)(THIS_ TEXTMETRICA *pTextMetrics) PURE;
  327.     STDMETHOD_(BOOL, GetTextMetricsW)(THIS_ TEXTMETRICW *pTextMetrics) PURE;
  328.  
  329.     STDMETHOD_(HDC, GetDC)(THIS) PURE;
  330.     STDMETHOD(GetGlyphData)(THIS_ UINT Glyph, ID3D10ShaderResourceView** ppTexture, RECT *pBlackBox, POINT *pCellInc) PURE;
  331.  
  332.     STDMETHOD(PreloadCharacters)(THIS_ UINT First, UINT Last) PURE;
  333.     STDMETHOD(PreloadGlyphs)(THIS_ UINT First, UINT Last) PURE;
  334.     STDMETHOD(PreloadTextA)(THIS_ LPCSTR pString, INT Count) PURE;
  335.     STDMETHOD(PreloadTextW)(THIS_ LPCWSTR pString, INT Count) PURE;
  336.  
  337.     STDMETHOD_(INT, DrawTextA)(THIS_ LPD3DX10SPRITE pSprite, LPCSTR pString, INT Count, LPRECT pRect, UINT Format, D3DXCOLOR Color) PURE;
  338.     STDMETHOD_(INT, DrawTextW)(THIS_ LPD3DX10SPRITE pSprite, LPCWSTR pString, INT Count, LPRECT pRect, UINT Format, D3DXCOLOR Color) PURE;
  339.  
  340. #ifdef __cplusplus
  341. #ifdef UNICODE
  342.     HRESULT WINAPI_INLINE GetDesc(D3DX10_FONT_DESCW *pDesc) { return GetDescW(pDesc); }
  343.     HRESULT WINAPI_INLINE PreloadText(LPCWSTR pString, INT Count) { return PreloadTextW(pString, Count); }
  344. #else
  345.     HRESULT WINAPI_INLINE GetDesc(D3DX10_FONT_DESCA *pDesc) { return GetDescA(pDesc); }
  346.     HRESULT WINAPI_INLINE PreloadText(LPCSTR pString, INT Count) { return PreloadTextA(pString, Count); }
  347. #endif
  348. #endif //__cplusplus
  349. };
  350.  
  351. #ifndef GetTextMetrics
  352. #ifdef UNICODE
  353. #define GetTextMetrics GetTextMetricsW
  354. #else
  355. #define GetTextMetrics GetTextMetricsA
  356. #endif
  357. #endif
  358.  
  359. #ifndef DrawText
  360. #ifdef UNICODE
  361. #define DrawText DrawTextW
  362. #else
  363. #define DrawText DrawTextA
  364. #endif
  365. #endif
  366.  
  367.  
  368. #ifdef __cplusplus
  369. extern "C" {
  370. #endif //__cplusplus
  371.  
  372.  
  373. HRESULT WINAPI
  374.     D3DX10CreateFontA(
  375.         ID3D10Device*           pDevice,  
  376.         INT                     Height,
  377.         UINT                    Width,
  378.         UINT                    Weight,
  379.         UINT                    MipLevels,
  380.         BOOL                    Italic,
  381.         UINT                    CharSet,
  382.         UINT                    OutputPrecision,
  383.         UINT                    Quality,
  384.         UINT                    PitchAndFamily,
  385.         LPCSTR                  pFaceName,
  386.         LPD3DX10FONT*           ppFont);
  387.  
  388. HRESULT WINAPI
  389.     D3DX10CreateFontW(
  390.         ID3D10Device*           pDevice,  
  391.         INT                     Height,
  392.         UINT                    Width,
  393.         UINT                    Weight,
  394.         UINT                    MipLevels,
  395.         BOOL                    Italic,
  396.         UINT                    CharSet,
  397.         UINT                    OutputPrecision,
  398.         UINT                    Quality,
  399.         UINT                    PitchAndFamily,
  400.         LPCWSTR                 pFaceName,
  401.         LPD3DX10FONT*           ppFont);
  402.  
  403. #ifdef UNICODE
  404. #define D3DX10CreateFont D3DX10CreateFontW
  405. #else
  406. #define D3DX10CreateFont D3DX10CreateFontA
  407. #endif
  408.  
  409.  
  410. HRESULT WINAPI
  411.     D3DX10CreateFontIndirectA(
  412.         ID3D10Device*             pDevice,  
  413.         CONST D3DX10_FONT_DESCA*   pDesc,
  414.         LPD3DX10FONT*             ppFont);
  415.  
  416. HRESULT WINAPI
  417.     D3DX10CreateFontIndirectW(
  418.         ID3D10Device*             pDevice,  
  419.         CONST D3DX10_FONT_DESCW*   pDesc,
  420.         LPD3DX10FONT*             ppFont);
  421.  
  422. #ifdef UNICODE
  423. #define D3DX10CreateFontIndirect D3DX10CreateFontIndirectW
  424. #else
  425. #define D3DX10CreateFontIndirect D3DX10CreateFontIndirectA
  426. #endif
  427.  
  428. HRESULT WINAPI D3DX10UnsetAllDeviceObjects(ID3D10Device *pDevice);
  429.  
  430. #ifdef __cplusplus
  431. }
  432. #endif //__cplusplus
  433.  
  434. ///////////////////////////////////////////////////////////////////////////
  435.  
  436. #define _FACD3D  0x876
  437. #define MAKE_D3DHRESULT( code )  MAKE_HRESULT( 1, _FACD3D, code )
  438. #define MAKE_D3DSTATUS( code )  MAKE_HRESULT( 0, _FACD3D, code )
  439.  
  440. #define D3DERR_INVALIDCALL                      MAKE_D3DHRESULT(2156)
  441. #define D3DERR_WASSTILLDRAWING                  MAKE_D3DHRESULT(540)
  442.  
  443. #endif //__D3DX10CORE_H__
  444.  
  445.