home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the 3D Game Programming Gurus / gurus.iso / DirectX / dx9sdkcp.exe / SDK (C++) / Include / d3dx9effect.h < prev    next >
Encoding:
C/C++ Source or Header  |  2002-12-04  |  32.8 KB  |  689 lines

  1.  
  2. //////////////////////////////////////////////////////////////////////////////
  3. //
  4. //  Copyright (c) Microsoft Corporation.  All rights reserved.
  5. //
  6. //  File:       d3dx9effect.h
  7. //  Content:    D3DX effect types and Shaders
  8. //
  9. //////////////////////////////////////////////////////////////////////////////
  10.  
  11. #include "d3dx9.h"
  12.  
  13. #ifndef __D3DX9EFFECT_H__
  14. #define __D3DX9EFFECT_H__
  15.  
  16.  
  17. //----------------------------------------------------------------------------
  18. // D3DXFX_DONOTSAVESTATE
  19. //   This flag is used as a parameter to ID3DXEffect::Begin().  When this flag
  20. //   is specified, device state is not saved and restored in Begin/End.
  21. // D3DXFX_DONOTSAVESHADERSTATE
  22. //   This flag is used as a parameter to ID3DXEffect::Begin().  When this flag
  23. //   is specified, shader device state is not saved and restored in Begin/End.
  24. //   This includes pixel/vertex shaders and shader constants
  25. //----------------------------------------------------------------------------
  26.  
  27. #define D3DXFX_DONOTSAVESTATE         (1 << 0)
  28. #define D3DXFX_DONOTSAVESHADERSTATE   (1 << 1)
  29.  
  30.  
  31. //----------------------------------------------------------------------------
  32. // D3DX_PARAMETER_SHARED
  33. //   Indicates that the value of a parameter will be shared with all effects
  34. //   which share the same namespace.  Changing the value in one effect will
  35. //   change it in all.
  36. //
  37. // D3DX_PARAMETER_LITERAL
  38. //   Indicates that the value of this parameter can be treated as literal.
  39. //   Literal parameters can be marked when the effect is compiled, and their
  40. //   cannot be changed after the effect is compiled.  Shared parameters cannot
  41. //   be literal.
  42. //----------------------------------------------------------------------------
  43.  
  44. #define D3DX_PARAMETER_SHARED       (1 << 0)
  45. #define D3DX_PARAMETER_LITERAL      (1 << 1)
  46. #define D3DX_PARAMETER_ANNOTATION   (1 << 2)
  47.  
  48.  
  49. //----------------------------------------------------------------------------
  50. // D3DXEFFECT_DESC:
  51. //----------------------------------------------------------------------------
  52.  
  53. typedef struct _D3DXEFFECT_DESC
  54. {
  55.     LPCSTR Creator;                     // Creator string
  56.     UINT Parameters;                    // Number of parameters
  57.     UINT Techniques;                    // Number of techniques
  58.     UINT Functions;                     // Number of function entrypoints
  59.  
  60. } D3DXEFFECT_DESC;
  61.  
  62.  
  63. //----------------------------------------------------------------------------
  64. // D3DXPARAMETER_DESC:
  65. //----------------------------------------------------------------------------
  66.  
  67. typedef struct _D3DXPARAMETER_DESC
  68. {
  69.     LPCSTR Name;                        // Parameter name
  70.     LPCSTR Semantic;                    // Parameter semantic
  71.     D3DXPARAMETER_CLASS Class;          // Class
  72.     D3DXPARAMETER_TYPE Type;            // Component type
  73.     UINT Rows;                          // Number of rows
  74.     UINT Columns;                       // Number of columns
  75.     UINT Elements;                      // Number of array elements
  76.     UINT Annotations;                   // Number of annotations
  77.     UINT StructMembers;                 // Number of structure member sub-parameters
  78.     DWORD Flags;                        // D3DX_PARAMETER_* flags
  79.     UINT Bytes;                         // Parameter size, in bytes
  80.  
  81. } D3DXPARAMETER_DESC;
  82.  
  83.  
  84. //----------------------------------------------------------------------------
  85. // D3DXTECHNIQUE_DESC:
  86. //----------------------------------------------------------------------------
  87.  
  88. typedef struct _D3DXTECHNIQUE_DESC
  89. {
  90.     LPCSTR Name;                        // Technique name
  91.     UINT Passes;                        // Number of passes
  92.     UINT Annotations;                   // Number of annotations
  93.  
  94. } D3DXTECHNIQUE_DESC;
  95.  
  96.  
  97. //----------------------------------------------------------------------------
  98. // D3DXPASS_DESC:
  99. //----------------------------------------------------------------------------
  100.  
  101. typedef struct _D3DXPASS_DESC
  102. {
  103.     LPCSTR Name;                        // Pass name
  104.     UINT Annotations;                   // Number of annotations
  105.  
  106.     DWORD VSVersion;                    // Vertex shader version (0 in case of NULL shader)
  107.     DWORD PSVersion;                    // Pixel shader version (0 in case of NULL shader)
  108.  
  109.     UINT VSSemanticsUsed;
  110.     D3DXSEMANTIC VSSemantics[MAXD3DDECLLENGTH];
  111.  
  112.     UINT PSSemanticsUsed;
  113.     D3DXSEMANTIC PSSemantics[MAXD3DDECLLENGTH];
  114.  
  115.     UINT PSSamplersUsed;
  116.     LPCSTR PSSamplers[16];
  117.  
  118. } D3DXPASS_DESC;
  119.  
  120.  
  121. //----------------------------------------------------------------------------
  122. // D3DXFUNCTION_DESC:
  123. //----------------------------------------------------------------------------
  124.  
  125. typedef struct _D3DXFUNCTION_DESC
  126. {
  127.     LPCSTR Name;                        // Function name
  128.     UINT Annotations;                   // Number of annotations
  129.  
  130. } D3DXFUNCTION_DESC;
  131.  
  132.  
  133.  
  134. //////////////////////////////////////////////////////////////////////////////
  135. // ID3DXEffectPool ///////////////////////////////////////////////////////////
  136. //////////////////////////////////////////////////////////////////////////////
  137.  
  138. typedef interface ID3DXEffectPool ID3DXEffectPool;
  139. typedef interface ID3DXEffectPool *LPD3DXEFFECTPOOL;
  140.  
  141. // {53CA7768-C0D0-4664-8E79-D156E4F5B7E0}
  142. DEFINE_GUID( IID_ID3DXEffectPool,
  143. 0x53ca7768, 0xc0d0, 0x4664, 0x8e, 0x79, 0xd1, 0x56, 0xe4, 0xf5, 0xb7, 0xe0);
  144.  
  145.  
  146. #undef INTERFACE
  147. #define INTERFACE ID3DXEffectPool
  148.  
  149. DECLARE_INTERFACE_(ID3DXEffectPool, IUnknown)
  150. {
  151.     // IUnknown
  152.     STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
  153.     STDMETHOD_(ULONG, AddRef)(THIS) PURE;
  154.     STDMETHOD_(ULONG, Release)(THIS) PURE;
  155.  
  156.     // No public methods
  157. };
  158.  
  159.  
  160. //////////////////////////////////////////////////////////////////////////////
  161. // ID3DXBaseEffect ///////////////////////////////////////////////////////////
  162. //////////////////////////////////////////////////////////////////////////////
  163.  
  164. typedef interface ID3DXBaseEffect ID3DXBaseEffect;
  165. typedef interface ID3DXBaseEffect *LPD3DXBASEEFFECT;
  166.  
  167. // {804EF574-CCC1-4bf6-B06A-B1404ABDEADE}
  168. DEFINE_GUID( IID_ID3DXBaseEffect,
  169. 0x804ef574, 0xccc1, 0x4bf6, 0xb0, 0x6a, 0xb1, 0x40, 0x4a, 0xbd, 0xea, 0xde);
  170.  
  171.  
  172. #undef INTERFACE
  173. #define INTERFACE ID3DXBaseEffect
  174.  
  175. DECLARE_INTERFACE_(ID3DXBaseEffect, IUnknown)
  176. {
  177.     // IUnknown
  178.     STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
  179.     STDMETHOD_(ULONG, AddRef)(THIS) PURE;
  180.     STDMETHOD_(ULONG, Release)(THIS) PURE;
  181.  
  182.     // Descs
  183.     STDMETHOD(GetDesc)(THIS_ D3DXEFFECT_DESC* pDesc) PURE;
  184.     STDMETHOD(GetParameterDesc)(THIS_ D3DXHANDLE hParameter, D3DXPARAMETER_DESC* pDesc) PURE;
  185.     STDMETHOD(GetTechniqueDesc)(THIS_ D3DXHANDLE hTechnique, D3DXTECHNIQUE_DESC* pDesc) PURE;
  186.     STDMETHOD(GetPassDesc)(THIS_ D3DXHANDLE hPass, D3DXPASS_DESC* pDesc) PURE;
  187.     STDMETHOD(GetFunctionDesc)(THIS_ D3DXHANDLE hShader, D3DXFUNCTION_DESC* pDesc) PURE;
  188.  
  189.     // Handle operations
  190.     STDMETHOD_(D3DXHANDLE, GetParameter)(THIS_ D3DXHANDLE hParameter, UINT Index) PURE;
  191.     STDMETHOD_(D3DXHANDLE, GetParameterByName)(THIS_ D3DXHANDLE hParameter, LPCSTR pName) PURE;
  192.     STDMETHOD_(D3DXHANDLE, GetParameterBySemantic)(THIS_ D3DXHANDLE hParameter, LPCSTR pSemantic) PURE;
  193.     STDMETHOD_(D3DXHANDLE, GetParameterElement)(THIS_ D3DXHANDLE hParameter, UINT Index) PURE;
  194.     STDMETHOD_(D3DXHANDLE, GetTechnique)(THIS_ UINT Index) PURE;
  195.     STDMETHOD_(D3DXHANDLE, GetTechniqueByName)(THIS_ LPCSTR pName) PURE;
  196.     STDMETHOD_(D3DXHANDLE, GetPass)(THIS_ D3DXHANDLE hTechnique, UINT Index) PURE;
  197.     STDMETHOD_(D3DXHANDLE, GetPassByName)(THIS_ D3DXHANDLE hTechnique, LPCSTR pName) PURE;
  198.     STDMETHOD_(D3DXHANDLE, GetFunction)(THIS_ UINT Index);
  199.     STDMETHOD_(D3DXHANDLE, GetFunctionByName)(THIS_ LPCSTR pName);
  200.     STDMETHOD_(D3DXHANDLE, GetAnnotation)(THIS_ D3DXHANDLE hObject, UINT Index) PURE;
  201.     STDMETHOD_(D3DXHANDLE, GetAnnotationByName)(THIS_ D3DXHANDLE hObject, LPCSTR pName) PURE;
  202.  
  203.     // Get/Set Parameters
  204.     STDMETHOD(SetValue)(THIS_ D3DXHANDLE hParameter, LPCVOID pData, UINT Bytes) PURE;
  205.     STDMETHOD(GetValue)(THIS_ D3DXHANDLE hParameter, LPVOID pData, UINT Bytes) PURE;
  206.     STDMETHOD(SetBool)(THIS_ D3DXHANDLE hParameter, BOOL b) PURE;
  207.     STDMETHOD(GetBool)(THIS_ D3DXHANDLE hParameter, BOOL* pb) PURE;
  208.     STDMETHOD(SetBoolArray)(THIS_ D3DXHANDLE hParameter, CONST BOOL* pb, UINT Count) PURE;
  209.     STDMETHOD(GetBoolArray)(THIS_ D3DXHANDLE hParameter, BOOL* pb, UINT Count) PURE;
  210.     STDMETHOD(SetInt)(THIS_ D3DXHANDLE hParameter, INT n) PURE;
  211.     STDMETHOD(GetInt)(THIS_ D3DXHANDLE hParameter, INT* pn) PURE;
  212.     STDMETHOD(SetIntArray)(THIS_ D3DXHANDLE hParameter, CONST INT* pn, UINT Count) PURE;
  213.     STDMETHOD(GetIntArray)(THIS_ D3DXHANDLE hParameter, INT* pn, UINT Count) PURE;
  214.     STDMETHOD(SetFloat)(THIS_ D3DXHANDLE hParameter, FLOAT f) PURE;
  215.     STDMETHOD(GetFloat)(THIS_ D3DXHANDLE hParameter, FLOAT* pf) PURE;
  216.     STDMETHOD(SetFloatArray)(THIS_ D3DXHANDLE hParameter, CONST FLOAT* pf, UINT Count) PURE;
  217.     STDMETHOD(GetFloatArray)(THIS_ D3DXHANDLE hParameter, FLOAT* pf, UINT Count) PURE;
  218.     STDMETHOD(SetVector)(THIS_ D3DXHANDLE hParameter, CONST D3DXVECTOR4* pVector) PURE;
  219.     STDMETHOD(GetVector)(THIS_ D3DXHANDLE hParameter, D3DXVECTOR4* pVector) PURE;
  220.     STDMETHOD(SetVectorArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXVECTOR4* pVector, UINT Count) PURE;
  221.     STDMETHOD(GetVectorArray)(THIS_ D3DXHANDLE hParameter, D3DXVECTOR4* pVector, UINT Count) PURE;
  222.     STDMETHOD(SetMatrix)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX* pMatrix) PURE;
  223.     STDMETHOD(GetMatrix)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX* pMatrix) PURE;
  224.     STDMETHOD(SetMatrixArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX* pMatrix, UINT Count) PURE;
  225.     STDMETHOD(GetMatrixArray)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX* pMatrix, UINT Count) PURE;
  226.     STDMETHOD(SetMatrixPointerArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX** ppMatrix, UINT Count) PURE;
  227.     STDMETHOD(GetMatrixPointerArray)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX** ppMatrix, UINT Count) PURE;
  228.     STDMETHOD(SetMatrixTranspose)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX* pMatrix) PURE;
  229.     STDMETHOD(GetMatrixTranspose)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX* pMatrix) PURE;
  230.     STDMETHOD(SetMatrixTransposeArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX* pMatrix, UINT Count) PURE;
  231.     STDMETHOD(GetMatrixTransposeArray)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX* pMatrix, UINT Count) PURE;
  232.     STDMETHOD(SetMatrixTransposePointerArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX** ppMatrix, UINT Count) PURE;
  233.     STDMETHOD(GetMatrixTransposePointerArray)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX** ppMatrix, UINT Count) PURE;
  234.     STDMETHOD(SetString)(THIS_ D3DXHANDLE hParameter, LPCSTR pString) PURE;
  235.     STDMETHOD(GetString)(THIS_ D3DXHANDLE hParameter, LPCSTR* ppString) PURE;
  236.     STDMETHOD(SetTexture)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DBASETEXTURE9 pTexture) PURE;
  237.     STDMETHOD(GetTexture)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DBASETEXTURE9 *ppTexture) PURE;
  238.     STDMETHOD(SetPixelShader)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DPIXELSHADER9 pPShader) PURE;
  239.     STDMETHOD(GetPixelShader)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DPIXELSHADER9 *ppPShader) PURE;
  240.     STDMETHOD(SetVertexShader)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DVERTEXSHADER9 pVShader) PURE;
  241.     STDMETHOD(GetVertexShader)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DVERTEXSHADER9 *ppVShader) PURE;
  242. };
  243.  
  244.  
  245. //////////////////////////////////////////////////////////////////////////////
  246. // ID3DXEffect ///////////////////////////////////////////////////////////////
  247. //////////////////////////////////////////////////////////////////////////////
  248.  
  249. typedef interface ID3DXEffect ID3DXEffect;
  250. typedef interface ID3DXEffect *LPD3DXEFFECT;
  251.  
  252. // {B589B04A-293D-4516-AF0B-3D7DBCF5AC54}
  253. DEFINE_GUID( IID_ID3DXEffect,
  254. 0xb589b04a, 0x293d, 0x4516, 0xaf, 0xb, 0x3d, 0x7d, 0xbc, 0xf5, 0xac, 0x54);
  255.  
  256.  
  257. #undef INTERFACE
  258. #define INTERFACE ID3DXEffect
  259.  
  260. DECLARE_INTERFACE_(ID3DXEffect, ID3DXBaseEffect)
  261. {
  262.     // ID3DXBaseEffect
  263.     STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
  264.     STDMETHOD_(ULONG, AddRef)(THIS) PURE;
  265.     STDMETHOD_(ULONG, Release)(THIS) PURE;
  266.  
  267.     // Descs
  268.     STDMETHOD(GetDesc)(THIS_ D3DXEFFECT_DESC* pDesc) PURE;
  269.     STDMETHOD(GetParameterDesc)(THIS_ D3DXHANDLE hParameter, D3DXPARAMETER_DESC* pDesc) PURE;
  270.     STDMETHOD(GetTechniqueDesc)(THIS_ D3DXHANDLE hTechnique, D3DXTECHNIQUE_DESC* pDesc) PURE;
  271.     STDMETHOD(GetPassDesc)(THIS_ D3DXHANDLE hPass, D3DXPASS_DESC* pDesc) PURE;
  272.     STDMETHOD(GetFunctionDesc)(THIS_ D3DXHANDLE hShader, D3DXFUNCTION_DESC* pDesc) PURE;
  273.  
  274.     // Handle operations
  275.     STDMETHOD_(D3DXHANDLE, GetParameter)(THIS_ D3DXHANDLE hParameter, UINT Index) PURE;
  276.     STDMETHOD_(D3DXHANDLE, GetParameterByName)(THIS_ D3DXHANDLE hParameter, LPCSTR pName) PURE;
  277.     STDMETHOD_(D3DXHANDLE, GetParameterBySemantic)(THIS_ D3DXHANDLE hParameter, LPCSTR pSemantic) PURE;
  278.     STDMETHOD_(D3DXHANDLE, GetParameterElement)(THIS_ D3DXHANDLE hParameter, UINT Index) PURE;
  279.     STDMETHOD_(D3DXHANDLE, GetTechnique)(THIS_ UINT Index) PURE;
  280.     STDMETHOD_(D3DXHANDLE, GetTechniqueByName)(THIS_ LPCSTR pName) PURE;
  281.     STDMETHOD_(D3DXHANDLE, GetPass)(THIS_ D3DXHANDLE hTechnique, UINT Index) PURE;
  282.     STDMETHOD_(D3DXHANDLE, GetPassByName)(THIS_ D3DXHANDLE hTechnique, LPCSTR pName) PURE;
  283.     STDMETHOD_(D3DXHANDLE, GetFunction)(THIS_ UINT Index);
  284.     STDMETHOD_(D3DXHANDLE, GetFunctionByName)(THIS_ LPCSTR pName);
  285.     STDMETHOD_(D3DXHANDLE, GetAnnotation)(THIS_ D3DXHANDLE hObject, UINT Index) PURE;
  286.     STDMETHOD_(D3DXHANDLE, GetAnnotationByName)(THIS_ D3DXHANDLE hObject, LPCSTR pName) PURE;
  287.  
  288.     // Get/Set Parameters
  289.     STDMETHOD(SetValue)(THIS_ D3DXHANDLE hParameter, LPCVOID pData, UINT Bytes) PURE;
  290.     STDMETHOD(GetValue)(THIS_ D3DXHANDLE hParameter, LPVOID pData, UINT Bytes) PURE;
  291.     STDMETHOD(SetBool)(THIS_ D3DXHANDLE hParameter, BOOL b) PURE;
  292.     STDMETHOD(GetBool)(THIS_ D3DXHANDLE hParameter, BOOL* pb) PURE;
  293.     STDMETHOD(SetBoolArray)(THIS_ D3DXHANDLE hParameter, CONST BOOL* pb, UINT Count) PURE;
  294.     STDMETHOD(GetBoolArray)(THIS_ D3DXHANDLE hParameter, BOOL* pb, UINT Count) PURE;
  295.     STDMETHOD(SetInt)(THIS_ D3DXHANDLE hParameter, INT n) PURE;
  296.     STDMETHOD(GetInt)(THIS_ D3DXHANDLE hParameter, INT* pn) PURE;
  297.     STDMETHOD(SetIntArray)(THIS_ D3DXHANDLE hParameter, CONST INT* pn, UINT Count) PURE;
  298.     STDMETHOD(GetIntArray)(THIS_ D3DXHANDLE hParameter, INT* pn, UINT Count) PURE;
  299.     STDMETHOD(SetFloat)(THIS_ D3DXHANDLE hParameter, FLOAT f) PURE;
  300.     STDMETHOD(GetFloat)(THIS_ D3DXHANDLE hParameter, FLOAT* pf) PURE;
  301.     STDMETHOD(SetFloatArray)(THIS_ D3DXHANDLE hParameter, CONST FLOAT* pf, UINT Count) PURE;
  302.     STDMETHOD(GetFloatArray)(THIS_ D3DXHANDLE hParameter, FLOAT* pf, UINT Count) PURE;
  303.     STDMETHOD(SetVector)(THIS_ D3DXHANDLE hParameter, CONST D3DXVECTOR4* pVector) PURE;
  304.     STDMETHOD(GetVector)(THIS_ D3DXHANDLE hParameter, D3DXVECTOR4* pVector) PURE;
  305.     STDMETHOD(SetVectorArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXVECTOR4* pVector, UINT Count) PURE;
  306.     STDMETHOD(GetVectorArray)(THIS_ D3DXHANDLE hParameter, D3DXVECTOR4* pVector, UINT Count) PURE;
  307.     STDMETHOD(SetMatrix)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX* pMatrix) PURE;
  308.     STDMETHOD(GetMatrix)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX* pMatrix) PURE;
  309.     STDMETHOD(SetMatrixArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX* pMatrix, UINT Count) PURE;
  310.     STDMETHOD(GetMatrixArray)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX* pMatrix, UINT Count) PURE;
  311.     STDMETHOD(SetMatrixPointerArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX** ppMatrix, UINT Count) PURE;
  312.     STDMETHOD(GetMatrixPointerArray)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX** ppMatrix, UINT Count) PURE;
  313.     STDMETHOD(SetMatrixTranspose)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX* pMatrix) PURE;
  314.     STDMETHOD(GetMatrixTranspose)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX* pMatrix) PURE;
  315.     STDMETHOD(SetMatrixTransposeArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX* pMatrix, UINT Count) PURE;
  316.     STDMETHOD(GetMatrixTransposeArray)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX* pMatrix, UINT Count) PURE;
  317.     STDMETHOD(SetMatrixTransposePointerArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX** ppMatrix, UINT Count) PURE;
  318.     STDMETHOD(GetMatrixTransposePointerArray)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX** ppMatrix, UINT Count) PURE;
  319.     STDMETHOD(SetString)(THIS_ D3DXHANDLE hParameter, LPCSTR pString) PURE;
  320.     STDMETHOD(GetString)(THIS_ D3DXHANDLE hParameter, LPCSTR* ppString) PURE;
  321.     STDMETHOD(SetTexture)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DBASETEXTURE9 pTexture) PURE;
  322.     STDMETHOD(GetTexture)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DBASETEXTURE9 *ppTexture) PURE;
  323.     STDMETHOD(SetPixelShader)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DPIXELSHADER9 pPShader) PURE;
  324.     STDMETHOD(GetPixelShader)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DPIXELSHADER9 *ppPShader) PURE;
  325.     STDMETHOD(SetVertexShader)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DVERTEXSHADER9 pVShader) PURE;
  326.     STDMETHOD(GetVertexShader)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DVERTEXSHADER9 *ppVShader) PURE;
  327.     // ID3DXBaseEffect
  328.  
  329.     // Pool
  330.     STDMETHOD(GetPool)(THIS_ LPD3DXEFFECTPOOL* ppPool) PURE;
  331.  
  332.     // Selecting and setting a technique
  333.     STDMETHOD(SetTechnique)(THIS_ D3DXHANDLE hTechnique) PURE;
  334.     STDMETHOD_(D3DXHANDLE, GetCurrentTechnique)(THIS) PURE;
  335.     STDMETHOD(ValidateTechnique)(THIS_ D3DXHANDLE hTechnique) PURE;
  336.     STDMETHOD(FindNextValidTechnique)(THIS_ D3DXHANDLE hTechnique, D3DXHANDLE *pTechnique) PURE;
  337.     STDMETHOD_(BOOL, IsParameterUsed)(THIS_ D3DXHANDLE hParameter, D3DXHANDLE hTechnique) PURE;
  338.  
  339.     // Using current technique
  340.     STDMETHOD(Begin)(THIS_ UINT *pPasses, DWORD Flags) PURE;
  341.     STDMETHOD(Pass)(THIS_ UINT Pass) PURE;
  342.     STDMETHOD(End)(THIS) PURE;
  343.  
  344.     // Managing D3D Device
  345.     STDMETHOD(GetDevice)(THIS_ LPDIRECT3DDEVICE9* ppDevice) PURE;
  346.     STDMETHOD(OnLostDevice)(THIS) PURE;
  347.     STDMETHOD(OnResetDevice)(THIS) PURE;
  348.  
  349.     // Cloning
  350.     STDMETHOD(CloneEffect)(THIS_ LPDIRECT3DDEVICE9 pDevice, LPD3DXEFFECT* ppEffect) PURE;
  351. };
  352.  
  353.  
  354. //////////////////////////////////////////////////////////////////////////////
  355. // ID3DXEffectCompiler ///////////////////////////////////////////////////////
  356. //////////////////////////////////////////////////////////////////////////////
  357.  
  358. typedef interface ID3DXEffectCompiler ID3DXEffectCompiler;
  359. typedef interface ID3DXEffectCompiler *LPD3DXEFFECTCOMPILER;
  360.  
  361. // {F8EE90D3-FCC6-4f14-8AE8-6374AE968E33}
  362. DEFINE_GUID( IID_ID3DXEffectCompiler,
  363. 0xf8ee90d3, 0xfcc6, 0x4f14, 0x8a, 0xe8, 0x63, 0x74, 0xae, 0x96, 0x8e, 0x33);
  364.  
  365.  
  366. #undef INTERFACE
  367. #define INTERFACE ID3DXEffectCompiler
  368.  
  369. DECLARE_INTERFACE_(ID3DXEffectCompiler, ID3DXBaseEffect)
  370. {
  371.     // ID3DXBaseEffect
  372.     STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
  373.     STDMETHOD_(ULONG, AddRef)(THIS) PURE;
  374.     STDMETHOD_(ULONG, Release)(THIS) PURE;
  375.  
  376.     // Descs
  377.     STDMETHOD(GetDesc)(THIS_ D3DXEFFECT_DESC* pDesc) PURE;
  378.     STDMETHOD(GetParameterDesc)(THIS_ D3DXHANDLE hParameter, D3DXPARAMETER_DESC* pDesc) PURE;
  379.     STDMETHOD(GetTechniqueDesc)(THIS_ D3DXHANDLE hTechnique, D3DXTECHNIQUE_DESC* pDesc) PURE;
  380.     STDMETHOD(GetPassDesc)(THIS_ D3DXHANDLE hPass, D3DXPASS_DESC* pDesc) PURE;
  381.     STDMETHOD(GetFunctionDesc)(THIS_ D3DXHANDLE hShader, D3DXFUNCTION_DESC* pDesc) PURE;
  382.  
  383.     // Handle operations
  384.     STDMETHOD_(D3DXHANDLE, GetParameter)(THIS_ D3DXHANDLE hParameter, UINT Index) PURE;
  385.     STDMETHOD_(D3DXHANDLE, GetParameterByName)(THIS_ D3DXHANDLE hParameter, LPCSTR pName) PURE;
  386.     STDMETHOD_(D3DXHANDLE, GetParameterBySemantic)(THIS_ D3DXHANDLE hParameter, LPCSTR pSemantic) PURE;
  387.     STDMETHOD_(D3DXHANDLE, GetParameterElement)(THIS_ D3DXHANDLE hParameter, UINT Index) PURE;
  388.     STDMETHOD_(D3DXHANDLE, GetTechnique)(THIS_ UINT Index) PURE;
  389.     STDMETHOD_(D3DXHANDLE, GetTechniqueByName)(THIS_ LPCSTR pName) PURE;
  390.     STDMETHOD_(D3DXHANDLE, GetPass)(THIS_ D3DXHANDLE hTechnique, UINT Index) PURE;
  391.     STDMETHOD_(D3DXHANDLE, GetPassByName)(THIS_ D3DXHANDLE hTechnique, LPCSTR pName) PURE;
  392.     STDMETHOD_(D3DXHANDLE, GetFunction)(THIS_ UINT Index);
  393.     STDMETHOD_(D3DXHANDLE, GetFunctionByName)(THIS_ LPCSTR pName);
  394.     STDMETHOD_(D3DXHANDLE, GetAnnotation)(THIS_ D3DXHANDLE hObject, UINT Index) PURE;
  395.     STDMETHOD_(D3DXHANDLE, GetAnnotationByName)(THIS_ D3DXHANDLE hObject, LPCSTR pName) PURE;
  396.  
  397.     // Get/Set Parameters
  398.     STDMETHOD(SetValue)(THIS_ D3DXHANDLE hParameter, LPCVOID pData, UINT Bytes) PURE;
  399.     STDMETHOD(GetValue)(THIS_ D3DXHANDLE hParameter, LPVOID pData, UINT Bytes) PURE;
  400.     STDMETHOD(SetBool)(THIS_ D3DXHANDLE hParameter, BOOL b) PURE;
  401.     STDMETHOD(GetBool)(THIS_ D3DXHANDLE hParameter, BOOL* pb) PURE;
  402.     STDMETHOD(SetBoolArray)(THIS_ D3DXHANDLE hParameter, CONST BOOL* pb, UINT Count) PURE;
  403.     STDMETHOD(GetBoolArray)(THIS_ D3DXHANDLE hParameter, BOOL* pb, UINT Count) PURE;
  404.     STDMETHOD(SetInt)(THIS_ D3DXHANDLE hParameter, INT n) PURE;
  405.     STDMETHOD(GetInt)(THIS_ D3DXHANDLE hParameter, INT* pn) PURE;
  406.     STDMETHOD(SetIntArray)(THIS_ D3DXHANDLE hParameter, CONST INT* pn, UINT Count) PURE;
  407.     STDMETHOD(GetIntArray)(THIS_ D3DXHANDLE hParameter, INT* pn, UINT Count) PURE;
  408.     STDMETHOD(SetFloat)(THIS_ D3DXHANDLE hParameter, FLOAT f) PURE;
  409.     STDMETHOD(GetFloat)(THIS_ D3DXHANDLE hParameter, FLOAT* pf) PURE;
  410.     STDMETHOD(SetFloatArray)(THIS_ D3DXHANDLE hParameter, CONST FLOAT* pf, UINT Count) PURE;
  411.     STDMETHOD(GetFloatArray)(THIS_ D3DXHANDLE hParameter, FLOAT* pf, UINT Count) PURE;
  412.     STDMETHOD(SetVector)(THIS_ D3DXHANDLE hParameter, CONST D3DXVECTOR4* pVector) PURE;
  413.     STDMETHOD(GetVector)(THIS_ D3DXHANDLE hParameter, D3DXVECTOR4* pVector) PURE;
  414.     STDMETHOD(SetVectorArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXVECTOR4* pVector, UINT Count) PURE;
  415.     STDMETHOD(GetVectorArray)(THIS_ D3DXHANDLE hParameter, D3DXVECTOR4* pVector, UINT Count) PURE;
  416.     STDMETHOD(SetMatrix)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX* pMatrix) PURE;
  417.     STDMETHOD(GetMatrix)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX* pMatrix) PURE;
  418.     STDMETHOD(SetMatrixArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX* pMatrix, UINT Count) PURE;
  419.     STDMETHOD(GetMatrixArray)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX* pMatrix, UINT Count) PURE;
  420.     STDMETHOD(SetMatrixPointerArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX** ppMatrix, UINT Count) PURE;
  421.     STDMETHOD(GetMatrixPointerArray)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX** ppMatrix, UINT Count) PURE;
  422.     STDMETHOD(SetMatrixTranspose)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX* pMatrix) PURE;
  423.     STDMETHOD(GetMatrixTranspose)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX* pMatrix) PURE;
  424.     STDMETHOD(SetMatrixTransposeArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX* pMatrix, UINT Count) PURE;
  425.     STDMETHOD(GetMatrixTransposeArray)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX* pMatrix, UINT Count) PURE;
  426.     STDMETHOD(SetMatrixTransposePointerArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX** ppMatrix, UINT Count) PURE;
  427.     STDMETHOD(GetMatrixTransposePointerArray)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX** ppMatrix, UINT Count) PURE;
  428.     STDMETHOD(SetString)(THIS_ D3DXHANDLE hParameter, LPCSTR pString) PURE;
  429.     STDMETHOD(GetString)(THIS_ D3DXHANDLE hParameter, LPCSTR* ppString) PURE;
  430.     STDMETHOD(SetTexture)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DBASETEXTURE9 pTexture) PURE;
  431.     STDMETHOD(GetTexture)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DBASETEXTURE9 *ppTexture) PURE;
  432.     STDMETHOD(SetPixelShader)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DPIXELSHADER9 pPShader) PURE;
  433.     STDMETHOD(GetPixelShader)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DPIXELSHADER9 *ppPShader) PURE;
  434.     STDMETHOD(SetVertexShader)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DVERTEXSHADER9 pVShader) PURE;
  435.     STDMETHOD(GetVertexShader)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DVERTEXSHADER9 *ppVShader) PURE;
  436.     // ID3DXBaseEffect
  437.  
  438.     // Parameter sharing, specialization, and information
  439.     STDMETHOD(SetLiteral)(THIS_ D3DXHANDLE hParameter, BOOL Literal) PURE;
  440.     STDMETHOD(GetLiteral)(THIS_ D3DXHANDLE hParameter, BOOL *pLiteral) PURE;
  441.  
  442.     // Compilation
  443.     STDMETHOD(CompileEffect)(THIS_ DWORD Flags,
  444.         LPD3DXBUFFER* ppEffect, LPD3DXBUFFER* ppErrorMsgs) PURE;
  445.  
  446.     STDMETHOD(CompileShader)(THIS_ D3DXHANDLE hFunction, LPCSTR pTarget, DWORD Flags,
  447.         LPD3DXBUFFER* ppShader, LPD3DXBUFFER* ppErrorMsgs, LPD3DXCONSTANTTABLE* ppConstantTable) PURE;
  448. };
  449.  
  450.  
  451. //////////////////////////////////////////////////////////////////////////////
  452. // APIs //////////////////////////////////////////////////////////////////////
  453. //////////////////////////////////////////////////////////////////////////////
  454.  
  455.  
  456. #ifdef __cplusplus
  457. extern "C" {
  458. #endif //__cplusplus
  459.  
  460. //----------------------------------------------------------------------------
  461. // D3DXCreateEffectPool:
  462. // ---------------------
  463. // Creates an effect pool.  Pools are used for sharing parameters between
  464. // multiple effects.  For all effects within a pool, shared parameters of the
  465. // same name all share the same value.
  466. //
  467. // Parameters:
  468. //  ppPool
  469. //      Returns the created pool.
  470. //----------------------------------------------------------------------------
  471.  
  472. HRESULT WINAPI
  473.     D3DXCreateEffectPool(
  474.         LPD3DXEFFECTPOOL*               ppPool);
  475.  
  476.  
  477. //----------------------------------------------------------------------------
  478. // D3DXCreateEffect:
  479. // -----------------
  480. // Creates an effect from an ascii or binary effect description.
  481. //
  482. // Parameters:
  483. //  pDevice
  484. //      Pointer of the device on which to create the effect
  485. //  pSrcFile
  486. //      Name of the file containing the effect description
  487. //  hSrcModule
  488. //      Module handle. if NULL, current module will be used.
  489. //  pSrcResource
  490. //      Resource name in module
  491. //  pSrcData
  492. //      Pointer to effect description
  493. //  SrcDataSize
  494. //      Size of the effect description in bytes
  495. //  pDefines
  496. //      Optional NULL-terminated array of preprocessor macro definitions.
  497. //  pInclude
  498. //      Optional interface pointer to use for handling #include directives.
  499. //      If this parameter is NULL, #includes will be honored when compiling
  500. //      from file, and will error when compiling from resource or memory.
  501. //  pPool
  502. //      Pointer to ID3DXEffectPool object to use for shared parameters.
  503. //      If NULL, no parameters will be shared.
  504. //  ppEffect
  505. //      Returns a buffer containing created effect.
  506. //  ppCompilationErrors
  507. //      Returns a buffer containing any error messages which occurred during
  508. //      compile.  Or NULL if you do not care about the error messages.
  509. //
  510. //----------------------------------------------------------------------------
  511.  
  512. HRESULT WINAPI
  513.     D3DXCreateEffectFromFileA(
  514.         LPDIRECT3DDEVICE9               pDevice,
  515.         LPCSTR                          pSrcFile,
  516.         CONST D3DXMACRO*                pDefines,
  517.         LPD3DXINCLUDE                   pInclude,
  518.         DWORD                           Flags,
  519.         LPD3DXEFFECTPOOL                pPool,
  520.         LPD3DXEFFECT*                   ppEffect,
  521.         LPD3DXBUFFER*                   ppCompilationErrors);
  522.  
  523. HRESULT WINAPI
  524.     D3DXCreateEffectFromFileW(
  525.         LPDIRECT3DDEVICE9               pDevice,
  526.         LPCWSTR                         pSrcFile,
  527.         CONST D3DXMACRO*                pDefines,
  528.         LPD3DXINCLUDE                   pInclude,
  529.         DWORD                           Flags,
  530.         LPD3DXEFFECTPOOL                pPool,
  531.         LPD3DXEFFECT*                   ppEffect,
  532.         LPD3DXBUFFER*                   ppCompilationErrors);
  533.  
  534. #ifdef UNICODE
  535. #define D3DXCreateEffectFromFile D3DXCreateEffectFromFileW
  536. #else
  537. #define D3DXCreateEffectFromFile D3DXCreateEffectFromFileA
  538. #endif
  539.  
  540.  
  541. HRESULT WINAPI
  542.     D3DXCreateEffectFromResourceA(
  543.         LPDIRECT3DDEVICE9               pDevice,
  544.         HMODULE                         hSrcModule,
  545.         LPCSTR                          pSrcResource,
  546.         CONST D3DXMACRO*                pDefines,
  547.         LPD3DXINCLUDE                   pInclude,
  548.         DWORD                           Flags,
  549.         LPD3DXEFFECTPOOL                pPool,
  550.         LPD3DXEFFECT*                   ppEffect,
  551.         LPD3DXBUFFER*                   ppCompilationErrors);
  552.  
  553. HRESULT WINAPI
  554.     D3DXCreateEffectFromResourceW(
  555.         LPDIRECT3DDEVICE9               pDevice,
  556.         HMODULE                         hSrcModule,
  557.         LPCWSTR                         pSrcResource,
  558.         CONST D3DXMACRO*                pDefines,
  559.         LPD3DXINCLUDE                   pInclude,
  560.         DWORD                           Flags,
  561.         LPD3DXEFFECTPOOL                pPool,
  562.         LPD3DXEFFECT*                   ppEffect,
  563.         LPD3DXBUFFER*                   ppCompilationErrors);
  564.  
  565. #ifdef UNICODE
  566. #define D3DXCreateEffectFromResource D3DXCreateEffectFromResourceW
  567. #else
  568. #define D3DXCreateEffectFromResource D3DXCreateEffectFromResourceA
  569. #endif
  570.  
  571.  
  572. HRESULT WINAPI
  573.     D3DXCreateEffect(
  574.         LPDIRECT3DDEVICE9               pDevice,
  575.         LPCVOID                         pSrcData,
  576.         UINT                            SrcDataLen,
  577.         CONST D3DXMACRO*                pDefines,
  578.         LPD3DXINCLUDE                   pInclude,
  579.         DWORD                           Flags,
  580.         LPD3DXEFFECTPOOL                pPool,
  581.         LPD3DXEFFECT*                   ppEffect,
  582.         LPD3DXBUFFER*                   ppCompilationErrors);
  583.  
  584.  
  585.  
  586. //----------------------------------------------------------------------------
  587. // D3DXCreateEffectCompiler:
  588. // -------------------------
  589. // Creates an effect from an ascii or binary effect description.
  590. //
  591. // Parameters:
  592. //  pSrcFile
  593. //      Name of the file containing the effect description
  594. //  hSrcModule
  595. //      Module handle. if NULL, current module will be used.
  596. //  pSrcResource
  597. //      Resource name in module
  598. //  pSrcData
  599. //      Pointer to effect description
  600. //  SrcDataSize
  601. //      Size of the effect description in bytes
  602. //  pDefines
  603. //      Optional NULL-terminated array of preprocessor macro definitions.
  604. //  pInclude
  605. //      Optional interface pointer to use for handling #include directives.
  606. //      If this parameter is NULL, #includes will be honored when compiling
  607. //      from file, and will error when compiling from resource or memory.
  608. //  pPool
  609. //      Pointer to ID3DXEffectPool object to use for shared parameters.
  610. //      If NULL, no parameters will be shared.
  611. //  ppCompiler
  612. //      Returns a buffer containing created effect compiler.
  613. //  ppParseErrors
  614. //      Returns a buffer containing any error messages which occurred during
  615. //      parse.  Or NULL if you do not care about the error messages.
  616. //
  617. //----------------------------------------------------------------------------
  618.  
  619. HRESULT WINAPI
  620.     D3DXCreateEffectCompilerFromFileA(
  621.         LPCSTR                          pSrcFile,
  622.         CONST D3DXMACRO*                pDefines,
  623.         LPD3DXINCLUDE                   pInclude,
  624.         DWORD                           Flags,
  625.         LPD3DXEFFECTCOMPILER*           ppCompiler,
  626.         LPD3DXBUFFER*                   ppParseErrors);
  627.  
  628. HRESULT WINAPI
  629.     D3DXCreateEffectCompilerFromFileW(
  630.         LPCWSTR                         pSrcFile,
  631.         CONST D3DXMACRO*                pDefines,
  632.         LPD3DXINCLUDE                   pInclude,
  633.         DWORD                           Flags,
  634.         LPD3DXEFFECTCOMPILER*           ppCompiler,
  635.         LPD3DXBUFFER*                   ppParseErrors);
  636.  
  637. #ifdef UNICODE
  638. #define D3DXCreateEffectCompilerFromFile D3DXCreateEffectCompilerFromFileW
  639. #else
  640. #define D3DXCreateEffectCompilerFromFile D3DXCreateEffectCompilerFromFileA
  641. #endif
  642.  
  643.  
  644. HRESULT WINAPI
  645.     D3DXCreateEffectCompilerFromResourceA(
  646.         HMODULE                         hSrcModule,
  647.         LPCSTR                          pSrcResource,
  648.         CONST D3DXMACRO*                pDefines,
  649.         LPD3DXINCLUDE                   pInclude,
  650.         DWORD                           Flags,
  651.         LPD3DXEFFECTCOMPILER*           ppCompiler,
  652.         LPD3DXBUFFER*                   ppParseErrors);
  653.  
  654. HRESULT WINAPI
  655.     D3DXCreateEffectCompilerFromResourceW(
  656.         HMODULE                         hSrcModule,
  657.         LPCWSTR                         pSrcResource,
  658.         CONST D3DXMACRO*                pDefines,
  659.         LPD3DXINCLUDE                   pInclude,
  660.         DWORD                           Flags,
  661.         LPD3DXEFFECTCOMPILER*           ppCompiler,
  662.         LPD3DXBUFFER*                   ppParseErrors);
  663.  
  664. #ifdef UNICODE
  665. #define D3DXCreateEffectCompilerFromResource D3DXCreateEffectCompilerFromResourceW
  666. #else
  667. #define D3DXCreateEffectCompilerFromResource D3DXCreateEffectCompilerFromResourceA
  668. #endif
  669.  
  670.  
  671. HRESULT WINAPI
  672.     D3DXCreateEffectCompiler(
  673.         LPCSTR                          pSrcData,
  674.         UINT                            SrcDataLen,
  675.         CONST D3DXMACRO*                pDefines,
  676.         LPD3DXINCLUDE                   pInclude,
  677.         DWORD                           Flags,
  678.         LPD3DXEFFECTCOMPILER*           ppCompiler,
  679.         LPD3DXBUFFER*                   ppParseErrors);
  680.  
  681.  
  682. #ifdef __cplusplus
  683. }
  684. #endif //__cplusplus
  685.  
  686. #endif //__D3DX9EFFECT_H__
  687.  
  688.  
  689.