#undef  LPVOID
#undef  DWORD
#undef  UINT

#ifdef _WIN64
#define HFONT 			HANDLE
#else
#define HFONT 			LONG
#endif
#define DWORD			LONG
#define UINT			LONG
#define LPVOID			void * 
#define LPD3DXFONT 		D3DXFont *
#define LPD3DXBUFFER		D3DXBuffer *
#define LPDIRECTXFILEDATA	IUnknown *
#define LPD3DXBASEMESH		D3DXBaseMesh *
#define LPD3DXMESH		D3DXMesh *
#define LPD3DXPMESH		D3DXPMesh *
#define LPD3DXSPMESH		D3DXSPMesh *
#define LPD3DXSKINMESH		D3DXSkinMesh *

//defined as IUnknown in wrapper code but 
//already defined in d3di.idl for VB typelib

#ifdef C_ONLY 
	#define LPDIRECT3DVERTEXBUFFER8		IUnknown*
	#define LPDIRECT3DINDEXBUFFER8		IUnknown*
	#define LPDIRECT3DDEVICE8		IUnknown*
	#define LPDIRECT3DTEXTURE8		IUnknown*
	#define LPDIRECT3DVOLUME8		IUnknown*
	#define LPDIRECT3DBASETEXTURE8		IUnknown*
	#define LPDIRECT3DCUBETEXTURE8		IUnknown*
	#define	LPDIRECT3DSURFACE8		IUnknown*

	#define D3DPOOL				LONG
	#define D3DCOLOR			LONG
	#define D3DFORMAT			LONG
	#define CONST_D3DFORMAT			LONG
	#define CONST_D3DPOOL			LONG
	#define CONST_D3DXIMAGE_FILEFORMAT	LONG


#else	

	#define	I_dxj_D3DX8			ID3DX8
	#define D3DXRTS_DESC_CDESC		D3DXRTS_DESC
	#define D3DXATTRIBUTERANGE_CDESC 	D3DXATTRIBUTERANGE
	#define D3DXMATERIAL_CDESC 		D3DXMATERIAL
	#define D3DXDECLARATOR_CDESC 		D3DXDECLARATOR
	#define D3DXATTRIBUTEWEIGHTS_CDESC 	D3DXATTRIBUTEWEIGHTS
	#define GLYPHMETRICSFLOAT_CDESC		GLYPHMETRICSFLOAT
	#define POINTFLOAT_CDESC		POINTFLOAT
	#define LOGFONT_CDESC			LOGFONT
	#define D3DXIMAGE_INFO_CDESC		D3DXIMAGE_INFO
	#define D3DXBONECOMBINATION_CDESC	D3DXBONECOMBINATION

typedef enum CONST_D3DXIMAGE_FILEFORMAT
{
    D3DXIFF_BMP         = 0,
    D3DXIFF_JPG         = 1,
    D3DXIFF_TGA         = 2,
    D3DXIFF_PNG         = 3,
    D3DXIFF_DDS         = 4,
    D3DXIFF_PPM         = 5,
    D3DXIFF_DIB         = 6,
    D3DXIFF_FORCE_DWORD = 0x7fffffff

} CONST_D3DXIMAGE_FILEFORMAT;

 [helpcontext(86596)]
 	typedef enum CONST_D3DXERR {
	        D3DXERR_CANNOTMODIFYINDEXBUFFER = 0x88760B54,
	       	D3DXERR_INVALIDMESH = 0x88760B55,
		D3DXERR_CANNOTATTRSORT = 0x88760B56,
		D3DXERR_SKINNINGNOTSUPPORTED= 0x88760B57,
		D3DXERR_TOOMANYINFLUENCES = 0x88760B58,
		D3DXERR_INVALIDDATA = 0x88760B59,
                D3DXERR_LOADEDMESHASNODATA = 0x88760B5A,
	  } CONST_D3DXERR;

 [helpcontext(86597)]
	typedef enum CONST_D3DXMESH 
	{
	    // 32BIT meshes currently not supported
	    D3DXMESH_32BIT				= 0x001, // If set, then use 32 bit indices, if not set use 16 bit indices
	    D3DXMESH_DONOTCLIP				= 0x002,
	    D3DXMESH_POINTS				= 0x004,
	    D3DXMESH_RTPATCHES				= 0x008,
            D3DXMESH_NPATCHES				= 0x4000,// Use D3DUSAGE_NPATCHES for VB & IB. 
	    D3DXMESH_VB_SYSTEMMEM			= 0x010,
	    D3DXMESH_VB_MANAGED				= 0x020,
            D3DXMESH_VB_WRITEONLY			= 0x040,
            D3DXMESH_VB_DYNAMIC				= 0x080,
	    D3DXMESH_IB_SYSTEMMEM			= 0x100,
	    D3DXMESH_IB_MANAGED				= 0x200,
            D3DXMESH_IB_WRITEONLY			= 0x400,
            D3DXMESH_IB_DYNAMIC 			= 0x800,
	    D3DXMESH_VB_SHARE               		= 0x1000,
	    D3DXMESH_USEHWONLY               		= 0x2000,
    	    D3DXMESH_SYSTEMMEM				= 0x110,
    	    D3DXMESH_MANAGED				= 0x220,
    	    D3DXMESH_WRITEONLY				= 0x440,
    	    D3DXMESH_DYNAMIC				= 0x880,

	} CONST_D3DXMESHENUM;

 [helpcontext(91001)]
 	typedef enum CONST_D3DXASM 
	{
		D3DXASM_DEBUG           =1,
		D3DXASM_SKIPVALIDATION  =2,
	} CONST_D3DXASM;



 [helpcontext(86600)]
	typedef enum CONST_D3DXMESHSIMP
	{
	    D3DXMESHSIMP_VERTEX   = 0x1,
	    D3DXMESHSIMP_FACE     = 0x2,
	} CONST_D3DXMESHSIMPENUM;


 [helpcontext(87110)]
	typedef enum CONST_DTFLAGS 
	{
	DT_TOP                      =0x00000000,	//yes winuser.h has DT_TOP and DT_LEFt set to 0
	DT_LEFT                     =0x00000000,
	DT_CENTER                   =0x00000001,
	DT_RIGHT                    =0x00000002,
	DT_VCENTER                  =0x00000004,
	DT_BOTTOM                   =0x00000008,
	DT_WORDBREAK                =0x00000010,
	DT_SINGLELINE               =0x00000020,
	DT_EXPANDTABS               =0x00000040,
	DT_TABSTOP                  =0x00000080,
	DT_NOCLIP                   =0x00000100,
	DT_EXTERNALLEADING          =0x00000200,
	DT_CALCRECT                 =0x00000400,
	DT_NOPREFIX                 =0x00000800,
	DT_INTERNAL                 =0x00001000,

	DT_EDITCONTROL              =0x00002000,
	DT_PATH_ELLIPSIS            =0x00004000,
	DT_END_ELLIPSIS             =0x00008000,
	DT_MODIFYSTRING             =0x00010000,
	DT_RTLREADING               =0x00020000,
	DT_WORD_ELLIPSIS            =0x00040000,
	
	DT_NOFULLWIDTHCHARBREAK     =0x00080000,
	DT_HIDEPREFIX               =0x00100000,
	DT_PREFIXONLY               =0x00200000,
	} CONST_DTFLAGS ;


 [helpcontext(86599)]
	typedef enum CONST_D3DXMESHOPT 
	{
    D3DXMESHOPT_COMPACT       = 0x01000000,
    D3DXMESHOPT_ATTRSORT      = 0x02000000,
    D3DXMESHOPT_VERTEXCACHE   = 0x04000000,
    D3DXMESHOPT_STRIPREORDER  = 0x08000000,
    D3DXMESHOPT_IGNOREVERTS   = 0x10000000,  // optimize faces only, don't touch vertices
    D3DXMESHOPT_SHAREVB       = 0x20000000,
	} CONST_D3DXMESHOPTENUM;

 [helpcontext(86598)]
	typedef enum CONST_D3DXMESHMISC 
	{
		UNUSED16 =0x0000ffff,
		UNUSED32 =0xffffffff,	
		MAX_FVF_DECL_SIZE = 20,
	} CONST_D3DXMESHMISCENUM;


#endif

 [helpcontext(86594)]
typedef struct D3DXRTS_DESC_CDESC
{
    LONG                Width;
    LONG                Height;
    LONG           Format;
    LONG                DepthStencil;
    LONG                DepthStencilFormat;

} D3DXRTS_DESC_CDESC;

 [helpcontext(86590)]
typedef struct D3DXATTRIBUTERANGE_CDESC
{
    DWORD AttribId;
    DWORD FaceStart;
    DWORD FaceCount;
    DWORD VertexStart;
    DWORD VertexCount;
} D3DXATTRIBUTERANGE_CDESC;

 [helpcontext(86591)]
typedef struct D3DXATTRIBUTEWEIGHTS_CDESC
{
    FLOAT Position;
    FLOAT Boundary;
    FLOAT Normal;
    FLOAT Diffuse;
    FLOAT Specular;
    FLOAT Tex[8];
} D3DXATTRIBUTEWEIGHTS_CDESC;

[helpcontext(87090)]
typedef struct D3DXBONECOMBINATION_CDESC
{
    DWORD AttribId;
    DWORD FaceStart;
    DWORD FaceCount;
    DWORD VertexStart;
    DWORD VertexCount;
[hidden]	DWORD pBones;
} D3DXBONECOMBINATION_CDESC;

[helpcontext(87091)]
typedef struct D3DXIMAGE_INFO_CDESC
{
    UINT Width;
    UINT Height;
    UINT Depth;
    UINT MipLevels;
} D3DXIMAGE_INFO_CDESC;

 [helpcontext(86593)]
 typedef struct D3DXMATERIAL_CDESC
 {
    D3DMATERIAL8_CDESC  MatD3D;
    BSTR          	TextureFilename;
 } D3DXMATERIAL_CDESC;


 [helpcontext(86592)]
typedef struct D3DXDECLARATOR_CDESC
{
    LONG value[32];
} D3DXDECLARATOR_CDESC;

[helpcontext(87092)]
typedef struct POINTFLOAT_CDESC {
    FLOAT   x;
    FLOAT   y;
} POINTFLOAT_CDESC;

[helpcontext(87093)]
typedef struct GLYPHMETRICSFLOAT_CDESC {
    FLOAT BlackBoxX;
    FLOAT BlackBoxY;
    POINTFLOAT_CDESC  GlyphOrigin;
    FLOAT CellIncX;
    FLOAT CellIncY;
} GLYPHMETRICSFLOAT_CDESC;

[helpcontext(87094)]
typedef struct LOGFONT_CDESC
{
    LONG Height;
    LONG Width;
    LONG Escapement;
    LONG Orientation;
    LONG Weight;
    BYTE Italic;
    BYTE Underline;
    BYTE StrikeOut;
    BYTE CharSet;
    BYTE OutPrecision;
    BYTE ClipPrecision;
    BYTE Quality;
    BYTE PitchAndFamily;
    BYTE FaceName[32];
} LOGFONT_CDESC;




//forward references to interfaces

interface D3DXFont;
interface D3DXBuffer;
interface I_dxj_D3DX8;
interface D3DXBasMesh;
interface D3DXMesh;
interface D3DXPMesh;
interface D3DXSPMesh;
interface D3DXSkinMesh;
interface D3DXSprite;

#ifdef VB_ONLY
//CONSTANTS
 [helpcontext(86595)]
typedef enum CONST_D3DXENUM {

	//#define D3DX_DEFAULT        ULONG_MAX
	//#define D3DX_DEFAULT_FLOAT  FLT_MAX

	D3DX_DEFAULT=0xFFFFFFFF,
	D3DX_FILTER_NONE      =1,
	D3DX_FILTER_POINT     =2,
	D3DX_FILTER_LINEAR    =3,
	D3DX_FILTER_TRIANGLE  =4,
	D3DX_FILTER_BOX       =5,

	D3DX_FILTER_MIRROR_U   = 0x00010000,
	D3DX_FILTER_MIRROR_V   = 0x00020000,
	D3DX_FILTER_MIRROR_W   = 0x00040000,
	D3DX_FILTER_MIRROR     = 0x00070000,
	D3DX_FILTER_DITHER     = 0x00080000,
} CONST_D3DXENUM;

#endif


[ 
 object,
 uuid(932E6A7E-C68E-45dd-A7BF-53D19C86DB1F),		
 pointer_default(unique),
 helpcontext(86361),
 local
]

interface D3DXBuffer : IUnknown
{
 
    // ID3DXBuffer
 [helpcontext(86402)]    DWORD GetBufferPointer();
 [helpcontext(86403)]    DWORD GetBufferSize();	
 
};


[ 
 object,
 uuid(2D501DF7-D253-4414-865F-A6D54A753138),		
 pointer_default(unique),
 helpcontext(86364),
 local
]
interface D3DXFont : IUnknown
{
     [helpcontext(86408)]         HRESULT GetDevice([out,retval] LPDIRECT3DDEVICE8* ppDevice) ;
     [helpcontext(86409)]         HRESULT GetLogFont([in,out] LOGFONT_CDESC * LogFont);


     [helpcontext(86405)]         HRESULT Begin() ;

     [helpcontext(87095),hidden]  INT DrawTextA([in] BYTE *Text, [in] INT Count, [in] RECT_CDESC *DestRect, [in] LONG Format, [in] LONG Color);
     [helpcontext(86406)]         INT     DrawTextW([in] BSTR Text, [in] INT Count, [in] RECT_CDESC *DestRect, [in] LONG Format, [in] LONG Color);
     [helpcontext(86407)]          HRESULT End();
     [helpcontext(86407)]          HRESULT OnLostDevice();
     [helpcontext(86407)]          HRESULT OnResetDevice();

};



[ 
 object,
 uuid(E8691849-87B8-4929-9050-1B0542D5538C),		
 pointer_default(unique),
 helpcontext(87096),
 local
]
interface D3DXSprite : IUnknown
{
 [helpcontext(86473)]    HRESULT GetDevice([out,retval] LPDIRECT3DDEVICE8* ppDevice);

 [helpcontext(86469)]    HRESULT Begin();

 [helpcontext(86470)]    HRESULT Draw([in] LPDIRECT3DTEXTURE8 SrcTexture,[in] void *SrcRect, [in] D3DVECTOR2_CDESC *Scaling, 
		[in] D3DVECTOR2_CDESC *RotationCenter, [in] FLOAT Rotation, 
		[in] D3DVECTOR2_CDESC *Translation, [in] LONG Color);

 [helpcontext(86471)]    HRESULT DrawTransform([in] LPDIRECT3DTEXTURE8 SrcTexture,[in] void *SrcRect, 
		[in] D3DMATRIX_CDESC *TransformMatrix,
		[in] LONG Color);

 [helpcontext(86472)]    HRESULT End();
     [helpcontext(86407)]          HRESULT OnLostDevice();
     [helpcontext(86407)]          HRESULT OnResetDevice();
};







[ 
 object,
 uuid(69CC587C-E40C-458d-B5D3-B029E18EB60A),		
 pointer_default(unique),
 helpcontext(87097),
 local
]
interface D3DXRenderToSurface : IUnknown
{

 [helpcontext(86432)]    HRESULT GetDevice([out,retval] LPDIRECT3DDEVICE8* ppDevice);
 [helpcontext(86431)]    HRESULT GetDesc ([out] D3DXRTS_DESC_CDESC *Parameters);
 [helpcontext(86429)]    HRESULT BeginScene([in] LPDIRECT3DSURFACE8 Surface, [in] D3DVIEWPORT8_CDESC * Viewport) ;
 [helpcontext(86430)]    HRESULT EndScene();
     [helpcontext(86407)]          HRESULT OnLostDevice();
     [helpcontext(86407)]          HRESULT OnResetDevice();
};




[ 
 object,
 uuid(A69BA991-1F7D-11d3-B929-00C04F68DC23),		
 pointer_default(unique),
 helpcontext(86344),
 local
]

interface D3DXBaseMesh  : IUnknown
{
 
   // ID3DXBaseMesh
 [helpcontext(86387)]    HRESULT DrawSubset ([in] DWORD attribId) ;
 [helpcontext(86393)]    DWORD   GetNumFaces ();
 [helpcontext(86394)]    DWORD   GetNumVertices();
 [helpcontext(86391)]    DWORD   GetFVF();
 [helpcontext(86389)]    HRESULT GetDeclaration([in,out] DWORD *Declaration);	
 [helpcontext(86395)]    DWORD   GetOptions();
 [helpcontext(86390)]    HRESULT GetDevice([out,retval] LPDIRECT3DDEVICE8 *ret);
 [helpcontext(86386)]    HRESULT CloneMeshFVF([in] DWORD options, 
		      [in] DWORD fvf, 
		      [in] LPDIRECT3DDEVICE8 D3DDevice,
		      [out,retval] LPD3DXMESH *ppCloneMesh);

 [helpcontext(86385)]    HRESULT CloneMesh([in] DWORD options, 
		      [in] void *Declaration,
		      [in] LPDIRECT3DDEVICE8 D3DDevice,
		      [out,retval] LPD3DXMESH *ppCloneMesh);
		
 [helpcontext(86396)]    HRESULT GetVertexBuffer([out,retval] LPDIRECT3DVERTEXBUFFER8* ppVB) ;
 [helpcontext(86392)]    HRESULT GetIndexBuffer ([out,retval] LPDIRECT3DINDEXBUFFER8* ppIB) ;
 [helpcontext(86398)]    HRESULT LockVertexBuffer([in] DWORD flags, [out,retval] LONG *VBuffAddr);
 [helpcontext(86400)]    HRESULT UnlockVertexBuffer();
 [helpcontext(86397)]    HRESULT LockIndexBuffer([in] DWORD flags, [out,retval] LONG *IBuffAddr);
 [helpcontext(86399)]    HRESULT UnlockIndexBuffer();
 //[helpcontext(86388)]    HRESULT GetAttributeTable([in,out] D3DXATTRIBUTERANGE_CDESC *attribEntry, [in,out] DWORD* attribTabSize);
 [helpcontext(86348)]    HRESULT GetAttributeTable([in,out] void *attribEntry, [in,out] DWORD* attribTabSize);
 [helpcontext(86411)]  	 HRESULT ConvertPointRepsToAdjacency(void *PointRep, void* Adjacency);
 [helpcontext(87098)]  	 HRESULT ConvertAdjacencyToPointReps(void* Adjacency, void *PointRep);
 [helpcontext(86412)]    HRESULT GenerateAdjacency ([in] FLOAT epsilon, [in,out] void* Adjacency);

};





[ 
 object,
 uuid(9D84AC46-6B90-49a9-A721-085C7A3E3DAE),		
 pointer_default(unique),
 helpcontext(86365),
 local
]

interface D3DXMesh  : IUnknown
{
 
   // ID3DXBaseMesh
 [helpcontext(88348)]        HRESULT DrawSubset ([in] DWORD attribId) ;
 [helpcontext(86349)]        DWORD   GetNumFaces ();
 [helpcontext(86350)]        DWORD   GetNumVertices();
 [helpcontext(86351)]        DWORD   GetFVF();
 [helpcontext(86352)]        HRESULT GetDeclaration([in,out] DWORD *Declaration);	
 [helpcontext(86353)]        DWORD   GetOptions();
 [helpcontext(86354)]        HRESULT GetDevice([out,retval] LPDIRECT3DDEVICE8 *ret);
 [helpcontext(86355)]        HRESULT CloneMeshFVF([in] DWORD options, 
		      [in] DWORD fvf, 
		      [in] LPDIRECT3DDEVICE8 D3DDevice,
		      [out,retval] LPD3DXMESH *ppCloneMesh);

 [helpcontext(86356)]        HRESULT CloneMesh([in] DWORD options, 
		      [in] void *Declaration,
		      [in] LPDIRECT3DDEVICE8 D3DDevice,
		      [out,retval] LPD3DXMESH *ppCloneMesh);
		
 [helpcontext(86357)]        HRESULT GetVertexBuffer([out,retval] LPDIRECT3DVERTEXBUFFER8* ppVB) ;
 [helpcontext(86358)]        HRESULT GetIndexBuffer ([out,retval] LPDIRECT3DINDEXBUFFER8* ppIB) ;
 [helpcontext(86359)]        HRESULT LockVertexBuffer([in] DWORD flags, [out,retval] LONG *VBuffAddr);
 [helpcontext(86360)]        HRESULT UnlockVertexBuffer();
 [helpcontext(96361)]        HRESULT LockIndexBuffer([in] DWORD flags, [out,retval] LONG *IBuffAddr);
 [helpcontext(96362)]        HRESULT UnlockIndexBuffer();
 [helpcontext(86363)]        HRESULT GetAttributeTable([in,out] void *attribEntry, [in,out] DWORD* attribTabSize);

    // ID3DXMesh
 [helpcontext(86411)]  	 HRESULT ConvertPointRepsToAdjacency(void *PointRep, void* Adjacency);
 [helpcontext(87098)]  	 HRESULT ConvertAdjacencyToPointReps(void* Adjacency, void *PointRep);
 [helpcontext(86412)]    HRESULT GenerateAdjacency ([in] FLOAT epsilon, [in,out] void* Adjacency);

 //REMOVED 07/16/00 [helpcontext(99389)]    HRESULT GeneratePointReps ([in] void* Adjacency, [in,out] void* PRep) ;

 [helpcontext(86413)]    HRESULT LockAttributeBuffer([in] LONG flags, [out,retval] LONG *pData);
 [helpcontext(86416)]    HRESULT UnlockAttributeBuffer();

 [helpcontext(86414)]    HRESULT Optimize ([in] DWORD flags,[in,out] void* adjacency, [in,out] void* optAdj, 
                     [in,out] void* FaceRemap, [out] LPD3DXBUFFER *VertexRemapOut,  
                     [out,retval] LPD3DXMESH* ppOptMesh);
 [helpcontext(86415)]	 HRESULT OptimizeInplace([in] DWORD flags,[in] void* adjacencyIn, [in,out] void* adjacencyOut, 
                          [in] void * faceRemap, [out] LPD3DXBUFFER *VertexRemapOut);
};







[ 
 object,	
 uuid(82A53844-F322-409e-A2E9-992E1104069D),		
 pointer_default(unique),
 helpcontext(870999),
 local
]

interface D3DXSkinMesh  : IUnknown
{
 
   // ID3DXMesh

 [helpcontext(86893)]    DWORD   GetNumFaces ();
 [helpcontext(86894)]    DWORD   GetNumVertices();
 [helpcontext(86891)]    DWORD   GetFVF();
 [helpcontext(86889)]    HRESULT GetDeclaration([in,out] DWORD *Declaration);	
 [helpcontext(86895)]    DWORD   GetOptions();
 [helpcontext(86438)]    HRESULT GetDevice([out,retval] LPDIRECT3DDEVICE8 *ret);
 [helpcontext(86445)]    HRESULT GetVertexBuffer([out,retval] LPDIRECT3DVERTEXBUFFER8* ppVB) ;
 [helpcontext(86439)]    HRESULT GetIndexBuffer ([out,retval] LPDIRECT3DINDEXBUFFER8* ppIB) ;
 [helpcontext(86448)]    HRESULT LockVertexBuffer([in] DWORD flags, [out,retval] LONG *VBuffAddr);
 [helpcontext(86452)]    HRESULT UnlockVertexBuffer();
 [helpcontext(86447)]    HRESULT LockIndexBuffer([in] DWORD flags, [out,retval] LONG *IBuffAddr);
 [helpcontext(86451)]    HRESULT UnlockIndexBuffer();
 [helpcontext(86446)]    HRESULT LockAttributeBuffer([in] LONG flags, [out,retval] LONG *pData);
 [helpcontext(86450)]    HRESULT UnlockAttributeBuffer();
 [helpcontext(86443)]    DWORD        GetNumBones();
 [helpcontext(86444)]    HRESULT GetOriginalMesh([out,retval] LPD3DXMESH *pMesh);
 [helpcontext(86449)]    HRESULT SetBoneInfluence([in] DWORD bone, [in] DWORD numInfluences, [in] DWORD *vertices, [in] FLOAT *weights);
 [helpcontext(86442)]    DWORD   GetNumBoneInfluences([in] DWORD bone);
 [helpcontext(86437)]    HRESULT GetBoneInfluence([in] DWORD bone, [in,out] DWORD *vertices, [in,out] FLOAT *weights);
 [helpcontext(86441)]    HRESULT GetMaxVertexInfluences([out,retval] DWORD *maxVertexInfluences);
 [helpcontext(86440)]    HRESULT GetMaxFaceInfluences([out,retval] DWORD *maxFaceInfluences);


 [helpcontext(86434)]    HRESULT ConvertToBlendedMesh(
				[in] DWORD options, [in] void *AdjacencyIn,  [in,out] void *AdjacencyOut,
				[in,out] DWORD* RetNumBoneCombinations, [in,out] LPD3DXBUFFER* RetBoneCombinationTable,
				[in,out] void* pFaceRemap,
				[in,out] LPD3DXBUFFER* VertexRemap,
				[out,retval] LPD3DXMESH* RetMesh);

 [helpcontext(86435)]    HRESULT ConvertToIndexedBlendedMesh(
				[in] DWORD options, [in] void *AdjacencyIn, [in] DWORD paletteSize,
				[in,out] void *AdjacencyOut,
				[in,out] DWORD* RetNumBoneCombinations, [in,out] LPD3DXBUFFER* RetBoneCombinationTable,
				[in,out] void* pFaceRemap,
				[in,out] LPD3DXBUFFER* VertexRemap,
				[out,retval] LPD3DXMESH *RetMesh);

 [helpcontext(86436)]    HRESULT GenerateSkinnedMesh (
				[in] DWORD options, [in] FLOAT minWeight,
				[in] void *AdjacencyIn,  [in,out] void *AdjacencyOut,
				[in,out] void* pFaceRemap,
				[in,out] LPD3DXBUFFER* VertexRemap,
				[out,retval] LPD3DXMESH *RetMesh);

 [helpcontext(87100)]    HRESULT UpdateSkinnedMesh (
				[in] void* BoneTransformsIn, [in] D3DMATRIX_CDESC* BoneInvTransforms, [in,out] LPD3DXMESH RetMesh);


};

 



[ 
 object,
 uuid(15981AA8-1A05-48e3-BBE7-FF5D49654E3F),		
 pointer_default(unique),
 helpcontext(86371),
 local
]

interface D3DXPMesh  : IUnknown
{


   // ID3DXBaseMesh
 [helpcontext(88350)]        HRESULT DrawSubset ([in] DWORD attribId) ;
 [helpcontext(88351)]        DWORD   GetNumFaces ();
 [helpcontext(88352)]        DWORD   GetNumVertices();
 [helpcontext(88353)]        DWORD   GetFVF();
 [helpcontext(88354)]        HRESULT GetDeclaration([in,out] DWORD *Declaration);	
 [helpcontext(88355)]        DWORD   GetOptions();
 [helpcontext(88356)]        HRESULT GetDevice([out,retval]     LPDIRECT3DDEVICE8 *ret);

 [helpcontext(88357)]        HRESULT CloneMeshFVF([in] DWORD options, 
		      [in] DWORD fvf, 
		      [in] LPDIRECT3DDEVICE8 D3DDevice,
		      [out,retval] LPD3DXMESH *ppCloneMesh);

 [helpcontext(88358)]        HRESULT CloneMesh([in] DWORD options, 
		      [in] void *Declaration,
		      [in] LPDIRECT3DDEVICE8 D3DDevice,
		      [out,retval] LPD3DXMESH *ppCloneMesh);
		
 [helpcontext(88359)]        HRESULT GetVertexBuffer([out,retval] LPDIRECT3DVERTEXBUFFER8* ppVB) ;
 [helpcontext(88360)]        HRESULT GetIndexBuffer ([out,retval] LPDIRECT3DINDEXBUFFER8* ppIB) ;
 [helpcontext(88361)]        HRESULT LockVertexBuffer([in] DWORD flags, [out,retval] LONG *VBuffAddr);
 [helpcontext(88362)]        HRESULT UnlockVertexBuffer();
 [helpcontext(88363)]        HRESULT LockIndexBuffer([in] DWORD flags, [out,retval] LONG *IBuffAddr);
 [helpcontext(88364)]        HRESULT UnlockIndexBuffer();

 [helpcontext(88365)]        HRESULT GetAttributeTable([in,out] void *attribEntry, [in,out] DWORD* attribTabSize);
    // ID3DXMesh
 [helpcontext(86411)]  	 HRESULT ConvertPointRepsToAdjacency(void *PointRep, void* Adjacency);
 [helpcontext(87098)]  	 HRESULT ConvertAdjacencyToPointReps(void* Adjacency, void *PointRep);
 [helpcontext(86412)]    HRESULT GenerateAdjacency ([in] FLOAT epsilon, [in,out] void* Adjacency);


    // ID3DXPMesh
 [helpcontext(86419)]    HRESULT ClonePMeshFVF([in] DWORD options, 
		       [in] DWORD fvf, 
		       [in] LPDIRECT3DDEVICE8 D3DDevice,
		       [out,retval] LPD3DXPMESH *ppCloneMesh);

 [helpcontext(86418)]    HRESULT ClonePMesh([in] DWORD options, 
		       [in] void *Declaration,
		       [in] LPDIRECT3DDEVICE8 D3DDevice,
		       [out,retval] LPD3DXPMESH *ppCloneMesh);

 [helpcontext(86426)]    HRESULT SetNumFaces([in] DWORD faces);
 [helpcontext(86427)]    HRESULT SetNumVertices([in] DWORD vertices) ;
 [helpcontext(86421)]    DWORD   GetMaxFaces();
 [helpcontext(86423)]    DWORD   GetMinFaces();
 [helpcontext(86422)]    DWORD   GetMaxVertices();
 [helpcontext(86424)]    DWORD   GetMinVertices();
 //[helpcontext(86400),hidden]    HRESULT Save(IStream* pStream,[in] LONG MaterialBufferHandle,[in] LONG NumMaterials);
 [helpcontext(86400),hidden]    HRESULT Save([in] LONG  pIStream,[in] LONG MaterialBufferHandle,[in] LONG NumMaterials);
 [helpcontext(86425)]    HRESULT Optimize ([in] DWORD Flags,[in,out] void * AdjacencyOut, [in,out] void * FaceRemap,
			 [in,out]  LPD3DXBUFFER *VertexRemapOut,  [out,retval] LPD3DXMESH* ppOptMesh);
 [helpcontext(86425)]    HRESULT OptimizeBaseLOD([in] DWORD Flags, [in,out] void* FaceRemap);
 [helpcontext(86425)]    HRESULT TrimByFaces([in] DWORD NewFacesMin, [in] DWORD NewFacesMax, [in,out] DWORD *rgiFaceRemap, [in,out] DWORD *rgiVertRemap);
 [helpcontext(86425)]    HRESULT TrimByVertices([in] DWORD NewVerticesMin, [in] DWORD NewVerticesMax, [in,out] DWORD *rgiFaceRemap, [in,out] DWORD *rgiVertRemap);
 [helpcontext(86420)]    HRESULT GetAdjacency ([out] void * AdjacencyOut);

};



[ 
 object,
 uuid(BC3BBDE2-1F7D-11d3-B929-00C04F68DC23),		
 pointer_default(unique),
 helpcontext(86380),
 local
]

interface D3DXSPMesh  : IUnknown
{

        // ID3DXSPMesh
 [helpcontext(86463)]	DWORD GetNumFaces();
 [helpcontext(86464)]	DWORD GetNumVertices();
 [helpcontext(86460)]	DWORD GetFVF();
 [helpcontext(86458)]   HRESULT GetDeclaration([in,out] DWORD *Declaration);	
 [helpcontext(86465)]	DWORD GetOptions();
 [helpcontext(86459)]	HRESULT GetDevice([out,retval]     LPDIRECT3DDEVICE8 *ret);

 
 [helpcontext(86455)]        HRESULT CloneMeshFVF([in] DWORD options, 
		      [in] DWORD fvf, 
		      [in] LPDIRECT3DDEVICE8 D3DDevice,
		      [in,out] void *AdjacencyOut,
		      [in,out] void *VertexRemapOut,
		      [out,retval] LPD3DXPMESH *ppCloneMesh);

 [helpcontext(86454)]        HRESULT CloneMesh([in] DWORD options, 
		      [in] void *Declaration,
		      [in] LPDIRECT3DDEVICE8 D3DDevice,
		      [in,out] void *AdjacencyOut,
		      [in,out] void *VertexRemapOut,
		      [out,retval] LPD3DXPMESH *ppCloneMesh);


 [helpcontext(86457)]	HRESULT ClonePMeshFVF ([in] DWORD options, 
                [in] DWORD fvf, [in] LPDIRECT3DDEVICE8 pD3D, [in,out] void *VertexRemapOut,[out,retval] LPD3DXPMESH* ppCloneMesh) ;

 [helpcontext(86456)]	HRESULT ClonePMesh ([in] DWORD options, 
                [in] void *Declaration, [in] LPDIRECT3DDEVICE8 pD3D, [in,out] void *VertexRemapOut, [out,retval] LPD3DXPMESH* ppCloneMesh) ;

 [helpcontext(86466)]	HRESULT ReduceFaces([in] DWORD faces) ;
 [helpcontext(86467)]	HRESULT ReduceVertices([in] DWORD vertices) ;
 [helpcontext(86461)]	DWORD GetMaxFaces() ;
 [helpcontext(86462)]	DWORD GetMaxVertices() ;
};



















[ 
 object,
 uuid(3AC50043-CF82-4c44-862E-B206B4F03301),		
 pointer_default(unique),
 local,
 helpcontext(89202),
 hidden
]

interface I_dxj_D3DX8 : IUnknown
{
 [helpcontext(86336)]	HRESULT     CreateFont(
		        [in] LPDIRECT3DDEVICE8  	 Device,
		        [in] HFONT               	 hFont,
		        [out,retval] LPD3DXFONT*   retFont);

 [helpcontext(96344)]	HRESULT     DrawText(
		        [in] LPD3DXFONT    	 d3dFont,
        		[in] D3DCOLOR            Color,
        		[in] BSTR                TextString,
			[in] RECT*               Rect,
        		[in] DWORD               Format);

 [helpcontext(96365)]	HRESULT	    	GetFVFVertexSize(
			[in] DWORD FVF,
			[out,retval] DWORD *size);
		

 [helpcontext(86312)]    	HRESULT		AssembleShaderFromFile(
		        [in] 	BSTR            SrcFile,
			[in]    LONG		Flags,
			[in,out] BSTR		*ErrLog,
			[in,out] LPD3DXBUFFER*	Constants,
			[out,retval]        LPD3DXBUFFER*         ppVertexShader);

			
 [helpcontext(86311)]	HRESULT		AssembleShader(
			[in] 	BSTR		SrcData,
			[in]    LONG		Flags,
			[in,out] LPD3DXBUFFER*	Constants,
			[in,out,optional] BSTR	*ErrLog,
			[out,retval]	    LPD3DXBUFFER*         ppVertexShader);


 [helpcontext(96364)]	HRESULT		GetErrorString([in] LONG hr, [out,retval] BSTR *retStr);


 [helpcontext(96371)]	HRESULT     	LoadSurfaceFromFile(
		        [in]	LPDIRECT3DSURFACE8    DestSurface,
		        [in]	void *                DestPalette,
        		[in]	void *                DestRect,
        		[in] 	BSTR                  SrcFile,
        		[in]	void*                 SrcRect,
			[in]    DWORD                 Filter,
        		[in]	LONG                  ColorKey,
			[in,out]    void*		      SrcInfo);



 [helpcontext(86372)]	HRESULT     	LoadSurfaceFromFileInMemory(
		        [in]	LPDIRECT3DSURFACE8    DestSurface,
		        [in]	void *                DestPalette,
        		[in]	void *                DestRect,
        		[in] 	void *                SrcData,
        		[in] 	LONG	              LengthInBytes,
        		[in]	void *                SrcRect,
			[in]    DWORD                 Filter,
        		[in]	LONG                  ColorKey,
			[in,out]    void*		      SrcInfo);


 [helpcontext(86375)]	HRESULT     	LoadSurfaceFromSurface(
		        [in]	LPDIRECT3DSURFACE8    DestSurface,
			[in]    void *                DestPalette,
			[in]    void *                DestRect,
			[in]	LPDIRECT3DSURFACE8    SrcSurface,
			[in]    void *                SrcPalette,
			[in]    void *                SrcRect,
			[in]    DWORD                 Filter,
        		[in]	LONG                  ColorKey);

 [helpcontext(86373)]	HRESULT 	LoadSurfaceFromMemory(
		        [in]	LPDIRECT3DSURFACE8    DestSurface,
			[in]    void *                DestPalette,
			[in]    void *                DestRect,
        		[in]	LPVOID                SrcData,
		        [in]	CONST_D3DFORMAT       formatSrc,
        		[in]	UINT                  SrcPitch,
        		[in]	void *                SrcPalette,
		        [in]	RECT_CDESC *                SrcRect,
		        [in] 	LONG	              Filter,
        		[in]	LONG                  ColorKey);


 [helpcontext(86320)]	HRESULT     	CheckTextureRequirements(
		        [in,out]	LPDIRECT3DDEVICE8     Device,
		        [in,out] 	LONG*                 Width,
		        [in,out]	LONG*                 Height,
		        [in,out]	LONG*	              NumMipLevels,
			[in]		LONG		      Usage,
		        [in,out]	CONST_D3DFORMAT*      PixelFormat,
			[in]		CONST_D3DPOOL		      Pool);


 [helpcontext(96349)]	HRESULT     	CreateTexture(
		        [in]	LPDIRECT3DDEVICE8    Device,
		        [in]	UINT                  Width,
		        [in]	UINT                  Height,
		        [in]	UINT                  MipLevels,
			[in]	LONG                  Usage,
		        [in]	CONST_D3DFORMAT             PixelFormat,
			[in]	CONST_D3DPOOL               Pool,
		        [out,retval] LPDIRECT3DTEXTURE8*    ppTexture);

 [helpcontext(96354)]        HRESULT 	CreateTextureFromResource( 
           		[in]	LPDIRECT3DDEVICE8    Device,
#ifdef _WIN64
			[in]	HANDLE  hModule,
#else
			[in]	LONG  hModule,
#endif
   			[in]	BSTR SrcResource,
		        [out,retval] LPDIRECT3DTEXTURE8*    ppTexture);

 [helpcontext(96350)]    	HRESULT		CreateTextureFromFile(
		        [in]	LPDIRECT3DDEVICE8     Device,
		        [in]	BSTR	SrcFile,
		        [out,retval]	LPDIRECT3DTEXTURE8*    ppTexture);


 [helpcontext(96351)]    	HRESULT		CreateTextureFromFileEx(
		        [in]	LPDIRECT3DDEVICE8     Device,
		        [in]	BSTR	SrcFile,
		        [in]	UINT                  Width,
		        [in]	UINT                  Height,
		        [in]	UINT                  MipLevels,
			[in]	LONG                  Usage,
		        [in]	CONST_D3DFORMAT       PixelFormat,
			[in]	CONST_D3DPOOL               Pool,
        		[in]	DWORD                 Filter,
			[in]    DWORD                 MipFilter,
			[in]    DWORD                 ColorKey,
			[in,out]    void*		      SrcInfo,
			[in]	void*   	      Palette,
		        [out,retval]	LPDIRECT3DTEXTURE8*    ppTexture);


 [helpcontext(96352)]    	HRESULT		CreateTextureFromFileInMemory(
		        [in]	LPDIRECT3DDEVICE8     Device,
		        [in]	void	*SrcData,
		        [in]	LONG	LengthInBytes,
		        [out,retval]	LPDIRECT3DTEXTURE8*    ppTexture);


 [helpcontext(96353)]    	HRESULT		CreateTextureFromFileInMemoryEx(
		        [in]	LPDIRECT3DDEVICE8     Device,
		        [in]	void	*SrcData,
		        [in]	LONG	LengthInBytes,
		        [in]	UINT                  Width,
		        [in]	UINT                  Height,
		        [in]	UINT                  MipLevels,
			[in]	LONG                  Usage,
		        [in]	CONST_D3DFORMAT       PixelFormat,
			[in]	CONST_D3DPOOL         Pool,
        		[in]	DWORD                 Filter,
			[in]    DWORD                 MipFilter,
			[in]    DWORD                 ColorKey,
			[in,out]    void*		      SrcInfo,
			[in]	void*   	      Palette,
		        [out,retval]	LPDIRECT3DTEXTURE8*    ppTexture);

 [helpcontext(96360)]	HRESULT		FilterTexture(
			[in]    LPDIRECT3DTEXTURE8     	Texture,
			[in] 	void*             	Palette,
			[in]    UINT                 	SrcLevel,
			[in]    DWORD                 	Filter);



 [helpcontext(86319)]	HRESULT 	CheckCubeTextureRequirements(
			[in]        LPDIRECT3DDEVICE8     Device,
		        [in,out]	UINT*		Size,
			[in,out]        UINT*           NumMipLevels,
			[in]		LONG                  Usage,
		        [in,out]	CONST_D3DFORMAT        *PixelFormat,
			[in]	CONST_D3DPOOL               Pool);


 [helpcontext(86330)]	HRESULT		CreateCubeTexture(
		        [in]	LPDIRECT3DDEVICE8     pDevice,
			[in]        UINT                  Size,
			[in]        UINT                  MipLevels,
			[in]	LONG                  Usage,
		        [in]	CONST_D3DFORMAT             PixelFormat,
			[in]	CONST_D3DPOOL               Pool,
			[out,retval]        LPDIRECT3DCUBETEXTURE8*   ppCubeTexture);


 [helpcontext(86331)]    	HRESULT		CreateCubeTextureFromFile(
		        [in]	LPDIRECT3DDEVICE8     	Device,
		        [in]	BSTR			SrcFile,
			[out,retval]	        LPDIRECT3DCUBETEXTURE8*   ppCubeTexture);


 [helpcontext(86332)]    	HRESULT		CreateCubeTextureFromFileEx(
		        [in]	LPDIRECT3DDEVICE8     Device,
		        [in]	BSTR	SrcFile,
		        [in]	UINT                  TextureSize,
		        [in]	UINT                  MipLevels,
			[in]	LONG                  Usage,
		        [in]	CONST_D3DFORMAT       PixelFormat,
			[in]	CONST_D3DPOOL               Pool,
        		[in]	DWORD                 Filter,
			[in]    DWORD                 MipFilter,
			[in]    DWORD		      ColorKey,
			[in,out]    void*		      SrcInfo,
			[in]	void*   	      Palette,
		        [out,retval]	LPDIRECT3DCUBETEXTURE8*    ppTexture);


 [helpcontext(86333)]    	HRESULT		CreateCubeTextureFromFileInMemory(
		        [in]	LPDIRECT3DDEVICE8     Device,
		        [in]	void	*SrcData,
		        [in]	LONG	LengthInBytes,
		        [out,retval]	LPDIRECT3DCUBETEXTURE8*    ppTexture);


 [helpcontext(86334)]    	HRESULT		CreateCubeTextureFromFileInMemoryEx(
		        [in]	LPDIRECT3DDEVICE8     Device,
		        [in]	void	*SrcData,
		        [in]	LONG	LengthInBytes,
		        [in]	UINT                  TextureSize,
		        [in]	UINT                  MipLevels,
			[in]	LONG                  Usage,
		        [in]	CONST_D3DFORMAT       PixelFormat,
			[in]	CONST_D3DPOOL               Pool,
        		[in]	DWORD                 Filter,
			[in]    DWORD                 MipFilter,
			[in]    DWORD		      ColorKey,
			[in,out]    void*		      SrcInfo,
			[in]	void*   	      Palette,
		        [out,retval]	LPDIRECT3DCUBETEXTURE8*    ppTexture);

 [helpcontext(96359)]	HRESULT     	FilterCubeTexture(
		        [in]	LPDIRECT3DCUBETEXTURE8    CubeTexture,
		        [in]    void                  *Palette,
			[in]    UINT                 	SrcLevel,
			[in]    DWORD                 Filter);


 [helpcontext(86321)]        HRESULT 	CheckVolumeTextureRequirements(
			[in]	LPDIRECT3DDEVICE8     Device,
	      	  	[out]	LONG*                 Width,
	      	  	[out]	LONG*                 Height,
	      	  	[out]	LONG*                 Depth,
	      	  	[out]	LONG*                 NumMipLevels,
			[in]	LONG                  Usage,
		        [in,out]CONST_D3DFORMAT       *PixelFormat,
			[in]	CONST_D3DPOOL               Pool);



 [helpcontext(96355)]        HRESULT 	CreateTextureFromResourceEx( 
		             [in]  LPDIRECT3DDEVICE8 Device,
#ifdef _WIN64
			[in]	HANDLE  hSrcModule,
#else
			[in]	LONG  hSrcModule,
#endif
	        	     [in]  BSTR SrcResource,
			     [in]  LONG Width,
			     [in]  LONG Height,
			     [in]  LONG MipLevels,
     			     [in]	LONG                  Usage,
		             [in]	CONST_D3DFORMAT       PixelFormat,
			     [in]	CONST_D3DPOOL               Pool,
			     [in]  LONG Filter,
			     [in]  LONG MipFilter,
			     [in]  DWORD ColorKey,
   			     [in,out]  void *SrcInfo,
			     [in]  void *Palette,
		             [out,retval] LPDIRECT3DTEXTURE8 *retTexture);

 [helpcontext(96357)]        HRESULT 	CreateVolumeTexture(
		             [in]  LPDIRECT3DDEVICE8 Device,
			     [in]  LONG Width,
			     [in]  LONG Height,
			     [in]  LONG Depth,
			     [in]  LONG MipLevels,
			     [in]	LONG                  Usage,
		             [in]	CONST_D3DFORMAT       PixelFormat,
			     [in]	CONST_D3DPOOL               Pool,
			     [out,retval] LPDIRECT3DVOLUME8 *ppVolumeTexture);


 [helpcontext(97361)]        HRESULT 	FilterVolumeTexture(
			[in] LPDIRECT3DVOLUME8 VolumeTexture,
			[in] void      *Palette,
			[in]    UINT      SrcLevel,
			[in] LONG	  Filter);

 [helpcontext(86374)]        HRESULT 	LoadSurfaceFromResource(
		  	[in]	LPDIRECT3DSURFACE8 DestSurface,
        		[in]	void* DestPalette,
			[in]    void* DestRect,
#ifdef _WIN64
			[in]	HANDLE  hSrcModule,
#else
			[in]	LONG  hSrcModule,
#endif
			[in]	BSTR  SrcResource,
			[in]    void* SrcRect,
			[in]    LONG  Filter,
			[in]	LONG  ColorKey,
			[in,out]    void*		      SrcInfo);

 [helpcontext(86377)]        HRESULT 	LoadVolumeFromVolume(
		     	[in]	LPDIRECT3DVOLUME8 DestVolume,
		        [in]	void *DestPalette,
			[in]	void *DestBox,
		     	[in]	LPDIRECT3DVOLUME8 SrcVolume,
			[in]	void *SrcPalette,
			[in]	void *SrcBox,
			[in]	LONG Filter,
			[in]	LONG ColorKey);

 [helpcontext(86376)]        HRESULT 	LoadVolumeFromMemory(
		     	[in]	LPDIRECT3DVOLUME8 DestVolume,
			[in]    void		*DestPalette,
			[in]    void		*DestBox,
			[in]    void            *SrcMemory,
			[in]    LONG       	SrcFormat,
			[in]    LONG           	SrcRowPitch,
			[in]    LONG          	SrcSlicePitch,
			[in]    void         	*SrcPalette,
			[in]    void       	*SrcBox,
			[in]    LONG         	Filter,
			[in]	LONG 		ColorKey);


 [helpcontext(86337)]	HRESULT    	CreateMesh(
			[in]        DWORD numFaces, 
			[in]        DWORD numVertices, 
			[in]        DWORD options, 
			[in]        void  *declaration, 
			[in]        LPDIRECT3DDEVICE8 pD3D, 
			[out,retval]        LPD3DXMESH* ppMesh);

 [helpcontext(86338)]	HRESULT    	CreateMeshFVF(
			[in]        DWORD numFaces, 
			[in]        DWORD numVertices, 
			[in]        DWORD options, 
			[in]        DWORD fvf, 
			[in]        LPDIRECT3DDEVICE8 pD3D, 
			[out,retval]        LPD3DXMESH* ppMesh);

 [helpcontext(86345)]	HRESULT     	CreateSPMesh(
			[in]        LPD3DXMESH pMesh,  
			[in]        void * adjacency, 
			[in]        void * VertexAttributeWeights,
			[in]	    void * VertexWeights,
			[out,retval]       LPD3DXSPMESH* ppSMesh);

 [helpcontext(96363)]	HRESULT 	GeneratePMesh(
			[in]        LPD3DXMESH Mesh, 
			[in]        void * Adjacency, 
			[in]        void * VertexAttributeWeights,
			[in]	    void * VertexWeights,
			[in]        DWORD minValue, 
			[in]        DWORD options, 
			[out,retval]        LPD3DXPMESH* ppPMesh);

 [helpcontext(96380)]	HRESULT     	SimplifyMesh(
			[in]        LPD3DXMESH Mesh, 
			[in]        void * Adjacency, 
			[in]        void * VertexAttributeWeights,
			[in]	    void * VertexWeights,
			[in]        DWORD minValue, 
			[in]        DWORD options, 
        		[out,retval] LPD3DXMESH* ppMesh);

 [helpcontext(86325)]	HRESULT     	ComputeBoundingSphere(
		        [in] LPVOID PointsFVF, 
		        [in] UINT numVertices, 
                	[in] DWORD FVF,
	        	[in] D3DVECTOR_CDESC *Centers, 
			[in,out]      FLOAT *RadiusArray);

 [helpcontext(86323)]        HRESULT 	ComputeBoundingBox( 
		        [in] LPVOID PointsFVF, 
		        [in] UINT numVertices, 
                	[in] DWORD FVF,
	        	[in,out] D3DVECTOR_CDESC *MinVert, 
	        	[in,out] D3DVECTOR_CDESC *MaxVert);


 [helpcontext(86327)]        HRESULT  	ComputeNormals( 
			[in]        LPD3DXBASEMESH pMesh);

 [helpcontext(96358)]        HRESULT 	DeclaratorFromFVF( 
			[in] LONG FVF,
			[out] D3DXDECLARATOR_CDESC *Declarator);

 [helpcontext(86362)]        HRESULT 	FVFFromDeclarator( 
			[in]  D3DXDECLARATOR_CDESC *Declarator,
			[out,retval] LONG *fvf);

 [helpcontext(86329)]	HRESULT     	CreateBuffer(
		        [in] DWORD numBytes, 
		        [out,retval] LPD3DXBUFFER *ppBuffer);

	//CONSIDER  MESH CONTAINER
	//	GetMesh
	//	GetAdjacencyCount		
	//	CopyOutAdjacency
	//	GetAdjacency(i)
	//	GetMaterialCount
	//	GetMaterial(i)		
	//	GetMaterialBuffer
	//	GetAdjacencyBuffer
		
 [helpcontext(86369)]	HRESULT	LoadMeshFromX(
        	[in] BSTR Filename, 
	        [in] DWORD options, 
        	[in] LPDIRECT3DDEVICE8 D3DDevice, 
        	[in,out] LPD3DXBUFFER *retAdjacency,
	        [in,out] LPD3DXBUFFER *retMaterials, 
        	[in,out] DWORD *retMaterialCount,
	        [out,retval] LPD3DXMESH *retMesh);

 [helpcontext(86378)]	HRESULT SaveMeshToX(
		[in] BSTR Filename,
		[in] LPD3DXMESH Mesh,
		[in] void *AdjacencyArray,
		[in] D3DXMATERIAL_CDESC* MaterialArray,
		[in] DWORD MaterialCount,
		[in] DWORD xFormat);


 [helpcontext(86370)]	HRESULT LoadMeshFromXof(
		[in]  LPDIRECTXFILEDATA xofobjMesh, 
   		[in]  DWORD options, 
		[in]  LPDIRECT3DDEVICE8 D3DDevice, 
		[in,out] LPD3DXBUFFER *retBufAdjacency,
	        [in,out] LPD3DXBUFFER *retMaterials, 
        	[in,out] DWORD *retMaterialCount,
		[out,retval] LPD3DXMESH *retMesh);

 [helpcontext(86382)]	HRESULT  TessellateNPatches(
		[in]  LPD3DXMESH MeshIn,               	   // mesh to tesselate
		[in]  void *AdjacencyIn,
		[in]  FLOAT    NumSegs,                   	   // number of segments per edge to tesselate to
		[in]  VARIANT_BOOL QuadraticInterpNormals,
		[in,out, optional] LPD3DXBUFFER *AdjacencyOut, 
		[out,retval]   LPD3DXMESH *MeshOut);   // tesselated mesh

 [helpcontext(86401)]	HRESULT BufferGetMaterial([in] LPD3DXBUFFER MaterialBuffer,
		[in] DWORD index,[out] D3DMATERIAL8_CDESC *mat);

 [helpcontext(86317)]	HRESULT BufferGetTextureName([in] LPD3DXBUFFER MaterialBuffer,
		[in] DWORD index, [out,retval] BSTR *retName);

 [helpcontext(86315)]	HRESULT BufferGetData([in] LPD3DXBUFFER Buffer,
			[in] DWORD index, [in] DWORD typesize, [in] DWORD typecount,[in,out] LPVOID data);

 [helpcontext(86318)]	HRESULT BufferSetData([in] LPD3DXBUFFER Buffer,
			[in] DWORD index, [in] DWORD typesize, [in] DWORD typecount,[in,out] LPVOID data);

 [helpcontext(86366)]	HRESULT Intersect(
        	 [in]  D3DXMesh  *MeshIn,
        	 [in]  D3DVECTOR_CDESC *RayPos,
        	 [in]  D3DVECTOR_CDESC *RayDir,
		 [out] LONG	        *retHit,
		 [out] LONG   	*retFaceIndex,
		 [out] FLOAT   	*U,
		 [out] FLOAT   	*V,
		 [out] FLOAT   	*retDist,
		 [out] DWORD *countHits,
		 [out,retval] LPD3DXBUFFER *AllHits);

 [helpcontext(86381)]	HRESULT SphereBoundProbe(
        	 [in]  D3DVECTOR_CDESC *Center,
        	 [in]  FLOAT Radius,
        	 [in]  D3DVECTOR_CDESC *RayPosition,
        	 [in]  D3DVECTOR_CDESC *Raydirection,
		 [out,retval]  VARIANT_BOOL *retHit);


 [helpcontext(86326)]	HRESULT     	ComputeBoundingSphereFromMesh(
		        [in] D3DXMesh *MeshIn, 		     
	        	[in,out] D3DVECTOR_CDESC *Centers, 
			[in,out] FLOAT *RadiusArray);

 [helpcontext(86324)]        HRESULT 	ComputeBoundingBoxFromMesh( 		
		        [in] D3DXMesh *MeshIn, 		     
	        	[in,out] D3DVECTOR_CDESC *MinArray, 
	        	[in,out] D3DVECTOR_CDESC *MaxArray);



 [helpcontext(86341)]  HRESULT    CreateSkinMesh(
	[in]        DWORD numFaces, 
        [in]        DWORD numVertices, 
        [in]	    DWORD numBones,
        [in]        DWORD options, 
        [in]        void *Declaration, 
        [in]        LPDIRECT3DDEVICE8 D3DDevice, 
        [out,retval]LPD3DXSKINMESH* SkinMesh);

 [helpcontext(86343)]  HRESULT    CreateSkinMeshFVF(
        [in] DWORD numFaces, 
        [in] DWORD numVertices, 
        [in] DWORD numBones,
        [in] DWORD options, 
        [in] DWORD fvf, 
        [in] LPDIRECT3DDEVICE8 D3DDevice, 
        [out,retval] LPD3DXSKINMESH* ppSkinMesh);

 [helpcontext(86342)]  HRESULT    CreateSkinMeshFromMesh(
        [in] LPD3DXMESH Mesh,
        [in] DWORD numBones,
        [out,retval] LPD3DXSKINMESH* ppSkinMesh);

 [helpcontext(86368)]  HRESULT    LoadSkinMeshFromXof(
        [in] IUnknown *xofobjMesh, //LPDIRECTXFILEDATA pxofobjMesh, 
        [in] DWORD options,
        [in] LPDIRECT3DDEVICE8 D3DDevice,
        [in,out] LPD3DXBUFFER* AdjacencyOut,
        [in,out] LPD3DXBUFFER* MaterialsOut,
        [in,out] DWORD *NumMatOut,
        [in,out] LPD3DXBUFFER* BoneNamesOut,
        [in,out] LPD3DXBUFFER* BoneTransformsOut,
        [out,retval] LPD3DXSKINMESH* ppMesh);


 [helpcontext(86339)] HRESULT CreatePolygon(
        [in] LPDIRECT3DDEVICE8   D3DDevice,
        [in] FLOAT               Length, 
        [in] UINT                Sides, 
	[in,out] LPD3DXBUFFER	 *RetAdjacency,
        [out,retval] LPD3DXMESH*         RetMesh);


 [helpcontext(86328)] HRESULT CreateBox(
        [in] LPDIRECT3DDEVICE8   D3DDevice, 
        [in] FLOAT               Width,
        [in] FLOAT               Height,
        [in] FLOAT               Depth,
	[in,out] LPD3DXBUFFER	 *RetAdjacency,
        [out,retval] LPD3DXMESH*         RetMesh);


 [helpcontext(86335)] HRESULT CreateCylinder(
        [in] LPDIRECT3DDEVICE8   D3DDevice,
        [in] FLOAT               Radius1, 
        [in] FLOAT               Radius2, 
        [in] FLOAT               Length, 
        [in] UINT                Slices, 
        [in] UINT                Stacks,   
	[in,out] LPD3DXBUFFER	 *RetAdjacency,
        [out,retval] LPD3DXMESH*         RetMesh);


 [helpcontext(97344)] HRESULT CreateSphere(
        [in] LPDIRECT3DDEVICE8  D3DDevice, 
        [in] FLOAT              Radius, 
        [in] UINT               Slices, 
        [in] UINT               Stacks,
	[in,out] LPD3DXBUFFER	 *RetAdjacency,
        [out,retval] LPD3DXMESH*        RetMesh);

 [helpcontext(96356)] HRESULT CreateTorus(
        [in] LPDIRECT3DDEVICE8   D3DDevice,
        [in] FLOAT               InnerRadius,
        [in] FLOAT               OuterRadius, 
        [in] UINT                Sides,
        [in] UINT                Rings, 
	[in,out] LPD3DXBUFFER	 *RetAdjacency,
        [out,retval] LPD3DXMESH*         RetMesh);


[helpcontext(86347)] HRESULT CreateTeapot(
        [in] LPDIRECT3DDEVICE8   D3DDevice,
	[in,out] LPD3DXBUFFER	 *RetAdjacency,
        [out,retval] LPD3DXMESH*         RetMesh);


[helpcontext(96348)] HRESULT CreateText(
        [in] LPDIRECT3DDEVICE8   D3DDevice,
        [in] HDC                 hDC,
        [in] BSTR                Text,
        [in] FLOAT               Deviation,
        [in] FLOAT               Extrusion,
        [in,out] 		 LPD3DXMESH * RetMesh,
	[in,out] 		 LPD3DXBUFFER *AdjacencyOut, 
	[in,out] 		 void *GlyphMetrics);


[helpcontext(86314)]	HRESULT BufferGetBoneName([in] LPD3DXBUFFER BoneNameBuffer,
		[in] DWORD index, [out,retval] BSTR *retName);


[helpcontext(86346)]	HRESULT CreateSprite(
		[in]   LPDIRECT3DDEVICE8   D3DDevice,
		[out,retval]        D3DXSprite **       retSprite);


[helpcontext(86340)]	HRESULT CreateRenderToSurface(
		[in]   LPDIRECT3DDEVICE8   D3DDevice,
	        [in]   UINT Width,
	        [in]   UINT Height,
	        [in]   CONST_D3DFORMAT Format,
		[in]   LONG DepthStencil,
		[in]   CONST_D3DFORMAT DepthStencilFormat,
		[out,retval]   D3DXRenderToSurface **RetRenderToSurface);

[helpcontext(86322)]  HRESULT CleanMesh([in]  LPD3DXMESH MeshIn,[in] void *Adjacency, 			[in,out] BSTR	*ErrLog,
[in,out] LPD3DXBUFFER AdjacencyOut,
[out,retval] LPD3DXMESH* MeshOut);

[helpcontext(86383)]  HRESULT ValidMesh([in]  LPD3DXMESH MeshIn,[in] void *Adjacency, 			[in,out,optional] BSTR	*ErrLog,
[out,retval] VARIANT_BOOL *ret);

[helpcontext(86313)]  HRESULT BoxBoundProbe([in] D3DVECTOR_CDESC *MinVert,[in] D3DVECTOR_CDESC *MaxVert,[in] D3DVECTOR_CDESC *RayPosition, [in] D3DVECTOR_CDESC *RayDirection, [out,retval] VARIANT_BOOL *ret);


[helpcontext(86379)]  HRESULT SavePMeshToFile( 
        		 [in] BSTR Filename,
			 [in] D3DXPMesh 	    *Mesh,
			 [in] D3DXMATERIAL_CDESC  *MaterialArray,
			 [in] LONG MaterialCount);

[helpcontext(86367)]  HRESULT LoadPMeshFromFile( 
		[in] BSTR Filename,
                [in] DWORD options,
        	[in] LPDIRECT3DDEVICE8   D3DDevice,
		[out] LPD3DXBUFFER  *RetMaterials,
		[out] LONG	    *RetNumMaterials,
		[out,retval] D3DXPMesh **RetPMesh);

[helpcontext(87101)]	HRESULT BufferGetBoneCombo([in] LPD3DXBUFFER BoneComboBuffer,
		[in] DWORD index, [in,out] D3DXBONECOMBINATION_CDESC *boneCombo);

[helpcontext(87102)]	HRESULT BufferGetBoneComboBoneIds([in] LPD3DXBUFFER BoneComboBuffer,
		[in] DWORD index, [in] DWORD PaletteSize, [in] void *BoneIds);


 
[helpcontext(1)] HRESULT SaveSurfaceToFile([in] BSTR DestFile,
        [in] CONST_D3DXIMAGE_FILEFORMAT DestFormat,
        [in] LPDIRECT3DSURFACE8        SrcSurface,
        [in] PALETTEENTRY*       SrcPalette,
        [in] RECT*               SrcRect);

[helpcontext(1)] HRESULT SaveVolumeToFile([in] BSTR DestFile,
        [in] CONST_D3DXIMAGE_FILEFORMAT      DestFormat,
        [in] LPDIRECT3DVOLUME8         SrcVolume,
        [in] PALETTEENTRY*       SrcPalette,
        [in] void* SrcBox);
 
[helpcontext(1)] HRESULT SaveTextureToFile([in] BSTR DestFile,
        [in] CONST_D3DXIMAGE_FILEFORMAT DestFormat,
        [in] LPDIRECT3DBASETEXTURE8 SrcTexture,
        [in] PALETTEENTRY* SrcPalette);

};


[
    		uuid(58356C5D-0BFD-48ed-93C5-F4520B6233DE),
     		helpstring("D3DX8"),
    		helpcontext(86302)
]

coclass D3DX8 { 
		[default] interface I_dxj_D3DX8;
};
    	

