ReactOS 0.4.17-dev-934-g091855f
d3dx9mesh.h File Reference
#include <d3dx9.h>
Include dependency graph for d3dx9mesh.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  _D3DXATTRIBUTERANGE
 
struct  _D3DXMATERIAL
 
struct  _D3DXEFFECTDEFAULT
 
struct  _D3DXEFFECTINSTANCE
 
struct  _D3DXATTRIBUTEWEIGHTS
 
struct  _D3DXWELDEPSILONS
 
struct  _D3DXBONECOMBINATION
 
struct  _D3DXPATCHINFO
 
struct  _D3DXINTERSECTINFO
 
struct  _D3DXSHMATERIAL
 
struct  _D3DXSHPRTSPLITMESHVERTDATA
 
struct  _D3DXSHPRTSPLITMESHCLUSTERDATA
 
struct  _XFILECOMPRESSEDANIMATIONSET
 

Macros

#define UNUSED16   (0xffff)
 
#define UNUSED32   (0xffffffff)
 
#define INTERFACE   ID3DXBaseMesh
 
#define INTERFACE   ID3DXMesh
 
#define INTERFACE   ID3DXPMesh
 
#define INTERFACE   ID3DXSPMesh
 
#define INTERFACE   ID3DXPatchMesh
 
#define INTERFACE   ID3DXSkinInfo
 
#define INTERFACE   ID3DXPRTBuffer
 
#define INTERFACE   ID3DXPRTCompBuffer
 
#define INTERFACE   ID3DXTextureGutterHelper
 
#define INTERFACE   ID3DXPRTEngine
 
#define D3DXLoadMeshFromX   WINELIB_NAME_AW(D3DXLoadMeshFromX)
 
#define D3DXLoadPRTBufferFromFile   WINELIB_NAME_AW(D3DXLoadPRTBufferFromFile)
 
#define D3DXLoadPRTCompBufferFromFile   WINELIB_NAME_AW(D3DXLoadPRTCompBufferFromFile)
 
#define D3DXSaveMeshToX   WINELIB_NAME_AW(D3DXSaveMeshToX)
 
#define D3DXSavePRTBufferToFile   WINELIB_NAME_AW(D3DXSavePRTBufferToFile)
 
#define D3DXSavePRTCompBufferToFile   WINELIB_NAME_AW(D3DXSavePRTCompBufferToFile)
 
#define XSKINEXP_TEMPLATES    "xof 0303txt 0032\ template XSkinMeshHeader \ { \ <3CF169CE-FF7C-44ab-93C0-F78F62D172E2> \ WORD nMaxSkinWeightsPerVertex; \ WORD nMaxSkinWeightsPerFace; \ WORD nBones; \ } \ template VertexDuplicationIndices \ { \ <B8D65549-D7C9-4995-89CF-53A9A8B031E3> \ DWORD nIndices; \ DWORD nOriginalVertices; \ array DWORD indices[nIndices]; \ } \ template FaceAdjacency \ { \ <A64C844A-E282-4756-8B80-250CDE04398C> \ DWORD nIndices; \ array DWORD indices[nIndices]; \ } \ template SkinWeights \ { \ <6F0D123B-BAD2-4167-A0D0-80224F25FABB> \ STRING transformNodeName; \ DWORD nWeights; \ array DWORD vertexIndices[nWeights]; \ array float weights[nWeights]; \ Matrix4x4 matrixOffset; \ } \ template Patch \ { \ <A3EB5D44-FC22-429D-9AFB-3221CB9719A6> \ DWORD nControlIndices; \ array DWORD controlIndices[nControlIndices]; \ } \ template PatchMesh \ { \ <D02C95CC-EDBA-4305-9B5D-1820D7704BBF> \ DWORD nVertices; \ array Vector vertices[nVertices]; \ DWORD nPatches; \ array Patch patches[nPatches]; \ [ ... ] \ } \ template PatchMesh9 \ { \ <B9EC94E1-B9A6-4251-BA18-94893F02C0EA> \ DWORD Type; \ DWORD Degree; \ DWORD Basis; \ DWORD nVertices; \ array Vector vertices[nVertices]; \ DWORD nPatches; \ array Patch patches[nPatches]; \ [ ... ] \ } template EffectFloats \ { \ <F1CFE2B3-0DE3-4e28-AFA1-155A750A282D> \ DWORD nFloats; \ array float Floats[nFloats]; \ } \ template EffectString \ { \ <D55B097E-BDB6-4c52-B03D-6051C89D0E42> \ STRING Value; \ } \ template EffectDWord \ { \ <622C0ED0-956E-4da9-908A-2AF94F3CE716> \ DWORD Value; \ } template EffectParamFloats \ { \ <3014B9A0-62F5-478c-9B86-E4AC9F4E418B> \ STRING ParamName; \ DWORD nFloats; \ array float Floats[nFloats]; \ } template EffectParamString \ { \ <1DBC4C88-94C1-46ee-9076-2C28818C9481> \ STRING ParamName; \ STRING Value; \ } \ template EffectParamDWord \ { \ <E13963BC-AE51-4c5d-B00F-CFA3A9D97CE5> \ STRING ParamName; \ DWORD Value; \ } \ template EffectInstance \ { \ <E331F7E4-0559-4cc2-8E99-1CEC1657928F> \ STRING EffectFilename; \ [ ... ] \ } template AnimTicksPerSecond \ { \ <9E415A43-7BA6-4a73-8743-B73D47E88476> \ DWORD AnimTicksPerSecond; \ } \ template CompressedAnimationSet \ { \ <7F9B00B3-F125-4890-876E-1C42BF697C4D> \ DWORD CompressedBlockSize; \ FLOAT TicksPerSec; \ DWORD PlaybackType; \ DWORD BufferLength; \ array DWORD CompressedData[BufferLength]; \ } "
 
#define XEXTENSIONS_TEMPLATES    "xof 0303txt 0032\ template FVFData \ { \ <B6E70A0E-8EF9-4e83-94AD-ECC8B0C04897> \ DWORD dwFVF; \ DWORD nDWords; \ array DWORD data[nDWords]; \ } \ template VertexElement \ { \ <F752461C-1E23-48f6-B9F8-8350850F336F> \ DWORD Type; \ DWORD Method; \ DWORD Usage; \ DWORD UsageIndex; \ } \ template DeclData \ { \ <BF22E553-292C-4781-9FEA-62BD554BDD93> \ DWORD nElements; \ array VertexElement Elements[nElements]; \ DWORD nDWords; \ array DWORD data[nDWords]; \ } \ template PMAttributeRange \ { \ <917E0427-C61E-4a14-9C64-AFE65F9E9844> \ DWORD iFaceOffset; \ DWORD nFacesMin; \ DWORD nFacesMax; \ DWORD iVertexOffset; \ DWORD nVerticesMin; \ DWORD nVerticesMax; \ } \ template PMVSplitRecord \ { \ <574CCC14-F0B3-4333-822D-93E8A8A08E4C> \ DWORD iFaceCLW; \ DWORD iVlrOffset; \ DWORD iCode; \ } \ template PMInfo \ { \ <B6C3E656-EC8B-4b92-9B62-681659522947> \ DWORD nAttributes; \ array PMAttributeRange attributeRanges[nAttributes]; \ DWORD nMaxValence; \ DWORD nMinLogicalVertices; \ DWORD nMaxLogicalVertices; \ DWORD nVSplits; \ array PMVSplitRecord splitRecords[nVSplits]; \ DWORD nAttributeMispredicts; \ array DWORD attributeMispredicts[nAttributeMispredicts]; \ } "
 

Typedefs

typedef enum _D3DXPATCHMESHTYPE D3DXPATCHMESHTYPE
 
typedef enum D3DXCLEANTYPE D3DXCLEANTYPE
 
typedef enum _D3DXTANGENT D3DXTANGENT
 
typedef enum _D3DXIMT D3DXIMT
 
typedef enum _D3DXUVATLAS D3DXUVATLAS
 
typedef enum _D3DXEFFECTDEFAULTTYPE D3DXEFFECTDEFAULTTYPE
 
typedef enum _D3DXSHCOMPRESSQUALITYTYPE D3DXSHCOMPRESSQUALITYTYPE
 
typedef enum _D3DXSHGPUSIMOPT D3DXSHGPUSIMOPT
 
typedef struct ID3DXBaseMesh * LPD3DXBASEMESH
 
typedef struct ID3DXMesh * LPD3DXMESH
 
typedef struct ID3DXPMesh * LPD3DXPMESH
 
typedef struct ID3DXSPMesh * LPD3DXSPMESH
 
typedef struct ID3DXSkinInfo * LPD3DXSKININFO
 
typedef struct ID3DXPatchMesh * LPD3DXPATCHMESH
 
typedef struct ID3DXPRTBuffer * LPD3DXPRTBUFFER
 
typedef struct ID3DXPRTCompBuffer * LPD3DXPRTCOMPBUFFER
 
typedef struct ID3DXPRTEngine * LPD3DXPRTENGINE
 
typedef struct ID3DXTextureGutterHelper * LPD3DXTEXTUREGUTTERHELPER
 
typedef struct _D3DXATTRIBUTERANGE D3DXATTRIBUTERANGE
 
typedef D3DXATTRIBUTERANGE * LPD3DXATTRIBUTERANGE
 
typedef struct _D3DXMATERIAL D3DXMATERIAL
 
typedef struct _D3DXMATERIAL * LPD3DXMATERIAL
 
typedef struct _D3DXEFFECTDEFAULT D3DXEFFECTDEFAULT
 
typedef struct _D3DXEFFECTDEFAULT * LPD3DXEFFECTDEFAULT
 
typedef struct _D3DXEFFECTINSTANCE D3DXEFFECTINSTANCE
 
typedef struct _D3DXEFFECTINSTANCE * LPD3DXEFFECTINSTANCE
 
typedef struct _D3DXATTRIBUTEWEIGHTS D3DXATTRIBUTEWEIGHTS
 
typedef struct _D3DXATTRIBUTEWEIGHTS * LPD3DXATTRIBUTEWEIGHTS
 
typedef struct _D3DXWELDEPSILONS D3DXWELDEPSILONS
 
typedef struct _D3DXWELDEPSILONS * LPD3DXWELDEPSILONS
 
typedef struct _D3DXBONECOMBINATION D3DXBONECOMBINATION
 
typedef struct _D3DXBONECOMBINATION * LPD3DXBONECOMBINATION
 
typedef struct _D3DXPATCHINFO D3DXPATCHINFO
 
typedef struct _D3DXPATCHINFO * LPD3DXPATCHINFO
 
typedef struct _D3DXINTERSECTINFO D3DXINTERSECTINFO
 
typedef struct _D3DXINTERSECTINFO * LPD3DXINTERSECTINFO
 
typedef struct _D3DXSHMATERIAL D3DXSHMATERIAL
 
typedef struct _D3DXSHPRTSPLITMESHVERTDATA D3DXSHPRTSPLITMESHVERTDATA
 
typedef struct _D3DXSHPRTSPLITMESHCLUSTERDATA D3DXSHPRTSPLITMESHCLUSTERDATA
 
typedef struct _XFILECOMPRESSEDANIMATIONSET XFILECOMPRESSEDANIMATIONSET
 
typedef HRESULT(WINAPI * LPD3DXUVATLASCB) (float complete, void *ctx)
 
typedef HRESULT(WINAPI * LPD3DXIMTSIGNALCALLBACK) (const D3DXVECTOR2 *, UINT, UINT, void *, FLOAT *)
 
typedef HRESULT(WINAPI * LPD3DXSHPRTSIMCB) (float complete, void *ctx)
 

Enumerations

enum  _MAX_FVF_DECL_SIZE { MAX_FVF_DECL_SIZE = MAXD3DDECLLENGTH + 1 , MAX_FVF_DECL_SIZE = MAXD3DDECLLENGTH + 1 }
 
enum  _D3DXMESH {
  D3DXMESH_32BIT = 0x001 , D3DXMESH_DONOTCLIP = 0x002 , D3DXMESH_POINTS = 0x004 , D3DXMESH_RTPATCHES = 0x008 ,
  D3DXMESH_NPATCHES = 0x4000 , D3DXMESH_VB_SYSTEMMEM = 0x010 , D3DXMESH_VB_MANAGED = 0x020 , D3DXMESH_VB_WRITEONLY = 0x040 ,
  D3DXMESH_VB_DYNAMIC = 0x080 , D3DXMESH_VB_SOFTWAREPROCESSING = 0x8000 , D3DXMESH_IB_SYSTEMMEM = 0x100 , D3DXMESH_IB_MANAGED = 0x200 ,
  D3DXMESH_IB_WRITEONLY = 0x400 , D3DXMESH_IB_DYNAMIC = 0x800 , D3DXMESH_IB_SOFTWAREPROCESSING = 0x10000 , D3DXMESH_VB_SHARE = 0x1000 ,
  D3DXMESH_USEHWONLY = 0x2000 , D3DXMESH_SYSTEMMEM = 0x110 , D3DXMESH_MANAGED = 0x220 , D3DXMESH_WRITEONLY = 0x440 ,
  D3DXMESH_DYNAMIC = 0x880 , D3DXMESH_SOFTWAREPROCESSING = 0x18000 , D3DXMESH_32BIT = 0x001 , D3DXMESH_DONOTCLIP = 0x002 ,
  D3DXMESH_POINTS = 0x004 , D3DXMESH_RTPATCHES = 0x008 , D3DXMESH_NPATCHES = 0x4000 , D3DXMESH_VB_SYSTEMMEM = 0x010 ,
  D3DXMESH_VB_MANAGED = 0x020 , D3DXMESH_VB_WRITEONLY = 0x040 , D3DXMESH_VB_DYNAMIC = 0x080 , D3DXMESH_VB_SOFTWAREPROCESSING = 0x8000 ,
  D3DXMESH_IB_SYSTEMMEM = 0x100 , D3DXMESH_IB_MANAGED = 0x200 , D3DXMESH_IB_WRITEONLY = 0x400 , D3DXMESH_IB_DYNAMIC = 0x800 ,
  D3DXMESH_IB_SOFTWAREPROCESSING = 0x10000 , D3DXMESH_VB_SHARE = 0x1000 , D3DXMESH_USEHWONLY = 0x2000 , D3DXMESH_SYSTEMMEM = 0x110 ,
  D3DXMESH_MANAGED = 0x220 , D3DXMESH_WRITEONLY = 0x440 , D3DXMESH_DYNAMIC = 0x880 , D3DXMESH_SOFTWAREPROCESSING = 0x18000
}
 
enum  _D3DXMESHOPT {
  D3DXMESHOPT_DEVICEINDEPENDENT = 0x00400000 , D3DXMESHOPT_COMPACT = 0x01000000 , D3DXMESHOPT_ATTRSORT = 0x02000000 , D3DXMESHOPT_VERTEXCACHE = 0x04000000 ,
  D3DXMESHOPT_STRIPREORDER = 0x08000000 , D3DXMESHOPT_IGNOREVERTS = 0x10000000 , D3DXMESHOPT_DONOTSPLIT = 0x20000000 , D3DXMESHOPT_DEVICEINDEPENDENT = 0x00400000 ,
  D3DXMESHOPT_COMPACT = 0x01000000 , D3DXMESHOPT_ATTRSORT = 0x02000000 , D3DXMESHOPT_VERTEXCACHE = 0x04000000 , D3DXMESHOPT_STRIPREORDER = 0x08000000 ,
  D3DXMESHOPT_IGNOREVERTS = 0x10000000 , D3DXMESHOPT_DONOTSPLIT = 0x20000000
}
 
enum  _D3DXPATCHMESHTYPE {
  D3DXPATCHMESH_RECT = 1 , D3DXPATCHMESH_TRI = 2 , D3DXPATCHMESH_NPATCH = 3 , D3DXPATCHMESH_FORCE_DWORD = 0x7fffffff ,
  D3DXPATCHMESH_RECT = 1 , D3DXPATCHMESH_TRI = 2 , D3DXPATCHMESH_NPATCH = 3 , D3DXPATCHMESH_FORCE_DWORD = 0x7fffffff
}
 
enum  _D3DXPATCHMESH { D3DXPATCHMESH_DEFAULT = 0 , D3DXPATCHMESH_DEFAULT = 0 }
 
enum  _D3DXMESHSIMP { D3DXMESHSIMP_VERTEX = 0x1 , D3DXMESHSIMP_FACE = 0x2 , D3DXMESHSIMP_VERTEX = 0x1 , D3DXMESHSIMP_FACE = 0x2 }
 
enum  D3DXCLEANTYPE {
  D3DXCLEAN_BACKFACING = 0x00000001 , D3DXCLEAN_BOWTIES = 0x00000002 , D3DXCLEAN_SKINNING = D3DXCLEAN_BACKFACING , D3DXCLEAN_OPTIMIZATION = D3DXCLEAN_BACKFACING ,
  D3DXCLEAN_SIMPLIFICATION = D3DXCLEAN_BACKFACING | D3DXCLEAN_BOWTIES , D3DXCLEAN_BACKFACING = 0x00000001 , D3DXCLEAN_BOWTIES = 0x00000002 , D3DXCLEAN_SKINNING = D3DXCLEAN_BACKFACING ,
  D3DXCLEAN_OPTIMIZATION = D3DXCLEAN_BACKFACING , D3DXCLEAN_SIMPLIFICATION = D3DXCLEAN_BACKFACING | D3DXCLEAN_BOWTIES
}
 
enum  _D3DXTANGENT {
  D3DXTANGENT_WRAP_U = 0x0001 , D3DXTANGENT_WRAP_V = 0x0002 , D3DXTANGENT_WRAP_UV = 0x0003 , D3DXTANGENT_DONT_NORMALIZE_PARTIALS = 0x0004 ,
  D3DXTANGENT_DONT_ORTHOGONALIZE = 0x0008 , D3DXTANGENT_ORTHOGONALIZE_FROM_V = 0x0010 , D3DXTANGENT_ORTHOGONALIZE_FROM_U = 0x0020 , D3DXTANGENT_WEIGHT_BY_AREA = 0x0040 ,
  D3DXTANGENT_WEIGHT_EQUAL = 0x0080 , D3DXTANGENT_WIND_CW = 0x0100 , D3DXTANGENT_CALCULATE_NORMALS = 0x0200 , D3DXTANGENT_GENERATE_IN_PLACE = 0x0400 ,
  D3DXTANGENT_WRAP_U = 0x0001 , D3DXTANGENT_WRAP_V = 0x0002 , D3DXTANGENT_WRAP_UV = 0x0003 , D3DXTANGENT_DONT_NORMALIZE_PARTIALS = 0x0004 ,
  D3DXTANGENT_DONT_ORTHOGONALIZE = 0x0008 , D3DXTANGENT_ORTHOGONALIZE_FROM_V = 0x0010 , D3DXTANGENT_ORTHOGONALIZE_FROM_U = 0x0020 , D3DXTANGENT_WEIGHT_BY_AREA = 0x0040 ,
  D3DXTANGENT_WEIGHT_EQUAL = 0x0080 , D3DXTANGENT_WIND_CW = 0x0100 , D3DXTANGENT_CALCULATE_NORMALS = 0x0200 , D3DXTANGENT_GENERATE_IN_PLACE = 0x0400
}
 
enum  _D3DXIMT {
  D3DXIMT_WRAP_U = 0x01 , D3DXIMT_WRAP_V = 0x02 , D3DXIMT_WRAP_UV = 0x03 , D3DXIMT_WRAP_U = 0x01 ,
  D3DXIMT_WRAP_V = 0x02 , D3DXIMT_WRAP_UV = 0x03
}
 
enum  _D3DXUVATLAS {
  D3DXUVATLAS_DEFAULT = 0x00 , D3DXUVATLAS_GEODESIC_FAST = 0x01 , D3DXUVATLAS_GEODESIC_QUALITY = 0x02 , D3DXUVATLAS_DEFAULT = 0x00 ,
  D3DXUVATLAS_GEODESIC_FAST = 0x01 , D3DXUVATLAS_GEODESIC_QUALITY = 0x02
}
 
enum  _D3DXEFFECTDEFAULTTYPE {
  D3DXEDT_STRING = 1 , D3DXEDT_FLOATS = 2 , D3DXEDT_DWORD = 3 , D3DXEDT_FORCEDWORD = 0x7fffffff ,
  D3DXEDT_STRING = 1 , D3DXEDT_FLOATS = 2 , D3DXEDT_DWORD = 3 , D3DXEDT_FORCEDWORD = 0x7fffffff
}
 
enum  _D3DXWELDEPSILONSFLAGS {
  D3DXWELDEPSILONS_WELDALL = 0x1 , D3DXWELDEPSILONS_WELDPARTIALMATCHES = 0x2 , D3DXWELDEPSILONS_DONOTREMOVEVERTICES = 0x4 , D3DXWELDEPSILONS_DONOTSPLIT = 0x8 ,
  D3DXWELDEPSILONS_WELDALL = 0x1 , D3DXWELDEPSILONS_WELDPARTIALMATCHES = 0x2 , D3DXWELDEPSILONS_DONOTREMOVEVERTICES = 0x4 , D3DXWELDEPSILONS_DONOTSPLIT = 0x8
}
 
enum  _D3DXSHCOMPRESSQUALITYTYPE {
  D3DXSHCQUAL_FASTLOWQUALITY = 1 , D3DXSHCQUAL_SLOWHIGHQUALITY = 2 , D3DXSHCQUAL_FORCE_DWORD = 0x7fffffff , D3DXSHCQUAL_FASTLOWQUALITY = 1 ,
  D3DXSHCQUAL_SLOWHIGHQUALITY = 2 , D3DXSHCQUAL_FORCE_DWORD = 0x7fffffff
}
 
enum  _D3DXSHGPUSIMOPT {
  D3DXSHGPUSIMOPT_SHADOWRES256 = 1 , D3DXSHGPUSIMOPT_SHADOWRES512 = 0 , D3DXSHGPUSIMOPT_SHADOWRES1024 = 2 , D3DXSHGPUSIMOPT_SHADOWRES2048 = 3 ,
  D3DXSHGPUSIMOPT_HIGHQUALITY = 4 , D3DXSHGPUSIMOPT_FORCE_DWORD = 0x7fffffff , D3DXSHGPUSIMOPT_SHADOWRES256 = 1 , D3DXSHGPUSIMOPT_SHADOWRES512 = 0 ,
  D3DXSHGPUSIMOPT_SHADOWRES1024 = 2 , D3DXSHGPUSIMOPT_SHADOWRES2048 = 3 , D3DXSHGPUSIMOPT_HIGHQUALITY = 4 , D3DXSHGPUSIMOPT_FORCE_DWORD = 0x7fffffff
}
 

Functions

 DEFINE_GUID (IID_ID3DXBaseMesh, 0x7ed943dd, 0x52e8, 0x40b5, 0xa8, 0xd8, 0x76, 0x68, 0x5c, 0x40, 0x63, 0x30)
 
 DEFINE_GUID (IID_ID3DXMesh, 0x4020e5c2, 0x1403, 0x4929, 0x88, 0x3f, 0xe2, 0xe8, 0x49, 0xfa, 0xc1, 0x95)
 
 DEFINE_GUID (IID_ID3DXPMesh, 0x8875769a, 0xd579, 0x4088, 0xaa, 0xeb, 0x53, 0x4d, 0x1a, 0xd8, 0x4e, 0x96)
 
 DEFINE_GUID (IID_ID3DXSPMesh, 0x667ea4c7, 0xf1cd, 0x4386, 0xb5, 0x23, 0x7c, 0x02, 0x90, 0xb8, 0x3c, 0xc5)
 
 DEFINE_GUID (IID_ID3DXSkinInfo, 0x11eaa540, 0xf9a6, 0x4d49, 0xae, 0x6a, 0xe1, 0x92, 0x21, 0xf7, 0x0c, 0xc4)
 
 DEFINE_GUID (IID_ID3DXPatchMesh, 0x3ce6cc22, 0xdbf2, 0x44f4, 0x89, 0x4d, 0xf9, 0xc3, 0x4a, 0x33, 0x71, 0x39)
 
 DEFINE_GUID (IID_ID3DXPRTBuffer, 0xf1827e47, 0x00a8, 0x49cd, 0x90, 0x8c, 0x9d, 0x11, 0x95, 0x5f, 0x87, 0x28)
 
 DEFINE_GUID (IID_ID3DXPRTCompBuffer, 0xa758d465, 0xfe8d, 0x45ad, 0x9c, 0xf0, 0xd0, 0x1e, 0x56, 0x26, 0x6a, 0x07)
 
 DEFINE_GUID (IID_ID3DXTextureGutterHelper, 0x838f01ec, 0x9729, 0x4527, 0xaa, 0xdb, 0xdf, 0x70, 0xad, 0xe7, 0xfe, 0xa9)
 
 DEFINE_GUID (IID_ID3DXPRTEngine, 0x683a4278, 0xcd5f, 0x4d24, 0x90, 0xad, 0xc4, 0xe1, 0xb6, 0x85, 0x5d, 0x53)
 
 DECLARE_INTERFACE_ (ID3DXBaseMesh, IUnknown)
 
 DECLARE_INTERFACE_ (ID3DXMesh, ID3DXBaseMesh)
 
 DECLARE_INTERFACE_ (ID3DXPMesh, ID3DXBaseMesh)
 
 DECLARE_INTERFACE_ (ID3DXSPMesh, IUnknown)
 
 DECLARE_INTERFACE_ (ID3DXPatchMesh, IUnknown)
 
 DECLARE_INTERFACE_ (ID3DXSkinInfo, IUnknown)
 
 DECLARE_INTERFACE_ (ID3DXPRTBuffer, IUnknown)
 
 DECLARE_INTERFACE_ (ID3DXPRTCompBuffer, IUnknown)
 
 DECLARE_INTERFACE_ (ID3DXTextureGutterHelper, IUnknown)
 
 DECLARE_INTERFACE_ (ID3DXPRTEngine, IUnknown)
 
HRESULT WINAPI D3DXCreateMesh (DWORD face_count, DWORD vertex_count, DWORD flags, const D3DVERTEXELEMENT9 *declaration, struct IDirect3DDevice9 *device, struct ID3DXMesh **mesh)
 
HRESULT WINAPI D3DXCreateMeshFVF (DWORD face_count, DWORD vertex_count, DWORD flags, DWORD fvf, struct IDirect3DDevice9 *device, struct ID3DXMesh **mesh)
 
HRESULT WINAPI D3DXCreateBuffer (DWORD size, ID3DXBuffer **buffer)
 
HRESULT WINAPI D3DXCreateSPMesh (ID3DXMesh *mesh, const DWORD *adjacency, const D3DXATTRIBUTEWEIGHTS *attribute_weights, const float *vertex_weights, ID3DXSPMesh **spmesh)
 
HRESULT WINAPI D3DXCreatePMeshFromStream (struct IStream *stream, DWORD flags, struct IDirect3DDevice9 *device, struct ID3DXBuffer **materials, struct ID3DXBuffer **effect_instances, DWORD *material_count, struct ID3DXPMesh **mesh)
 
HRESULT WINAPI D3DXCreateSkinInfo (DWORD vertex_count, const D3DVERTEXELEMENT9 *declaration, DWORD bone_count, ID3DXSkinInfo **skin_info)
 
HRESULT WINAPI D3DXCreateSkinInfoFVF (DWORD vertex_count, DWORD fvf, DWORD bone_count, ID3DXSkinInfo **skin_info)
 
HRESULT WINAPI D3DXCreateSkinInfoFromBlendedMesh (ID3DXBaseMesh *mesh, DWORD bone_count, const D3DXBONECOMBINATION *bone_combination_table, ID3DXSkinInfo **skin_info)
 
HRESULT WINAPI D3DXCreatePatchMesh (const D3DXPATCHINFO *patch_info, DWORD patch_count, DWORD vertex_count, DWORD flags, const D3DVERTEXELEMENT9 *declaration, struct IDirect3DDevice9 *device, struct ID3DXPatchMesh **mesh)
 
HRESULT WINAPI D3DXCreatePRTBuffer (UINT sample_count, UINT coeff_count, UINT channel_count, ID3DXPRTBuffer **buffer)
 
HRESULT WINAPI D3DXCreatePRTBufferTex (UINT width, UINT height, UINT coeff_count, UINT channel_count, ID3DXPRTBuffer **buffer)
 
HRESULT WINAPI D3DXCreatePRTCompBuffer (D3DXSHCOMPRESSQUALITYTYPE quality, UINT cluster_count, UINT pca_count, LPD3DXSHPRTSIMCB cb, void *ctx, ID3DXPRTBuffer *input, ID3DXPRTCompBuffer **buffer)
 
HRESULT WINAPI D3DXCreateTextureGutterHelper (UINT width, UINT height, ID3DXMesh *mesh, float gutter_size, ID3DXTextureGutterHelper **gh)
 
HRESULT WINAPI D3DXCreatePRTEngine (ID3DXMesh *mesh, DWORD *adjacency, BOOL extract_uv, ID3DXMesh *blocker_mesh, ID3DXPRTEngine **engine)
 
HRESULT WINAPI D3DXLoadMeshFromXA (const char *filename, DWORD flags, struct IDirect3DDevice9 *device, struct ID3DXBuffer **adjacency, struct ID3DXBuffer **materials, struct ID3DXBuffer **effect_instances, DWORD *material_count, struct ID3DXMesh **mesh)
 
HRESULT WINAPI D3DXLoadMeshFromXW (const WCHAR *filename, DWORD flags, struct IDirect3DDevice9 *device, struct ID3DXBuffer **adjacency, struct ID3DXBuffer **materials, struct ID3DXBuffer **effect_instances, DWORD *material_count, struct ID3DXMesh **mesh)
 
HRESULT WINAPI D3DXLoadMeshFromXInMemory (const void *data, DWORD data_size, DWORD flags, struct IDirect3DDevice9 *device, struct ID3DXBuffer **adjacency, struct ID3DXBuffer **materials, struct ID3DXBuffer **effect_instances, DWORD *material_count, struct ID3DXMesh **mesh)
 
HRESULT WINAPI D3DXLoadMeshFromXResource (HMODULE module, const char *resource, const char *resource_type, DWORD flags, struct IDirect3DDevice9 *device, struct ID3DXBuffer **adjacency, struct ID3DXBuffer **materials, struct ID3DXBuffer **effect_instances, DWORD *material_count, struct ID3DXMesh **mesh)
 
HRESULT WINAPI D3DXLoadMeshFromXof (struct ID3DXFileData *file_data, DWORD flags, struct IDirect3DDevice9 *device, struct ID3DXBuffer **adjacency, struct ID3DXBuffer **materials, struct ID3DXBuffer **effect_instances, DWORD *material_count, struct ID3DXMesh **mesh)
 
HRESULT WINAPI D3DXLoadPatchMeshFromXof (struct ID3DXFileData *file_data, DWORD flags, struct IDirect3DDevice9 *device, struct ID3DXBuffer **adjacency, struct ID3DXBuffer **materials, struct ID3DXBuffer **effect_instances, DWORD *material_count, struct ID3DXPatchMesh **mesh)
 
HRESULT WINAPI D3DXLoadSkinMeshFromXof (struct ID3DXFileData *file_data, DWORD flags, struct IDirect3DDevice9 *device, struct ID3DXBuffer **adjacency, struct ID3DXBuffer **materials, struct ID3DXBuffer **effect_instances, DWORD *material_count, struct ID3DXSkinInfo **skin_info, struct ID3DXMesh **mesh)
 
HRESULT WINAPI D3DXLoadPRTBufferFromFileA (const char *filename, ID3DXPRTBuffer **buffer)
 
HRESULT WINAPI D3DXLoadPRTBufferFromFileW (const WCHAR *filename, ID3DXPRTBuffer **buffer)
 
HRESULT WINAPI D3DXLoadPRTCompBufferFromFileA (const char *filename, ID3DXPRTCompBuffer **buffer)
 
HRESULT WINAPI D3DXLoadPRTCompBufferFromFileW (const WCHAR *filename, ID3DXPRTCompBuffer **buffer)
 
HRESULT WINAPI D3DXSaveMeshToXA (const char *filename, ID3DXMesh *mesh, const DWORD *adjacency, const D3DXMATERIAL *materials, const D3DXEFFECTINSTANCE *effect_instances, DWORD material_count, DWORD format)
 
HRESULT WINAPI D3DXSaveMeshToXW (const WCHAR *filename, ID3DXMesh *mesh, const DWORD *adjacency, const D3DXMATERIAL *materials, const D3DXEFFECTINSTANCE *effect_instances, DWORD material_count, DWORD format)
 
HRESULT WINAPI D3DXSavePRTBufferToFileA (const char *filename, ID3DXPRTBuffer *buffer)
 
HRESULT WINAPI D3DXSavePRTBufferToFileW (const WCHAR *filename, ID3DXPRTBuffer *buffer)
 
HRESULT WINAPI D3DXSavePRTCompBufferToFileA (const char *filename, ID3DXPRTCompBuffer *buffer)
 
HRESULT WINAPI D3DXSavePRTCompBufferToFileW (const WCHAR *filename, ID3DXPRTCompBuffer *buffer)
 
UINT WINAPI D3DXGetDeclLength (const D3DVERTEXELEMENT9 *decl)
 
UINT WINAPI D3DXGetDeclVertexSize (const D3DVERTEXELEMENT9 *decl, DWORD stream_idx)
 
UINT WINAPI D3DXGetFVFVertexSize (DWORD)
 
BOOL WINAPI D3DXBoxBoundProbe (const D3DXVECTOR3 *vmin, const D3DXVECTOR3 *vmax, const D3DXVECTOR3 *ray_pos, const D3DXVECTOR3 *ray_dir)
 
BOOL WINAPI D3DXSphereBoundProbe (const D3DXVECTOR3 *center, FLOAT radius, const D3DXVECTOR3 *ray_pos, const D3DXVECTOR3 *ray_dir)
 
HRESULT WINAPI D3DXCleanMesh (D3DXCLEANTYPE clean_type, ID3DXMesh *mesh_in, const DWORD *adjacency_in, ID3DXMesh **mesh_out, DWORD *adjacency_out, ID3DXBuffer **errors)
 
HRESULT WINAPI D3DXConcatenateMeshes (struct ID3DXMesh **meshes, UINT mesh_count, DWORD flags, const D3DXMATRIX *geometry_matrices, const D3DXMATRIX *texture_matrices, const D3DVERTEXELEMENT9 *declaration, struct IDirect3DDevice9 *device, struct ID3DXMesh **mesh)
 
HRESULT WINAPI D3DXComputeBoundingBox (const D3DXVECTOR3 *first_pos, DWORD num_vertices, DWORD stride, D3DXVECTOR3 *vmin, D3DXVECTOR3 *vmax)
 
HRESULT WINAPI D3DXComputeBoundingSphere (const D3DXVECTOR3 *first_pos, DWORD num_vertices, DWORD stride, D3DXVECTOR3 *center, FLOAT *radius)
 
HRESULT WINAPI D3DXComputeIMTFromPerTexelSignal (ID3DXMesh *mesh, DWORD texture_idx, float *texel_signal, UINT width, UINT height, UINT signal_dimension, UINT component_count, DWORD flags, LPD3DXUVATLASCB cb, void *ctx, ID3DXBuffer **buffer)
 
HRESULT WINAPI D3DXComputeIMTFromPerVertexSignal (ID3DXMesh *mesh, const float *vertex_signal, UINT signal_dimension, UINT signal_stride, DWORD flags, LPD3DXUVATLASCB cb, void *ctx, ID3DXBuffer **buffer)
 
HRESULT WINAPI D3DXComputeIMTFromSignal (ID3DXMesh *mesh, DWORD texture_idx, UINT signal_dimension, float max_uv_distance, DWORD flags, LPD3DXIMTSIGNALCALLBACK signal_cb, void *signal_ctx, LPD3DXUVATLASCB status_cb, void *status_ctx, ID3DXBuffer **buffer)
 
HRESULT WINAPI D3DXComputeIMTFromTexture (struct ID3DXMesh *mesh, struct IDirect3DTexture9 *texture, DWORD texture_idx, DWORD options, LPD3DXUVATLASCB cb, void *ctx, struct ID3DXBuffer **out)
 
HRESULT WINAPI D3DXComputeNormals (ID3DXBaseMesh *mesh, const DWORD *adjacency)
 
HRESULT WINAPI D3DXComputeTangentFrameEx (ID3DXMesh *mesh_in, DWORD texture_in_semantic, DWORD texture_in_idx, DWORD u_partial_out_semantic, DWORD u_partial_out_idx, DWORD v_partial_out_semantic, DWORD v_partial_out_idx, DWORD normal_out_semantic, DWORD normal_out_idx, DWORD flags, const DWORD *adjacency, float partial_edge_threshold, float singular_point_threshold, float normal_edge_threshold, ID3DXMesh **mesh_out, ID3DXBuffer **buffer)
 
HRESULT WINAPI D3DXComputeTangent (ID3DXMesh *mesh, DWORD stage, DWORD tangent_idx, DWORD binorm_idx, DWORD wrap, const DWORD *adjacency)
 
HRESULT WINAPI D3DXConvertMeshSubsetToSingleStrip (struct ID3DXBaseMesh *mesh_in, DWORD attribute_id, DWORD ib_flags, struct IDirect3DIndexBuffer9 **index_buffer, DWORD *index_count)
 
HRESULT WINAPI D3DXConvertMeshSubsetToStrips (struct ID3DXBaseMesh *mesh_in, DWORD attribute_id, DWORD ib_flags, struct IDirect3DIndexBuffer9 **index_buffer, DWORD *index_count, struct ID3DXBuffer **strip_lengths, DWORD *strip_count)
 
HRESULT WINAPI D3DXDeclaratorFromFVF (DWORD, D3DVERTEXELEMENT9[MAX_FVF_DECL_SIZE])
 
HRESULT WINAPI D3DXFVFFromDeclarator (const D3DVERTEXELEMENT9 *decl, DWORD *fvf)
 
HRESULT WINAPI D3DXGenerateOutputDecl (D3DVERTEXELEMENT9 *decl_out, const D3DVERTEXELEMENT9 *decl_in)
 
HRESULT WINAPI D3DXGeneratePMesh (ID3DXMesh *mesh, const DWORD *adjacency, const D3DXATTRIBUTEWEIGHTS *attribute_weights, const float *vertex_weights, DWORD min_value, DWORD flags, ID3DXPMesh **pmesh)
 
HRESULT WINAPI D3DXIntersect (ID3DXBaseMesh *mesh, const D3DXVECTOR3 *ray_position, const D3DXVECTOR3 *ray_direction, BOOL *hit, DWORD *face_idx, float *u, float *v, float *distance, ID3DXBuffer **hits, DWORD *hit_count)
 
HRESULT WINAPI D3DXIntersectSubset (ID3DXBaseMesh *mesh, DWORD attribute_id, const D3DXVECTOR3 *ray_position, const D3DXVECTOR3 *ray_direction, BOOL *hit, DWORD *face_idx, float *u, float *v, float *distance, ID3DXBuffer **hits, DWORD *hit_count)
 
BOOL WINAPI D3DXIntersectTri (const D3DXVECTOR3 *vtx0, const D3DXVECTOR3 *vtx1, const D3DXVECTOR3 *vtx2, const D3DXVECTOR3 *ray_pos, const D3DXVECTOR3 *ray_dir, FLOAT *u, FLOAT *v, FLOAT *dist)
 
HRESULT WINAPI D3DXOptimizeFaces (const void *indices, UINT face_count, UINT vertex_count, BOOL idx_32bit, DWORD *face_remap)
 
HRESULT WINAPI D3DXOptimizeVertices (const void *indices, UINT face_count, UINT vertex_count, BOOL idx_32bit, DWORD *vertex_remap)
 
HRESULT WINAPI D3DXRectPatchSize (const FLOAT *segment_count, DWORD *num_triangles, DWORD *num_vertices)
 
HRESULT WINAPI D3DXSHPRTCompSuperCluster (UINT *cluster_ids, ID3DXMesh *scene, UINT max_cluster_count, UINT cluster_count, UINT *scluster_ids, UINT *scluster_count)
 
HRESULT WINAPI D3DXSHPRTCompSplitMeshSC (UINT *cluster_idx, UINT vertex_count, UINT cluster_count, UINT *scluster_ids, UINT scluster_count, void *index_buffer_in, BOOL ib_in_32bit, UINT face_count, ID3DXBuffer **index_buffer_out, UINT *index_buffer_size, BOOL ib_out_32bit, ID3DXBuffer **face_remap, ID3DXBuffer **vertex_data, UINT *vertex_data_length, UINT *sc_cluster_list, D3DXSHPRTSPLITMESHCLUSTERDATA *sc_data)
 
HRESULT WINAPI D3DXSimplifyMesh (ID3DXMesh *mesh_in, const DWORD *adjacency, const D3DXATTRIBUTEWEIGHTS *attribute_weights, const float *vertex_weights, DWORD min_value, DWORD flags, ID3DXMesh **mesh_out)
 
HRESULT WINAPI D3DXSplitMesh (ID3DXMesh *mesh_in, const DWORD *adjacency_in, const DWORD max_size, const DWORD flags, DWORD *mesh_out_count, ID3DXBuffer **mesh_out, ID3DXBuffer **adjacency_out, ID3DXBuffer **face_remap_out, ID3DXBuffer **vertex_remap_out)
 
HRESULT WINAPI D3DXTessellateNPatches (ID3DXMesh *mesh_in, const DWORD *adjacency_in, float segment_count, BOOL quad_interp, ID3DXMesh **mesh_out, ID3DXBuffer **adjacency_out)
 
HRESULT WINAPI D3DXTessellateRectPatch (struct IDirect3DVertexBuffer9 *buffer, const float *segment_count, const D3DVERTEXELEMENT9 *declaration, const D3DRECTPATCH_INFO *patch_info, struct ID3DXMesh *mesh)
 
HRESULT WINAPI D3DXTessellateTriPatch (struct IDirect3DVertexBuffer9 *buffer, const float *segment_count, const D3DVERTEXELEMENT9 *declaration, const D3DTRIPATCH_INFO *patch_info, struct ID3DXMesh *mesh)
 
HRESULT WINAPI D3DXTriPatchSize (const FLOAT *segment_count, DWORD *num_triangles, DWORD *num_vertices)
 
HRESULT WINAPI D3DXUVAtlasCreate (ID3DXMesh *mesh_in, UINT max_chart_count, float max_stretch_in, UINT width, UINT height, float gutter, DWORD texture_idx, const DWORD *adjacency, const DWORD *false_edges, const float *imt_array, LPD3DXUVATLASCB cb, float cb_freq, void *ctx, DWORD flags, ID3DXMesh **mesh_out, ID3DXBuffer **face_partitioning_out, ID3DXBuffer **vertex_remap_out, float *max_stretch_out, UINT *chart_count)
 
HRESULT WINAPI D3DXUVAtlasPack (ID3DXMesh *mesh, UINT width, UINT height, float gutter, DWORD texture_idx, const DWORD *partition_result_adjacency, LPD3DXUVATLASCB cb, float cb_freq, void *ctx, DWORD flags, ID3DXBuffer *face_partitioning)
 
HRESULT WINAPI D3DXUVAtlasPartition (ID3DXMesh *mesh_in, UINT max_chart_count, float max_stretch_in, DWORD texture_idx, const DWORD *adjacency, const DWORD *false_edges, const float *imt_array, LPD3DXUVATLASCB cb, float cb_freq, void *ctx, DWORD flags, ID3DXMesh **mesh_out, ID3DXBuffer **face_partitioning_out, ID3DXBuffer **vertex_remap_out, ID3DXBuffer **adjacency_out, float *max_stretch_out, UINT *chart_count)
 
HRESULT WINAPI D3DXValidMesh (ID3DXMesh *mesh, const DWORD *adjacency, ID3DXBuffer **errors)
 
HRESULT WINAPI D3DXValidPatchMesh (ID3DXPatchMesh *mesh, DWORD *degenerate_vertex_count, DWORD *degenerate_patch_count, ID3DXBuffer **errors)
 
HRESULT WINAPI D3DXWeldVertices (ID3DXMesh *mesh, DWORD flags, const D3DXWELDEPSILONS *epsilons, const DWORD *adjacency_in, DWORD *adjacency_out, DWORD *face_remap_out, ID3DXBuffer **vertex_remap_out)
 
 DEFINE_GUID (DXFILEOBJ_XSkinMeshHeader, 0x3cf169ce, 0xff7c, 0x44ab, 0x93, 0xc0, 0xf7, 0x8f, 0x62, 0xd1, 0x72, 0xe2)
 
 DEFINE_GUID (DXFILEOBJ_VertexDuplicationIndices, 0xb8d65549, 0xd7c9, 0x4995, 0x89, 0xcf, 0x53, 0xa9, 0xa8, 0xb0, 0x31, 0xe3)
 
 DEFINE_GUID (DXFILEOBJ_FaceAdjacency, 0xa64c844a, 0xe282, 0x4756, 0x8b, 0x80, 0x25, 0x0c, 0xde, 0x04, 0x39, 0x8c)
 
 DEFINE_GUID (DXFILEOBJ_SkinWeights, 0x6f0d123b, 0xbad2, 0x4167, 0xa0, 0xd0, 0x80, 0x22, 0x4f, 0x25, 0xfa, 0xbb)
 
 DEFINE_GUID (DXFILEOBJ_Patch, 0xa3eb5d44, 0xfc22, 0x429d, 0x9a, 0xfb, 0x32, 0x21, 0xcb, 0x97, 0x19, 0xa6)
 
 DEFINE_GUID (DXFILEOBJ_PatchMesh, 0xd02c95cc, 0xedba, 0x4305, 0x9b, 0x5d, 0x18, 0x20, 0xd7, 0x70, 0x4d, 0xbf)
 
 DEFINE_GUID (DXFILEOBJ_PatchMesh9, 0xb9ec94e1, 0xb9a6, 0x4251, 0xba, 0x18, 0x94, 0x89, 0x3f, 0x02, 0xc0, 0xea)
 
 DEFINE_GUID (DXFILEOBJ_PMInfo, 0xb6c3e656, 0xec8b, 0x4b92, 0x9b, 0x62, 0x68, 0x16, 0x59, 0x52, 0x29, 0x47)
 
 DEFINE_GUID (DXFILEOBJ_PMAttributeRange, 0x917e0427, 0xc61e, 0x4a14, 0x9c, 0x64, 0xaf, 0xe6, 0x5f, 0x9e, 0x98, 0x44)
 
 DEFINE_GUID (DXFILEOBJ_PMVSplitRecord, 0x574ccc14, 0xf0b3, 0x4333, 0x82, 0x2d, 0x93, 0xe8, 0xa8, 0xa0, 0x8e, 0x4c)
 
 DEFINE_GUID (DXFILEOBJ_FVFData, 0xb6e70a0e, 0x8ef9, 0x4e83, 0x94, 0xad, 0xec, 0xc8, 0xb0, 0xc0, 0x48, 0x97)
 
 DEFINE_GUID (DXFILEOBJ_VertexElement, 0xf752461c, 0x1e23, 0x48f6, 0xb9, 0xf8, 0x83, 0x50, 0x85, 0x0f, 0x33, 0x6f)
 
 DEFINE_GUID (DXFILEOBJ_DeclData, 0xbf22e553, 0x292c, 0x4781, 0x9f, 0xea, 0x62, 0xbd, 0x55, 0x4b, 0xdd, 0x93)
 
 DEFINE_GUID (DXFILEOBJ_EffectFloats, 0xf1cfe2b3, 0x0de3, 0x4e28, 0xaf, 0xa1, 0x15, 0x5a, 0x75, 0x0a, 0x28, 0x2d)
 
 DEFINE_GUID (DXFILEOBJ_EffectString, 0xd55b097e, 0xbdb6, 0x4c52, 0xb0, 0x3d, 0x60, 0x51, 0xc8, 0x9d, 0x0e, 0x42)
 
 DEFINE_GUID (DXFILEOBJ_EffectDWord, 0x622c0ed0, 0x956e, 0x4da9, 0x90, 0x8a, 0x2a, 0xf9, 0x4f, 0x3c, 0xe7, 0x16)
 
 DEFINE_GUID (DXFILEOBJ_EffectParamFloats, 0x3014b9a0, 0x62f5, 0x478c, 0x9b, 0x86, 0xe4, 0xac, 0x9f, 0x4e, 0x41, 0x8b)
 
 DEFINE_GUID (DXFILEOBJ_EffectParamString, 0x1dbc4c88, 0x94c1, 0x46ee, 0x90, 0x76, 0x2c, 0x28, 0x81, 0x8c, 0x94, 0x81)
 
 DEFINE_GUID (DXFILEOBJ_EffectParamDWord, 0xe13963bc, 0xae51, 0x4c5d, 0xb0, 0x0f, 0xcf, 0xa3, 0xa9, 0xd9, 0x7c, 0xe5)
 
 DEFINE_GUID (DXFILEOBJ_EffectInstance, 0xe331f7e4, 0x0559, 0x4cc2, 0x8e, 0x99, 0x1c, 0xec, 0x16, 0x57, 0x92, 0x8f)
 
 DEFINE_GUID (DXFILEOBJ_AnimTicksPerSecond, 0x9e415a43, 0x7ba6, 0x4a73, 0x87, 0x43, 0xb7, 0x3d, 0x47, 0xe8, 0x84, 0x76)
 
 DEFINE_GUID (DXFILEOBJ_CompressedAnimationSet, 0x7f9b00b3, 0xf125, 0x4890, 0x87, 0x6e, 0x1c, 0x42, 0xbf, 0x69, 0x7c, 0x4d)
 

Macro Definition Documentation

◆ D3DXLoadMeshFromX

#define D3DXLoadMeshFromX   WINELIB_NAME_AW(D3DXLoadMeshFromX)

Definition at line 733 of file d3dx9mesh.h.

◆ D3DXLoadPRTBufferFromFile

#define D3DXLoadPRTBufferFromFile   WINELIB_NAME_AW(D3DXLoadPRTBufferFromFile)

Definition at line 752 of file d3dx9mesh.h.

◆ D3DXLoadPRTCompBufferFromFile

#define D3DXLoadPRTCompBufferFromFile   WINELIB_NAME_AW(D3DXLoadPRTCompBufferFromFile)

Definition at line 755 of file d3dx9mesh.h.

◆ D3DXSaveMeshToX

#define D3DXSaveMeshToX   WINELIB_NAME_AW(D3DXSaveMeshToX)

Definition at line 760 of file d3dx9mesh.h.

◆ D3DXSavePRTBufferToFile

#define D3DXSavePRTBufferToFile   WINELIB_NAME_AW(D3DXSavePRTBufferToFile)

Definition at line 763 of file d3dx9mesh.h.

◆ D3DXSavePRTCompBufferToFile

#define D3DXSavePRTCompBufferToFile   WINELIB_NAME_AW(D3DXSavePRTCompBufferToFile)

Definition at line 766 of file d3dx9mesh.h.

◆ INTERFACE [1/10]

#define INTERFACE   ID3DXBaseMesh

Definition at line 635 of file d3dx9mesh.h.

◆ INTERFACE [2/10]

#define INTERFACE   ID3DXMesh

Definition at line 635 of file d3dx9mesh.h.

◆ INTERFACE [3/10]

#define INTERFACE   ID3DXPMesh

Definition at line 635 of file d3dx9mesh.h.

◆ INTERFACE [4/10]

#define INTERFACE   ID3DXSPMesh

Definition at line 635 of file d3dx9mesh.h.

◆ INTERFACE [5/10]

#define INTERFACE   ID3DXPatchMesh

Definition at line 635 of file d3dx9mesh.h.

◆ INTERFACE [6/10]

#define INTERFACE   ID3DXSkinInfo

Definition at line 635 of file d3dx9mesh.h.

◆ INTERFACE [7/10]

#define INTERFACE   ID3DXPRTBuffer

Definition at line 635 of file d3dx9mesh.h.

◆ INTERFACE [8/10]

#define INTERFACE   ID3DXPRTCompBuffer

Definition at line 635 of file d3dx9mesh.h.

◆ INTERFACE [9/10]

#define INTERFACE   ID3DXTextureGutterHelper

Definition at line 635 of file d3dx9mesh.h.

◆ INTERFACE [10/10]

#define INTERFACE   ID3DXPRTEngine

Definition at line 635 of file d3dx9mesh.h.

◆ UNUSED16

#define UNUSED16   (0xffff)

Definition at line 36 of file d3dx9mesh.h.

◆ UNUSED32

#define UNUSED32   (0xffffffff)

Definition at line 37 of file d3dx9mesh.h.

◆ XEXTENSIONS_TEMPLATES

#define XEXTENSIONS_TEMPLATES    "xof 0303txt 0032\ template FVFData \ { \ <B6E70A0E-8EF9-4e83-94AD-ECC8B0C04897> \ DWORD dwFVF; \ DWORD nDWords; \ array DWORD data[nDWords]; \ } \ template VertexElement \ { \ <F752461C-1E23-48f6-B9F8-8350850F336F> \ DWORD Type; \ DWORD Method; \ DWORD Usage; \ DWORD UsageIndex; \ } \ template DeclData \ { \ <BF22E553-292C-4781-9FEA-62BD554BDD93> \ DWORD nElements; \ array VertexElement Elements[nElements]; \ DWORD nDWords; \ array DWORD data[nDWords]; \ } \ template PMAttributeRange \ { \ <917E0427-C61E-4a14-9C64-AFE65F9E9844> \ DWORD iFaceOffset; \ DWORD nFacesMin; \ DWORD nFacesMax; \ DWORD iVertexOffset; \ DWORD nVerticesMin; \ DWORD nVerticesMax; \ } \ template PMVSplitRecord \ { \ <574CCC14-F0B3-4333-822D-93E8A8A08E4C> \ DWORD iFaceCLW; \ DWORD iVlrOffset; \ DWORD iCode; \ } \ template PMInfo \ { \ <B6C3E656-EC8B-4b92-9B62-681659522947> \ DWORD nAttributes; \ array PMAttributeRange attributeRanges[nAttributes]; \ DWORD nMaxValence; \ DWORD nMinLogicalVertices; \ DWORD nMaxLogicalVertices; \ DWORD nVSplits; \ array PMVSplitRecord splitRecords[nVSplits]; \ DWORD nAttributeMispredicts; \ array DWORD attributeMispredicts[nAttributeMispredicts]; \ } "

Definition at line 1002 of file d3dx9mesh.h.

◆ XSKINEXP_TEMPLATES

#define XSKINEXP_TEMPLATES    "xof 0303txt 0032\ template XSkinMeshHeader \ { \ <3CF169CE-FF7C-44ab-93C0-F78F62D172E2> \ WORD nMaxSkinWeightsPerVertex; \ WORD nMaxSkinWeightsPerFace; \ WORD nBones; \ } \ template VertexDuplicationIndices \ { \ <B8D65549-D7C9-4995-89CF-53A9A8B031E3> \ DWORD nIndices; \ DWORD nOriginalVertices; \ array DWORD indices[nIndices]; \ } \ template FaceAdjacency \ { \ <A64C844A-E282-4756-8B80-250CDE04398C> \ DWORD nIndices; \ array DWORD indices[nIndices]; \ } \ template SkinWeights \ { \ <6F0D123B-BAD2-4167-A0D0-80224F25FABB> \ STRING transformNodeName; \ DWORD nWeights; \ array DWORD vertexIndices[nWeights]; \ array float weights[nWeights]; \ Matrix4x4 matrixOffset; \ } \ template Patch \ { \ <A3EB5D44-FC22-429D-9AFB-3221CB9719A6> \ DWORD nControlIndices; \ array DWORD controlIndices[nControlIndices]; \ } \ template PatchMesh \ { \ <D02C95CC-EDBA-4305-9B5D-1820D7704BBF> \ DWORD nVertices; \ array Vector vertices[nVertices]; \ DWORD nPatches; \ array Patch patches[nPatches]; \ [ ... ] \ } \ template PatchMesh9 \ { \ <B9EC94E1-B9A6-4251-BA18-94893F02C0EA> \ DWORD Type; \ DWORD Degree; \ DWORD Basis; \ DWORD nVertices; \ array Vector vertices[nVertices]; \ DWORD nPatches; \ array Patch patches[nPatches]; \ [ ... ] \ } template EffectFloats \ { \ <F1CFE2B3-0DE3-4e28-AFA1-155A750A282D> \ DWORD nFloats; \ array float Floats[nFloats]; \ } \ template EffectString \ { \ <D55B097E-BDB6-4c52-B03D-6051C89D0E42> \ STRING Value; \ } \ template EffectDWord \ { \ <622C0ED0-956E-4da9-908A-2AF94F3CE716> \ DWORD Value; \ } template EffectParamFloats \ { \ <3014B9A0-62F5-478c-9B86-E4AC9F4E418B> \ STRING ParamName; \ DWORD nFloats; \ array float Floats[nFloats]; \ } template EffectParamString \ { \ <1DBC4C88-94C1-46ee-9076-2C28818C9481> \ STRING ParamName; \ STRING Value; \ } \ template EffectParamDWord \ { \ <E13963BC-AE51-4c5d-B00F-CFA3A9D97CE5> \ STRING ParamName; \ DWORD Value; \ } \ template EffectInstance \ { \ <E331F7E4-0559-4cc2-8E99-1CEC1657928F> \ STRING EffectFilename; \ [ ... ] \ } template AnimTicksPerSecond \ { \ <9E415A43-7BA6-4a73-8743-B73D47E88476> \ DWORD AnimTicksPerSecond; \ } \ template CompressedAnimationSet \ { \ <7F9B00B3-F125-4890-876E-1C42BF697C4D> \ DWORD CompressedBlockSize; \ FLOAT TicksPerSec; \ DWORD PlaybackType; \ DWORD BufferLength; \ array DWORD CompressedData[BufferLength]; \ } "

Definition at line 892 of file d3dx9mesh.h.

Typedef Documentation

◆ D3DXATTRIBUTERANGE

◆ D3DXATTRIBUTEWEIGHTS

◆ D3DXBONECOMBINATION

◆ D3DXCLEANTYPE

◆ D3DXEFFECTDEFAULT

◆ D3DXEFFECTDEFAULTTYPE

◆ D3DXEFFECTINSTANCE

◆ D3DXIMT

◆ D3DXINTERSECTINFO

◆ D3DXMATERIAL

◆ D3DXPATCHINFO

◆ D3DXPATCHMESHTYPE

◆ D3DXSHCOMPRESSQUALITYTYPE

◆ D3DXSHGPUSIMOPT

◆ D3DXSHMATERIAL

◆ D3DXSHPRTSPLITMESHCLUSTERDATA

◆ D3DXSHPRTSPLITMESHVERTDATA

◆ D3DXTANGENT

◆ D3DXUVATLAS

◆ D3DXWELDEPSILONS

◆ LPD3DXATTRIBUTERANGE

Definition at line 191 of file d3dx9mesh.h.

◆ LPD3DXATTRIBUTEWEIGHTS

◆ LPD3DXBASEMESH

typedef struct ID3DXBaseMesh* LPD3DXBASEMESH

Definition at line 172 of file d3dx9mesh.h.

◆ LPD3DXBONECOMBINATION

◆ LPD3DXEFFECTDEFAULT

◆ LPD3DXEFFECTINSTANCE

◆ LPD3DXIMTSIGNALCALLBACK

typedef HRESULT(WINAPI * LPD3DXIMTSIGNALCALLBACK) (const D3DXVECTOR2 *, UINT, UINT, void *, FLOAT *)

Definition at line 301 of file d3dx9mesh.h.

◆ LPD3DXINTERSECTINFO

◆ LPD3DXMATERIAL

◆ LPD3DXMESH

typedef struct ID3DXMesh* LPD3DXMESH

Definition at line 173 of file d3dx9mesh.h.

◆ LPD3DXPATCHINFO

◆ LPD3DXPATCHMESH

typedef struct ID3DXPatchMesh* LPD3DXPATCHMESH

Definition at line 177 of file d3dx9mesh.h.

◆ LPD3DXPMESH

typedef struct ID3DXPMesh* LPD3DXPMESH

Definition at line 174 of file d3dx9mesh.h.

◆ LPD3DXPRTBUFFER

typedef struct ID3DXPRTBuffer* LPD3DXPRTBUFFER

Definition at line 178 of file d3dx9mesh.h.

◆ LPD3DXPRTCOMPBUFFER

typedef struct ID3DXPRTCompBuffer* LPD3DXPRTCOMPBUFFER

Definition at line 179 of file d3dx9mesh.h.

◆ LPD3DXPRTENGINE

typedef struct ID3DXPRTEngine* LPD3DXPRTENGINE

Definition at line 180 of file d3dx9mesh.h.

◆ LPD3DXSHPRTSIMCB

typedef HRESULT(WINAPI * LPD3DXSHPRTSIMCB) (float complete, void *ctx)

Definition at line 302 of file d3dx9mesh.h.

◆ LPD3DXSKININFO

typedef struct ID3DXSkinInfo* LPD3DXSKININFO

Definition at line 176 of file d3dx9mesh.h.

◆ LPD3DXSPMESH

typedef struct ID3DXSPMesh* LPD3DXSPMESH

Definition at line 175 of file d3dx9mesh.h.

◆ LPD3DXTEXTUREGUTTERHELPER

typedef struct ID3DXTextureGutterHelper* LPD3DXTEXTUREGUTTERHELPER

Definition at line 181 of file d3dx9mesh.h.

◆ LPD3DXUVATLASCB

typedef HRESULT(WINAPI * LPD3DXUVATLASCB) (float complete, void *ctx)

Definition at line 300 of file d3dx9mesh.h.

◆ LPD3DXWELDEPSILONS

◆ XFILECOMPRESSEDANIMATIONSET

Enumeration Type Documentation

◆ _D3DXEFFECTDEFAULTTYPE

Enumerator
D3DXEDT_STRING 
D3DXEDT_FLOATS 
D3DXEDT_DWORD 
D3DXEDT_FORCEDWORD 
D3DXEDT_STRING 
D3DXEDT_FLOATS 
D3DXEDT_DWORD 
D3DXEDT_FORCEDWORD 

Definition at line 139 of file d3dx9mesh.h.

140{
141 D3DXEDT_STRING = 1,
142 D3DXEDT_FLOATS = 2,
143 D3DXEDT_DWORD = 3,
144 D3DXEDT_FORCEDWORD = 0x7fffffff,
@ D3DXEDT_FORCEDWORD
Definition: d3dx9mesh.h:144
@ D3DXEDT_FLOATS
Definition: d3dx9mesh.h:142
@ D3DXEDT_STRING
Definition: d3dx9mesh.h:141
@ D3DXEDT_DWORD
Definition: d3dx9mesh.h:143
enum _D3DXEFFECTDEFAULTTYPE D3DXEFFECTDEFAULTTYPE

◆ _D3DXIMT

Enumerator
D3DXIMT_WRAP_U 
D3DXIMT_WRAP_V 
D3DXIMT_WRAP_UV 
D3DXIMT_WRAP_U 
D3DXIMT_WRAP_V 
D3DXIMT_WRAP_UV 

Definition at line 125 of file d3dx9mesh.h.

126{
127 D3DXIMT_WRAP_U = 0x01,
128 D3DXIMT_WRAP_V = 0x02,
129 D3DXIMT_WRAP_UV = 0x03,
130} D3DXIMT;
@ D3DXIMT_WRAP_U
Definition: d3dx9mesh.h:127
@ D3DXIMT_WRAP_V
Definition: d3dx9mesh.h:128
@ D3DXIMT_WRAP_UV
Definition: d3dx9mesh.h:129
enum _D3DXIMT D3DXIMT

◆ _D3DXMESH

Enumerator
D3DXMESH_32BIT 
D3DXMESH_DONOTCLIP 
D3DXMESH_POINTS 
D3DXMESH_RTPATCHES 
D3DXMESH_NPATCHES 
D3DXMESH_VB_SYSTEMMEM 
D3DXMESH_VB_MANAGED 
D3DXMESH_VB_WRITEONLY 
D3DXMESH_VB_DYNAMIC 
D3DXMESH_VB_SOFTWAREPROCESSING 
D3DXMESH_IB_SYSTEMMEM 
D3DXMESH_IB_MANAGED 
D3DXMESH_IB_WRITEONLY 
D3DXMESH_IB_DYNAMIC 
D3DXMESH_IB_SOFTWAREPROCESSING 
D3DXMESH_VB_SHARE 
D3DXMESH_USEHWONLY 
D3DXMESH_SYSTEMMEM 
D3DXMESH_MANAGED 
D3DXMESH_WRITEONLY 
D3DXMESH_DYNAMIC 
D3DXMESH_SOFTWAREPROCESSING 
D3DXMESH_32BIT 
D3DXMESH_DONOTCLIP 
D3DXMESH_POINTS 
D3DXMESH_RTPATCHES 
D3DXMESH_NPATCHES 
D3DXMESH_VB_SYSTEMMEM 
D3DXMESH_VB_MANAGED 
D3DXMESH_VB_WRITEONLY 
D3DXMESH_VB_DYNAMIC 
D3DXMESH_VB_SOFTWAREPROCESSING 
D3DXMESH_IB_SYSTEMMEM 
D3DXMESH_IB_MANAGED 
D3DXMESH_IB_WRITEONLY 
D3DXMESH_IB_DYNAMIC 
D3DXMESH_IB_SOFTWAREPROCESSING 
D3DXMESH_VB_SHARE 
D3DXMESH_USEHWONLY 
D3DXMESH_SYSTEMMEM 
D3DXMESH_MANAGED 
D3DXMESH_WRITEONLY 
D3DXMESH_DYNAMIC 
D3DXMESH_SOFTWAREPROCESSING 

Definition at line 44 of file d3dx9mesh.h.

45{
46 D3DXMESH_32BIT = 0x001,
47 D3DXMESH_DONOTCLIP = 0x002,
48 D3DXMESH_POINTS = 0x004,
49 D3DXMESH_RTPATCHES = 0x008,
50 D3DXMESH_NPATCHES = 0x4000,
52 D3DXMESH_VB_MANAGED = 0x020,
54 D3DXMESH_VB_DYNAMIC = 0x080,
57 D3DXMESH_IB_MANAGED = 0x200,
59 D3DXMESH_IB_DYNAMIC = 0x800,
61 D3DXMESH_VB_SHARE = 0x1000,
62 D3DXMESH_USEHWONLY = 0x2000,
63 D3DXMESH_SYSTEMMEM = 0x110,
64 D3DXMESH_MANAGED = 0x220,
65 D3DXMESH_WRITEONLY = 0x440,
66 D3DXMESH_DYNAMIC = 0x880,
68};
@ D3DXMESH_NPATCHES
Definition: d3dx9mesh.h:50
@ D3DXMESH_VB_MANAGED
Definition: d3dx9mesh.h:52
@ D3DXMESH_USEHWONLY
Definition: d3dx9mesh.h:62
@ D3DXMESH_32BIT
Definition: d3dx9mesh.h:46
@ D3DXMESH_DONOTCLIP
Definition: d3dx9mesh.h:47
@ D3DXMESH_DYNAMIC
Definition: d3dx9mesh.h:66
@ D3DXMESH_VB_SOFTWAREPROCESSING
Definition: d3dx9mesh.h:55
@ D3DXMESH_VB_WRITEONLY
Definition: d3dx9mesh.h:53
@ D3DXMESH_POINTS
Definition: d3dx9mesh.h:48
@ D3DXMESH_SYSTEMMEM
Definition: d3dx9mesh.h:63
@ D3DXMESH_WRITEONLY
Definition: d3dx9mesh.h:65
@ D3DXMESH_IB_MANAGED
Definition: d3dx9mesh.h:57
@ D3DXMESH_IB_WRITEONLY
Definition: d3dx9mesh.h:58
@ D3DXMESH_VB_SYSTEMMEM
Definition: d3dx9mesh.h:51
@ D3DXMESH_RTPATCHES
Definition: d3dx9mesh.h:49
@ D3DXMESH_IB_SYSTEMMEM
Definition: d3dx9mesh.h:56
@ D3DXMESH_SOFTWAREPROCESSING
Definition: d3dx9mesh.h:67
@ D3DXMESH_IB_SOFTWAREPROCESSING
Definition: d3dx9mesh.h:60
@ D3DXMESH_MANAGED
Definition: d3dx9mesh.h:64
@ D3DXMESH_VB_SHARE
Definition: d3dx9mesh.h:61
@ D3DXMESH_IB_DYNAMIC
Definition: d3dx9mesh.h:59
@ D3DXMESH_VB_DYNAMIC
Definition: d3dx9mesh.h:54

◆ _D3DXMESHOPT

Enumerator
D3DXMESHOPT_DEVICEINDEPENDENT 
D3DXMESHOPT_COMPACT 
D3DXMESHOPT_ATTRSORT 
D3DXMESHOPT_VERTEXCACHE 
D3DXMESHOPT_STRIPREORDER 
D3DXMESHOPT_IGNOREVERTS 
D3DXMESHOPT_DONOTSPLIT 
D3DXMESHOPT_DEVICEINDEPENDENT 
D3DXMESHOPT_COMPACT 
D3DXMESHOPT_ATTRSORT 
D3DXMESHOPT_VERTEXCACHE 
D3DXMESHOPT_STRIPREORDER 
D3DXMESHOPT_IGNOREVERTS 
D3DXMESHOPT_DONOTSPLIT 

Definition at line 70 of file d3dx9mesh.h.

71{
73 D3DXMESHOPT_COMPACT = 0x01000000,
74 D3DXMESHOPT_ATTRSORT = 0x02000000,
75 D3DXMESHOPT_VERTEXCACHE = 0x04000000,
76 D3DXMESHOPT_STRIPREORDER = 0x08000000,
77 D3DXMESHOPT_IGNOREVERTS = 0x10000000,
78 D3DXMESHOPT_DONOTSPLIT = 0x20000000,
79};
@ D3DXMESHOPT_DONOTSPLIT
Definition: d3dx9mesh.h:78
@ D3DXMESHOPT_STRIPREORDER
Definition: d3dx9mesh.h:76
@ D3DXMESHOPT_IGNOREVERTS
Definition: d3dx9mesh.h:77
@ D3DXMESHOPT_ATTRSORT
Definition: d3dx9mesh.h:74
@ D3DXMESHOPT_VERTEXCACHE
Definition: d3dx9mesh.h:75
@ D3DXMESHOPT_DEVICEINDEPENDENT
Definition: d3dx9mesh.h:72
@ D3DXMESHOPT_COMPACT
Definition: d3dx9mesh.h:73

◆ _D3DXMESHSIMP

Enumerator
D3DXMESHSIMP_VERTEX 
D3DXMESHSIMP_FACE 
D3DXMESHSIMP_VERTEX 
D3DXMESHSIMP_FACE 

Definition at line 94 of file d3dx9mesh.h.

95{
98};
@ D3DXMESHSIMP_FACE
Definition: d3dx9mesh.h:97
@ D3DXMESHSIMP_VERTEX
Definition: d3dx9mesh.h:96

◆ _D3DXPATCHMESH

Enumerator
D3DXPATCHMESH_DEFAULT 
D3DXPATCHMESH_DEFAULT 

Definition at line 89 of file d3dx9mesh.h.

90{
92};
@ D3DXPATCHMESH_DEFAULT
Definition: d3dx9mesh.h:91

◆ _D3DXPATCHMESHTYPE

Enumerator
D3DXPATCHMESH_RECT 
D3DXPATCHMESH_TRI 
D3DXPATCHMESH_NPATCH 
D3DXPATCHMESH_FORCE_DWORD 
D3DXPATCHMESH_RECT 
D3DXPATCHMESH_TRI 
D3DXPATCHMESH_NPATCH 
D3DXPATCHMESH_FORCE_DWORD 

Definition at line 81 of file d3dx9mesh.h.

82{
86 D3DXPATCHMESH_FORCE_DWORD = 0x7fffffff,
enum _D3DXPATCHMESHTYPE D3DXPATCHMESHTYPE
@ D3DXPATCHMESH_RECT
Definition: d3dx9mesh.h:83
@ D3DXPATCHMESH_TRI
Definition: d3dx9mesh.h:84
@ D3DXPATCHMESH_FORCE_DWORD
Definition: d3dx9mesh.h:86
@ D3DXPATCHMESH_NPATCH
Definition: d3dx9mesh.h:85

◆ _D3DXSHCOMPRESSQUALITYTYPE

Enumerator
D3DXSHCQUAL_FASTLOWQUALITY 
D3DXSHCQUAL_SLOWHIGHQUALITY 
D3DXSHCQUAL_FORCE_DWORD 
D3DXSHCQUAL_FASTLOWQUALITY 
D3DXSHCQUAL_SLOWHIGHQUALITY 
D3DXSHCQUAL_FORCE_DWORD 

Definition at line 155 of file d3dx9mesh.h.

156{
159 D3DXSHCQUAL_FORCE_DWORD = 0x7fffffff,
enum _D3DXSHCOMPRESSQUALITYTYPE D3DXSHCOMPRESSQUALITYTYPE
@ D3DXSHCQUAL_FASTLOWQUALITY
Definition: d3dx9mesh.h:157
@ D3DXSHCQUAL_FORCE_DWORD
Definition: d3dx9mesh.h:159
@ D3DXSHCQUAL_SLOWHIGHQUALITY
Definition: d3dx9mesh.h:158

◆ _D3DXSHGPUSIMOPT

Enumerator
D3DXSHGPUSIMOPT_SHADOWRES256 
D3DXSHGPUSIMOPT_SHADOWRES512 
D3DXSHGPUSIMOPT_SHADOWRES1024 
D3DXSHGPUSIMOPT_SHADOWRES2048 
D3DXSHGPUSIMOPT_HIGHQUALITY 
D3DXSHGPUSIMOPT_FORCE_DWORD 
D3DXSHGPUSIMOPT_SHADOWRES256 
D3DXSHGPUSIMOPT_SHADOWRES512 
D3DXSHGPUSIMOPT_SHADOWRES1024 
D3DXSHGPUSIMOPT_SHADOWRES2048 
D3DXSHGPUSIMOPT_HIGHQUALITY 
D3DXSHGPUSIMOPT_FORCE_DWORD 

Definition at line 162 of file d3dx9mesh.h.

163{
169 D3DXSHGPUSIMOPT_FORCE_DWORD = 0x7fffffff,
@ D3DXSHGPUSIMOPT_SHADOWRES2048
Definition: d3dx9mesh.h:167
@ D3DXSHGPUSIMOPT_SHADOWRES512
Definition: d3dx9mesh.h:165
@ D3DXSHGPUSIMOPT_HIGHQUALITY
Definition: d3dx9mesh.h:168
@ D3DXSHGPUSIMOPT_SHADOWRES256
Definition: d3dx9mesh.h:164
@ D3DXSHGPUSIMOPT_FORCE_DWORD
Definition: d3dx9mesh.h:169
@ D3DXSHGPUSIMOPT_SHADOWRES1024
Definition: d3dx9mesh.h:166
enum _D3DXSHGPUSIMOPT D3DXSHGPUSIMOPT

◆ _D3DXTANGENT

Enumerator
D3DXTANGENT_WRAP_U 
D3DXTANGENT_WRAP_V 
D3DXTANGENT_WRAP_UV 
D3DXTANGENT_DONT_NORMALIZE_PARTIALS 
D3DXTANGENT_DONT_ORTHOGONALIZE 
D3DXTANGENT_ORTHOGONALIZE_FROM_V 
D3DXTANGENT_ORTHOGONALIZE_FROM_U 
D3DXTANGENT_WEIGHT_BY_AREA 
D3DXTANGENT_WEIGHT_EQUAL 
D3DXTANGENT_WIND_CW 
D3DXTANGENT_CALCULATE_NORMALS 
D3DXTANGENT_GENERATE_IN_PLACE 
D3DXTANGENT_WRAP_U 
D3DXTANGENT_WRAP_V 
D3DXTANGENT_WRAP_UV 
D3DXTANGENT_DONT_NORMALIZE_PARTIALS 
D3DXTANGENT_DONT_ORTHOGONALIZE 
D3DXTANGENT_ORTHOGONALIZE_FROM_V 
D3DXTANGENT_ORTHOGONALIZE_FROM_U 
D3DXTANGENT_WEIGHT_BY_AREA 
D3DXTANGENT_WEIGHT_EQUAL 
D3DXTANGENT_WIND_CW 
D3DXTANGENT_CALCULATE_NORMALS 
D3DXTANGENT_GENERATE_IN_PLACE 

Definition at line 109 of file d3dx9mesh.h.

110{
111 D3DXTANGENT_WRAP_U = 0x0001,
112 D3DXTANGENT_WRAP_V = 0x0002,
113 D3DXTANGENT_WRAP_UV = 0x0003,
120 D3DXTANGENT_WIND_CW = 0x0100,
@ D3DXTANGENT_WEIGHT_BY_AREA
Definition: d3dx9mesh.h:118
@ D3DXTANGENT_CALCULATE_NORMALS
Definition: d3dx9mesh.h:121
@ D3DXTANGENT_WRAP_V
Definition: d3dx9mesh.h:112
@ D3DXTANGENT_WEIGHT_EQUAL
Definition: d3dx9mesh.h:119
@ D3DXTANGENT_GENERATE_IN_PLACE
Definition: d3dx9mesh.h:122
@ D3DXTANGENT_ORTHOGONALIZE_FROM_V
Definition: d3dx9mesh.h:116
@ D3DXTANGENT_WIND_CW
Definition: d3dx9mesh.h:120
@ D3DXTANGENT_ORTHOGONALIZE_FROM_U
Definition: d3dx9mesh.h:117
@ D3DXTANGENT_DONT_ORTHOGONALIZE
Definition: d3dx9mesh.h:115
@ D3DXTANGENT_WRAP_U
Definition: d3dx9mesh.h:111
@ D3DXTANGENT_DONT_NORMALIZE_PARTIALS
Definition: d3dx9mesh.h:114
@ D3DXTANGENT_WRAP_UV
Definition: d3dx9mesh.h:113
enum _D3DXTANGENT D3DXTANGENT

◆ _D3DXUVATLAS

Enumerator
D3DXUVATLAS_DEFAULT 
D3DXUVATLAS_GEODESIC_FAST 
D3DXUVATLAS_GEODESIC_QUALITY 
D3DXUVATLAS_DEFAULT 
D3DXUVATLAS_GEODESIC_FAST 
D3DXUVATLAS_GEODESIC_QUALITY 

Definition at line 132 of file d3dx9mesh.h.

133{
134 D3DXUVATLAS_DEFAULT = 0x00,
@ D3DXUVATLAS_GEODESIC_FAST
Definition: d3dx9mesh.h:135
@ D3DXUVATLAS_GEODESIC_QUALITY
Definition: d3dx9mesh.h:136
@ D3DXUVATLAS_DEFAULT
Definition: d3dx9mesh.h:134
enum _D3DXUVATLAS D3DXUVATLAS

◆ _D3DXWELDEPSILONSFLAGS

Enumerator
D3DXWELDEPSILONS_WELDALL 
D3DXWELDEPSILONS_WELDPARTIALMATCHES 
D3DXWELDEPSILONS_DONOTREMOVEVERTICES 
D3DXWELDEPSILONS_DONOTSPLIT 
D3DXWELDEPSILONS_WELDALL 
D3DXWELDEPSILONS_WELDPARTIALMATCHES 
D3DXWELDEPSILONS_DONOTREMOVEVERTICES 
D3DXWELDEPSILONS_DONOTSPLIT 

Definition at line 147 of file d3dx9mesh.h.

148{
153};
@ D3DXWELDEPSILONS_DONOTREMOVEVERTICES
Definition: d3dx9mesh.h:151
@ D3DXWELDEPSILONS_DONOTSPLIT
Definition: d3dx9mesh.h:152
@ D3DXWELDEPSILONS_WELDALL
Definition: d3dx9mesh.h:149
@ D3DXWELDEPSILONS_WELDPARTIALMATCHES
Definition: d3dx9mesh.h:150

◆ _MAX_FVF_DECL_SIZE

Enumerator
MAX_FVF_DECL_SIZE 
MAX_FVF_DECL_SIZE 

Definition at line 39 of file d3dx9mesh.h.

40{
42};
#define MAXD3DDECLLENGTH
Definition: d3d9types.h:195
@ MAX_FVF_DECL_SIZE
Definition: d3dx9mesh.h:41

◆ D3DXCLEANTYPE

Enumerator
D3DXCLEAN_BACKFACING 
D3DXCLEAN_BOWTIES 
D3DXCLEAN_SKINNING 
D3DXCLEAN_OPTIMIZATION 
D3DXCLEAN_SIMPLIFICATION 
D3DXCLEAN_BACKFACING 
D3DXCLEAN_BOWTIES 
D3DXCLEAN_SKINNING 
D3DXCLEAN_OPTIMIZATION 
D3DXCLEAN_SIMPLIFICATION 

Definition at line 100 of file d3dx9mesh.h.

100 {
101 D3DXCLEAN_BACKFACING = 0x00000001,
102 D3DXCLEAN_BOWTIES = 0x00000002,
103
D3DXCLEANTYPE
Definition: d3dx9mesh.h:100
@ D3DXCLEAN_BOWTIES
Definition: d3dx9mesh.h:102
@ D3DXCLEAN_SIMPLIFICATION
Definition: d3dx9mesh.h:106
@ D3DXCLEAN_BACKFACING
Definition: d3dx9mesh.h:101
@ D3DXCLEAN_SKINNING
Definition: d3dx9mesh.h:104
@ D3DXCLEAN_OPTIMIZATION
Definition: d3dx9mesh.h:105

Function Documentation

◆ D3DXBoxBoundProbe()

BOOL WINAPI D3DXBoxBoundProbe ( const D3DXVECTOR3 *  vmin,
const D3DXVECTOR3 *  vmax,
const D3DXVECTOR3 *  ray_pos,
const D3DXVECTOR3 *  ray_dir 
)

Definition at line 1909 of file mesh.c.

1911{
1912 FLOAT div, tmin, tmax, tymin, tymax, tzmin, tzmax;
1913
1914 div = 1.0f / praydirection->x;
1915 if ( div >= 0.0f )
1916 {
1917 tmin = ( pmin->x - prayposition->x ) * div;
1918 tmax = ( pmax->x - prayposition->x ) * div;
1919 }
1920 else
1921 {
1922 tmin = ( pmax->x - prayposition->x ) * div;
1923 tmax = ( pmin->x - prayposition->x ) * div;
1924 }
1925
1926 if ( tmax < 0.0f ) return FALSE;
1927
1928 div = 1.0f / praydirection->y;
1929 if ( div >= 0.0f )
1930 {
1931 tymin = ( pmin->y - prayposition->y ) * div;
1932 tymax = ( pmax->y - prayposition->y ) * div;
1933 }
1934 else
1935 {
1936 tymin = ( pmax->y - prayposition->y ) * div;
1937 tymax = ( pmin->y - prayposition->y ) * div;
1938 }
1939
1940 if ( ( tymax < 0.0f ) || ( tmin > tymax ) || ( tymin > tmax ) ) return FALSE;
1941
1942 if ( tymin > tmin ) tmin = tymin;
1943 if ( tymax < tmax ) tmax = tymax;
1944
1945 div = 1.0f / praydirection->z;
1946 if ( div >= 0.0f )
1947 {
1948 tzmin = ( pmin->z - prayposition->z ) * div;
1949 tzmax = ( pmax->z - prayposition->z ) * div;
1950 }
1951 else
1952 {
1953 tzmin = ( pmax->z - prayposition->z ) * div;
1954 tzmax = ( pmin->z - prayposition->z ) * div;
1955 }
1956
1957 if ( (tzmax < 0.0f ) || ( tmin > tzmax ) || ( tzmin > tmax ) ) return FALSE;
1958
1959 return TRUE;
1960}
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
_ACRTIMP div_t __cdecl div(int, int)
Definition: math.c:2081
float FLOAT
Definition: typedefs.h:69

◆ D3DXCleanMesh()

HRESULT WINAPI D3DXCleanMesh ( D3DXCLEANTYPE  clean_type,
ID3DXMesh *  mesh_in,
const DWORD *  adjacency_in,
ID3DXMesh **  mesh_out,
DWORD *  adjacency_out,
ID3DXBuffer **  errors 
)

Definition at line 4093 of file mesh.c.

4095{
4096 FIXME("(%u, %p, %p, %p, %p, %p)\n", clean_type, mesh_in, adjacency_in, mesh_out, adjacency_out, errors_and_warnings);
4097
4098 return E_NOTIMPL;
4099}
#define FIXME(fmt,...)
Definition: precomp.h:53
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ D3DXComputeBoundingBox()

HRESULT WINAPI D3DXComputeBoundingBox ( const D3DXVECTOR3 *  first_pos,
DWORD  num_vertices,
DWORD  stride,
D3DXVECTOR3 *  vmin,
D3DXVECTOR3 *  vmax 
)

Definition at line 1962 of file mesh.c.

1964{
1966 unsigned int i;
1967
1968 if( !pfirstposition || !pmin || !pmax ) return D3DERR_INVALIDCALL;
1969
1970 *pmin = *pfirstposition;
1971 *pmax = *pmin;
1972
1973 for(i=0; i<numvertices; i++)
1974 {
1975 vec = *( (const D3DXVECTOR3*)((const char*)pfirstposition + dwstride * i) );
1976
1977 if ( vec.x < pmin->x ) pmin->x = vec.x;
1978 if ( vec.x > pmax->x ) pmax->x = vec.x;
1979
1980 if ( vec.y < pmin->y ) pmin->y = vec.y;
1981 if ( vec.y > pmax->y ) pmax->y = vec.y;
1982
1983 if ( vec.z < pmin->z ) pmin->z = vec.z;
1984 if ( vec.z > pmax->z ) pmax->z = vec.z;
1985 }
1986
1987 return D3D_OK;
1988}
#define D3DERR_INVALIDCALL
Definition: d3d10_private.h:42
#define D3D_OK
Definition: d3d.h:106
FT_Vector * vec
Definition: ftbbox.c:469
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
FT_Pos x
Definition: ftimage.h:77
FT_Pos y
Definition: ftimage.h:78

◆ D3DXComputeBoundingSphere()

HRESULT WINAPI D3DXComputeBoundingSphere ( const D3DXVECTOR3 *  first_pos,
DWORD  num_vertices,
DWORD  stride,
D3DXVECTOR3 *  center,
FLOAT *  radius 
)

Definition at line 1990 of file mesh.c.

1992{
1994 FLOAT d;
1995 unsigned int i;
1996
1997 if( !pfirstposition || !pcenter || !pradius ) return D3DERR_INVALIDCALL;
1998
1999 temp.x = 0.0f;
2000 temp.y = 0.0f;
2001 temp.z = 0.0f;
2002 *pradius = 0.0f;
2003
2004 for(i=0; i<numvertices; i++)
2005 D3DXVec3Add(&temp, &temp, (const D3DXVECTOR3*)((const char*)pfirstposition + dwstride * i));
2006
2007 D3DXVec3Scale(pcenter, &temp, 1.0f / numvertices);
2008
2009 for(i=0; i<numvertices; i++)
2010 {
2011 d = D3DXVec3Length(D3DXVec3Subtract(&temp, (const D3DXVECTOR3*)((const char*)pfirstposition + dwstride * i), pcenter));
2012 if ( d > *pradius ) *pradius = d;
2013 }
2014 return D3D_OK;
2015}
#define d
Definition: ke_i.h:81
static calc_node_t temp
Definition: rpn_ieee.c:38

◆ D3DXComputeIMTFromPerTexelSignal()

HRESULT WINAPI D3DXComputeIMTFromPerTexelSignal ( ID3DXMesh *  mesh,
DWORD  texture_idx,
float *  texel_signal,
UINT  width,
UINT  height,
UINT  signal_dimension,
UINT  component_count,
DWORD  flags,
LPD3DXUVATLASCB  cb,
void *  ctx,
ID3DXBuffer **  buffer 
)

◆ D3DXComputeIMTFromPerVertexSignal()

HRESULT WINAPI D3DXComputeIMTFromPerVertexSignal ( ID3DXMesh *  mesh,
const float *  vertex_signal,
UINT  signal_dimension,
UINT  signal_stride,
DWORD  flags,
LPD3DXUVATLASCB  cb,
void *  ctx,
ID3DXBuffer **  buffer 
)

◆ D3DXComputeIMTFromSignal()

HRESULT WINAPI D3DXComputeIMTFromSignal ( ID3DXMesh *  mesh,
DWORD  texture_idx,
UINT  signal_dimension,
float  max_uv_distance,
DWORD  flags,
LPD3DXIMTSIGNALCALLBACK  signal_cb,
void *  signal_ctx,
LPD3DXUVATLASCB  status_cb,
void *  status_ctx,
ID3DXBuffer **  buffer 
)

◆ D3DXComputeIMTFromTexture()

HRESULT WINAPI D3DXComputeIMTFromTexture ( struct ID3DXMesh *  mesh,
struct IDirect3DTexture9 *  texture,
DWORD  texture_idx,
DWORD  options,
LPD3DXUVATLASCB  cb,
void *  ctx,
struct ID3DXBuffer **  out 
)

◆ D3DXComputeNormals()

HRESULT WINAPI D3DXComputeNormals ( ID3DXBaseMesh *  mesh,
const DWORD *  adjacency 
)

Definition at line 7637 of file mesh.c.

7638{
7639 TRACE("mesh %p, adjacency %p\n", mesh, adjacency);
7640
7641 if (mesh && (ID3DXMeshVtbl *)mesh->lpVtbl != &D3DXMesh_Vtbl)
7642 {
7643 ERR("Invalid virtual table\n");
7644 return D3DERR_INVALIDCALL;
7645 }
7646
7647 return D3DXComputeTangentFrameEx((ID3DXMesh *)mesh, D3DX_DEFAULT, 0,
7650 adjacency, -1.01f, -0.01f, -1.01f, NULL, NULL);
7651}
#define ERR(fmt,...)
Definition: precomp.h:57
@ D3DDECLUSAGE_NORMAL
Definition: d3d9types.h:239
#define NULL
Definition: types.h:112
HRESULT WINAPI D3DXComputeTangentFrameEx(ID3DXMesh *mesh, DWORD texture_in_semantic, DWORD texture_in_index, DWORD u_partial_out_semantic, DWORD u_partial_out_index, DWORD v_partial_out_semantic, DWORD v_partial_out_index, DWORD normal_out_semantic, DWORD normal_out_index, DWORD options, const DWORD *adjacency, float partial_edge_threshold, float singular_point_threshold, float normal_edge_threshold, ID3DXMesh **mesh_out, ID3DXBuffer **vertex_mapping)
Definition: mesh.c:7409
static const struct ID3DXMeshVtbl D3DXMesh_Vtbl
Definition: mesh.c:1860
#define D3DX_DEFAULT
Definition: d3dx9.h:24
#define TRACE(s)
Definition: solgame.cpp:4
Definition: mesh.c:189

◆ D3DXComputeTangent()

HRESULT WINAPI D3DXComputeTangent ( ID3DXMesh *  mesh,
DWORD  stage,
DWORD  tangent_idx,
DWORD  binorm_idx,
DWORD  wrap,
const DWORD *  adjacency 
)

◆ D3DXComputeTangentFrameEx()

HRESULT WINAPI D3DXComputeTangentFrameEx ( ID3DXMesh *  mesh_in,
DWORD  texture_in_semantic,
DWORD  texture_in_idx,
DWORD  u_partial_out_semantic,
DWORD  u_partial_out_idx,
DWORD  v_partial_out_semantic,
DWORD  v_partial_out_idx,
DWORD  normal_out_semantic,
DWORD  normal_out_idx,
DWORD  flags,
const DWORD *  adjacency,
float  partial_edge_threshold,
float  singular_point_threshold,
float  normal_edge_threshold,
ID3DXMesh **  mesh_out,
ID3DXBuffer **  buffer 
)

Definition at line 7409 of file mesh.c.

7414{
7415 HRESULT hr;
7416 void *indices = NULL;
7417 BYTE *vertices = NULL;
7418 DWORD *point_reps = NULL;
7419 size_t normal_size;
7420 BOOL indices_are_32bit;
7421 DWORD i, j, num_faces, num_vertices, vertex_stride;
7423 D3DVERTEXELEMENT9 *position_declaration = NULL, *normal_declaration = NULL;
7425
7426 TRACE("mesh %p, texture_in_semantic %lu, texture_in_index %lu, u_partial_out_semantic %lu, "
7427 "u_partial_out_index %lu, v_partial_out_semantic %lu, v_partial_out_index %lu, "
7428 "normal_out_semantic %lu, normal_out_index %lu, options %#lx, adjacency %p, "
7429 "partial_edge_threshold %.8e, singular_point_threshold %.8e, normal_edge_threshold %.8e, "
7430 "mesh_out %p, vertex_mapping %p.\n",
7431 mesh, texture_in_semantic, texture_in_index, u_partial_out_semantic, u_partial_out_index,
7432 v_partial_out_semantic, v_partial_out_index, normal_out_semantic, normal_out_index,
7433 options, adjacency, partial_edge_threshold, singular_point_threshold,
7434 normal_edge_threshold, mesh_out, vertex_mapping);
7435
7436 if (!mesh)
7437 {
7438 WARN("mesh is NULL\n");
7439 return D3DERR_INVALIDCALL;
7440 }
7441
7442 if (weighting_method == (D3DXTANGENT_WEIGHT_EQUAL | D3DXTANGENT_WEIGHT_BY_AREA))
7443 {
7444 WARN("D3DXTANGENT_WEIGHT_BY_AREA and D3DXTANGENT_WEIGHT_EQUAL are mutally exclusive\n");
7445 return D3DERR_INVALIDCALL;
7446 }
7447
7448 if (u_partial_out_semantic != D3DX_DEFAULT)
7449 {
7450 FIXME("tangent vectors computation is not supported\n");
7451 return E_NOTIMPL;
7452 }
7453
7454 if (v_partial_out_semantic != D3DX_DEFAULT)
7455 {
7456 FIXME("binormal vectors computation is not supported\n");
7457 return E_NOTIMPL;
7458 }
7459
7462 {
7463 FIXME("Unsupported options %#lx.\n", options);
7464 return E_NOTIMPL;
7465 }
7466
7468 {
7469 FIXME("only normals computation is supported\n");
7470 return E_NOTIMPL;
7471 }
7472
7473 if (!(options & D3DXTANGENT_GENERATE_IN_PLACE) || mesh_out || vertex_mapping)
7474 {
7475 FIXME("only D3DXTANGENT_GENERATE_IN_PLACE is supported\n");
7476 return E_NOTIMPL;
7477 }
7478
7479 if (FAILED(hr = mesh->lpVtbl->GetDeclaration(mesh, declaration)))
7480 return hr;
7481
7482 for (i = 0; declaration[i].Stream != 0xff; i++)
7483 {
7484 if (declaration[i].Usage == D3DDECLUSAGE_POSITION && !declaration[i].UsageIndex)
7485 position_declaration = &declaration[i];
7486 if (declaration[i].Usage == normal_out_semantic && declaration[i].UsageIndex == normal_out_index)
7487 normal_declaration = &declaration[i];
7488 }
7489
7490 if (!position_declaration || !normal_declaration)
7491 return D3DERR_INVALIDCALL;
7492
7493 if (normal_declaration->Type == D3DDECLTYPE_FLOAT3)
7494 {
7495 normal_size = sizeof(D3DXVECTOR3);
7496 }
7497 else if (normal_declaration->Type == D3DDECLTYPE_FLOAT4)
7498 {
7499 normal_size = sizeof(D3DXVECTOR4);
7500 }
7501 else
7502 {
7503 WARN("unsupported normals type %u\n", normal_declaration->Type);
7504 return D3DERR_INVALIDCALL;
7505 }
7506
7507 num_faces = mesh->lpVtbl->GetNumFaces(mesh);
7508 num_vertices = mesh->lpVtbl->GetNumVertices(mesh);
7509 vertex_stride = mesh->lpVtbl->GetNumBytesPerVertex(mesh);
7510 indices_are_32bit = mesh->lpVtbl->GetOptions(mesh) & D3DXMESH_32BIT;
7511
7512 point_reps = malloc(num_vertices * sizeof(*point_reps));
7513 if (!point_reps)
7514 {
7515 hr = E_OUTOFMEMORY;
7516 goto done;
7517 }
7518
7519 if (adjacency)
7520 {
7521 if (FAILED(hr = mesh->lpVtbl->ConvertAdjacencyToPointReps(mesh, adjacency, point_reps)))
7522 goto done;
7523 }
7524 else
7525 {
7526 for (i = 0; i < num_vertices; i++)
7527 point_reps[i] = i;
7528 }
7529
7530 if (FAILED(hr = mesh->lpVtbl->LockIndexBuffer(mesh, 0, &indices)))
7531 goto done;
7532
7533 if (FAILED(hr = mesh->lpVtbl->LockVertexBuffer(mesh, 0, (void **)&vertices)))
7534 goto done;
7535
7536 for (i = 0; i < num_vertices; i++)
7537 {
7538 static const D3DXVECTOR4 default_vector = {0.0f, 0.0f, 0.0f, 1.0f};
7539 void *normal = vertices + normal_declaration->Offset + i * vertex_stride;
7540
7541 memcpy(normal, &default_vector, normal_size);
7542 }
7543
7544 for (i = 0; i < num_faces; i++)
7545 {
7546 float denominator, weights[3];
7547 D3DXVECTOR3 a, b, cross, face_normal;
7548 const DWORD face_indices[3] =
7549 {
7550 read_ib(indices, indices_are_32bit, 3 * i + 0),
7551 read_ib(indices, indices_are_32bit, 3 * i + 1),
7552 read_ib(indices, indices_are_32bit, 3 * i + 2)
7553 };
7554 const D3DXVECTOR3 v0 = read_vec3(vertices, position_declaration, vertex_stride, face_indices[0]);
7555 const D3DXVECTOR3 v1 = read_vec3(vertices, position_declaration, vertex_stride, face_indices[1]);
7556 const D3DXVECTOR3 v2 = read_vec3(vertices, position_declaration, vertex_stride, face_indices[2]);
7557
7558 D3DXVec3Cross(&cross, D3DXVec3Subtract(&a, &v0, &v1), D3DXVec3Subtract(&b, &v0, &v2));
7559
7560 switch (weighting_method)
7561 {
7563 weights[0] = weights[1] = weights[2] = 1.0f;
7564 break;
7566 weights[0] = weights[1] = weights[2] = D3DXVec3Length(&cross);
7567 break;
7568 default:
7569 /* weight by angle */
7570 denominator = D3DXVec3Length(&a) * D3DXVec3Length(&b);
7571 if (!denominator)
7572 weights[0] = 0.0f;
7573 else
7574 weights[0] = acosf(D3DXVec3Dot(&a, &b) / denominator);
7575
7576 D3DXVec3Subtract(&a, &v1, &v0);
7577 D3DXVec3Subtract(&b, &v1, &v2);
7578 denominator = D3DXVec3Length(&a) * D3DXVec3Length(&b);
7579 if (!denominator)
7580 weights[1] = 0.0f;
7581 else
7582 weights[1] = acosf(D3DXVec3Dot(&a, &b) / denominator);
7583
7584 D3DXVec3Subtract(&a, &v2, &v0);
7585 D3DXVec3Subtract(&b, &v2, &v1);
7586 denominator = D3DXVec3Length(&a) * D3DXVec3Length(&b);
7587 if (!denominator)
7588 weights[2] = 0.0f;
7589 else
7590 weights[2] = acosf(D3DXVec3Dot(&a, &b) / denominator);
7591
7592 break;
7593 }
7594
7595 D3DXVec3Normalize(&face_normal, &cross);
7596
7597 for (j = 0; j < 3; j++)
7598 {
7600 DWORD rep_index = point_reps[face_indices[j]];
7601 D3DXVECTOR3 *rep_normal = vertex_element_vec3(vertices, normal_declaration, vertex_stride, rep_index);
7602
7603 D3DXVec3Scale(&normal, &face_normal, weights[j]);
7604 D3DXVec3Add(rep_normal, rep_normal, &normal);
7605 }
7606 }
7607
7608 for (i = 0; i < num_vertices; i++)
7609 {
7610 DWORD rep_index = point_reps[i];
7611 D3DXVECTOR3 *normal = vertex_element_vec3(vertices, normal_declaration, vertex_stride, i);
7612 D3DXVECTOR3 *rep_normal = vertex_element_vec3(vertices, normal_declaration, vertex_stride, rep_index);
7613
7614 if (i == rep_index)
7615 D3DXVec3Normalize(rep_normal, rep_normal);
7616 else
7617 *normal = *rep_normal;
7618 }
7619
7620 hr = D3D_OK;
7621
7622done:
7623 if (vertices)
7624 mesh->lpVtbl->UnlockVertexBuffer(mesh);
7625
7626 if (indices)
7627 mesh->lpVtbl->UnlockIndexBuffer(mesh);
7628
7629 free(point_reps);
7630
7631 return hr;
7632}
#define WARN(fmt,...)
Definition: precomp.h:61
@ D3DDECLUSAGE_POSITION
Definition: d3d9types.h:236
@ D3DDECLTYPE_FLOAT3
Definition: d3d9types.h:273
@ D3DDECLTYPE_FLOAT4
Definition: d3d9types.h:274
#define D3DDECL_END()
Definition: d3d9types.h:329
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define free
Definition: debug_ros.c:5
#define malloc
Definition: debug_ros.c:4
HRESULT hr
Definition: delayimp.cpp:582
D3DXVECTOR3 *WINAPI D3DXVec3Normalize(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv)
Definition: math.c:1805
static D3DXVECTOR3 read_vec3(BYTE *vertices, const D3DVERTEXELEMENT9 *declaration, DWORD vertex_stride, DWORD index)
Definition: mesh.c:7379
static DWORD read_ib(void *index_buffer, BOOL indices_are_32bit, DWORD index)
Definition: mesh.c:7049
static D3DXVECTOR3 * vertex_element_vec3(BYTE *vertices, const D3DVERTEXELEMENT9 *declaration, DWORD vertex_stride, DWORD index)
Definition: mesh.c:7373
_ACRTIMP float __cdecl acosf(float)
Definition: acosf.c:47
struct _D3DVECTOR D3DXVECTOR3
Definition: d3dx9math.h:97
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
GLuint GLuint GLsizei GLenum const GLvoid * indices
Definition: gl.h:1545
GLboolean GLboolean GLboolean b
Definition: glext.h:6204
GLfloat v0
Definition: glext.h:6061
const GLbyte * weights
Definition: glext.h:6523
GLboolean GLboolean GLboolean GLboolean a
Definition: glext.h:6204
GLfloat GLfloat v1
Definition: glext.h:6062
GLfloat GLfloat GLfloat v2
Definition: glext.h:6063
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Definition: glfuncs.h:250
_Must_inspect_result_ _In_ USAGE _In_ USHORT _In_ USAGE Usage
Definition: hidpi.h:384
#define FAILED(hr)
Definition: intsafe.h:51
#define a
Definition: ke_i.h:78
#define b
Definition: ke_i.h:79
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
@ normal
Definition: optimize.h:166
static void cross(float v1[3], float v2[3], float result[3])
Definition: project.c:100
unsigned char BYTE
Definition: xxhash.c:193

◆ D3DXConcatenateMeshes()

HRESULT WINAPI D3DXConcatenateMeshes ( struct ID3DXMesh **  meshes,
UINT  mesh_count,
DWORD  flags,
const D3DXMATRIX *  geometry_matrices,
const D3DXMATRIX *  texture_matrices,
const D3DVERTEXELEMENT9 *  declaration,
struct IDirect3DDevice9 *  device,
struct ID3DXMesh **  mesh 
)

◆ D3DXConvertMeshSubsetToSingleStrip()

HRESULT WINAPI D3DXConvertMeshSubsetToSingleStrip ( struct ID3DXBaseMesh *  mesh_in,
DWORD  attribute_id,
DWORD  ib_flags,
struct IDirect3DIndexBuffer9 **  index_buffer,
DWORD *  index_count 
)

Definition at line 7674 of file mesh.c.

7676{
7677 FIXME("mesh_in %p, attribute_id %lu, ib_flags %#lx, index_buffer %p, index_count %p stub.\n",
7678 mesh_in, attribute_id, ib_flags, index_buffer, index_count);
7679
7680 return E_NOTIMPL;
7681}

◆ D3DXConvertMeshSubsetToStrips()

HRESULT WINAPI D3DXConvertMeshSubsetToStrips ( struct ID3DXBaseMesh *  mesh_in,
DWORD  attribute_id,
DWORD  ib_flags,
struct IDirect3DIndexBuffer9 **  index_buffer,
DWORD *  index_count,
struct ID3DXBuffer **  strip_lengths,
DWORD *  strip_count 
)

◆ D3DXCreateBuffer()

HRESULT WINAPI D3DXCreateBuffer ( DWORD  size,
ID3DXBuffer **  buffer 
)

Definition at line 127 of file core.c.

128{
129 struct ID3DXBufferImpl *object;
130 HRESULT hr;
131
132 TRACE("size %lu, buffer %p.\n", size, buffer);
133
134 if (!buffer)
135 {
136 WARN("Invalid buffer specified.\n");
137 return D3DERR_INVALIDCALL;
138 }
139
140 object = calloc(1, sizeof(*object));
141 if (!object)
142 return E_OUTOFMEMORY;
143
144 hr = d3dx9_buffer_init(object, size);
145 if (FAILED(hr))
146 {
147 WARN("Failed to initialize buffer, hr %#lx.\n", hr);
148 free(object);
149 return hr;
150 }
151
152 *buffer = &object->ID3DXBuffer_iface;
153
154 TRACE("Created ID3DXBuffer %p.\n", *buffer);
155
156 return D3D_OK;
157}
static HRESULT d3dx9_buffer_init(struct ID3DXBufferImpl *buffer, DWORD size)
Definition: core.c:111
GLuint buffer
Definition: glext.h:5915
GLsizeiptr size
Definition: glext.h:5919
#define calloc
Definition: rosglue.h:14

◆ D3DXCreateMesh()

HRESULT WINAPI D3DXCreateMesh ( DWORD  face_count,
DWORD  vertex_count,
DWORD  flags,
const D3DVERTEXELEMENT9 *  declaration,
struct IDirect3DDevice9 *  device,
struct ID3DXMesh **  mesh 
)

Definition at line 2431 of file mesh.c.

2433{
2434 HRESULT hr;
2435 DWORD fvf;
2436 IDirect3DVertexDeclaration9 *vertex_declaration;
2437 UINT vertex_declaration_size;
2438 UINT num_elem;
2439 IDirect3DVertexBuffer9 *vertex_buffer;
2440 IDirect3DIndexBuffer9 *index_buffer;
2441 DWORD *attrib_buffer;
2442 struct d3dx9_mesh *object;
2443 DWORD index_usage = 0;
2444 D3DPOOL index_pool = D3DPOOL_DEFAULT;
2445 D3DFORMAT index_format = D3DFMT_INDEX16;
2446 DWORD vertex_usage = 0;
2447 D3DPOOL vertex_pool = D3DPOOL_DEFAULT;
2448 int i;
2449
2450 TRACE("numfaces %lu, numvertices %lu, options %#lx, declaration %p, device %p, mesh %p.\n",
2452
2453 if (numfaces == 0 || numvertices == 0 || declaration == NULL || device == NULL || mesh == NULL ||
2454 /* D3DXMESH_VB_SHARE is for cloning, and D3DXMESH_USEHWONLY is for ConvertToBlendedMesh */
2455 (options & (D3DXMESH_VB_SHARE | D3DXMESH_USEHWONLY | 0xfffe0000)))
2456 {
2457 return D3DERR_INVALIDCALL;
2458 }
2459 for (i = 0; declaration[i].Stream != 0xff; i++)
2460 if (declaration[i].Stream != 0)
2461 return D3DERR_INVALIDCALL;
2462 num_elem = i + 1;
2463
2464 if (options & D3DXMESH_32BIT)
2465 index_format = D3DFMT_INDEX32;
2466
2468 index_usage |= D3DUSAGE_DONOTCLIP;
2469 vertex_usage |= D3DUSAGE_DONOTCLIP;
2470 }
2471 if (options & D3DXMESH_POINTS) {
2472 index_usage |= D3DUSAGE_POINTS;
2473 vertex_usage |= D3DUSAGE_POINTS;
2474 }
2476 index_usage |= D3DUSAGE_RTPATCHES;
2477 vertex_usage |= D3DUSAGE_RTPATCHES;
2478 }
2479 if (options & D3DXMESH_NPATCHES) {
2480 index_usage |= D3DUSAGE_NPATCHES;
2481 vertex_usage |= D3DUSAGE_NPATCHES;
2482 }
2483
2485 vertex_pool = D3DPOOL_SYSTEMMEM;
2486 else if (options & D3DXMESH_VB_MANAGED)
2487 vertex_pool = D3DPOOL_MANAGED;
2488
2490 vertex_usage |= D3DUSAGE_WRITEONLY;
2492 vertex_usage |= D3DUSAGE_DYNAMIC;
2494 vertex_usage |= D3DUSAGE_SOFTWAREPROCESSING;
2495
2497 index_pool = D3DPOOL_SYSTEMMEM;
2498 else if (options & D3DXMESH_IB_MANAGED)
2499 index_pool = D3DPOOL_MANAGED;
2500
2502 index_usage |= D3DUSAGE_WRITEONLY;
2504 index_usage |= D3DUSAGE_DYNAMIC;
2506 index_usage |= D3DUSAGE_SOFTWAREPROCESSING;
2507
2509 if (hr != D3D_OK)
2510 {
2511 fvf = 0;
2512 }
2513
2515 {
2516 WARN("Failed to create vertex declaration, hr %#lx.\n", hr);
2517 return hr;
2518 }
2520
2522 vertex_usage, fvf, vertex_pool, &vertex_buffer, NULL)))
2523 {
2524 WARN("Failed to create vertex buffer, hr %#lx.\n", hr);
2526 return hr;
2527 }
2528
2530 numfaces * 3 * ((index_format == D3DFMT_INDEX16) ? 2 : 4), index_usage, index_format,
2531 index_pool, &index_buffer, NULL)))
2532 {
2533 WARN("Failed to create index buffer, hr %#lx.\n", hr);
2536 return hr;
2537 }
2538
2540 object = calloc(1, sizeof(*object));
2541 if (object == NULL || attrib_buffer == NULL)
2542 {
2543 free(object);
2548 *mesh = NULL;
2549 return E_OUTOFMEMORY;
2550 }
2551 object->ID3DXMesh_iface.lpVtbl = &D3DXMesh_Vtbl;
2552 object->ref = 1;
2553
2554 object->numfaces = numfaces;
2555 object->numvertices = numvertices;
2556 object->options = options;
2557 object->fvf = fvf;
2558 object->device = device;
2560
2561 copy_declaration(object->cached_declaration, declaration, num_elem);
2562 object->vertex_declaration = vertex_declaration;
2563 object->vertex_declaration_size = vertex_declaration_size;
2564 object->num_elem = num_elem;
2565 object->vertex_buffer = vertex_buffer;
2566 object->index_buffer = index_buffer;
2567 object->attrib_buffer = attrib_buffer;
2568
2569 *mesh = &object->ID3DXMesh_iface;
2570
2571 return D3D_OK;
2572}
#define D3DUSAGE_NPATCHES
Definition: d3d8types.h:98
#define D3DUSAGE_POINTS
Definition: d3d8types.h:96
#define D3DUSAGE_DONOTCLIP
Definition: d3d8types.h:95
@ D3DFMT_INDEX16
Definition: d3d8types.h:649
@ D3DFMT_INDEX32
Definition: d3d8types.h:650
#define D3DUSAGE_DYNAMIC
Definition: d3d8types.h:99
#define D3DUSAGE_WRITEONLY
Definition: d3d8types.h:93
enum _D3DPOOL D3DPOOL
@ D3DPOOL_DEFAULT
Definition: d3d8types.h:709
@ D3DPOOL_SYSTEMMEM
Definition: d3d8types.h:711
@ D3DPOOL_MANAGED
Definition: d3d8types.h:710
enum _D3DFORMAT D3DFORMAT
#define D3DUSAGE_SOFTWAREPROCESSING
Definition: d3d8types.h:94
#define D3DUSAGE_RTPATCHES
Definition: d3d8types.h:97
#define IDirect3DDevice9_CreateIndexBuffer(p, a, b, c, d, e, f)
Definition: d3d9.h:1362
#define IDirect3DDevice9_CreateVertexDeclaration(p, a, b)
Definition: d3d9.h:1421
#define IDirect3DVertexBuffer9_Release(p)
Definition: d3d9.h:524
#define IDirect3DVertexDeclaration9_Release(p)
Definition: d3d9.h:1013
#define IDirect3DDevice9_CreateVertexBuffer(p, a, b, c, d, e, f)
Definition: d3d9.h:1361
#define IDirect3DIndexBuffer9_Release(p)
Definition: d3d9.h:592
#define IDirect3DDevice9_AddRef(p)
Definition: d3d9.h:1335
static void copy_declaration(D3DVERTEXELEMENT9 *dst, const D3DVERTEXELEMENT9 *src, UINT num_elem)
Definition: mesh.c:218
HRESULT WINAPI D3DXFVFFromDeclarator(const D3DVERTEXELEMENT9 *declaration, DWORD *fvf)
Definition: mesh.c:2132
UINT WINAPI D3DXGetDeclVertexSize(const D3DVERTEXELEMENT9 *decl, DWORD stream_idx)
Definition: mesh.c:2321
unsigned int UINT
Definition: sysinfo.c:13
static IStream Stream
Definition: htmldoc.c:1115
DWORD fvf
Definition: mesh.c:53
DWORD numfaces
Definition: mesh.c:50
UINT num_elem
Definition: mesh.c:58
DWORD numvertices
Definition: mesh.c:51
UINT vertex_declaration_size
Definition: mesh.c:57
IDirect3DDevice9 * device
Definition: mesh.c:54
IDirect3DVertexBuffer9 * vertex_buffer
Definition: mesh.c:59
DWORD options
Definition: mesh.c:52
DWORD * attrib_buffer
Definition: mesh.c:61
IDirect3DIndexBuffer9 * index_buffer
Definition: mesh.c:60
IDirect3DVertexDeclaration9 * vertex_declaration
Definition: mesh.c:56
Definition: devices.h:37

◆ D3DXCreateMeshFVF()

HRESULT WINAPI D3DXCreateMeshFVF ( DWORD  face_count,
DWORD  vertex_count,
DWORD  flags,
DWORD  fvf,
struct IDirect3DDevice9 *  device,
struct ID3DXMesh **  mesh 
)

Definition at line 2577 of file mesh.c.

2579{
2580 HRESULT hr;
2582
2583 TRACE("face_count %lu, vertex_count %lu, options %#lx, fvf %#lx, device %p, mesh %p.\n",
2585
2587 if (FAILED(hr)) return hr;
2588
2590}
HRESULT WINAPI D3DXDeclaratorFromFVF(DWORD fvf, D3DVERTEXELEMENT9 declaration[MAX_FVF_DECL_SIZE])
Definition: mesh.c:2034
HRESULT WINAPI D3DXCreateMesh(DWORD numfaces, DWORD numvertices, DWORD options, const D3DVERTEXELEMENT9 *declaration, struct IDirect3DDevice9 *device, struct ID3DXMesh **mesh)
Definition: mesh.c:2431
int face_count
Definition: d3drm.c:3529
int vertex_count
Definition: d3drm.c:3528

◆ D3DXCreatePatchMesh()

HRESULT WINAPI D3DXCreatePatchMesh ( const D3DXPATCHINFO *  patch_info,
DWORD  patch_count,
DWORD  vertex_count,
DWORD  flags,
const D3DVERTEXELEMENT9 *  declaration,
struct IDirect3DDevice9 *  device,
struct ID3DXPatchMesh **  mesh 
)

◆ D3DXCreatePMeshFromStream()

HRESULT WINAPI D3DXCreatePMeshFromStream ( struct IStream *  stream,
DWORD  flags,
struct IDirect3DDevice9 *  device,
struct ID3DXBuffer **  materials,
struct ID3DXBuffer **  effect_instances,
DWORD *  material_count,
struct ID3DXPMesh **  mesh 
)

◆ D3DXCreatePRTBuffer()

HRESULT WINAPI D3DXCreatePRTBuffer ( UINT  sample_count,
UINT  coeff_count,
UINT  channel_count,
ID3DXPRTBuffer **  buffer 
)

◆ D3DXCreatePRTBufferTex()

HRESULT WINAPI D3DXCreatePRTBufferTex ( UINT  width,
UINT  height,
UINT  coeff_count,
UINT  channel_count,
ID3DXPRTBuffer **  buffer 
)

◆ D3DXCreatePRTCompBuffer()

HRESULT WINAPI D3DXCreatePRTCompBuffer ( D3DXSHCOMPRESSQUALITYTYPE  quality,
UINT  cluster_count,
UINT  pca_count,
LPD3DXSHPRTSIMCB  cb,
void *  ctx,
ID3DXPRTBuffer *  input,
ID3DXPRTCompBuffer **  buffer 
)

◆ D3DXCreatePRTEngine()

HRESULT WINAPI D3DXCreatePRTEngine ( ID3DXMesh *  mesh,
DWORD *  adjacency,
BOOL  extract_uv,
ID3DXMesh *  blocker_mesh,
ID3DXPRTEngine **  engine 
)

◆ D3DXCreateSkinInfo()

HRESULT WINAPI D3DXCreateSkinInfo ( DWORD  vertex_count,
const D3DVERTEXELEMENT9 *  declaration,
DWORD  bone_count,
ID3DXSkinInfo **  skin_info 
)

Definition at line 463 of file skin.c.

465{
466 HRESULT hr;
467 static const D3DVERTEXELEMENT9 empty_declaration = D3DDECL_END();
468 struct d3dx9_skin_info *object = NULL;
469
470 TRACE("vertex_count %lu, declaration %p, bone_count %lu, skin_info %p.\n",
471 vertex_count, declaration, bone_count, skin_info);
472
473 if (!skin_info || !declaration)
474 return D3DERR_INVALIDCALL;
475
476 object = calloc(1, sizeof(*object));
477 if (!object)
478 return E_OUTOFMEMORY;
479
480 object->ID3DXSkinInfo_iface.lpVtbl = &d3dx9_skin_info_vtbl;
481 object->ref = 1;
482 object->num_vertices = vertex_count;
483 object->num_bones = bone_count;
484 object->vertex_declaration[0] = empty_declaration;
485 object->fvf = 0;
486
487 object->bones = calloc(bone_count, sizeof(*object->bones));
488 if (!object->bones) {
490 goto error;
491 }
492
493 if (FAILED(hr = d3dx9_skin_info_SetDeclaration(&object->ID3DXSkinInfo_iface, declaration)))
494 goto error;
495
496 *skin_info = &object->ID3DXSkinInfo_iface;
497
498 return D3D_OK;
499error:
500 free(object->bones);
501 free(object);
502 return hr;
503}
#define error(str)
Definition: mkdosfs.c:1605
static const struct ID3DXSkinInfoVtbl d3dx9_skin_info_vtbl
Definition: skin.c:432
static HRESULT WINAPI d3dx9_skin_info_SetDeclaration(ID3DXSkinInfo *iface, const D3DVERTEXELEMENT9 *declaration)
Definition: skin.c:347

◆ D3DXCreateSkinInfoFromBlendedMesh()

HRESULT WINAPI D3DXCreateSkinInfoFromBlendedMesh ( ID3DXBaseMesh *  mesh,
DWORD  bone_count,
const D3DXBONECOMBINATION *  bone_combination_table,
ID3DXSkinInfo **  skin_info 
)

◆ D3DXCreateSkinInfoFVF()

HRESULT WINAPI D3DXCreateSkinInfoFVF ( DWORD  vertex_count,
DWORD  fvf,
DWORD  bone_count,
ID3DXSkinInfo **  skin_info 
)

Definition at line 505 of file skin.c.

506{
507 HRESULT hr;
509
510 TRACE("vertex_count %lu, fvf %#lx, bone_count %lu, skin_info %p.\n",
511 vertex_count, fvf, bone_count, skin_info);
512
514 if (FAILED(hr))
515 return hr;
516
517 return D3DXCreateSkinInfo(vertex_count, declaration, bone_count, skin_info);
518}
HRESULT WINAPI D3DXCreateSkinInfo(DWORD vertex_count, const D3DVERTEXELEMENT9 *declaration, DWORD bone_count, ID3DXSkinInfo **skin_info)
Definition: skin.c:463

◆ D3DXCreateSPMesh()

HRESULT WINAPI D3DXCreateSPMesh ( ID3DXMesh *  mesh,
const DWORD *  adjacency,
const D3DXATTRIBUTEWEIGHTS *  attribute_weights,
const float *  vertex_weights,
ID3DXSPMesh **  spmesh 
)

◆ D3DXCreateTextureGutterHelper()

HRESULT WINAPI D3DXCreateTextureGutterHelper ( UINT  width,
UINT  height,
ID3DXMesh *  mesh,
float  gutter_size,
ID3DXTextureGutterHelper **  gh 
)

◆ D3DXDeclaratorFromFVF()

HRESULT WINAPI D3DXDeclaratorFromFVF ( DWORD  fvf,
D3DVERTEXELEMENT9  declaration[MAX_FVF_DECL_SIZE] 
)

Definition at line 2034 of file mesh.c.

2035{
2036 static const D3DVERTEXELEMENT9 end_element = D3DDECL_END();
2037 DWORD tex_count = (fvf & D3DFVF_TEXCOUNT_MASK) >> D3DFVF_TEXCOUNT_SHIFT;
2038 unsigned int offset = 0;
2039 unsigned int idx = 0;
2040 unsigned int i;
2041
2042 TRACE("fvf %#lx, declaration %p.\n", fvf, declaration);
2043
2045
2046 if (fvf & D3DFVF_POSITION_MASK)
2047 {
2048 BOOL has_blend = (fvf & D3DFVF_XYZB5) >= D3DFVF_XYZB1;
2049 DWORD blend_count = 1 + (((fvf & D3DFVF_XYZB5) - D3DFVF_XYZB1) >> 1);
2050 BOOL has_blend_idx = (fvf & D3DFVF_LASTBETA_D3DCOLOR) || (fvf & D3DFVF_LASTBETA_UBYTE4);
2051
2052 if (has_blend_idx) --blend_count;
2053
2054 if ((fvf & D3DFVF_POSITION_MASK) == D3DFVF_XYZW
2055 || (has_blend && blend_count > 4))
2056 return D3DERR_INVALIDCALL;
2057
2058 if ((fvf & D3DFVF_POSITION_MASK) == D3DFVF_XYZRHW)
2060 else
2062
2063 if (has_blend)
2064 {
2065 switch (blend_count)
2066 {
2067 case 0:
2068 break;
2069 case 1:
2071 break;
2072 case 2:
2074 break;
2075 case 3:
2077 break;
2078 case 4:
2080 break;
2081 default:
2082 ERR("Invalid blend count %lu.\n", blend_count);
2083 break;
2084 }
2085
2086 if (has_blend_idx)
2087 {
2088 if (fvf & D3DFVF_LASTBETA_UBYTE4)
2090 else if (fvf & D3DFVF_LASTBETA_D3DCOLOR)
2092 }
2093 }
2094 }
2095
2096 if (fvf & D3DFVF_NORMAL)
2098 if (fvf & D3DFVF_PSIZE)
2100 if (fvf & D3DFVF_DIFFUSE)
2102 if (fvf & D3DFVF_SPECULAR)
2104
2105 for (i = 0; i < tex_count; ++i)
2106 {
2107 switch ((fvf >> (16 + 2 * i)) & 0x03)
2108 {
2111 break;
2114 break;
2117 break;
2120 break;
2121 }
2122 }
2123
2124 declaration[idx] = end_element;
2125
2126 return D3D_OK;
2127}
#define D3DFVF_DIFFUSE
Definition: d3d8types.h:122
#define D3DFVF_RESERVED2
Definition: d3d8types.h:136
#define D3DFVF_TEXCOUNT_SHIFT
Definition: d3d8types.h:125
#define D3DFVF_XYZB1
Definition: d3d8types.h:115
#define D3DFVF_LASTBETA_UBYTE4
Definition: d3d8types.h:135
#define D3DFVF_XYZB5
Definition: d3d8types.h:119
#define D3DFVF_XYZRHW
Definition: d3d8types.h:114
#define D3DFVF_NORMAL
Definition: d3d8types.h:120
#define D3DFVF_TEXTUREFORMAT4
Definition: d3d8types.h:63
#define D3DFVF_TEXTUREFORMAT3
Definition: d3d8types.h:62
#define D3DFVF_TEXCOUNT_MASK
Definition: d3d8types.h:124
#define D3DFVF_TEXTUREFORMAT1
Definition: d3d8types.h:60
#define D3DFVF_PSIZE
Definition: d3d8types.h:121
#define D3DFVF_TEXTUREFORMAT2
Definition: d3d8types.h:61
#define D3DFVF_SPECULAR
Definition: d3d8types.h:123
#define D3DFVF_POSITION_MASK
Definition: d3d8types.h:112
#define D3DFVF_RESERVED0
Definition: d3d8types.h:111
@ D3DDECLUSAGE_BLENDWEIGHT
Definition: d3d9types.h:237
@ D3DDECLUSAGE_BLENDINDICES
Definition: d3d9types.h:238
@ D3DDECLUSAGE_POSITIONT
Definition: d3d9types.h:245
@ D3DDECLUSAGE_TEXCOORD
Definition: d3d9types.h:241
@ D3DDECLUSAGE_PSIZE
Definition: d3d9types.h:240
@ D3DDECLUSAGE_COLOR
Definition: d3d9types.h:246
#define D3DFVF_LASTBETA_D3DCOLOR
Definition: d3d9types.h:169
@ D3DDECLTYPE_UBYTE4
Definition: d3d9types.h:276
@ D3DDECLTYPE_FLOAT1
Definition: d3d9types.h:271
@ D3DDECLTYPE_D3DCOLOR
Definition: d3d9types.h:275
@ D3DDECLTYPE_FLOAT2
Definition: d3d9types.h:272
#define D3DFVF_XYZW
Definition: d3d9types.h:152
static void append_decl_element(D3DVERTEXELEMENT9 *declaration, UINT *idx, UINT *offset, D3DDECLTYPE type, D3DDECLUSAGE usage, UINT usage_idx)
Definition: mesh.c:2017
unsigned int idx
Definition: utils.c:40
GLintptr offset
Definition: glext.h:5920

◆ D3DXFVFFromDeclarator()

HRESULT WINAPI D3DXFVFFromDeclarator ( const D3DVERTEXELEMENT9 *  decl,
DWORD *  fvf 
)

Definition at line 2132 of file mesh.c.

2133{
2134 unsigned int i = 0, texture, offset;
2135
2136 TRACE("(%p, %p)\n", declaration, fvf);
2137
2138 *fvf = 0;
2140 {
2142 declaration[1].UsageIndex == 0) &&
2144 declaration[2].UsageIndex == 0))
2145 {
2146 return D3DERR_INVALIDCALL;
2147 }
2149 declaration[1].Usage == D3DDECLUSAGE_BLENDINDICES && declaration[1].UsageIndex == 0)
2150 {
2152 {
2154 }
2155 else
2156 {
2158 }
2159 i = 2;
2160 }
2162 declaration[1].UsageIndex == 0)
2163 {
2165 declaration[2].Usage == D3DDECLUSAGE_BLENDINDICES && declaration[2].UsageIndex == 0)
2166 {
2168 {
2169 *fvf |= D3DFVF_LASTBETA_UBYTE4;
2170 }
2171 else
2172 {
2174 }
2175 switch (declaration[1].Type)
2176 {
2177 case D3DDECLTYPE_FLOAT1: *fvf |= D3DFVF_XYZB2; break;
2178 case D3DDECLTYPE_FLOAT2: *fvf |= D3DFVF_XYZB3; break;
2179 case D3DDECLTYPE_FLOAT3: *fvf |= D3DFVF_XYZB4; break;
2180 case D3DDECLTYPE_FLOAT4: *fvf |= D3DFVF_XYZB5; break;
2181 }
2182 i = 3;
2183 }
2184 else
2185 {
2186 switch (declaration[1].Type)
2187 {
2188 case D3DDECLTYPE_FLOAT1: *fvf |= D3DFVF_XYZB1; break;
2189 case D3DDECLTYPE_FLOAT2: *fvf |= D3DFVF_XYZB2; break;
2190 case D3DDECLTYPE_FLOAT3: *fvf |= D3DFVF_XYZB3; break;
2191 case D3DDECLTYPE_FLOAT4: *fvf |= D3DFVF_XYZB4; break;
2192 }
2193 i = 2;
2194 }
2195 }
2196 else
2197 {
2198 *fvf |= D3DFVF_XYZ;
2199 i = 1;
2200 }
2201 }
2203 declaration[0].UsageIndex == 0)
2204 {
2205 *fvf |= D3DFVF_XYZRHW;
2206 i = 1;
2207 }
2208
2210 {
2211 *fvf |= D3DFVF_NORMAL;
2212 i++;
2213 }
2215 declaration[i].UsageIndex == 0)
2216 {
2217 *fvf |= D3DFVF_PSIZE;
2218 i++;
2219 }
2221 declaration[i].UsageIndex == 0)
2222 {
2223 *fvf |= D3DFVF_DIFFUSE;
2224 i++;
2225 }
2227 declaration[i].UsageIndex == 1)
2228 {
2229 *fvf |= D3DFVF_SPECULAR;
2230 i++;
2231 }
2232
2233 for (texture = 0; texture < D3DDP_MAXTEXCOORD; i++, texture++)
2234 {
2235 if (declaration[i].Stream == 0xFF)
2236 {
2237 break;
2238 }
2240 declaration[i].UsageIndex == texture)
2241 {
2242 *fvf |= D3DFVF_TEXCOORDSIZE1(declaration[i].UsageIndex);
2243 }
2245 declaration[i].UsageIndex == texture)
2246 {
2247 *fvf |= D3DFVF_TEXCOORDSIZE2(declaration[i].UsageIndex);
2248 }
2250 declaration[i].UsageIndex == texture)
2251 {
2252 *fvf |= D3DFVF_TEXCOORDSIZE3(declaration[i].UsageIndex);
2253 }
2255 declaration[i].UsageIndex == texture)
2256 {
2257 *fvf |= D3DFVF_TEXCOORDSIZE4(declaration[i].UsageIndex);
2258 }
2259 else
2260 {
2261 return D3DERR_INVALIDCALL;
2262 }
2263 }
2264
2265 *fvf |= (texture << D3DFVF_TEXCOUNT_SHIFT);
2266
2267 for (offset = 0, i = 0; declaration[i].Stream != 0xFF;
2269 {
2270 if (declaration[i].Offset != offset)
2271 {
2272 return D3DERR_INVALIDCALL;
2273 }
2274 }
2275
2276 return D3D_OK;
2277}
Type
Definition: Type.h:7
#define D3DFVF_XYZ
Definition: d3d8types.h:113
#define D3DFVF_XYZB4
Definition: d3d8types.h:118
#define D3DFVF_XYZB3
Definition: d3d8types.h:117
#define D3DDP_MAXTEXCOORD
Definition: d3d8types.h:303
#define D3DFVF_XYZB2
Definition: d3d8types.h:116
#define D3DFVF_TEXCOORDSIZE4(CoordIndex)
Definition: d3d8types.h:67
#define D3DFVF_TEXCOORDSIZE3(CoordIndex)
Definition: d3d8types.h:66
#define D3DFVF_TEXCOORDSIZE2(CoordIndex)
Definition: d3d8types.h:65
#define D3DFVF_TEXCOORDSIZE1(CoordIndex)
Definition: d3d8types.h:64
static const UINT d3dx_decltype_size[]
Definition: mesh.c:67
GLenum GLuint texture
Definition: glext.h:6295
_In_ ULONG _In_ ULONG Offset
Definition: ntddpcm.h:101

◆ D3DXGenerateOutputDecl()

HRESULT WINAPI D3DXGenerateOutputDecl ( D3DVERTEXELEMENT9 *  decl_out,
const D3DVERTEXELEMENT9 *  decl_in 
)

◆ D3DXGeneratePMesh()

HRESULT WINAPI D3DXGeneratePMesh ( ID3DXMesh *  mesh,
const DWORD *  adjacency,
const D3DXATTRIBUTEWEIGHTS *  attribute_weights,
const float *  vertex_weights,
DWORD  min_value,
DWORD  flags,
ID3DXPMesh **  pmesh 
)

◆ D3DXGetDeclLength()

UINT WINAPI D3DXGetDeclLength ( const D3DVERTEXELEMENT9 *  decl)

Definition at line 2352 of file mesh.c.

2353{
2355
2356 TRACE("decl %p\n", decl);
2357
2358 /* null decl results in exception on Windows XP */
2359
2360 for (element = decl; element->Stream != 0xff; ++element);
2361
2362 return element - decl;
2363}

◆ D3DXGetDeclVertexSize()

UINT WINAPI D3DXGetDeclVertexSize ( const D3DVERTEXELEMENT9 *  decl,
DWORD  stream_idx 
)

Definition at line 2321 of file mesh.c.

2322{
2324 UINT size = 0;
2325
2326 TRACE("decl %p, stream_idx %lu.\n", decl, stream_idx);
2327
2328 if (!decl) return 0;
2329
2330 for (element = decl; element->Stream != 0xff; ++element)
2331 {
2332 UINT type_size;
2333
2334 if (element->Stream != stream_idx) continue;
2335
2337 {
2338 FIXME("Unhandled element type %#x, size will be incorrect.\n", element->Type);
2339 continue;
2340 }
2341
2342 type_size = d3dx_decltype_size[element->Type];
2343 if (element->Offset + type_size > size) size = element->Offset + type_size;
2344 }
2345
2346 return size;
2347}
#define ARRAY_SIZE(A)
Definition: main.h:20

◆ D3DXGetFVFVertexSize()

UINT WINAPI D3DXGetFVFVertexSize ( DWORD  FVF)

Definition at line 2287 of file mesh.c.

2288{
2289 DWORD size = 0;
2290 UINT i;
2291 UINT numTextures = (FVF & D3DFVF_TEXCOUNT_MASK) >> D3DFVF_TEXCOUNT_SHIFT;
2292
2293 if (FVF & D3DFVF_NORMAL) size += sizeof(D3DXVECTOR3);
2294 if (FVF & D3DFVF_DIFFUSE) size += sizeof(DWORD);
2295 if (FVF & D3DFVF_SPECULAR) size += sizeof(DWORD);
2296 if (FVF & D3DFVF_PSIZE) size += sizeof(DWORD);
2297
2298 switch (FVF & D3DFVF_POSITION_MASK)
2299 {
2300 case D3DFVF_XYZ: size += sizeof(D3DXVECTOR3); break;
2301 case D3DFVF_XYZRHW: size += 4 * sizeof(FLOAT); break;
2302 case D3DFVF_XYZB1: size += 4 * sizeof(FLOAT); break;
2303 case D3DFVF_XYZB2: size += 5 * sizeof(FLOAT); break;
2304 case D3DFVF_XYZB3: size += 6 * sizeof(FLOAT); break;
2305 case D3DFVF_XYZB4: size += 7 * sizeof(FLOAT); break;
2306 case D3DFVF_XYZB5: size += 8 * sizeof(FLOAT); break;
2307 case D3DFVF_XYZW: size += 4 * sizeof(FLOAT); break;
2308 }
2309
2310 for (i = 0; i < numTextures; i++)
2311 {
2312 size += Get_TexCoord_Size_From_FVF(FVF, i) * sizeof(FLOAT);
2313 }
2314
2315 return size;
2316}
static UINT Get_TexCoord_Size_From_FVF(DWORD FVF, int tex_num)
Definition: mesh.c:2282
#define FLOAT
Definition: i386-dis.c:525
#define DWORD
Definition: nt_native.h:44

◆ D3DXIntersect()

HRESULT WINAPI D3DXIntersect ( ID3DXBaseMesh *  mesh,
const D3DXVECTOR3 *  ray_position,
const D3DXVECTOR3 *  ray_direction,
BOOL *  hit,
DWORD *  face_idx,
float *  u,
float *  v,
float *  distance,
ID3DXBuffer **  hits,
DWORD *  hit_count 
)

Definition at line 7656 of file mesh.c.

7658{
7659 FIXME("mesh %p, ray_pos %p, ray_dir %p, hit %p, face_index %p, u %p, v %p, distance %p, all_hits %p, "
7660 "count_of_hits %p stub!\n", mesh, ray_pos, ray_dir, hit, face_index, u, v, distance, all_hits, count_of_hits);
7661
7662 return E_NOTIMPL;
7663}
const GLdouble * v
Definition: gl.h:2040
GLsizei GLsizei GLfloat distance
Definition: glext.h:11755
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble * u
Definition: glfuncs.h:240

◆ D3DXIntersectSubset()

HRESULT WINAPI D3DXIntersectSubset ( ID3DXBaseMesh *  mesh,
DWORD  attribute_id,
const D3DXVECTOR3 *  ray_position,
const D3DXVECTOR3 *  ray_direction,
BOOL *  hit,
DWORD *  face_idx,
float *  u,
float *  v,
float *  distance,
ID3DXBuffer **  hits,
DWORD *  hit_count 
)

◆ D3DXIntersectTri()

BOOL WINAPI D3DXIntersectTri ( const D3DXVECTOR3 *  vtx0,
const D3DXVECTOR3 *  vtx1,
const D3DXVECTOR3 *  vtx2,
const D3DXVECTOR3 *  ray_pos,
const D3DXVECTOR3 *  ray_dir,
FLOAT *  u,
FLOAT *  v,
FLOAT *  dist 
)

Definition at line 2365 of file mesh.c.

2367{
2368 D3DXMATRIX m;
2370
2371 TRACE("p0 %p, p1 %p, p2 %p, praypos %p, praydir %p, pu %p, pv %p, pdist %p.\n",
2372 p0, p1, p2, praypos, praydir, pu, pv, pdist);
2373
2374 m.m[0][0] = p1->x - p0->x;
2375 m.m[1][0] = p2->x - p0->x;
2376 m.m[2][0] = -praydir->x;
2377 m.m[3][0] = 0.0f;
2378 m.m[0][1] = p1->y - p0->y;
2379 m.m[1][1] = p2->y - p0->y;
2380 m.m[2][1] = -praydir->y;
2381 m.m[3][1] = 0.0f;
2382 m.m[0][2] = p1->z - p0->z;
2383 m.m[1][2] = p2->z - p0->z;
2384 m.m[2][2] = -praydir->z;
2385 m.m[3][2] = 0.0f;
2386 m.m[0][3] = 0.0f;
2387 m.m[1][3] = 0.0f;
2388 m.m[2][3] = 0.0f;
2389 m.m[3][3] = 1.0f;
2390
2391 vec.x = praypos->x - p0->x;
2392 vec.y = praypos->y - p0->y;
2393 vec.z = praypos->z - p0->z;
2394 vec.w = 0.0f;
2395
2396 if ( D3DXMatrixInverse(&m, NULL, &m) )
2397 {
2398 D3DXVec4Transform(&vec, &vec, &m);
2399 if ( (vec.x >= 0.0f) && (vec.y >= 0.0f) && (vec.x + vec.y <= 1.0f) && (vec.z >= 0.0f) )
2400 {
2401 if (pu) *pu = vec.x;
2402 if (pv) *pv = vec.y;
2403 if (pdist) *pdist = fabsf( vec.z );
2404 return TRUE;
2405 }
2406 }
2407
2408 return FALSE;
2409}
D3DXVECTOR4 *WINAPI D3DXVec4Transform(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv, const D3DXMATRIX *pm)
Definition: math.c:2073
D3DXMATRIX *WINAPI D3DXMatrixInverse(D3DXMATRIX *pout, FLOAT *pdeterminant, const D3DXMATRIX *pm)
Definition: math.c:254
_ACRTIMP float __cdecl fabsf(float)
const GLfloat * m
Definition: glext.h:10848

◆ D3DXLoadMeshFromXA()

HRESULT WINAPI D3DXLoadMeshFromXA ( const char *  filename,
DWORD  flags,
struct IDirect3DDevice9 *  device,
struct ID3DXBuffer **  adjacency,
struct ID3DXBuffer **  materials,
struct ID3DXBuffer **  effect_instances,
DWORD *  material_count,
struct ID3DXMesh **  mesh 
)

Definition at line 4143 of file mesh.c.

4146{
4148 HRESULT hr;
4149 int len;
4150
4151 TRACE("filename %s, options %#lx, device %p, adjacency %p, materials %p, "
4152 "effect_instances %p, num_materials %p, mesh %p.\n",
4153 debugstr_a(filename), options, device, adjacency, materials,
4154 effect_instances, num_materials, mesh);
4155
4156 if (!filename)
4157 return D3DERR_INVALIDCALL;
4158
4160 filenameW = malloc(len * sizeof(WCHAR));
4161 if (!filenameW) return E_OUTOFMEMORY;
4163
4164 hr = D3DXLoadMeshFromXW(filenameW, options, device, adjacency, materials,
4165 effect_instances, num_materials, mesh);
4166 free(filenameW);
4167
4168 return hr;
4169}
HRESULT WINAPI D3DXLoadMeshFromXW(const WCHAR *filename, DWORD options, struct IDirect3DDevice9 *device, struct ID3DXBuffer **adjacency, struct ID3DXBuffer **materials, struct ID3DXBuffer **effect_instances, DWORD *num_materials, struct ID3DXMesh **mesh)
Definition: mesh.c:4171
#define CP_ACP
Definition: compat.h:109
#define MultiByteToWideChar
Definition: compat.h:110
GLenum GLsizei len
Definition: glext.h:6722
const char * filename
Definition: ioapi.h:137
#define debugstr_a
Definition: kernel32.h:31
static const WCHAR filenameW[]
Definition: resource.c:27
short WCHAR
Definition: pedump.c:58

◆ D3DXLoadMeshFromXInMemory()

HRESULT WINAPI D3DXLoadMeshFromXInMemory ( const void *  data,
DWORD  data_size,
DWORD  flags,
struct IDirect3DDevice9 *  device,
struct ID3DXBuffer **  adjacency,
struct ID3DXBuffer **  materials,
struct ID3DXBuffer **  effect_instances,
DWORD *  material_count,
struct ID3DXMesh **  mesh 
)

Definition at line 4297 of file mesh.c.

4300{
4301 HRESULT hr;
4302 ID3DXFile *d3dxfile = NULL;
4303 ID3DXFileEnumObject *enumobj = NULL;
4304 ID3DXFileData *filedata = NULL;
4306 ID3DXBuffer *materials = NULL;
4307 ID3DXBuffer *effects = NULL;
4308 ID3DXBuffer *adjacency = NULL;
4309 struct list container_list = LIST_INIT(container_list);
4310 struct mesh_container *container_ptr, *next_container_ptr;
4312 DWORD num_faces, num_vertices;
4314 DWORD provide_flags = 0;
4315 DWORD fvf;
4316 ID3DXMesh *concat_mesh = NULL;
4318 BYTE *concat_vertices = NULL;
4319 void *concat_indices = NULL;
4320 DWORD index_offset;
4321 DWORD concat_vertex_size;
4322 SIZE_T i, nb_children;
4323 GUID guid;
4324
4325 TRACE("memory %p, memory_size %lu, options %#lx, device %p, adjacency_out %p, materials_out %p, "
4326 "effects_out %p, num_materials_out %p, mesh_out %p.\n", memory, memory_size, options,
4327 device, adjacency_out, materials_out, effects_out, num_materials_out, mesh_out);
4328
4329 if (!memory || !memory_size || !device || !mesh_out)
4330 return D3DERR_INVALIDCALL;
4331
4332 hr = D3DXFileCreate(&d3dxfile);
4333 if (FAILED(hr)) goto cleanup;
4334
4335 hr = d3dxfile->lpVtbl->RegisterTemplates(d3dxfile, D3DRM_XTEMPLATES, D3DRM_XTEMPLATE_BYTES);
4336 if (FAILED(hr)) goto cleanup;
4337
4338 source.lpMemory = (void*)memory;
4339 source.dSize = memory_size;
4340 hr = d3dxfile->lpVtbl->CreateEnumObject(d3dxfile, &source, D3DXF_FILELOAD_FROMMEMORY, &enumobj);
4341 if (FAILED(hr)) goto cleanup;
4342
4343 D3DXMatrixIdentity(&identity);
4344 if (adjacency_out) provide_flags |= PROVIDE_ADJACENCY;
4345 if (materials_out || effects_out) provide_flags |= PROVIDE_MATERIALS;
4346
4347 hr = enumobj->lpVtbl->GetChildren(enumobj, &nb_children);
4348 if (FAILED(hr))
4349 goto cleanup;
4350
4351 for (i = 0; i < nb_children; i++)
4352 {
4353 hr = enumobj->lpVtbl->GetChild(enumobj, i, &filedata);
4354 if (FAILED(hr))
4355 goto cleanup;
4356
4357 hr = filedata->lpVtbl->GetType(filedata, &guid);
4358 if (SUCCEEDED(hr)) {
4359 if (IsEqualGUID(&guid, &TID_D3DRMMesh)) {
4360 container_ptr = calloc(1, sizeof(*container_ptr));
4361 if (!container_ptr) {
4362 hr = E_OUTOFMEMORY;
4363 goto cleanup;
4364 }
4365
4367 (provide_flags & PROVIDE_ADJACENCY) ? &container_ptr->adjacency : NULL,
4368 (provide_flags & PROVIDE_MATERIALS) ? &container_ptr->materials : NULL,
4369 NULL, &container_ptr->num_materials, NULL, &container_ptr->mesh);
4370 if (container_ptr->mesh)
4371 {
4372 list_add_tail(&container_list, &container_ptr->entry);
4373 D3DXMatrixIdentity(&container_ptr->transform);
4374 }
4375 else
4376 {
4377 free(container_ptr);
4378 }
4379 } else if (IsEqualGUID(&guid, &TID_D3DRMFrame)) {
4380 hr = parse_frame(filedata, options, device, &identity, &container_list, provide_flags);
4381 }
4382 if (FAILED(hr)) goto cleanup;
4383 }
4384 filedata->lpVtbl->Release(filedata);
4385 filedata = NULL;
4386 if (FAILED(hr))
4387 goto cleanup;
4388 }
4389
4390 enumobj->lpVtbl->Release(enumobj);
4391 enumobj = NULL;
4392 d3dxfile->lpVtbl->Release(d3dxfile);
4393 d3dxfile = NULL;
4394
4395 if (list_empty(&container_list)) {
4396 hr = E_FAIL;
4397 goto cleanup;
4398 }
4399
4400 fvf = D3DFVF_XYZ;
4401 num_faces = 0;
4402 num_vertices = 0;
4403 num_materials = 0;
4404 LIST_FOR_EACH_ENTRY(container_ptr, &container_list, struct mesh_container, entry)
4405 {
4406 ID3DXMesh *mesh = container_ptr->mesh;
4407 fvf |= mesh->lpVtbl->GetFVF(mesh);
4408 num_faces += mesh->lpVtbl->GetNumFaces(mesh);
4409 num_vertices += mesh->lpVtbl->GetNumVertices(mesh);
4410 num_materials += container_ptr->num_materials;
4411 }
4412
4413 hr = D3DXCreateMeshFVF(num_faces, num_vertices, options, fvf, device, &concat_mesh);
4414 if (FAILED(hr)) goto cleanup;
4415
4416 hr = concat_mesh->lpVtbl->GetDeclaration(concat_mesh, concat_decl);
4417 if (FAILED(hr)) goto cleanup;
4418
4419 concat_vertex_size = D3DXGetDeclVertexSize(concat_decl, 0);
4420
4421 hr = concat_mesh->lpVtbl->LockVertexBuffer(concat_mesh, 0, (void**)&concat_vertices);
4422 if (FAILED(hr)) goto cleanup;
4423
4424 LIST_FOR_EACH_ENTRY(container_ptr, &container_list, struct mesh_container, entry)
4425 {
4427 ID3DXMesh *mesh = container_ptr->mesh;
4428 DWORD num_mesh_vertices = mesh->lpVtbl->GetNumVertices(mesh);
4429 DWORD mesh_vertex_size;
4430 const BYTE *mesh_vertices;
4431 DWORD i;
4432
4433 hr = mesh->lpVtbl->GetDeclaration(mesh, mesh_decl);
4434 if (FAILED(hr)) goto cleanup;
4435
4436 mesh_vertex_size = D3DXGetDeclVertexSize(mesh_decl, 0);
4437
4438 hr = mesh->lpVtbl->LockVertexBuffer(mesh, D3DLOCK_READONLY, (void**)&mesh_vertices);
4439 if (FAILED(hr)) goto cleanup;
4440
4441 for (i = 0; i < num_mesh_vertices; i++) {
4442 int j;
4443 int k = 1;
4444
4445 D3DXVec3TransformCoord((D3DXVECTOR3*)concat_vertices,
4446 (D3DXVECTOR3*)mesh_vertices,
4447 &container_ptr->transform);
4448 for (j = 1; concat_decl[j].Stream != 0xff; j++)
4449 {
4450 if (concat_decl[j].Usage == mesh_decl[k].Usage &&
4451 concat_decl[j].UsageIndex == mesh_decl[k].UsageIndex)
4452 {
4453 if (concat_decl[j].Usage == D3DDECLUSAGE_NORMAL) {
4454 D3DXVec3TransformCoord((D3DXVECTOR3*)(concat_vertices + concat_decl[j].Offset),
4455 (D3DXVECTOR3*)(mesh_vertices + mesh_decl[k].Offset),
4456 &container_ptr->transform);
4457 } else {
4458 memcpy(concat_vertices + concat_decl[j].Offset,
4459 mesh_vertices + mesh_decl[k].Offset,
4460 d3dx_decltype_size[mesh_decl[k].Type]);
4461 }
4462 k++;
4463 }
4464 }
4465 mesh_vertices += mesh_vertex_size;
4466 concat_vertices += concat_vertex_size;
4467 }
4468
4469 mesh->lpVtbl->UnlockVertexBuffer(mesh);
4470 }
4471
4472 concat_mesh->lpVtbl->UnlockVertexBuffer(concat_mesh);
4473 concat_vertices = NULL;
4474
4475 hr = concat_mesh->lpVtbl->LockIndexBuffer(concat_mesh, 0, &concat_indices);
4476 if (FAILED(hr)) goto cleanup;
4477
4478 index_offset = 0;
4479 LIST_FOR_EACH_ENTRY(container_ptr, &container_list, struct mesh_container, entry)
4480 {
4481 ID3DXMesh *mesh = container_ptr->mesh;
4482 const void *mesh_indices;
4483 DWORD num_mesh_faces = mesh->lpVtbl->GetNumFaces(mesh);
4484 DWORD i;
4485
4486 hr = mesh->lpVtbl->LockIndexBuffer(mesh, D3DLOCK_READONLY, (void**)&mesh_indices);
4487 if (FAILED(hr)) goto cleanup;
4488
4489 if (options & D3DXMESH_32BIT) {
4490 DWORD *dest = concat_indices;
4491 const DWORD *src = mesh_indices;
4492 for (i = 0; i < num_mesh_faces * 3; i++)
4493 *dest++ = index_offset + *src++;
4494 concat_indices = dest;
4495 } else {
4496 WORD *dest = concat_indices;
4497 const WORD *src = mesh_indices;
4498 for (i = 0; i < num_mesh_faces * 3; i++)
4499 *dest++ = index_offset + *src++;
4500 concat_indices = dest;
4501 }
4502 mesh->lpVtbl->UnlockIndexBuffer(mesh);
4503
4504 index_offset += num_mesh_faces * 3;
4505 }
4506
4507 concat_mesh->lpVtbl->UnlockIndexBuffer(concat_mesh);
4508 concat_indices = NULL;
4509
4510 if (num_materials) {
4511 DWORD *concat_attrib_buffer = NULL;
4512 DWORD offset = 0;
4513
4514 hr = concat_mesh->lpVtbl->LockAttributeBuffer(concat_mesh, 0, &concat_attrib_buffer);
4515 if (FAILED(hr)) goto cleanup;
4516
4517 LIST_FOR_EACH_ENTRY(container_ptr, &container_list, struct mesh_container, entry)
4518 {
4519 ID3DXMesh *mesh = container_ptr->mesh;
4520 const DWORD *mesh_attrib_buffer = NULL;
4521 DWORD count = mesh->lpVtbl->GetNumFaces(mesh);
4522
4523 hr = mesh->lpVtbl->LockAttributeBuffer(mesh, D3DLOCK_READONLY, (DWORD**)&mesh_attrib_buffer);
4524 if (FAILED(hr)) {
4525 concat_mesh->lpVtbl->UnlockAttributeBuffer(concat_mesh);
4526 goto cleanup;
4527 }
4528
4529 while (count--)
4530 *concat_attrib_buffer++ = offset + *mesh_attrib_buffer++;
4531
4532 mesh->lpVtbl->UnlockAttributeBuffer(mesh);
4533 offset += container_ptr->num_materials;
4534 }
4535 concat_mesh->lpVtbl->UnlockAttributeBuffer(concat_mesh);
4536 }
4537
4538 if (materials_out || effects_out) {
4539 D3DXMATERIAL *out_ptr;
4540 if (!num_materials) {
4541 /* create default material */
4543 if (FAILED(hr)) goto cleanup;
4544
4546 out_ptr->MatD3D.Diffuse.r = 0.5f;
4547 out_ptr->MatD3D.Diffuse.g = 0.5f;
4548 out_ptr->MatD3D.Diffuse.b = 0.5f;
4549 out_ptr->MatD3D.Specular.r = 0.5f;
4550 out_ptr->MatD3D.Specular.g = 0.5f;
4551 out_ptr->MatD3D.Specular.b = 0.5f;
4552 /* D3DXCreateBuffer initializes the rest to zero */
4553 } else {
4555 char *strings_out_ptr;
4556
4557 LIST_FOR_EACH_ENTRY(container_ptr, &container_list, struct mesh_container, entry)
4558 {
4559 if (container_ptr->materials) {
4560 DWORD i;
4561 const D3DXMATERIAL *in_ptr = ID3DXBuffer_GetBufferPointer(container_ptr->materials);
4562 for (i = 0; i < container_ptr->num_materials; i++)
4563 {
4564 if (in_ptr->pTextureFilename)
4565 buffer_size += strlen(in_ptr->pTextureFilename) + 1;
4566 in_ptr++;
4567 }
4568 }
4569 }
4570
4572 if (FAILED(hr)) goto cleanup;
4574 strings_out_ptr = (char*)(out_ptr + num_materials);
4575
4576 LIST_FOR_EACH_ENTRY(container_ptr, &container_list, struct mesh_container, entry)
4577 {
4578 if (container_ptr->materials) {
4579 DWORD i;
4580 const D3DXMATERIAL *in_ptr = ID3DXBuffer_GetBufferPointer(container_ptr->materials);
4581 for (i = 0; i < container_ptr->num_materials; i++)
4582 {
4583 out_ptr->MatD3D = in_ptr->MatD3D;
4584 if (in_ptr->pTextureFilename) {
4585 out_ptr->pTextureFilename = strings_out_ptr;
4586 strcpy(out_ptr->pTextureFilename, in_ptr->pTextureFilename);
4587 strings_out_ptr += strlen(in_ptr->pTextureFilename) + 1;
4588 }
4589 in_ptr++;
4590 out_ptr++;
4591 }
4592 }
4593 }
4594 }
4595 }
4596 if (!num_materials)
4597 num_materials = 1;
4598
4599 if (effects_out) {
4601 if (!materials_out) {
4603 materials = NULL;
4604 }
4605 }
4606
4607 if (adjacency_out) {
4608 if (!list_next(&container_list, list_head(&container_list))) {
4609 container_ptr = LIST_ENTRY(list_head(&container_list), struct mesh_container, entry);
4610 adjacency = container_ptr->adjacency;
4611 container_ptr->adjacency = NULL;
4612 } else {
4613 DWORD offset = 0;
4614 DWORD *out_ptr;
4615
4616 hr = D3DXCreateBuffer(num_faces * 3 * sizeof(DWORD), &adjacency);
4617 if (FAILED(hr)) goto cleanup;
4618
4620 LIST_FOR_EACH_ENTRY(container_ptr, &container_list, struct mesh_container, entry)
4621 {
4622 DWORD i;
4623 DWORD count = 3 * container_ptr->mesh->lpVtbl->GetNumFaces(container_ptr->mesh);
4624 DWORD *in_ptr = ID3DXBuffer_GetBufferPointer(container_ptr->adjacency);
4625
4626 for (i = 0; i < count; i++)
4627 *out_ptr++ = offset + *in_ptr++;
4628
4629 offset += count;
4630 }
4631 }
4632 }
4633
4634 *mesh_out = concat_mesh;
4635 if (adjacency_out) *adjacency_out = adjacency;
4636 if (materials_out) *materials_out = materials;
4637 if (effects_out) *effects_out = effects;
4638 if (num_materials_out) *num_materials_out = num_materials;
4639
4640 hr = D3D_OK;
4641cleanup:
4642 if (concat_indices) concat_mesh->lpVtbl->UnlockIndexBuffer(concat_mesh);
4643 if (concat_vertices) concat_mesh->lpVtbl->UnlockVertexBuffer(concat_mesh);
4644 if (filedata) filedata->lpVtbl->Release(filedata);
4645 if (enumobj) enumobj->lpVtbl->Release(enumobj);
4646 if (d3dxfile) d3dxfile->lpVtbl->Release(d3dxfile);
4647 if (FAILED(hr)) {
4648 if (concat_mesh) IUnknown_Release(concat_mesh);
4652 }
4653 LIST_FOR_EACH_ENTRY_SAFE(container_ptr, next_container_ptr, &container_list, struct mesh_container, entry)
4654 {
4655 if (container_ptr->mesh) IUnknown_Release(container_ptr->mesh);
4656 if (container_ptr->adjacency) ID3DXBuffer_Release(container_ptr->adjacency);
4657 if (container_ptr->materials) ID3DXBuffer_Release(container_ptr->materials);
4658 if (container_ptr->effects) ID3DXBuffer_Release(container_ptr->effects);
4659 free(container_ptr);
4660 }
4661 return hr;
4662}
static int list_empty(struct list_entry *head)
Definition: list.h:58
static void list_add_tail(struct list_entry *head, struct list_entry *entry)
Definition: list.h:83
Definition: list.h:39
#define D3DLOCK_READONLY
Definition: d3d8types.h:69
struct ID3DXBuffer ID3DXBuffer
Definition: d3dx8core.h:51
#define E_FAIL
Definition: ddrawi.h:102
HRESULT WINAPI D3DXCreateBuffer(DWORD size, ID3DXBuffer **buffer)
Definition: core.c:127
D3DXVECTOR3 *WINAPI D3DXVec3TransformCoord(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv, const D3DXMATRIX *pm)
Definition: math.c:1895
#define PROVIDE_MATERIALS
Definition: mesh.c:41
HRESULT WINAPI D3DXLoadSkinMeshFromXof(struct ID3DXFileData *filedata, DWORD options, struct IDirect3DDevice9 *device, struct ID3DXBuffer **adjacency_out, struct ID3DXBuffer **materials_out, struct ID3DXBuffer **effects_out, DWORD *num_materials_out, struct ID3DXSkinInfo **skin_info_out, struct ID3DXMesh **mesh_out)
Definition: mesh.c:3487
#define PROVIDE_ADJACENCY
Definition: mesh.c:43
static HRESULT parse_frame(struct ID3DXFileData *filedata, DWORD options, struct IDirect3DDevice9 *device, const D3DXMATRIX *parent_transform, struct list *container_list, DWORD provide_flags)
Definition: mesh.c:4234
HRESULT WINAPI D3DXCreateMeshFVF(DWORD face_count, DWORD vertex_count, DWORD options, DWORD fvf, struct IDirect3DDevice9 *device, struct ID3DXMesh **mesh)
Definition: mesh.c:2577
static HRESULT generate_effects(ID3DXBuffer *materials, DWORD num_materials, ID3DXBuffer **effects)
Definition: mesh.c:3389
HRESULT WINAPI D3DXFileCreate(ID3DXFile **d3dxfile)
Definition: xfile.c:693
static void cleanup(void)
Definition: main.c:1335
GUID guid
Definition: version.c:147
_ACRTIMP size_t __cdecl strlen(const char *)
Definition: string.c:1597
struct tagD3DXMATERIAL D3DXMATERIAL
#define ID3DXBuffer_GetBufferPointer(p)
Definition: d3dx9core.h:85
#define ID3DXBuffer_Release(p)
Definition: d3dx9core.h:83
#define D3DXF_FILELOAD_FROMMEMORY
Definition: d3dx9xof.h:41
unsigned short WORD
Definition: ntddk_ex.h:93
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLenum src
Definition: glext.h:6340
nsrefcnt Release()
#define SUCCEEDED(hr)
Definition: intsafe.h:50
uint32_t entry
Definition: isohybrid.c:63
static char memory[1024 *256]
Definition: process.c:122
static char * dest
Definition: rtl.c:149
int k
Definition: mpi.c:3369
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define D3DRM_XTEMPLATE_BYTES
Definition: rmxftmpl.h:283
unsigned char D3DRM_XTEMPLATES[]
Definition: rmxftmpl.h:6
strcpy
Definition: string.h:131
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
Definition: list.h:236
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
Definition: list.h:242
__WINE_SERVER_LIST_INLINE struct list * list_next(const struct list *list, const struct list *elem)
Definition: list.h:117
wchar_t const *const size_t const buffer_size
Definition: stat.cpp:95
D3DCOLORVALUE Diffuse
Definition: d3d8types.h:1101
D3DCOLORVALUE Specular
Definition: d3d8types.h:1103
Definition: list.h:15
ID3DXBuffer * materials
Definition: mesh.c:4228
ID3DXMesh * mesh
Definition: mesh.c:4226
struct list entry
Definition: mesh.c:4225
ID3DXBuffer * adjacency
Definition: mesh.c:4227
ID3DXBuffer * effects
Definition: mesh.c:4229
D3DXMATRIX transform
Definition: mesh.c:4231
DWORD num_materials
Definition: mesh.c:4230
D3DMATERIAL8 MatD3D
Definition: dx8vb.idl:77
#define LIST_INIT(head)
Definition: queue.h:197
#define LIST_ENTRY(type)
Definition: queue.h:175
ULONG_PTR SIZE_T
Definition: typedefs.h:80

◆ D3DXLoadMeshFromXof()

HRESULT WINAPI D3DXLoadMeshFromXof ( struct ID3DXFileData *  file_data,
DWORD  flags,
struct IDirect3DDevice9 *  device,
struct ID3DXBuffer **  adjacency,
struct ID3DXBuffer **  materials,
struct ID3DXBuffer **  effect_instances,
DWORD *  material_count,
struct ID3DXMesh **  mesh 
)

◆ D3DXLoadMeshFromXResource()

HRESULT WINAPI D3DXLoadMeshFromXResource ( HMODULE  module,
const char *  resource,
const char *  resource_type,
DWORD  flags,
struct IDirect3DDevice9 *  device,
struct ID3DXBuffer **  adjacency,
struct ID3DXBuffer **  materials,
struct ID3DXBuffer **  effect_instances,
DWORD *  material_count,
struct ID3DXMesh **  mesh 
)

Definition at line 4199 of file mesh.c.

4202{
4203 HRESULT hr;
4204 HRSRC resinfo;
4205 void *buffer;
4206 DWORD size;
4207
4208 TRACE("module %p, name %s, type %s, options %#lx, device %p, adjacency %p, "
4209 "materials %p, effect_instances %p, num_materials %p, mesh %p.\n",
4211 materials, effect_instances, num_materials, mesh);
4212
4213 resinfo = FindResourceA(module, name, type);
4214 if (!resinfo) return D3DXERR_INVALIDDATA;
4215
4217 if (FAILED(hr)) return D3DXERR_INVALIDDATA;
4218
4219 return D3DXLoadMeshFromXInMemory(buffer, size, options, device, adjacency,
4220 materials, effect_instances, num_materials, mesh);
4221}
#define D3DXERR_INVALIDDATA
Definition: compiler.c:53
HRESULT load_resource_into_memory(HMODULE module, HRSRC resinfo, void **buffer, DWORD *length)
Definition: util.c:261
HRESULT WINAPI D3DXLoadMeshFromXInMemory(const void *memory, DWORD memory_size, DWORD options, struct IDirect3DDevice9 *device, struct ID3DXBuffer **adjacency_out, struct ID3DXBuffer **materials_out, struct ID3DXBuffer **effects_out, DWORD *num_materials_out, struct ID3DXMesh **mesh_out)
Definition: mesh.c:4297
HRSRC WINAPI FindResourceA(HMODULE hModule, LPCSTR name, LPCSTR type)
Definition: res.c:155
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
Definition: name.c:39

◆ D3DXLoadMeshFromXW()

HRESULT WINAPI D3DXLoadMeshFromXW ( const WCHAR *  filename,
DWORD  flags,
struct IDirect3DDevice9 *  device,
struct ID3DXBuffer **  adjacency,
struct ID3DXBuffer **  materials,
struct ID3DXBuffer **  effect_instances,
DWORD *  material_count,
struct ID3DXMesh **  mesh 
)

Definition at line 4171 of file mesh.c.

4174{
4175 void *buffer;
4176 HRESULT hr;
4177 DWORD size;
4178
4179 TRACE("filename %s, options %#lx, device %p, adjacency %p, materials %p, "
4180 "effect_instances %p, num_materials %p, mesh %p.\n",
4181 debugstr_w(filename), options, device, adjacency, materials,
4182 effect_instances, num_materials, mesh);
4183
4184 if (!filename)
4185 return D3DERR_INVALIDCALL;
4186
4188 if (FAILED(hr))
4189 return D3DXERR_INVALIDDATA;
4190
4192 materials, effect_instances, num_materials, mesh);
4193
4195
4196 return hr;
4197}
HRESULT map_view_of_file(const WCHAR *filename, void **buffer, DWORD *length)
Definition: util.c:211
#define UnmapViewOfFile
Definition: compat.h:746
#define debugstr_w
Definition: kernel32.h:32

◆ D3DXLoadPatchMeshFromXof()

HRESULT WINAPI D3DXLoadPatchMeshFromXof ( struct ID3DXFileData *  file_data,
DWORD  flags,
struct IDirect3DDevice9 *  device,
struct ID3DXBuffer **  adjacency,
struct ID3DXBuffer **  materials,
struct ID3DXBuffer **  effect_instances,
DWORD *  material_count,
struct ID3DXPatchMesh **  mesh 
)

◆ D3DXLoadPRTBufferFromFileA()

HRESULT WINAPI D3DXLoadPRTBufferFromFileA ( const char *  filename,
ID3DXPRTBuffer **  buffer 
)

◆ D3DXLoadPRTBufferFromFileW()

HRESULT WINAPI D3DXLoadPRTBufferFromFileW ( const WCHAR *  filename,
ID3DXPRTBuffer **  buffer 
)

◆ D3DXLoadPRTCompBufferFromFileA()

HRESULT WINAPI D3DXLoadPRTCompBufferFromFileA ( const char *  filename,
ID3DXPRTCompBuffer **  buffer 
)

◆ D3DXLoadPRTCompBufferFromFileW()

HRESULT WINAPI D3DXLoadPRTCompBufferFromFileW ( const WCHAR *  filename,
ID3DXPRTCompBuffer **  buffer 
)

◆ D3DXLoadSkinMeshFromXof()

HRESULT WINAPI D3DXLoadSkinMeshFromXof ( struct ID3DXFileData *  file_data,
DWORD  flags,
struct IDirect3DDevice9 *  device,
struct ID3DXBuffer **  adjacency,
struct ID3DXBuffer **  materials,
struct ID3DXBuffer **  effect_instances,
DWORD *  material_count,
struct ID3DXSkinInfo **  skin_info,
struct ID3DXMesh **  mesh 
)

Definition at line 3487 of file mesh.c.

3491{
3492 HRESULT hr;
3493 DWORD *index_in_ptr;
3494 struct mesh_data mesh_data;
3495 DWORD total_vertices;
3496 ID3DXMesh *d3dxmesh = NULL;
3497 ID3DXBuffer *adjacency = NULL;
3499 ID3DXBuffer *effects = NULL;
3500 struct vertex_duplication {
3501 DWORD normal_index;
3502 struct list entry;
3503 } *duplications = NULL;
3504 DWORD i;
3505 void *vertices = NULL;
3506 void *indices = NULL;
3507 BYTE *out_ptr;
3508 DWORD provide_flags = 0;
3509
3510 TRACE("filedata %p, options %#lx, device %p, adjacency_out %p, materials_out %p, "
3511 "effects_out %p, num_materials_out %p, skin_info_out %p, mesh_out %p.\n",
3512 filedata, options, device, adjacency_out, materials_out,
3513 effects_out, num_materials_out, skin_info_out, mesh_out);
3514
3515 ZeroMemory(&mesh_data, sizeof(mesh_data));
3516
3517 if (num_materials_out || materials_out || effects_out)
3518 provide_flags |= PROVIDE_MATERIALS;
3519 if (skin_info_out)
3520 provide_flags |= PROVIDE_SKININFO;
3521
3522 hr = parse_mesh(filedata, &mesh_data, provide_flags);
3523 if (FAILED(hr)) goto cleanup;
3524
3526 {
3527 if (adjacency_out)
3528 *adjacency_out = NULL;
3529 if (materials_out)
3530 *materials_out = NULL;
3531 if (effects_out)
3532 *effects_out = NULL;
3533 *mesh_out = NULL;
3534 hr = D3D_OK;
3535 goto cleanup;
3536 }
3537
3538 total_vertices = mesh_data.num_vertices;
3539 if (mesh_data.fvf & D3DFVF_NORMAL) {
3540 /* duplicate vertices with multiple normals */
3541 DWORD num_face_indices = mesh_data.num_poly_faces * 2 + mesh_data.num_tri_faces;
3542 duplications = malloc((mesh_data.num_vertices + num_face_indices) * sizeof(*duplications));
3543 if (!duplications) {
3544 hr = E_OUTOFMEMORY;
3545 goto cleanup;
3546 }
3547 for (i = 0; i < total_vertices; i++)
3548 {
3549 duplications[i].normal_index = -1;
3550 list_init(&duplications[i].entry);
3551 }
3552 for (i = 0; i < num_face_indices; i++) {
3554 DWORD normal_index = mesh_data.normal_indices[i];
3555 struct vertex_duplication *dup_ptr = &duplications[vertex_index];
3556
3557 if (dup_ptr->normal_index == -1) {
3558 dup_ptr->normal_index = normal_index;
3559 } else {
3560 D3DXVECTOR3 *new_normal = &mesh_data.normals[normal_index];
3561 struct list *dup_list = &dup_ptr->entry;
3562 while (TRUE) {
3563 D3DXVECTOR3 *cur_normal = &mesh_data.normals[dup_ptr->normal_index];
3564 if (new_normal->x == cur_normal->x &&
3565 new_normal->y == cur_normal->y &&
3566 new_normal->z == cur_normal->z)
3567 {
3568 mesh_data.indices[i] = dup_ptr - duplications;
3569 break;
3570 } else if (!list_next(dup_list, &dup_ptr->entry)) {
3571 dup_ptr = &duplications[total_vertices++];
3572 dup_ptr->normal_index = normal_index;
3573 list_add_tail(dup_list, &dup_ptr->entry);
3574 mesh_data.indices[i] = dup_ptr - duplications;
3575 break;
3576 } else {
3577 dup_ptr = LIST_ENTRY(list_next(dup_list, &dup_ptr->entry),
3578 struct vertex_duplication, entry);
3579 }
3580 }
3581 }
3582 }
3583 }
3584
3585 hr = D3DXCreateMeshFVF(mesh_data.num_tri_faces, total_vertices, options, mesh_data.fvf, device, &d3dxmesh);
3586 if (FAILED(hr)) goto cleanup;
3587
3588 hr = d3dxmesh->lpVtbl->LockVertexBuffer(d3dxmesh, 0, &vertices);
3589 if (FAILED(hr)) goto cleanup;
3590
3591 out_ptr = vertices;
3592 for (i = 0; i < mesh_data.num_vertices; i++) {
3593 *(D3DXVECTOR3*)out_ptr = mesh_data.vertices[i];
3594 out_ptr += sizeof(D3DXVECTOR3);
3595 if (mesh_data.fvf & D3DFVF_NORMAL) {
3596 if (duplications[i].normal_index == -1)
3597 ZeroMemory(out_ptr, sizeof(D3DXVECTOR3));
3598 else
3599 *(D3DXVECTOR3*)out_ptr = mesh_data.normals[duplications[i].normal_index];
3600 out_ptr += sizeof(D3DXVECTOR3);
3601 }
3603 *(DWORD*)out_ptr = mesh_data.vertex_colors[i];
3604 out_ptr += sizeof(DWORD);
3605 }
3606 if (mesh_data.fvf & D3DFVF_TEX1) {
3607 *(D3DXVECTOR2*)out_ptr = mesh_data.tex_coords[i];
3608 out_ptr += sizeof(D3DXVECTOR2);
3609 }
3610 }
3611 if (mesh_data.fvf & D3DFVF_NORMAL) {
3612 DWORD vertex_size = D3DXGetFVFVertexSize(mesh_data.fvf);
3613 out_ptr = vertices;
3614 for (i = 0; i < mesh_data.num_vertices; i++) {
3615 struct vertex_duplication *dup_ptr;
3616 LIST_FOR_EACH_ENTRY(dup_ptr, &duplications[i].entry, struct vertex_duplication, entry)
3617 {
3618 int j = dup_ptr - duplications;
3619 BYTE *dest_vertex = (BYTE*)vertices + j * vertex_size;
3620
3621 memcpy(dest_vertex, out_ptr, vertex_size);
3622 dest_vertex += sizeof(D3DXVECTOR3);
3623 *(D3DXVECTOR3*)dest_vertex = mesh_data.normals[dup_ptr->normal_index];
3624 }
3625 out_ptr += vertex_size;
3626 }
3627 }
3628 d3dxmesh->lpVtbl->UnlockVertexBuffer(d3dxmesh);
3629
3630 hr = d3dxmesh->lpVtbl->LockIndexBuffer(d3dxmesh, 0, &indices);
3631 if (FAILED(hr)) goto cleanup;
3632
3633 index_in_ptr = mesh_data.indices;
3634#define FILL_INDEX_BUFFER(indices_var) \
3635 for (i = 0; i < mesh_data.num_poly_faces; i++) \
3636 { \
3637 DWORD count = mesh_data.num_tri_per_face[i]; \
3638 WORD first_index = *index_in_ptr++; \
3639 while (count--) { \
3640 *indices_var++ = first_index; \
3641 *indices_var++ = *index_in_ptr; \
3642 index_in_ptr++; \
3643 *indices_var++ = *index_in_ptr; \
3644 } \
3645 index_in_ptr++; \
3646 }
3647 if (options & D3DXMESH_32BIT) {
3648 DWORD *dword_indices = indices;
3649 FILL_INDEX_BUFFER(dword_indices)
3650 } else {
3651 WORD *word_indices = indices;
3652 FILL_INDEX_BUFFER(word_indices)
3653 }
3654#undef FILL_INDEX_BUFFER
3655 d3dxmesh->lpVtbl->UnlockIndexBuffer(d3dxmesh);
3656
3658 DWORD *attrib_buffer = NULL;
3659 hr = d3dxmesh->lpVtbl->LockAttributeBuffer(d3dxmesh, 0, &attrib_buffer);
3660 if (FAILED(hr)) goto cleanup;
3661 for (i = 0; i < mesh_data.num_poly_faces; i++)
3662 {
3664 while (count--)
3665 *attrib_buffer++ = mesh_data.material_indices[i];
3666 }
3667 d3dxmesh->lpVtbl->UnlockAttributeBuffer(d3dxmesh);
3668
3669 hr = d3dxmesh->lpVtbl->OptimizeInplace(d3dxmesh,
3671 NULL, NULL, NULL, NULL);
3672 if (FAILED(hr)) goto cleanup;
3673 }
3674
3675 if (mesh_data.num_materials && (materials_out || effects_out)) {
3677 char *strings_out_ptr;
3678 D3DXMATERIAL *materials_ptr;
3679
3680 for (i = 0; i < mesh_data.num_materials; i++) {
3681 if (mesh_data.materials[i].pTextureFilename)
3682 buffer_size += strlen(mesh_data.materials[i].pTextureFilename) + 1;
3683 }
3684
3685 hr = D3DXCreateBuffer(buffer_size, &materials);
3686 if (FAILED(hr)) goto cleanup;
3687
3688 materials_ptr = ID3DXBuffer_GetBufferPointer(materials);
3689 memcpy(materials_ptr, mesh_data.materials, mesh_data.num_materials * sizeof(D3DXMATERIAL));
3690 strings_out_ptr = (char*)(materials_ptr + mesh_data.num_materials);
3691 for (i = 0; i < mesh_data.num_materials; i++) {
3692 if (materials_ptr[i].pTextureFilename) {
3693 strcpy(strings_out_ptr, mesh_data.materials[i].pTextureFilename);
3694 materials_ptr[i].pTextureFilename = strings_out_ptr;
3695 strings_out_ptr += strlen(mesh_data.materials[i].pTextureFilename) + 1;
3696 }
3697 }
3698 }
3699
3700 if (mesh_data.num_materials && effects_out) {
3701 hr = generate_effects(materials, mesh_data.num_materials, &effects);
3702 if (FAILED(hr)) goto cleanup;
3703
3704 if (!materials_out) {
3705 ID3DXBuffer_Release(materials);
3706 materials = NULL;
3707 }
3708 }
3709
3710 if (adjacency_out) {
3711 hr = D3DXCreateBuffer(mesh_data.num_tri_faces * 3 * sizeof(DWORD), &adjacency);
3712 if (FAILED(hr)) goto cleanup;
3713 hr = d3dxmesh->lpVtbl->GenerateAdjacency(d3dxmesh, 0.0f, ID3DXBuffer_GetBufferPointer(adjacency));
3714 if (FAILED(hr)) goto cleanup;
3715 }
3716
3717 *mesh_out = d3dxmesh;
3718 if (adjacency_out) *adjacency_out = adjacency;
3719 if (num_materials_out) *num_materials_out = mesh_data.num_materials;
3720 if (materials_out) *materials_out = materials;
3721 if (effects_out) *effects_out = effects;
3722 if (skin_info_out) *skin_info_out = mesh_data.skin_info;
3723
3724 hr = D3D_OK;
3725cleanup:
3726 if (FAILED(hr)) {
3727 if (d3dxmesh) IUnknown_Release(d3dxmesh);
3728 if (adjacency) ID3DXBuffer_Release(adjacency);
3729 if (materials) ID3DXBuffer_Release(materials);
3730 if (effects) ID3DXBuffer_Release(effects);
3732 if (skin_info_out) *skin_info_out = NULL;
3733 }
3742 free(duplications);
3743 return hr;
3744}
static void list_init(struct list_entry *head)
Definition: list.h:51
#define D3DFVF_TEX1
Definition: d3d8types.h:127
UINT WINAPI D3DXGetFVFVertexSize(DWORD FVF)
Definition: mesh.c:2287
#define PROVIDE_SKININFO
Definition: mesh.c:42
static HRESULT parse_mesh(ID3DXFileData *filedata, struct mesh_data *mesh_data, DWORD provide_flags)
Definition: mesh.c:3231
#define FILL_INDEX_BUFFER(indices_var)
static WORD vertex_index(UINT slices, int slice, int stack)
Definition: mesh.c:4897
static void destroy_materials(struct mesh_data *mesh)
Definition: mesh.c:2743
ULONG Release()
#define ZeroMemory
Definition: minwinbase.h:31
unsigned int num_materials
Definition: mesh.c:2613
DWORD * vertex_colors
Definition: mesh.c:2611
DWORD * normal_indices
Definition: mesh.c:2607
D3DXVECTOR3 * vertices
Definition: mesh.c:2597
struct ID3DXSkinInfo * skin_info
Definition: mesh.c:2617
DWORD * material_indices
Definition: mesh.c:2615
DWORD fvf
Definition: mesh.c:2601
D3DXVECTOR2 * tex_coords
Definition: mesh.c:2609
unsigned int num_vertices
Definition: mesh.c:2594
unsigned int num_poly_faces
Definition: mesh.c:2595
D3DXMATERIAL * materials
Definition: mesh.c:2614
D3DXVECTOR3 * normals
Definition: mesh.c:2606
unsigned int num_tri_faces
Definition: mesh.c:2596
unsigned int * num_tri_per_face
Definition: mesh.c:2598
DWORD * indices
Definition: mesh.c:2599

◆ D3DXOptimizeFaces()

HRESULT WINAPI D3DXOptimizeFaces ( const void *  indices,
UINT  face_count,
UINT  vertex_count,
BOOL  idx_32bit,
DWORD *  face_remap 
)

Definition at line 7311 of file mesh.c.

7313{
7314 UINT i;
7315 UINT j = num_faces - 1;
7316 UINT limit_16_bit = 2 << 15; /* According to MSDN */
7317 HRESULT hr = D3D_OK;
7318
7319 FIXME("indices %p, num_faces %u, num_vertices %u, indices_are_32bit %#x, face_remap %p semi-stub. "
7320 "Face order will not be optimal.\n",
7321 indices, num_faces, num_vertices, indices_are_32bit, face_remap);
7322
7323 if (!indices_are_32bit && num_faces >= limit_16_bit)
7324 {
7325 WARN("Number of faces must be less than %d when using 16-bit indices.\n",
7326 limit_16_bit);
7328 goto error;
7329 }
7330
7331 if (!face_remap)
7332 {
7333 WARN("Face remap pointer is NULL.\n");
7335 goto error;
7336 }
7337
7338 /* The faces are drawn in reverse order for simple meshes. This ordering
7339 * is not optimal for complicated meshes, but will not break anything
7340 * either. The ordering should be changed to take advantage of the vertex
7341 * cache on the graphics card.
7342 *
7343 * TODO Re-order to take advantage of vertex cache.
7344 */
7345 for (i = 0; i < num_faces; i++)
7346 {
7347 face_remap[i] = j--;
7348 }
7349
7350 return D3D_OK;
7351
7352error:
7353 return hr;
7354}

◆ D3DXOptimizeVertices()

HRESULT WINAPI D3DXOptimizeVertices ( const void *  indices,
UINT  face_count,
UINT  vertex_count,
BOOL  idx_32bit,
DWORD *  vertex_remap 
)

Definition at line 7356 of file mesh.c.

7358{
7359 unsigned int i;
7360
7361 FIXME("indices %p, face_count %u, vertex_count %u, indices_are_32bit %#x, vertex_remap %p semi-stub.\n",
7362 indices, face_count, vertex_count, indices_are_32bit, vertex_remap);
7363
7364 if (!indices || !face_count || !vertex_count || !vertex_remap)
7365 return D3DERR_INVALIDCALL;
7366
7367 for (i = 0; i < vertex_count; ++i)
7368 vertex_remap[i] = i;
7369
7370 return D3D_OK;
7371}

◆ D3DXRectPatchSize()

HRESULT WINAPI D3DXRectPatchSize ( const FLOAT *  segment_count,
DWORD *  num_triangles,
DWORD *  num_vertices 
)

◆ D3DXSaveMeshToXA()

HRESULT WINAPI D3DXSaveMeshToXA ( const char *  filename,
ID3DXMesh *  mesh,
const DWORD *  adjacency,
const D3DXMATERIAL *  materials,
const D3DXEFFECTINSTANCE *  effect_instances,
DWORD  material_count,
DWORD  format 
)

◆ D3DXSaveMeshToXW()

HRESULT WINAPI D3DXSaveMeshToXW ( const WCHAR *  filename,
ID3DXMesh *  mesh,
const DWORD *  adjacency,
const D3DXMATERIAL *  materials,
const D3DXEFFECTINSTANCE *  effect_instances,
DWORD  material_count,
DWORD  format 
)

◆ D3DXSavePRTBufferToFileA()

HRESULT WINAPI D3DXSavePRTBufferToFileA ( const char *  filename,
ID3DXPRTBuffer *  buffer 
)

◆ D3DXSavePRTBufferToFileW()

HRESULT WINAPI D3DXSavePRTBufferToFileW ( const WCHAR *  filename,
ID3DXPRTBuffer *  buffer 
)

◆ D3DXSavePRTCompBufferToFileA()

HRESULT WINAPI D3DXSavePRTCompBufferToFileA ( const char *  filename,
ID3DXPRTCompBuffer *  buffer 
)

◆ D3DXSavePRTCompBufferToFileW()

HRESULT WINAPI D3DXSavePRTCompBufferToFileW ( const WCHAR *  filename,
ID3DXPRTCompBuffer *  buffer 
)

◆ D3DXSHPRTCompSplitMeshSC()

HRESULT WINAPI D3DXSHPRTCompSplitMeshSC ( UINT *  cluster_idx,
UINT  vertex_count,
UINT  cluster_count,
UINT *  scluster_ids,
UINT  scluster_count,
void *  index_buffer_in,
BOOL  ib_in_32bit,
UINT  face_count,
ID3DXBuffer **  index_buffer_out,
UINT *  index_buffer_size,
BOOL  ib_out_32bit,
ID3DXBuffer **  face_remap,
ID3DXBuffer **  vertex_data,
UINT *  vertex_data_length,
UINT *  sc_cluster_list,
D3DXSHPRTSPLITMESHCLUSTERDATA *  sc_data 
)

◆ D3DXSHPRTCompSuperCluster()

HRESULT WINAPI D3DXSHPRTCompSuperCluster ( UINT *  cluster_ids,
ID3DXMesh *  scene,
UINT  max_cluster_count,
UINT  cluster_count,
UINT *  scluster_ids,
UINT *  scluster_count 
)

◆ D3DXSimplifyMesh()

HRESULT WINAPI D3DXSimplifyMesh ( ID3DXMesh *  mesh_in,
const DWORD *  adjacency,
const D3DXATTRIBUTEWEIGHTS *  attribute_weights,
const float *  vertex_weights,
DWORD  min_value,
DWORD  flags,
ID3DXMesh **  mesh_out 
)

◆ D3DXSphereBoundProbe()

BOOL WINAPI D3DXSphereBoundProbe ( const D3DXVECTOR3 *  center,
FLOAT  radius,
const D3DXVECTOR3 *  ray_pos,
const D3DXVECTOR3 *  ray_dir 
)

Definition at line 2411 of file mesh.c.

2413{
2414 D3DXVECTOR3 difference = {0};
2415 float a, b, c, d;
2416
2417 D3DXVec3Subtract(&difference, ray_position, center);
2418 c = D3DXVec3LengthSq(&difference) - radius * radius;
2419 if (c < 0.0f)
2420 return TRUE;
2421 a = D3DXVec3LengthSq(ray_direction);
2422 b = D3DXVec3Dot(&difference, ray_direction);
2423 d = b * b - a * c;
2424
2425 return d >= 0.0f && (b <= 0.0f || d > b * b);
2426}
const GLubyte * c
Definition: glext.h:8905
#define c
Definition: ke_i.h:80

◆ D3DXSplitMesh()

HRESULT WINAPI D3DXSplitMesh ( ID3DXMesh *  mesh_in,
const DWORD *  adjacency_in,
const DWORD  max_size,
const DWORD  flags,
DWORD *  mesh_out_count,
ID3DXBuffer **  mesh_out,
ID3DXBuffer **  adjacency_out,
ID3DXBuffer **  face_remap_out,
ID3DXBuffer **  vertex_remap_out 
)

◆ D3DXTessellateNPatches()

HRESULT WINAPI D3DXTessellateNPatches ( ID3DXMesh *  mesh_in,
const DWORD *  adjacency_in,
float  segment_count,
BOOL  quad_interp,
ID3DXMesh **  mesh_out,
ID3DXBuffer **  adjacency_out 
)

Definition at line 7665 of file mesh.c.

7667{
7668 FIXME("mesh %p, adjacency_in %p, num_segs %f, quadratic_normals %d, mesh_out %p, adjacency_out %p stub.\n",
7669 mesh, adjacency_in, num_segs, quadratic_normals, mesh_out, adjacency_out);
7670
7671 return E_NOTIMPL;
7672}

◆ D3DXTessellateRectPatch()

HRESULT WINAPI D3DXTessellateRectPatch ( struct IDirect3DVertexBuffer9 *  buffer,
const float *  segment_count,
const D3DVERTEXELEMENT9 *  declaration,
const D3DRECTPATCH_INFO *  patch_info,
struct ID3DXMesh *  mesh 
)

◆ D3DXTessellateTriPatch()

HRESULT WINAPI D3DXTessellateTriPatch ( struct IDirect3DVertexBuffer9 *  buffer,
const float *  segment_count,
const D3DVERTEXELEMENT9 *  declaration,
const D3DTRIPATCH_INFO *  patch_info,
struct ID3DXMesh *  mesh 
)

◆ D3DXTriPatchSize()

HRESULT WINAPI D3DXTriPatchSize ( const FLOAT *  segment_count,
DWORD *  num_triangles,
DWORD *  num_vertices 
)

◆ D3DXUVAtlasCreate()

HRESULT WINAPI D3DXUVAtlasCreate ( ID3DXMesh *  mesh_in,
UINT  max_chart_count,
float  max_stretch_in,
UINT  width,
UINT  height,
float  gutter,
DWORD  texture_idx,
const DWORD *  adjacency,
const DWORD *  false_edges,
const float *  imt_array,
LPD3DXUVATLASCB  cb,
float  cb_freq,
void *  ctx,
DWORD  flags,
ID3DXMesh **  mesh_out,
ID3DXBuffer **  face_partitioning_out,
ID3DXBuffer **  vertex_remap_out,
float *  max_stretch_out,
UINT *  chart_count 
)

◆ D3DXUVAtlasPack()

HRESULT WINAPI D3DXUVAtlasPack ( ID3DXMesh *  mesh,
UINT  width,
UINT  height,
float  gutter,
DWORD  texture_idx,
const DWORD *  partition_result_adjacency,
LPD3DXUVATLASCB  cb,
float  cb_freq,
void *  ctx,
DWORD  flags,
ID3DXBuffer *  face_partitioning 
)

◆ D3DXUVAtlasPartition()

HRESULT WINAPI D3DXUVAtlasPartition ( ID3DXMesh *  mesh_in,
UINT  max_chart_count,
float  max_stretch_in,
DWORD  texture_idx,
const DWORD *  adjacency,
const DWORD *  false_edges,
const float *  imt_array,
LPD3DXUVATLASCB  cb,
float  cb_freq,
void *  ctx,
DWORD  flags,
ID3DXMesh **  mesh_out,
ID3DXBuffer **  face_partitioning_out,
ID3DXBuffer **  vertex_remap_out,
ID3DXBuffer **  adjacency_out,
float *  max_stretch_out,
UINT *  chart_count 
)

◆ D3DXValidMesh()

HRESULT WINAPI D3DXValidMesh ( ID3DXMesh *  mesh,
const DWORD *  adjacency,
ID3DXBuffer **  errors 
)

Definition at line 6531 of file mesh.c.

6532{
6533 FIXME("mesh %p, adjacency %p, errors_and_warnings %p stub.\n", mesh, adjacency, errors_and_warnings);
6534
6535 return E_NOTIMPL;
6536}

◆ D3DXValidPatchMesh()

HRESULT WINAPI D3DXValidPatchMesh ( ID3DXPatchMesh *  mesh,
DWORD *  degenerate_vertex_count,
DWORD *  degenerate_patch_count,
ID3DXBuffer **  errors 
)

◆ D3DXWeldVertices()

HRESULT WINAPI D3DXWeldVertices ( ID3DXMesh *  mesh,
DWORD  flags,
const D3DXWELDEPSILONS *  epsilons,
const DWORD *  adjacency_in,
DWORD *  adjacency_out,
DWORD *  face_remap_out,
ID3DXBuffer **  vertex_remap_out 
)

Definition at line 7104 of file mesh.c.

7106{
7107 DWORD *adjacency_generated = NULL;
7108 const DWORD *adjacency_ptr;
7110 const FLOAT DEFAULT_EPSILON = 1.0e-6f;
7111 HRESULT hr;
7112 DWORD i;
7113 void *indices = NULL;
7114 BOOL indices_are_32bit = mesh->lpVtbl->GetOptions(mesh) & D3DXMESH_32BIT;
7115 DWORD optimize_flags;
7116 DWORD *point_reps = NULL;
7118 DWORD *vertex_face_map = NULL;
7119 BYTE *vertices = NULL;
7120
7121 TRACE("mesh %p, flags %#lx, epsilons %p, adjacency %p, adjacency_out %p, face_remap_out %p, "
7122 "vertex_remap_out %p.\n",
7123 mesh, flags, epsilons, adjacency, adjacency_out, face_remap_out, vertex_remap_out);
7124
7125 if (flags == 0)
7126 {
7127 WARN("No flags are undefined. Using D3DXWELDEPSILONS_WELDPARTIALMATCHES instead.\n");
7129 }
7130
7131 if (adjacency) /* Use supplied adjacency. */
7132 {
7133 adjacency_ptr = adjacency;
7134 }
7135 else /* Adjacency has to be generated. */
7136 {
7137 adjacency_generated = malloc(3 * This->numfaces * sizeof(*adjacency_generated));
7138 if (!adjacency_generated)
7139 {
7140 ERR("Couldn't allocate memory for adjacency_generated.\n");
7141 hr = E_OUTOFMEMORY;
7142 goto cleanup;
7143 }
7144 hr = mesh->lpVtbl->GenerateAdjacency(mesh, DEFAULT_EPSILON, adjacency_generated);
7145 if (FAILED(hr))
7146 {
7147 ERR("Couldn't generate adjacency.\n");
7148 goto cleanup;
7149 }
7150 adjacency_ptr = adjacency_generated;
7151 }
7152
7153 /* Point representation says which vertices can be replaced. */
7154 point_reps = malloc(This->numvertices * sizeof(*point_reps));
7155 if (!point_reps)
7156 {
7157 hr = E_OUTOFMEMORY;
7158 ERR("Couldn't allocate memory for point_reps.\n");
7159 goto cleanup;
7160 }
7161 hr = mesh->lpVtbl->ConvertAdjacencyToPointReps(mesh, adjacency_ptr, point_reps);
7162 if (FAILED(hr))
7163 {
7164 ERR("ConvertAdjacencyToPointReps failed.\n");
7165 goto cleanup;
7166 }
7167
7168 hr = mesh->lpVtbl->LockIndexBuffer(mesh, 0, &indices);
7169 if (FAILED(hr))
7170 {
7171 ERR("Couldn't lock index buffer.\n");
7172 goto cleanup;
7173 }
7174
7175 hr = mesh->lpVtbl->LockAttributeBuffer(mesh, 0, &attributes);
7176 if (FAILED(hr))
7177 {
7178 ERR("Couldn't lock attribute buffer.\n");
7179 goto cleanup;
7180 }
7181 vertex_face_map = malloc(This->numvertices * sizeof(*vertex_face_map));
7182 if (!vertex_face_map)
7183 {
7184 hr = E_OUTOFMEMORY;
7185 ERR("Couldn't allocate memory for vertex_face_map.\n");
7186 goto cleanup;
7187 }
7188 /* Build vertex face map, so that a vertex's face can be looked up. */
7189 for (i = 0; i < This->numfaces; i++)
7190 {
7191 DWORD j;
7192 for (j = 0; j < 3; j++)
7193 {
7194 DWORD index = read_ib(indices, indices_are_32bit, 3*i + j);
7195 vertex_face_map[index] = i;
7196 }
7197 }
7198
7200 {
7201 hr = mesh->lpVtbl->LockVertexBuffer(mesh, 0, (void**)&vertices);
7202 if (FAILED(hr))
7203 {
7204 ERR("Couldn't lock vertex buffer.\n");
7205 goto cleanup;
7206 }
7207 /* For each vertex that can be removed, compare its vertex components
7208 * with the vertex components from the vertex that can replace it. A
7209 * vertex is only fully replaced if all the components match and the
7210 * flag D3DXWELDEPSILONS_DONOTREMOVEVERTICES is not set, and they
7211 * belong to the same attribute group. Otherwise the vertex components
7212 * that are within epsilon are set to the same value.
7213 */
7214 for (i = 0; i < 3 * This->numfaces; i++)
7215 {
7216 D3DVERTEXELEMENT9 *decl_ptr;
7217 DWORD vertex_size = mesh->lpVtbl->GetNumBytesPerVertex(mesh);
7218 DWORD num_vertex_components;
7219 INT matches = 0;
7220 BOOL all_match;
7221 DWORD index = read_ib(indices, indices_are_32bit, i);
7222
7223 for (decl_ptr = This->cached_declaration, num_vertex_components = 0; decl_ptr->Stream != 0xFF; decl_ptr++, num_vertex_components++)
7224 {
7225 BYTE *to = &vertices[vertex_size*index + decl_ptr->Offset];
7226 BYTE *from = &vertices[vertex_size*point_reps[index] + decl_ptr->Offset];
7227 FLOAT epsilon = get_component_epsilon(decl_ptr, epsilons);
7228
7229 /* Don't weld self */
7230 if (index == point_reps[index])
7231 {
7232 matches++;
7233 continue;
7234 }
7235
7236 if (weld_component(to, from, decl_ptr->Type, epsilon))
7237 matches++;
7238 }
7239
7240 all_match = (num_vertex_components == matches);
7241 if (all_match && !(flags & D3DXWELDEPSILONS_DONOTREMOVEVERTICES))
7242 {
7243 DWORD to_face = vertex_face_map[index];
7244 DWORD from_face = vertex_face_map[point_reps[index]];
7245 if(attributes[to_face] != attributes[from_face] && !(flags & D3DXWELDEPSILONS_DONOTSPLIT))
7246 continue;
7247 write_ib(indices, indices_are_32bit, i, point_reps[index]);
7248 }
7249 }
7250 mesh->lpVtbl->UnlockVertexBuffer(mesh);
7251 vertices = NULL;
7252 }
7254 {
7255 for (i = 0; i < 3 * This->numfaces; i++)
7256 {
7257 DWORD index = read_ib(indices, indices_are_32bit, i);
7258 DWORD to_face = vertex_face_map[index];
7259 DWORD from_face = vertex_face_map[point_reps[index]];
7260 if(attributes[to_face] != attributes[from_face] && !(flags & D3DXWELDEPSILONS_DONOTSPLIT))
7261 continue;
7262 write_ib(indices, indices_are_32bit, i, point_reps[index]);
7263 }
7264 }
7265 mesh->lpVtbl->UnlockAttributeBuffer(mesh);
7266 attributes = NULL;
7267 mesh->lpVtbl->UnlockIndexBuffer(mesh);
7268 indices = NULL;
7269
7270 /* Compact mesh using OptimizeInplace */
7271 optimize_flags = D3DXMESHOPT_COMPACT;
7272 hr = mesh->lpVtbl->OptimizeInplace(mesh, optimize_flags, adjacency_ptr, adjacency_out, face_remap_out, vertex_remap_out);
7273 if (FAILED(hr))
7274 {
7275 ERR("Couldn't compact mesh.\n");
7276 goto cleanup;
7277 }
7278
7279 hr = D3D_OK;
7280cleanup:
7281 free(adjacency_generated);
7282 free(point_reps);
7283 free(vertex_face_map);
7284 if (attributes) mesh->lpVtbl->UnlockAttributeBuffer(mesh);
7285 if (indices) mesh->lpVtbl->UnlockIndexBuffer(mesh);
7286 if (vertices) mesh->lpVtbl->UnlockVertexBuffer(mesh);
7287
7288 return hr;
7289}
#define index(s, c)
Definition: various.h:29
static void write_ib(void *index_buffer, BOOL indices_are_32bit, DWORD index, DWORD value)
Definition: mesh.c:7065
static FLOAT get_component_epsilon(const D3DVERTEXELEMENT9 *decl_ptr, const D3DXWELDEPSILONS *epsilons)
Definition: mesh.c:6969
static BOOL weld_component(void *to, void *from, D3DDECLTYPE type, FLOAT epsilon)
Definition: mesh.c:6896
static struct d3dx9_mesh * impl_from_ID3DXMesh(ID3DXMesh *iface)
Definition: mesh.c:88
GLuint index
Definition: glext.h:6031
GLbitfield flags
Definition: glext.h:7161
#define matches(FN)
Definition: match.h:70
static HANDLE ACCESS_MASK ULONG attributes
Definition: om.c:94
CardRegion * from
Definition: spigame.cpp:19
int32_t INT
Definition: typedefs.h:58

◆ DECLARE_INTERFACE_() [1/10]

DECLARE_INTERFACE_ ( ID3DXBaseMesh  ,
IUnknown   
)

Definition at line 307 of file d3dx9mesh.h.

308{
309 /*** IUnknown methods ***/
313 /*** ID3DXBaseMesh ***/
314 STDMETHOD(DrawSubset)(THIS_ DWORD attrib_id) PURE;
315 STDMETHOD_(DWORD, GetNumFaces)(THIS) PURE;
316 STDMETHOD_(DWORD, GetNumVertices)(THIS) PURE;
317 STDMETHOD_(DWORD, GetFVF)(THIS) PURE;
319 STDMETHOD_(DWORD, GetNumBytesPerVertex)(THIS) PURE;
320 STDMETHOD_(DWORD, GetOptions)(THIS) PURE;
322 STDMETHOD(CloneMeshFVF)(THIS_ DWORD options, DWORD fvf,
323 struct IDirect3DDevice9 *device, struct ID3DXMesh **clone_mesh) PURE;
325 struct IDirect3DDevice9 *device, struct ID3DXMesh **clone_mesh) PURE;
326 STDMETHOD(GetVertexBuffer)(THIS_ struct IDirect3DVertexBuffer9 **vertex_buffer) PURE;
327 STDMETHOD(GetIndexBuffer)(THIS_ struct IDirect3DIndexBuffer9 **index_buffer) PURE;
328 STDMETHOD(LockVertexBuffer)(THIS_ DWORD flags, void **data) PURE;
329 STDMETHOD(UnlockVertexBuffer)(THIS) PURE;
330 STDMETHOD(LockIndexBuffer)(THIS_ DWORD flags, void **data) PURE;
331 STDMETHOD(UnlockIndexBuffer)(THIS) PURE;
332 STDMETHOD(GetAttributeTable)(THIS_ D3DXATTRIBUTERANGE* attrib_table, DWORD* attrib_table_size) PURE;
333 STDMETHOD(ConvertPointRepsToAdjacency)(THIS_ const DWORD *point_reps, DWORD *adjacency) PURE;
334 STDMETHOD(ConvertAdjacencyToPointReps)(THIS_ const DWORD *adjacency, DWORD *point_reps) PURE;
335 STDMETHOD(GenerateAdjacency)(THIS_ FLOAT epsilon, DWORD* adjacency) PURE;
337};
#define PURE
Definition: basetyps.h:64
#define THIS_
Definition: basetyps.h:65
#define THIS
Definition: basetyps.h:66
#define STDMETHOD_(t, m)
Definition: basetyps.h:63
#define STDMETHOD(m)
Definition: basetyps.h:62
_In_ BOOLEAN Release
Definition: cdrom.h:920
_Check_return_ _In_ PQUERY_INTERFACE QueryInterface
Definition: dispmprt.h:1318
DWORD IDirect3DDevice9
Definition: dxva2api.idl:22
return pList GetDevice()
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
REFIID riid
Definition: atlbase.h:39
static ULONG WINAPI AddRef(IStream *iface)
Definition: clist.c:83
#define REFIID
Definition: guiddef.h:118
uint32_t ULONG
Definition: typedefs.h:59
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
Definition: wcsftime.cpp:383

◆ DECLARE_INTERFACE_() [2/10]

DECLARE_INTERFACE_ ( ID3DXMesh  ,
ID3DXBaseMesh   
)

Definition at line 341 of file d3dx9mesh.h.

342{
343 /*** IUnknown methods ***/
347 /*** ID3DXBaseMesh ***/
348 STDMETHOD(DrawSubset)(THIS_ DWORD attrib_id) PURE;
349 STDMETHOD_(DWORD, GetNumFaces)(THIS) PURE;
350 STDMETHOD_(DWORD, GetNumVertices)(THIS) PURE;
351 STDMETHOD_(DWORD, GetFVF)(THIS) PURE;
353 STDMETHOD_(DWORD, GetNumBytesPerVertex)(THIS) PURE;
354 STDMETHOD_(DWORD, GetOptions)(THIS) PURE;
356 STDMETHOD(CloneMeshFVF)(THIS_ DWORD options, DWORD fvf,
357 struct IDirect3DDevice9 *device, struct ID3DXMesh **clone_mesh) PURE;
359 struct IDirect3DDevice9 *device, struct ID3DXMesh **clone_mesh) PURE;
360 STDMETHOD(GetVertexBuffer)(THIS_ struct IDirect3DVertexBuffer9 **vertex_buffer) PURE;
361 STDMETHOD(GetIndexBuffer)(THIS_ struct IDirect3DIndexBuffer9 **index_buffer) PURE;
362 STDMETHOD(LockVertexBuffer)(THIS_ DWORD flags, void **data) PURE;
363 STDMETHOD(UnlockVertexBuffer)(THIS) PURE;
364 STDMETHOD(LockIndexBuffer)(THIS_ DWORD flags, void **data) PURE;
365 STDMETHOD(UnlockIndexBuffer)(THIS) PURE;
366 STDMETHOD(GetAttributeTable)(THIS_ D3DXATTRIBUTERANGE* attrib_table, DWORD* attrib_table_size) PURE;
367 STDMETHOD(ConvertPointRepsToAdjacency)(THIS_ const DWORD *point_reps, DWORD *adjacency) PURE;
368 STDMETHOD(ConvertAdjacencyToPointReps)(THIS_ const DWORD *adjacency, DWORD *point_reps) PURE;
369 STDMETHOD(GenerateAdjacency)(THIS_ FLOAT epsilon, DWORD* adjacency) PURE;
371 /*** ID3DXMesh ***/
372 STDMETHOD(LockAttributeBuffer)(THIS_ DWORD flags, DWORD** data) PURE;
373 STDMETHOD(UnlockAttributeBuffer)(THIS) PURE;
374 STDMETHOD(Optimize)(THIS_ DWORD flags, const DWORD *adjacency_in, DWORD *adjacency_out,
375 DWORD *face_remap, ID3DXBuffer **vertex_remap, ID3DXMesh **opt_mesh) PURE;
376 STDMETHOD(OptimizeInplace)(THIS_ DWORD flags, const DWORD *adjacency_in, DWORD *adjacency_out,
377 DWORD *face_remap, ID3DXBuffer **vertex_remap) PURE;
378 STDMETHOD(SetAttributeTable)(THIS_ const D3DXATTRIBUTERANGE *attrib_table,
379 DWORD attrib_table_size) PURE;
380};

◆ DECLARE_INTERFACE_() [3/10]

DECLARE_INTERFACE_ ( ID3DXPatchMesh  ,
IUnknown   
)

Definition at line 473 of file d3dx9mesh.h.

474{
475 /*** IUnknown methods ***/
479 /*** ID3DXPatchMesh ***/
480 STDMETHOD_(DWORD, GetNumPatches)(THIS) PURE;
481 STDMETHOD_(DWORD, GetNumVertices)(THIS) PURE;
483 STDMETHOD_(DWORD, GetControlVerticesPerPatch)(THIS) PURE;
484 STDMETHOD_(DWORD, GetOptions)(THIS) PURE;
486 STDMETHOD(GetPatchInfo)(THIS_ LPD3DXPATCHINFO patch_info) PURE;
487 STDMETHOD(GetVertexBuffer)(THIS_ struct IDirect3DVertexBuffer9 **vertex_buffer) PURE;
488 STDMETHOD(GetIndexBuffer)(THIS_ struct IDirect3DIndexBuffer9 **index_buffer) PURE;
489 STDMETHOD(LockVertexBuffer)(THIS_ DWORD flags, void **data) PURE;
490 STDMETHOD(UnlockVertexBuffer)(THIS) PURE;
491 STDMETHOD(LockIndexBuffer)(THIS_ DWORD flags, void **data) PURE;
492 STDMETHOD(UnlockIndexBuffer)(THIS) PURE;
493 STDMETHOD(LockAttributeBuffer)(THIS_ DWORD flags, DWORD** data) PURE;
494 STDMETHOD(UnlockAttributeBuffer)(THIS) PURE;
495 STDMETHOD(GetTessSize)(THIS_ FLOAT tess_level, DWORD adaptive, DWORD* num_triangles, DWORD* num_vertices) PURE;
496 STDMETHOD(GenerateAdjacency)(THIS_ FLOAT tolerance) PURE;
497 STDMETHOD(CloneMesh)(THIS_ DWORD options, const D3DVERTEXELEMENT9 *declaration, ID3DXPatchMesh **clone_mesh) PURE;
498 STDMETHOD(Optimize)(THIS_ DWORD flags) PURE;
499 STDMETHOD(SetDisplaceParam)(THIS_ struct IDirect3DBaseTexture9 *texture, D3DTEXTUREFILTERTYPE min_filter,
501 DWORD lod_bias) PURE;
502 STDMETHOD(GetDisplaceParam)(THIS_ struct IDirect3DBaseTexture9 **texture, D3DTEXTUREFILTERTYPE *min_filter,
504 DWORD *lod_bias) PURE;
505 STDMETHOD(Tessellate)(THIS_ float tess_level, ID3DXMesh *mesh) PURE;
506 STDMETHOD(TessellateAdaptive)(THIS_ const D3DXVECTOR4 *trans, DWORD max_tess_level,
507 DWORD min_tess_level, ID3DXMesh *mesh) PURE;
508};
enum _D3DTEXTUREADDRESS D3DTEXTUREADDRESS
enum _D3DTEXTUREFILTERTYPE D3DTEXTUREFILTERTYPE
#define wrap(journal, var)
Definition: recovery.c:207

◆ DECLARE_INTERFACE_() [4/10]

DECLARE_INTERFACE_ ( ID3DXPMesh  ,
ID3DXBaseMesh   
)

Definition at line 384 of file d3dx9mesh.h.

385{
386 /*** IUnknown methods ***/
390 /*** ID3DXBaseMesh ***/
391 STDMETHOD(DrawSubset)(THIS_ DWORD attrib_id) PURE;
392 STDMETHOD_(DWORD, GetNumFaces)(THIS) PURE;
393 STDMETHOD_(DWORD, GetNumVertices)(THIS) PURE;
394 STDMETHOD_(DWORD, GetFVF)(THIS) PURE;
396 STDMETHOD_(DWORD, GetNumBytesPerVertex)(THIS) PURE;
397 STDMETHOD_(DWORD, GetOptions)(THIS) PURE;
399 STDMETHOD(CloneMeshFVF)(THIS_ DWORD options, DWORD fvf,
400 struct IDirect3DDevice9 *device, struct ID3DXMesh **clone_mesh) PURE;
402 struct IDirect3DDevice9 *device, struct ID3DXMesh **clone_mesh) PURE;
403 STDMETHOD(GetVertexBuffer)(THIS_ struct IDirect3DVertexBuffer9 **vertex_buffer) PURE;
404 STDMETHOD(GetIndexBuffer)(THIS_ struct IDirect3DIndexBuffer9 **index_buffer) PURE;
405 STDMETHOD(LockVertexBuffer)(THIS_ DWORD flags, void **data) PURE;
406 STDMETHOD(UnlockVertexBuffer)(THIS) PURE;
407 STDMETHOD(LockIndexBuffer)(THIS_ DWORD flags, void **data) PURE;
408 STDMETHOD(UnlockIndexBuffer)(THIS) PURE;
409 STDMETHOD(GetAttributeTable)(THIS_ D3DXATTRIBUTERANGE* attrib_table, DWORD* attrib_table_size) PURE;
410 STDMETHOD(ConvertPointRepsToAdjacency)(THIS_ const DWORD *point_reps, DWORD *adjacency) PURE;
411 STDMETHOD(ConvertAdjacencyToPointReps)(THIS_ const DWORD *adjacency, DWORD *point_reps) PURE;
412 STDMETHOD(GenerateAdjacency)(THIS_ FLOAT epsilon, DWORD* adjacency) PURE;
414 /*** ID3DXPMesh ***/
415 STDMETHOD(ClonePMeshFVF)(THIS_ DWORD options, DWORD fvf,
416 struct IDirect3DDevice9 *device, struct ID3DXPMesh **clone_mesh) PURE;
418 struct IDirect3DDevice9 *device, struct ID3DXPMesh **clone_mesh) PURE;
419 STDMETHOD(SetNumFaces)(THIS_ DWORD faces) PURE;
420 STDMETHOD(SetNumVertices)(THIS_ DWORD vertices) PURE;
421 STDMETHOD_(DWORD, GetMaxFaces)(THIS) PURE;
422 STDMETHOD_(DWORD, GetMinFaces)(THIS) PURE;
423 STDMETHOD_(DWORD, GetMaxVertices)(THIS) PURE;
424 STDMETHOD_(DWORD, GetMinVertices)(THIS) PURE;
425 STDMETHOD(Save)(THIS_ IStream *stream, const D3DXMATERIAL *material,
426 const D3DXEFFECTINSTANCE *effect_instance, DWORD num_materials) PURE;
427 STDMETHOD(Optimize)(THIS_ DWORD flags, DWORD *adjacency_out, DWORD *face_remap,
428 ID3DXBuffer **vertex_remap, ID3DXMesh **opt_mesh) PURE;
429 STDMETHOD(OptimizeBaseLOD)(THIS_ DWORD flags, DWORD* face_remap) PURE;
430 STDMETHOD(TrimByFaces)(THIS_ DWORD new_faces_min, DWORD new_faces_max, DWORD* face_remap, DWORD* vertex_remap) PURE;
431 STDMETHOD(TrimByVertices)(THIS_ DWORD new_vertices_min, DWORD new_vertices_max, DWORD* face_remap, DWORD* vertex_remap) PURE;
432 STDMETHOD(GetAdjacency)(THIS_ DWORD* adjacency) PURE;
433 STDMETHOD(GenerateVertexHistory)(THIS_ DWORD* vertex_history) PURE;
434};
Definition: parse.h:23
static int Save(const char **args)
Definition: vfdcmd.c:1851

◆ DECLARE_INTERFACE_() [5/10]

DECLARE_INTERFACE_ ( ID3DXPRTBuffer  ,
IUnknown   
)

Definition at line 555 of file d3dx9mesh.h.

556{
557 /*** IUnknown methods ***/
561 /*** ID3DXPRTBuffer methods ***/
562 STDMETHOD_(UINT, GetNumSamples)(THIS) PURE;
563 STDMETHOD_(UINT, GetNumCoeffs)(THIS) PURE;
564 STDMETHOD_(UINT, GetNumChannels)(THIS) PURE;
565 STDMETHOD_(BOOL, IsTexture)(THIS) PURE;
566 STDMETHOD_(BOOL, GetWidth)(THIS) PURE;
567 STDMETHOD_(BOOL, GetHeight)(THIS) PURE;
569 STDMETHOD(LockBuffer)(THIS_ UINT start, UINT num_samples, FLOAT **data) PURE;
570 STDMETHOD(UnlockBuffer)(THIS) PURE;
571 STDMETHOD(ScaleBuffer)(THIS_ FLOAT scale) PURE;
572 STDMETHOD(AddBuffer)(THIS_ ID3DXPRTBuffer *buffer) PURE;
573 STDMETHOD(AttachGH)(THIS_ struct ID3DXTextureGutterHelper *gh) PURE;
574 STDMETHOD(ReleaseGH)(THIS) PURE;
575 STDMETHOD(EvalGH)(THIS) PURE;
576 STDMETHOD(ExtractTexture)(THIS_ UINT channel, UINT start_coefficient,
577 UINT num_coefficients, struct IDirect3DTexture9 *texture) PURE;
578 STDMETHOD(ExtractToMesh)(THIS_ UINT num_coefficients, D3DDECLUSAGE usage,
579 UINT usage_index_start, ID3DXMesh *scene) PURE;
580};
enum _D3DDECLUSAGE D3DDECLUSAGE
size_t const new_size
Definition: expand.cpp:66
GLuint start
Definition: gl.h:1545
GLenum GLenum GLenum GLenum GLenum scale
Definition: glext.h:9032
GLsizeiptr const GLvoid GLenum usage
Definition: glext.h:5919

◆ DECLARE_INTERFACE_() [6/10]

DECLARE_INTERFACE_ ( ID3DXPRTCompBuffer  ,
IUnknown   
)

Definition at line 584 of file d3dx9mesh.h.

585{
586 /*** IUnknown methods ***/
590 /*** ID3DXPRTCompBuffer methods ***/
591 STDMETHOD_(UINT, GetNumSamples)(THIS) PURE;
592 STDMETHOD_(UINT, GetNumCoeffs)(THIS) PURE;
593 STDMETHOD_(UINT, GetNumChannels)(THIS) PURE;
594 STDMETHOD_(BOOL, IsTexture)(THIS) PURE;
595 STDMETHOD_(UINT, GetWidth)(THIS) PURE;
596 STDMETHOD_(UINT, GetHeight)(THIS) PURE;
597 STDMETHOD_(UINT, GetNumClusters)(THIS) PURE;
598 STDMETHOD_(UINT, GetNumPCA)(THIS) PURE;
599 STDMETHOD(NormalizeData)(THIS) PURE;
600 STDMETHOD(ExtractBasis)(THIS_ UINT cluster, FLOAT *cluster_basis) PURE;
601 STDMETHOD(ExtractClusterIDs)(THIS_ UINT *cluster_ids) PURE;
602 STDMETHOD(ExtractPCA)(THIS_ UINT start_pca, UINT num_extract, FLOAT *pca_coefficients) PURE;
603 STDMETHOD(ExtractTexture)(THIS_ UINT start_pca, UINT num_pca, struct IDirect3DTexture9 *texture) PURE;
604 STDMETHOD(ExtractToMesh)(THIS_ UINT num_pca, D3DDECLUSAGE usage, UINT usage_index_start, ID3DXMesh *scene) PURE;
605};

◆ DECLARE_INTERFACE_() [7/10]

DECLARE_INTERFACE_ ( ID3DXPRTEngine  ,
IUnknown   
)

Definition at line 636 of file d3dx9mesh.h.

637{
638 /*** IUnknown methods ***/
642 /*** ID3DXPRTEngine methods ***/
643 STDMETHOD(SetMeshMaterials)(THIS_ const D3DXSHMATERIAL **materials, UINT num_meshes,
644 UINT num_channels, BOOL set_albedo, FLOAT length_scale) PURE;
645 STDMETHOD(SetPerVertexAlbedo)(THIS_ const void *data_in, UINT num_channels, UINT stride) PURE;
646 STDMETHOD(SetPerTexelAlbedo)(THIS_ struct IDirect3DTexture9 *albedo_texture,
647 UINT num_channels, struct ID3DXTextureGutterHelper *gh) PURE;
648 STDMETHOD(GetVertexAlbedo)(THIS_ D3DXCOLOR *vert_colors, UINT num_verts) PURE;
649 STDMETHOD(SetPerTexelNormals)(THIS_ struct IDirect3DTexture9 *normal_texture) PURE;
650 STDMETHOD(ExtractPerVertexAlbedo)(THIS_ ID3DXMesh *mesh, D3DDECLUSAGE usage, UINT num_channels) PURE;
651 STDMETHOD(ResampleBuffer)(THIS_ ID3DXPRTBuffer *buffer_in, ID3DXPRTBuffer *buffer_out) PURE;
652 STDMETHOD(GetAdaptedMesh)(THIS_ struct IDirect3DDevice9 *device, UINT *face_remap,
653 UINT *vert_remap, float *vert_weights, struct ID3DXMesh **mesh) PURE;
654 STDMETHOD_(UINT, GetNumVerts)(THIS) PURE;
655 STDMETHOD_(UINT, GetNumFaces)(THIS) PURE;
656 STDMETHOD(SetMinMaxIntersection)(THIS_ FLOAT min, FLOAT max) PURE;
657 STDMETHOD(RobustMeshRefine)(THIS_ FLOAT min_edge_length, UINT max_subdiv) PURE;
658 STDMETHOD(SetSamplingInfo)(THIS_ UINT num_rays, BOOL use_sphere,
659 BOOL use_cosine, BOOL adaptive, FLOAT adpative_thresh) PURE;
660 STDMETHOD(ComputeDirectLightingSH)(THIS_ UINT sh_order, ID3DXPRTBuffer *data_out) PURE;
661 STDMETHOD(ComputeDirectLightingSHAdaptive)(THIS_ UINT sh_order, float adaptive_thresh,
662 float min_edge_length, UINT max_subdiv, ID3DXPRTBuffer *data_out) PURE;
663 STDMETHOD(ComputeDirectLightingSHGPU)(THIS_ struct IDirect3DDevice9 *device, UINT flags,
664 UINT sh_order, float zbias, float zangle_bias, struct ID3DXPRTBuffer *data_out) PURE;
665 STDMETHOD(ComputeSS)(THIS_ ID3DXPRTBuffer *data_in, ID3DXPRTBuffer *data_out,
666 ID3DXPRTBuffer *data_total) PURE;
667 STDMETHOD(ComputeSSAdaptive)(THIS_ ID3DXPRTBuffer *data_in, float adaptive_thres,
668 float min_edge_length, UINT max_subdiv, ID3DXPRTBuffer *data_out, ID3DXPRTBuffer *data_total) PURE;
669 STDMETHOD(ComputeBounce)(THIS_ ID3DXPRTBuffer *data_in, ID3DXPRTBuffer *data_out,
670 ID3DXPRTBuffer *data_total) PURE;
671 STDMETHOD(ComputeBounceAdaptive)(THIS_ ID3DXPRTBuffer *data_in, float adaptive_thres,
672 float min_edge_length, UINT max_subdiv, ID3DXPRTBuffer *data_out, ID3DXPRTBuffer *data_total) PURE;
673 STDMETHOD(ComputeVolumeSamplesDirectSH)(THIS_ UINT sh_order_in, UINT sh_order_out,
674 UINT num_vol_samples, const D3DXVECTOR3 *sample_locs, ID3DXPRTBuffer *data_out) PURE;
675 STDMETHOD(ComputeVolumeSamples)(THIS_ ID3DXPRTBuffer *surf_data_in, UINT sh_order,
676 UINT num_vol_samples, const D3DXVECTOR3 *sample_locs, ID3DXPRTBuffer *data_out) PURE;
677 STDMETHOD(ComputeSurfSamplesDirectSH)(THIS_ UINT sh_order, UINT num_samples,
678 const D3DXVECTOR3 *sample_locs, const D3DXVECTOR3 *sample_norms, ID3DXPRTBuffer *data_out) PURE;
679 STDMETHOD(ComputeSurfSamplesBounce)(THIS_ ID3DXPRTBuffer *surf_data_in, UINT num_samples,
680 const D3DXVECTOR3 *sample_locs, const D3DXVECTOR3 *sample_norms, ID3DXPRTBuffer *data_out,
681 ID3DXPRTBuffer *data_total) PURE;
682 STDMETHOD(FreeSSData)(THIS) PURE;
683 STDMETHOD(FreeBounceData)(THIS) PURE;
684 STDMETHOD(ComputeLDPRTCoeffs)(THIS_ ID3DXPRTBuffer *data_in, UINT sh_order, D3DXVECTOR3 *norm_out,
685 ID3DXPRTBuffer *data_out) PURE;
686 STDMETHOD(ScaleMeshChunk)(THIS_ UINT mesh_chunk, float scale, ID3DXPRTBuffer *data_out) PURE;
687 STDMETHOD(MultiplyAlbedo)(THIS_ ID3DXPRTBuffer *data_out) PURE;
688 STDMETHOD(SetCallback)(THIS_ LPD3DXSHPRTSIMCB cb, float frequency, void *user_context) PURE;
689 STDMETHOD_(BOOL, ShadowRayIntersects)(THIS_ const D3DXVECTOR3 *ray_pos,
690 const D3DXVECTOR3 *ray_dir) PURE;
691 STDMETHOD_(BOOL, ClosestRayIntersects)(THIS_ const D3DXVECTOR3 *ray_pos,
692 const D3DXVECTOR3 *ray_dir, DWORD *face_index, FLOAT *u, FLOAT *v, FLOAT *dist) PURE;
693};
static MonoProfilerRuntimeShutdownBeginCallback cb
Definition: metahost.c:118
HRESULT(WINAPI * LPD3DXSHPRTSIMCB)(float complete, void *ctx)
Definition: d3dx9mesh.h:302
GLsizei stride
Definition: glext.h:5848
static LARGE_INTEGER * frequency
Definition: time.c:38
#define min(a, b)
Definition: monoChain.cc:55
#define max(a, b)
Definition: svc.c:63

◆ DECLARE_INTERFACE_() [8/10]

DECLARE_INTERFACE_ ( ID3DXSkinInfo  ,
IUnknown   
)

Definition at line 512 of file d3dx9mesh.h.

513{
514 /*** IUnknown methods ***/
518 /*** ID3DXSkinInfo ***/
519 STDMETHOD(SetBoneInfluence)(THIS_ DWORD bone, DWORD num_influences, const DWORD *vertices,
520 const FLOAT *weights) PURE;
521 STDMETHOD(SetBoneVertexInfluence)(THIS_ DWORD bone_num, DWORD influence_num, float weight) PURE;
522 STDMETHOD_(DWORD, GetNumBoneInfluences)(THIS_ DWORD bone) PURE;
523 STDMETHOD(GetBoneInfluence)(THIS_ DWORD bone, DWORD* vertices, FLOAT* weights) PURE;
524 STDMETHOD(GetBoneVertexInfluence)(THIS_ DWORD bone_num, DWORD influence_num, float *weight, DWORD* vertex_num) PURE;
525 STDMETHOD(GetMaxVertexInfluences)(THIS_ DWORD* max_vertex_influences) PURE;
526 STDMETHOD_(DWORD, GetNumBones)(THIS) PURE;
527 STDMETHOD(FindBoneVertexInfluenceIndex)(THIS_ DWORD bone_num, DWORD vertex_num, DWORD* influence_index) PURE;
528 STDMETHOD(GetMaxFaceInfluences)(THIS_ struct IDirect3DIndexBuffer9 *index_buffer,
529 DWORD num_faces, DWORD *max_face_influences) PURE;
530 STDMETHOD(SetMinBoneInfluence)(THIS_ FLOAT min_influence) PURE;
531 STDMETHOD_(FLOAT, GetMinBoneInfluence)(THIS) PURE;
532 STDMETHOD(SetBoneName)(THIS_ DWORD bone_idx, const char *name) PURE;
533 STDMETHOD_(const char *, GetBoneName)(THIS_ DWORD bone_idx) PURE;
534 STDMETHOD(SetBoneOffsetMatrix)(THIS_ DWORD bone, const D3DXMATRIX *bone_transform) PURE;
535 STDMETHOD_(D3DXMATRIX *, GetBoneOffsetMatrix)(THIS_ DWORD bone) PURE;
536 STDMETHOD(Clone)(THIS_ ID3DXSkinInfo **skin_info) PURE;
537 STDMETHOD(Remap)(THIS_ DWORD num_vertices, DWORD* vertex_remap) PURE;
538 STDMETHOD(SetFVF)(THIS_ DWORD FVF) PURE;
539 STDMETHOD(SetDeclaration)(THIS_ const D3DVERTEXELEMENT9 *declaration) PURE;
540 STDMETHOD_(DWORD, GetFVF)(THIS) PURE;
542 STDMETHOD(UpdateSkinnedMesh)(THIS_ const D3DXMATRIX *bone_transforms,
543 const D3DXMATRIX *bone_inv_transpose_transforms, const void *src_vertices, void *dst_vertices) PURE;
544 STDMETHOD(ConvertToBlendedMesh)(THIS_ ID3DXMesh *mesh_in, DWORD options, const DWORD *adjacency_in,
545 DWORD *adjacency_out, DWORD *face_remap, ID3DXBuffer **vertex_remap, DWORD *max_face_infl,
546 DWORD *num_bone_combinations, ID3DXBuffer **bone_combination_table, ID3DXMesh **mesh_out) PURE;
547 STDMETHOD(ConvertToIndexedBlendedMesh)(THIS_ ID3DXMesh *mesh_in, DWORD options, DWORD palette_size,
548 const DWORD *adjacency_in, DWORD *adjacency_out, DWORD *face_remap, ID3DXBuffer **vertex_remap,
549 DWORD *max_face_infl, DWORD *num_bone_combinations, ID3DXBuffer **bone_combination_table,
550 ID3DXMesh **mesh_out) PURE;
551};
static unsigned int palette_size(DWORD flags)
Definition: palette.c:239
weight
Definition: sortkey.c:157
STDMETHOD() Clone(THIS_ IEnumAssociationElements **ppNew) PURE
Definition: skin.c:27

◆ DECLARE_INTERFACE_() [9/10]

DECLARE_INTERFACE_ ( ID3DXSPMesh  ,
IUnknown   
)

Definition at line 438 of file d3dx9mesh.h.

439{
440 /*** IUnknown methods ***/
444 /*** ID3DXSPMesh ***/
445 STDMETHOD_(DWORD, GetNumFaces)(THIS) PURE;
446 STDMETHOD_(DWORD, GetNumVertices)(THIS) PURE;
447 STDMETHOD_(DWORD, GetNumFVF)(THIS) PURE;
449 STDMETHOD_(DWORD, GetOptions)(THIS) PURE;
451 STDMETHOD(CloneMeshFVF)(THIS_ DWORD options, DWORD fvf,
452 struct IDirect3DDevice9 *device, DWORD *adjacency_out,
453 DWORD *vertex_remap_out, struct ID3DXMesh **clone_mesh) PURE;
455 struct IDirect3DDevice9 *device, DWORD *adjacency_out,
456 DWORD *vertex_remap_out, struct ID3DXMesh **clone_mesh) PURE;
457 STDMETHOD(ClonePMeshFVF)(THIS_ DWORD options, DWORD fvf,
458 struct IDirect3DDevice9 *device, DWORD *vertex_remap_out,
459 float *errors_by_face, struct ID3DXPMesh **clone_mesh) PURE;
461 struct IDirect3DDevice9 *device, DWORD *vertex_remap_out,
462 float *errors_by_face, struct ID3DXPMesh **clone_mesh) PURE;
463 STDMETHOD(ReduceFaces)(THIS_ DWORD faces) PURE;
464 STDMETHOD(ReduceVertices)(THIS_ DWORD vertices) PURE;
465 STDMETHOD_(DWORD, GetMaxFaces)(THIS) PURE;
466 STDMETHOD_(DWORD, GetMaxVertices)(THIS) PURE;
467 STDMETHOD(GetVertexAttributeWeights)(THIS_ LPD3DXATTRIBUTEWEIGHTS vertex_attribute_weights) PURE;
468 STDMETHOD(GetVertexWeights)(THIS_ FLOAT* vertex_weights) PURE;
469};

◆ DECLARE_INTERFACE_() [10/10]

DECLARE_INTERFACE_ ( ID3DXTextureGutterHelper  ,
IUnknown   
)

Definition at line 609 of file d3dx9mesh.h.

610{
611 /*** IUnknown methods ***/
615 /*** ID3DXTextureGutterHelper methods ***/
616 STDMETHOD_(UINT, GetWidth)(THIS) PURE;
617 STDMETHOD_(UINT, GetHeight)(THIS) PURE;
618
619 STDMETHOD(ApplyGuttersFloat)(THIS_ FLOAT *data_in, UINT num_coeffs, UINT width, UINT height) PURE;
620 STDMETHOD(ApplyGuttersTex)(THIS_ struct IDirect3DTexture9 *texture) PURE;
621 STDMETHOD(ApplyGuttersPRT)(THIS_ ID3DXPRTBuffer *buffer) PURE;
622 STDMETHOD(ResampleTex)(THIS_ struct IDirect3DTexture9 *texture_in, struct ID3DXMesh *mesh_in,
623 D3DDECLUSAGE usage, UINT usage_index, struct IDirect3DTexture9 *texture_out) PURE;
624 STDMETHOD(GetFaceMap)(THIS_ UINT *face_data) PURE;
625 STDMETHOD(GetBaryMap)(THIS_ D3DXVECTOR2 *bary_data) PURE;
626 STDMETHOD(GetTexelMap)(THIS_ D3DXVECTOR2 *texel_data) PURE;
627 STDMETHOD(GetGutterMap)(THIS_ BYTE *gutter_data) PURE;
628 STDMETHOD(SetFaceMap)(THIS_ UINT *face_data) PURE;
629 STDMETHOD(SetBaryMap)(THIS_ D3DXVECTOR2 *bary_data) PURE;
630 STDMETHOD(SetTexelMap)(THIS_ D3DXVECTOR2 *texel_data) PURE;
631 STDMETHOD(SetGutterMap)(THIS_ BYTE *gutter_data) PURE;
632};
GLint GLint GLsizei GLsizei height
Definition: gl.h:1546
GLint GLint GLsizei width
Definition: gl.h:1546

◆ DEFINE_GUID() [1/32]

DEFINE_GUID ( DXFILEOBJ_AnimTicksPerSecond  ,
0x9e415a43  ,
0x7ba6  ,
0x4a73  ,
0x87  ,
0x43  ,
0xb7  ,
0x3d  ,
0x47  ,
0xe8  ,
0x84  ,
0x76   
)

◆ DEFINE_GUID() [2/32]

DEFINE_GUID ( DXFILEOBJ_CompressedAnimationSet  ,
0x7f9b00b3  ,
0xf125  ,
0x4890  ,
0x87  ,
0x6e  ,
0x1c  ,
0x42  ,
0xbf  ,
0x69  ,
0x7c  ,
0x4d   
)

◆ DEFINE_GUID() [3/32]

DEFINE_GUID ( DXFILEOBJ_DeclData  ,
0xbf22e553  ,
0x292c  ,
0x4781  ,
0x9f  ,
0xea  ,
0x62  ,
0xbd  ,
0x55  ,
0x4b  ,
0xdd  ,
0x93   
)

◆ DEFINE_GUID() [4/32]

DEFINE_GUID ( DXFILEOBJ_EffectDWord  ,
0x622c0ed0  ,
0x956e  ,
0x4da9  ,
0x90  ,
0x8a  ,
0x2a  ,
0xf9  ,
0x4f  ,
0x3c  ,
0xe7  ,
0x16   
)

◆ DEFINE_GUID() [5/32]

DEFINE_GUID ( DXFILEOBJ_EffectFloats  ,
0xf1cfe2b3  ,
0x0de3  ,
0x4e28  ,
0xaf  ,
0xa1  ,
0x15  ,
0x5a  ,
0x75  ,
0x0a  ,
0x28  ,
0x2d   
)

◆ DEFINE_GUID() [6/32]

DEFINE_GUID ( DXFILEOBJ_EffectInstance  ,
0xe331f7e4  ,
0x0559  ,
0x4cc2  ,
0x8e  ,
0x99  ,
0x1c  ,
0xec  ,
0x16  ,
0x57  ,
0x92  ,
0x8f   
)

◆ DEFINE_GUID() [7/32]

DEFINE_GUID ( DXFILEOBJ_EffectParamDWord  ,
0xe13963bc  ,
0xae51  ,
0x4c5d  ,
0xb0  ,
0x0f  ,
0xcf  ,
0xa3  ,
0xa9  ,
0xd9  ,
0x7c  ,
0xe5   
)

◆ DEFINE_GUID() [8/32]

DEFINE_GUID ( DXFILEOBJ_EffectParamFloats  ,
0x3014b9a0  ,
0x62f5  ,
0x478c  ,
0x9b  ,
0x86  ,
0xe4  ,
0xac  ,
0x9f  ,
0x4e  ,
0x41  ,
0x8b   
)

◆ DEFINE_GUID() [9/32]

DEFINE_GUID ( DXFILEOBJ_EffectParamString  ,
0x1dbc4c88  ,
0x94c1  ,
0x46ee  ,
0x90  ,
0x76  ,
0x2c  ,
0x28  ,
0x81  ,
0x8c  ,
0x94  ,
0x81   
)

◆ DEFINE_GUID() [10/32]

DEFINE_GUID ( DXFILEOBJ_EffectString  ,
0xd55b097e  ,
0xbdb6  ,
0x4c52  ,
0xb0  ,
0x3d  ,
0x60  ,
0x51  ,
0xc8  ,
0x9d  ,
0x0e  ,
0x42   
)

◆ DEFINE_GUID() [11/32]

DEFINE_GUID ( DXFILEOBJ_FaceAdjacency  ,
0xa64c844a  ,
0xe282  ,
0x4756  ,
0x8b  ,
0x80  ,
0x25  ,
0x0c  ,
0xde  ,
0x04  ,
0x39  ,
0x8c   
)

◆ DEFINE_GUID() [12/32]

DEFINE_GUID ( DXFILEOBJ_FVFData  ,
0xb6e70a0e  ,
0x8ef9  ,
0x4e83  ,
0x94  ,
0xad  ,
0xec  ,
0xc8  ,
0xb0  ,
0xc0  ,
0x48  ,
0x97   
)

◆ DEFINE_GUID() [13/32]

DEFINE_GUID ( DXFILEOBJ_Patch  ,
0xa3eb5d44  ,
0xfc22  ,
0x429d  ,
0x9a  ,
0xfb  ,
0x32  ,
0x21  ,
0xcb  ,
0x97  ,
0x19  ,
0xa6   
)

◆ DEFINE_GUID() [14/32]

DEFINE_GUID ( DXFILEOBJ_PatchMesh  ,
0xd02c95cc  ,
0xedba  ,
0x4305  ,
0x9b  ,
0x5d  ,
0x18  ,
0x20  ,
0xd7  ,
0x70  ,
0x4d  ,
0xbf   
)

◆ DEFINE_GUID() [15/32]

DEFINE_GUID ( DXFILEOBJ_PatchMesh9  ,
0xb9ec94e1  ,
0xb9a6  ,
0x4251  ,
0xba  ,
0x18  ,
0x94  ,
0x89  ,
0x3f  ,
0x02  ,
0xc0  ,
0xea   
)

◆ DEFINE_GUID() [16/32]

DEFINE_GUID ( DXFILEOBJ_PMAttributeRange  ,
0x917e0427  ,
0xc61e  ,
0x4a14  ,
0x9c  ,
0x64  ,
0xaf  ,
0xe6  ,
0x5f  ,
0x9e  ,
0x98  ,
0x44   
)

◆ DEFINE_GUID() [17/32]

DEFINE_GUID ( DXFILEOBJ_PMInfo  ,
0xb6c3e656  ,
0xec8b  ,
0x4b92  ,
0x9b  ,
0x62  ,
0x68  ,
0x16  ,
0x59  ,
0x52  ,
0x29  ,
0x47   
)

◆ DEFINE_GUID() [18/32]

DEFINE_GUID ( DXFILEOBJ_PMVSplitRecord  ,
0x574ccc14  ,
0xf0b3  ,
0x4333  ,
0x82  ,
0x2d  ,
0x93  ,
0xe8  ,
0xa8  ,
0xa0  ,
0x8e  ,
0x4c   
)

◆ DEFINE_GUID() [19/32]

DEFINE_GUID ( DXFILEOBJ_SkinWeights  ,
0x6f0d123b  ,
0xbad2  ,
0x4167  ,
0xa0  ,
0xd0  ,
0x80  ,
0x22  ,
0x4f  ,
0x25  ,
0xfa  ,
0xbb   
)

◆ DEFINE_GUID() [20/32]

DEFINE_GUID ( DXFILEOBJ_VertexDuplicationIndices  ,
0xb8d65549  ,
0xd7c9  ,
0x4995  ,
0x89  ,
0xcf  ,
0x53  ,
0xa9  ,
0xa8  ,
0xb0  ,
0x31  ,
0xe3   
)

◆ DEFINE_GUID() [21/32]

DEFINE_GUID ( DXFILEOBJ_VertexElement  ,
0xf752461c  ,
0x1e23  ,
0x48f6  ,
0xb9  ,
0xf8  ,
0x83  ,
0x50  ,
0x85  ,
0x0f  ,
0x33  ,
0x6f   
)

◆ DEFINE_GUID() [22/32]

DEFINE_GUID ( DXFILEOBJ_XSkinMeshHeader  ,
0x3cf169ce  ,
0xff7c  ,
0x44ab  ,
0x93  ,
0xc0  ,
0xf7  ,
0x8f  ,
0x62  ,
0xd1  ,
0x72  ,
0xe2   
)

◆ DEFINE_GUID() [23/32]

DEFINE_GUID ( IID_ID3DXBaseMesh  ,
0x7ed943dd  ,
0x52e8  ,
0x40b5  ,
0xa8  ,
0xd8  ,
0x76  ,
0x68  ,
0x5c  ,
0x40  ,
0x63  ,
0x30   
)

◆ DEFINE_GUID() [24/32]

DEFINE_GUID ( IID_ID3DXMesh  ,
0x4020e5c2  ,
0x1403  ,
0x4929  ,
0x88  ,
0x3f  ,
0xe2  ,
0xe8  ,
0x49  ,
0xfa  ,
0xc1  ,
0x95   
)

◆ DEFINE_GUID() [25/32]

DEFINE_GUID ( IID_ID3DXPatchMesh  ,
0x3ce6cc22  ,
0xdbf2  ,
0x44f4  ,
0x89  ,
0x4d  ,
0xf9  ,
0xc3  ,
0x4a  ,
0x33  ,
0x71  ,
0x39   
)

◆ DEFINE_GUID() [26/32]

DEFINE_GUID ( IID_ID3DXPMesh  ,
0x8875769a  ,
0xd579  ,
0x4088  ,
0xaa  ,
0xeb  ,
0x53  ,
0x4d  ,
0x1a  ,
0xd8  ,
0x4e  ,
0x96   
)

◆ DEFINE_GUID() [27/32]

DEFINE_GUID ( IID_ID3DXPRTBuffer  ,
0xf1827e47  ,
0x00a8  ,
0x49cd  ,
0x90  ,
0x8c  ,
0x9d  ,
0x11  ,
0x95  ,
0x5f  ,
0x87  ,
0x28   
)

◆ DEFINE_GUID() [28/32]

DEFINE_GUID ( IID_ID3DXPRTCompBuffer  ,
0xa758d465  ,
0xfe8d  ,
0x45ad  ,
0x9c  ,
0xf0  ,
0xd0  ,
0x1e  ,
0x56  ,
0x26  ,
0x6a  ,
0x07   
)

◆ DEFINE_GUID() [29/32]

DEFINE_GUID ( IID_ID3DXPRTEngine  ,
0x683a4278  ,
0xcd5f  ,
0x4d24  ,
0x90  ,
0xad  ,
0xc4  ,
0xe1  ,
0xb6  ,
0x85  ,
0x5d  ,
0x53   
)

◆ DEFINE_GUID() [30/32]

DEFINE_GUID ( IID_ID3DXSkinInfo  ,
0x11eaa540  ,
0xf9a6  ,
0x4d49  ,
0xae  ,
0x6a  ,
0xe1  ,
0x92  ,
0x21  ,
0xf7  ,
0x0c  ,
0xc4   
)

◆ DEFINE_GUID() [31/32]

DEFINE_GUID ( IID_ID3DXSPMesh  ,
0x667ea4c7  ,
0xf1cd  ,
0x4386  ,
0xb5  ,
0x23  ,
0x7c  ,
0x02  ,
0x90  ,
0xb8  ,
0x3c  ,
0xc5   
)

◆ DEFINE_GUID() [32/32]

DEFINE_GUID ( IID_ID3DXTextureGutterHelper  ,
0x838f01ec  ,
0x9729  ,
0x4527  ,
0xaa  ,
0xdb  ,
0xdf  ,
0x70  ,
0xad  ,
0xe7  ,
0xfe  ,
0xa9   
)