mirror of
https://github.com/libretro/RetroArch
synced 2025-01-31 15:32:59 +00:00
e062b98088
find . -type f -exec sed -i '${/^[[:space:]]*$/d;}' {} \+
747 lines
28 KiB
C
747 lines
28 KiB
C
/*
|
|
*
|
|
* Copyright (C) Microsoft Corporation. All Rights Reserved.
|
|
*
|
|
* File: d3dx8mesh.h
|
|
* Content: D3DX mesh types and functions
|
|
*/
|
|
|
|
#include "d3dx8.h"
|
|
|
|
#ifndef __D3DX8MESH_H__
|
|
#define __D3DX8MESH_H__
|
|
|
|
#include "dxfile.h" /* defines LPDIRECTXFILEDATA */
|
|
|
|
/* {2A835771-BF4D-43f4-8E14-82A809F17D8A} */
|
|
DEFINE_GUID(IID_ID3DXBaseMesh,
|
|
0x2a835771, 0xbf4d, 0x43f4, 0x8e, 0x14, 0x82, 0xa8, 0x9, 0xf1, 0x7d, 0x8a);
|
|
|
|
/* {CCAE5C3B-4DD1-4d0f-997E-4684CA64557F} */
|
|
DEFINE_GUID(IID_ID3DXMesh,
|
|
0xccae5c3b, 0x4dd1, 0x4d0f, 0x99, 0x7e, 0x46, 0x84, 0xca, 0x64, 0x55, 0x7f);
|
|
|
|
/* {19FBE386-C282-4659-97BD-CB869B084A6C} */
|
|
DEFINE_GUID(IID_ID3DXPMesh,
|
|
0x19fbe386, 0xc282, 0x4659, 0x97, 0xbd, 0xcb, 0x86, 0x9b, 0x8, 0x4a, 0x6c);
|
|
|
|
/* {4E3CA05C-D4FF-4d11-8A02-16459E08F6F4} */
|
|
DEFINE_GUID(IID_ID3DXSPMesh,
|
|
0x4e3ca05c, 0xd4ff, 0x4d11, 0x8a, 0x2, 0x16, 0x45, 0x9e, 0x8, 0xf6, 0xf4);
|
|
|
|
/* {8DB06ECC-EBFC-408a-9404-3074B4773515} */
|
|
DEFINE_GUID(IID_ID3DXSkinMesh,
|
|
0x8db06ecc, 0xebfc, 0x408a, 0x94, 0x4, 0x30, 0x74, 0xb4, 0x77, 0x35, 0x15);
|
|
|
|
/* Mesh options - lower 3 bytes only, upper byte used by _D3DXMESHOPT option flags */
|
|
enum _D3DXMESH {
|
|
D3DXMESH_32BIT = 0x001, /* If set, then use 32 bit indices, if not set use 16 bit indices. */
|
|
D3DXMESH_DONOTCLIP = 0x002, /* Use D3DUSAGE_DONOTCLIP for VB & IB. */
|
|
D3DXMESH_POINTS = 0x004, /* Use D3DUSAGE_POINTS for VB & IB. */
|
|
D3DXMESH_RTPATCHES = 0x008, /* Use D3DUSAGE_RTPATCHES for VB & IB. */
|
|
D3DXMESH_NPATCHES = 0x4000,/* Use D3DUSAGE_NPATCHES for VB & IB. */
|
|
D3DXMESH_VB_SYSTEMMEM = 0x010, /* Use D3DPOOL_SYSTEMMEM for VB. Overrides D3DXMESH_MANAGEDVERTEXBUFFER */
|
|
D3DXMESH_VB_MANAGED = 0x020, /* Use D3DPOOL_MANAGED for VB. */
|
|
D3DXMESH_VB_WRITEONLY = 0x040, /* Use D3DUSAGE_WRITEONLY for VB. */
|
|
D3DXMESH_VB_DYNAMIC = 0x080, /* Use D3DUSAGE_DYNAMIC for VB. */
|
|
D3DXMESH_VB_SOFTWAREPROCESSING = 0x8000, /* Use D3DUSAGE_SOFTWAREPROCESSING for VB. */
|
|
D3DXMESH_IB_SYSTEMMEM = 0x100, /* Use D3DPOOL_SYSTEMMEM for IB. Overrides D3DXMESH_MANAGEDINDEXBUFFER */
|
|
D3DXMESH_IB_MANAGED = 0x200, /* Use D3DPOOL_MANAGED for IB. */
|
|
D3DXMESH_IB_WRITEONLY = 0x400, /* Use D3DUSAGE_WRITEONLY for IB. */
|
|
D3DXMESH_IB_DYNAMIC = 0x800, /* Use D3DUSAGE_DYNAMIC for IB. */
|
|
D3DXMESH_IB_SOFTWAREPROCESSING= 0x10000, /* Use D3DUSAGE_SOFTWAREPROCESSING for IB. */
|
|
|
|
D3DXMESH_VB_SHARE = 0x1000, /* Valid for Clone* calls only, forces cloned mesh/pmesh to share vertex buffer */
|
|
|
|
D3DXMESH_USEHWONLY = 0x2000, /* Valid for ID3DXSkinMesh::ConvertToBlendedMesh */
|
|
|
|
/* Helper options */
|
|
D3DXMESH_SYSTEMMEM = 0x110, /* D3DXMESH_VB_SYSTEMMEM | D3DXMESH_IB_SYSTEMMEM */
|
|
D3DXMESH_MANAGED = 0x220, /* D3DXMESH_VB_MANAGED | D3DXMESH_IB_MANAGED */
|
|
D3DXMESH_WRITEONLY = 0x440, /* D3DXMESH_VB_WRITEONLY | D3DXMESH_IB_WRITEONLY */
|
|
D3DXMESH_DYNAMIC = 0x880, /* D3DXMESH_VB_DYNAMIC | D3DXMESH_IB_DYNAMIC */
|
|
D3DXMESH_SOFTWAREPROCESSING = 0x18000 /* D3DXMESH_VB_SOFTWAREPROCESSING | D3DXMESH_IB_SOFTWAREPROCESSING */
|
|
|
|
};
|
|
|
|
/* option field values for specifying min value in D3DXGeneratePMesh and D3DXSimplifyMesh */
|
|
enum _D3DXMESHSIMP
|
|
{
|
|
D3DXMESHSIMP_VERTEX = 0x1,
|
|
D3DXMESHSIMP_FACE = 0x2
|
|
};
|
|
|
|
enum _MAX_FVF_DECL_SIZE
|
|
{
|
|
MAX_FVF_DECL_SIZE = 20
|
|
};
|
|
|
|
typedef struct ID3DXBaseMesh *LPD3DXBASEMESH;
|
|
typedef struct ID3DXMesh *LPD3DXMESH;
|
|
typedef struct ID3DXPMesh *LPD3DXPMESH;
|
|
typedef struct ID3DXSPMesh *LPD3DXSPMESH;
|
|
typedef struct ID3DXSkinMesh *LPD3DXSKINMESH;
|
|
|
|
typedef struct _D3DXATTRIBUTERANGE
|
|
{
|
|
DWORD AttribId;
|
|
DWORD FaceStart;
|
|
DWORD FaceCount;
|
|
DWORD VertexStart;
|
|
DWORD VertexCount;
|
|
} D3DXATTRIBUTERANGE;
|
|
|
|
typedef D3DXATTRIBUTERANGE* LPD3DXATTRIBUTERANGE;
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif /* __cplusplus */
|
|
struct D3DXMATERIAL
|
|
{
|
|
D3DMATERIAL8 MatD3D;
|
|
LPSTR pTextureFilename;
|
|
};
|
|
typedef struct D3DXMATERIAL *LPD3DXMATERIAL;
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif /* __cplusplus */
|
|
|
|
typedef struct _D3DXATTRIBUTEWEIGHTS
|
|
{
|
|
FLOAT Position;
|
|
FLOAT Boundary;
|
|
FLOAT Normal;
|
|
FLOAT Diffuse;
|
|
FLOAT Specular;
|
|
FLOAT Tex[8];
|
|
} D3DXATTRIBUTEWEIGHTS;
|
|
|
|
typedef D3DXATTRIBUTEWEIGHTS* LPD3DXATTRIBUTEWEIGHTS;
|
|
|
|
enum _D3DXWELDEPSILONSFLAGS
|
|
{
|
|
D3DXWELDEPSILONS_WELDALL = 0x1, /* weld all vertices marked by adjacency as being overlapping */
|
|
|
|
D3DXWELDEPSILONS_WELDPARTIALMATCHES = 0x2, /* if a given vertex component is within epsilon, modify partial matched
|
|
* vertices so that both components identical AND if all components "equal"
|
|
* remove one of the vertices */
|
|
D3DXWELDEPSILONS_DONOTREMOVEVERTICES = 0x4 /* instructs weld to only allow modifications to vertices and not removal
|
|
* ONLY valid if D3DXWELDEPSILONS_WELDPARTIALMATCHES is set
|
|
* useful to modify vertices to be equal, but not allow vertices to be removed */
|
|
};
|
|
|
|
typedef struct _D3DXWELDEPSILONS
|
|
{
|
|
FLOAT SkinWeights;
|
|
FLOAT Normal;
|
|
FLOAT Tex[8];
|
|
DWORD Flags;
|
|
} D3DXWELDEPSILONS;
|
|
|
|
typedef D3DXWELDEPSILONS* LPD3DXWELDEPSILONS;
|
|
|
|
#undef INTERFACE
|
|
#define INTERFACE ID3DXBaseMesh
|
|
|
|
DECLARE_INTERFACE_(ID3DXBaseMesh, IUnknown)
|
|
{
|
|
/* IUnknown */
|
|
STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
|
|
STDMETHOD_(ULONG, AddRef)(THIS) PURE;
|
|
STDMETHOD_(ULONG, Release)(THIS) PURE;
|
|
|
|
/* ID3DXBaseMesh */
|
|
STDMETHOD(DrawSubset)(THIS_ DWORD AttribId) PURE;
|
|
STDMETHOD_(DWORD, GetNumFaces)(THIS) PURE;
|
|
STDMETHOD_(DWORD, GetNumVertices)(THIS) PURE;
|
|
STDMETHOD_(DWORD, GetFVF)(THIS) PURE;
|
|
STDMETHOD(GetDeclaration)(THIS_ DWORD Declaration[MAX_FVF_DECL_SIZE]) PURE;
|
|
STDMETHOD_(DWORD, GetOptions)(THIS) PURE;
|
|
STDMETHOD(GetDevice)(THIS_ LPDIRECT3DDEVICE8* ppDevice) PURE;
|
|
STDMETHOD(CloneMeshFVF)(THIS_ DWORD Options,
|
|
DWORD FVF, LPDIRECT3DDEVICE8 pD3DDevice, LPD3DXMESH* ppCloneMesh) PURE;
|
|
STDMETHOD(CloneMesh)(THIS_ DWORD Options,
|
|
CONST DWORD *pDeclaration, LPDIRECT3DDEVICE8 pD3DDevice, LPD3DXMESH* ppCloneMesh) PURE;
|
|
STDMETHOD(GetVertexBuffer)(THIS_ LPDIRECT3DVERTEXBUFFER8* ppVB) PURE;
|
|
STDMETHOD(GetIndexBuffer)(THIS_ LPDIRECT3DINDEXBUFFER8* ppIB) PURE;
|
|
STDMETHOD(LockVertexBuffer)(THIS_ DWORD Flags, BYTE** ppData) PURE;
|
|
STDMETHOD(UnlockVertexBuffer)(THIS) PURE;
|
|
STDMETHOD(LockIndexBuffer)(THIS_ DWORD Flags, BYTE** ppData) PURE;
|
|
STDMETHOD(UnlockIndexBuffer)(THIS) PURE;
|
|
STDMETHOD(GetAttributeTable)(
|
|
THIS_ D3DXATTRIBUTERANGE *pAttribTable, DWORD* pAttribTableSize) PURE;
|
|
|
|
STDMETHOD(ConvertPointRepsToAdjacency)(THIS_ CONST DWORD* pPRep, DWORD* pAdjacency) PURE;
|
|
STDMETHOD(ConvertAdjacencyToPointReps)(THIS_ CONST DWORD* pAdjacency, DWORD* pPRep) PURE;
|
|
STDMETHOD(GenerateAdjacency)(THIS_ FLOAT Epsilon, DWORD* pAdjacency) PURE;
|
|
};
|
|
|
|
#undef INTERFACE
|
|
#define INTERFACE ID3DXMesh
|
|
|
|
DECLARE_INTERFACE_(ID3DXMesh, ID3DXBaseMesh)
|
|
{
|
|
/* IUnknown */
|
|
STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
|
|
STDMETHOD_(ULONG, AddRef)(THIS) PURE;
|
|
STDMETHOD_(ULONG, Release)(THIS) PURE;
|
|
|
|
/* ID3DXBaseMesh */
|
|
STDMETHOD(DrawSubset)(THIS_ DWORD AttribId) PURE;
|
|
STDMETHOD_(DWORD, GetNumFaces)(THIS) PURE;
|
|
STDMETHOD_(DWORD, GetNumVertices)(THIS) PURE;
|
|
STDMETHOD_(DWORD, GetFVF)(THIS) PURE;
|
|
STDMETHOD(GetDeclaration)(THIS_ DWORD Declaration[MAX_FVF_DECL_SIZE]) PURE;
|
|
STDMETHOD_(DWORD, GetOptions)(THIS) PURE;
|
|
STDMETHOD(GetDevice)(THIS_ LPDIRECT3DDEVICE8* ppDevice) PURE;
|
|
STDMETHOD(CloneMeshFVF)(THIS_ DWORD Options,
|
|
DWORD FVF, LPDIRECT3DDEVICE8 pD3DDevice, LPD3DXMESH* ppCloneMesh) PURE;
|
|
STDMETHOD(CloneMesh)(THIS_ DWORD Options,
|
|
CONST DWORD *pDeclaration, LPDIRECT3DDEVICE8 pD3DDevice, LPD3DXMESH* ppCloneMesh) PURE;
|
|
STDMETHOD(GetVertexBuffer)(THIS_ LPDIRECT3DVERTEXBUFFER8* ppVB) PURE;
|
|
STDMETHOD(GetIndexBuffer)(THIS_ LPDIRECT3DINDEXBUFFER8* ppIB) PURE;
|
|
STDMETHOD(LockVertexBuffer)(THIS_ DWORD Flags, BYTE** ppData) PURE;
|
|
STDMETHOD(UnlockVertexBuffer)(THIS) PURE;
|
|
STDMETHOD(LockIndexBuffer)(THIS_ DWORD Flags, BYTE** ppData) PURE;
|
|
STDMETHOD(UnlockIndexBuffer)(THIS) PURE;
|
|
STDMETHOD(GetAttributeTable)(
|
|
THIS_ D3DXATTRIBUTERANGE *pAttribTable, DWORD* pAttribTableSize) PURE;
|
|
|
|
STDMETHOD(ConvertPointRepsToAdjacency)(THIS_ CONST DWORD* pPRep, DWORD* pAdjacency) PURE;
|
|
STDMETHOD(ConvertAdjacencyToPointReps)(THIS_ CONST DWORD* pAdjacency, DWORD* pPRep) PURE;
|
|
STDMETHOD(GenerateAdjacency)(THIS_ FLOAT Epsilon, DWORD* pAdjacency) PURE;
|
|
|
|
/* ID3DXMesh */
|
|
STDMETHOD(LockAttributeBuffer)(THIS_ DWORD Flags, DWORD** ppData) PURE;
|
|
STDMETHOD(UnlockAttributeBuffer)(THIS) PURE;
|
|
STDMETHOD(Optimize)(THIS_ DWORD Flags, CONST DWORD* pAdjacencyIn, DWORD* pAdjacencyOut,
|
|
DWORD* pFaceRemap, LPD3DXBUFFER *ppVertexRemap,
|
|
LPD3DXMESH* ppOptMesh) PURE;
|
|
STDMETHOD(OptimizeInplace)(THIS_ DWORD Flags, CONST DWORD* pAdjacencyIn, DWORD* pAdjacencyOut,
|
|
DWORD* pFaceRemap, LPD3DXBUFFER *ppVertexRemap) PURE;
|
|
|
|
};
|
|
|
|
#undef INTERFACE
|
|
#define INTERFACE ID3DXPMesh
|
|
|
|
DECLARE_INTERFACE_(ID3DXPMesh, ID3DXBaseMesh)
|
|
{
|
|
/* IUnknown */
|
|
STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
|
|
STDMETHOD_(ULONG, AddRef)(THIS) PURE;
|
|
STDMETHOD_(ULONG, Release)(THIS) PURE;
|
|
|
|
/* ID3DXBaseMesh */
|
|
STDMETHOD(DrawSubset)(THIS_ DWORD AttribId) PURE;
|
|
STDMETHOD_(DWORD, GetNumFaces)(THIS) PURE;
|
|
STDMETHOD_(DWORD, GetNumVertices)(THIS) PURE;
|
|
STDMETHOD_(DWORD, GetFVF)(THIS) PURE;
|
|
STDMETHOD(GetDeclaration)(THIS_ DWORD Declaration[MAX_FVF_DECL_SIZE]) PURE;
|
|
STDMETHOD_(DWORD, GetOptions)(THIS) PURE;
|
|
STDMETHOD(GetDevice)(THIS_ LPDIRECT3DDEVICE8* ppDevice) PURE;
|
|
STDMETHOD(CloneMeshFVF)(THIS_ DWORD Options,
|
|
DWORD FVF, LPDIRECT3DDEVICE8 pD3DDevice, LPD3DXMESH* ppCloneMesh) PURE;
|
|
STDMETHOD(CloneMesh)(THIS_ DWORD Options,
|
|
CONST DWORD *pDeclaration, LPDIRECT3DDEVICE8 pD3DDevice, LPD3DXMESH* ppCloneMesh) PURE;
|
|
STDMETHOD(GetVertexBuffer)(THIS_ LPDIRECT3DVERTEXBUFFER8* ppVB) PURE;
|
|
STDMETHOD(GetIndexBuffer)(THIS_ LPDIRECT3DINDEXBUFFER8* ppIB) PURE;
|
|
STDMETHOD(LockVertexBuffer)(THIS_ DWORD Flags, BYTE** ppData) PURE;
|
|
STDMETHOD(UnlockVertexBuffer)(THIS) PURE;
|
|
STDMETHOD(LockIndexBuffer)(THIS_ DWORD Flags, BYTE** ppData) PURE;
|
|
STDMETHOD(UnlockIndexBuffer)(THIS) PURE;
|
|
STDMETHOD(GetAttributeTable)(
|
|
THIS_ D3DXATTRIBUTERANGE *pAttribTable, DWORD* pAttribTableSize) PURE;
|
|
|
|
STDMETHOD(ConvertPointRepsToAdjacency)(THIS_ CONST DWORD* pPRep, DWORD* pAdjacency) PURE;
|
|
STDMETHOD(ConvertAdjacencyToPointReps)(THIS_ CONST DWORD* pAdjacency, DWORD* pPRep) PURE;
|
|
STDMETHOD(GenerateAdjacency)(THIS_ FLOAT Epsilon, DWORD* pAdjacency) PURE;
|
|
|
|
/* ID3DXPMesh */
|
|
STDMETHOD(ClonePMeshFVF)(THIS_ DWORD Options,
|
|
DWORD FVF, LPDIRECT3DDEVICE8 pD3D, LPD3DXPMESH* ppCloneMesh) PURE;
|
|
STDMETHOD(ClonePMesh)(THIS_ DWORD Options,
|
|
CONST DWORD *pDeclaration, LPDIRECT3DDEVICE8 pD3D, LPD3DXPMESH* ppCloneMesh) PURE;
|
|
STDMETHOD(SetNumFaces)(THIS_ DWORD Faces) PURE;
|
|
STDMETHOD(SetNumVertices)(THIS_ DWORD Vertices) PURE;
|
|
STDMETHOD_(DWORD, GetMaxFaces)(THIS) PURE;
|
|
STDMETHOD_(DWORD, GetMinFaces)(THIS) PURE;
|
|
STDMETHOD_(DWORD, GetMaxVertices)(THIS) PURE;
|
|
STDMETHOD_(DWORD, GetMinVertices)(THIS) PURE;
|
|
STDMETHOD(Save)(THIS_ IStream *pStream, LPD3DXMATERIAL pMaterials, DWORD NumMaterials) PURE;
|
|
|
|
STDMETHOD(Optimize)(THIS_ DWORD Flags, DWORD* pAdjacencyOut,
|
|
DWORD* pFaceRemap, LPD3DXBUFFER *ppVertexRemap,
|
|
LPD3DXMESH* ppOptMesh) PURE;
|
|
|
|
STDMETHOD(OptimizeBaseLOD)(THIS_ DWORD Flags, DWORD* pFaceRemap) PURE;
|
|
STDMETHOD(TrimByFaces)(THIS_ DWORD NewFacesMin, DWORD NewFacesMax, DWORD *rgiFaceRemap, DWORD *rgiVertRemap) PURE;
|
|
STDMETHOD(TrimByVertices)(THIS_ DWORD NewVerticesMin, DWORD NewVerticesMax, DWORD *rgiFaceRemap, DWORD *rgiVertRemap) PURE;
|
|
|
|
STDMETHOD(GetAdjacency)(THIS_ DWORD* pAdjacency) PURE;
|
|
};
|
|
|
|
#undef INTERFACE
|
|
#define INTERFACE ID3DXSPMesh
|
|
|
|
DECLARE_INTERFACE_(ID3DXSPMesh, IUnknown)
|
|
{
|
|
/* IUnknown */
|
|
STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
|
|
STDMETHOD_(ULONG, AddRef)(THIS) PURE;
|
|
STDMETHOD_(ULONG, Release)(THIS) PURE;
|
|
|
|
/* ID3DXSPMesh */
|
|
STDMETHOD_(DWORD, GetNumFaces)(THIS) PURE;
|
|
STDMETHOD_(DWORD, GetNumVertices)(THIS) PURE;
|
|
STDMETHOD_(DWORD, GetFVF)(THIS) PURE;
|
|
STDMETHOD(GetDeclaration)(THIS_ DWORD Declaration[MAX_FVF_DECL_SIZE]) PURE;
|
|
STDMETHOD_(DWORD, GetOptions)(THIS) PURE;
|
|
STDMETHOD(GetDevice)(THIS_ LPDIRECT3DDEVICE8* ppDevice) PURE;
|
|
STDMETHOD(CloneMeshFVF)(THIS_ DWORD Options,
|
|
DWORD FVF, LPDIRECT3DDEVICE8 pD3D, DWORD *pAdjacencyOut, DWORD *pVertexRemapOut, LPD3DXMESH* ppCloneMesh) PURE;
|
|
STDMETHOD(CloneMesh)(THIS_ DWORD Options,
|
|
CONST DWORD *pDeclaration, LPDIRECT3DDEVICE8 pD3DDevice, DWORD *pAdjacencyOut, DWORD *pVertexRemapOut, LPD3DXMESH* ppCloneMesh) PURE;
|
|
STDMETHOD(ClonePMeshFVF)(THIS_ DWORD Options,
|
|
DWORD FVF, LPDIRECT3DDEVICE8 pD3D, DWORD *pVertexRemapOut, LPD3DXPMESH* ppCloneMesh) PURE;
|
|
STDMETHOD(ClonePMesh)(THIS_ DWORD Options,
|
|
CONST DWORD *pDeclaration, LPDIRECT3DDEVICE8 pD3D, DWORD *pVertexRemapOut, LPD3DXPMESH* ppCloneMesh) PURE;
|
|
STDMETHOD(ReduceFaces)(THIS_ DWORD Faces) PURE;
|
|
STDMETHOD(ReduceVertices)(THIS_ DWORD Vertices) PURE;
|
|
STDMETHOD_(DWORD, GetMaxFaces)(THIS) PURE;
|
|
STDMETHOD_(DWORD, GetMaxVertices)(THIS) PURE;
|
|
STDMETHOD(GetVertexAttributeWeights)(THIS_ LPD3DXATTRIBUTEWEIGHTS pVertexAttributeWeights) PURE;
|
|
STDMETHOD(GetVertexWeights)(THIS_ FLOAT *pVertexWeights) PURE;
|
|
};
|
|
|
|
#define UNUSED16 (0xffff)
|
|
#define UNUSED32 (0xffffffff)
|
|
|
|
/* ID3DXMesh::Optimize options - upper byte only, lower 3 bytes used from _D3DXMESH option flags */
|
|
enum _D3DXMESHOPT {
|
|
D3DXMESHOPT_COMPACT = 0x01000000,
|
|
D3DXMESHOPT_ATTRSORT = 0x02000000,
|
|
D3DXMESHOPT_VERTEXCACHE = 0x04000000,
|
|
D3DXMESHOPT_STRIPREORDER = 0x08000000,
|
|
D3DXMESHOPT_IGNOREVERTS = 0x10000000, /* optimize faces only, don't touch vertices */
|
|
D3DXMESHOPT_SHAREVB = 0x1000 /* same as D3DXMESH_VB_SHARE */
|
|
};
|
|
|
|
/* Subset of the mesh that has the same attribute and bone combination.
|
|
* This subset can be rendered in a single draw call */
|
|
typedef struct _D3DXBONECOMBINATION
|
|
{
|
|
DWORD AttribId;
|
|
DWORD FaceStart;
|
|
DWORD FaceCount;
|
|
DWORD VertexStart;
|
|
DWORD VertexCount;
|
|
DWORD* BoneId;
|
|
} D3DXBONECOMBINATION, *LPD3DXBONECOMBINATION;
|
|
|
|
#undef INTERFACE
|
|
#define INTERFACE ID3DXSkinMesh
|
|
|
|
DECLARE_INTERFACE_(ID3DXSkinMesh, IUnknown)
|
|
{
|
|
/* IUnknown */
|
|
STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
|
|
STDMETHOD_(ULONG, AddRef)(THIS) PURE;
|
|
STDMETHOD_(ULONG, Release)(THIS) PURE;
|
|
|
|
/* ID3DXMesh */
|
|
STDMETHOD_(DWORD, GetNumFaces)(THIS) PURE;
|
|
STDMETHOD_(DWORD, GetNumVertices)(THIS) PURE;
|
|
STDMETHOD_(DWORD, GetFVF)(THIS) PURE;
|
|
STDMETHOD(GetDeclaration)(THIS_ DWORD Declaration[MAX_FVF_DECL_SIZE]) PURE;
|
|
STDMETHOD_(DWORD, GetOptions)(THIS) PURE;
|
|
STDMETHOD(GetDevice)(THIS_ LPDIRECT3DDEVICE8* ppDevice) PURE;
|
|
STDMETHOD(GetVertexBuffer)(THIS_ LPDIRECT3DVERTEXBUFFER8* ppVB) PURE;
|
|
STDMETHOD(GetIndexBuffer)(THIS_ LPDIRECT3DINDEXBUFFER8* ppIB) PURE;
|
|
STDMETHOD(LockVertexBuffer)(THIS_ DWORD flags, BYTE** ppData) PURE;
|
|
STDMETHOD(UnlockVertexBuffer)(THIS) PURE;
|
|
STDMETHOD(LockIndexBuffer)(THIS_ DWORD flags, BYTE** ppData) PURE;
|
|
STDMETHOD(UnlockIndexBuffer)(THIS) PURE;
|
|
STDMETHOD(LockAttributeBuffer)(THIS_ DWORD flags, DWORD** ppData) PURE;
|
|
STDMETHOD(UnlockAttributeBuffer)(THIS) PURE;
|
|
/* ID3DXSkinMesh */
|
|
STDMETHOD_(DWORD, GetNumBones)(THIS) PURE;
|
|
STDMETHOD(GetOriginalMesh)(THIS_ LPD3DXMESH* ppMesh) PURE;
|
|
STDMETHOD(SetBoneInfluence)(THIS_ DWORD bone, DWORD numInfluences, CONST DWORD* vertices, CONST FLOAT* weights) PURE;
|
|
STDMETHOD_(DWORD, GetNumBoneInfluences)(THIS_ DWORD bone) PURE;
|
|
STDMETHOD(GetBoneInfluence)(THIS_ DWORD bone, DWORD* vertices, FLOAT* weights) PURE;
|
|
STDMETHOD(GetMaxVertexInfluences)(THIS_ DWORD* maxVertexInfluences) PURE;
|
|
STDMETHOD(GetMaxFaceInfluences)(THIS_ DWORD* maxFaceInfluences) PURE;
|
|
|
|
STDMETHOD(ConvertToBlendedMesh)(THIS_ DWORD Options,
|
|
CONST LPDWORD pAdjacencyIn,
|
|
LPDWORD pAdjacencyOut,
|
|
DWORD* pNumBoneCombinations,
|
|
LPD3DXBUFFER* ppBoneCombinationTable,
|
|
DWORD* pFaceRemap,
|
|
LPD3DXBUFFER *ppVertexRemap,
|
|
LPD3DXMESH* ppMesh) PURE;
|
|
|
|
STDMETHOD(ConvertToIndexedBlendedMesh)(THIS_ DWORD Options,
|
|
CONST LPDWORD pAdjacencyIn,
|
|
DWORD paletteSize,
|
|
LPDWORD pAdjacencyOut,
|
|
DWORD* pNumBoneCombinations,
|
|
LPD3DXBUFFER* ppBoneCombinationTable,
|
|
DWORD* pFaceRemap,
|
|
LPD3DXBUFFER *ppVertexRemap,
|
|
LPD3DXMESH* ppMesh) PURE;
|
|
|
|
STDMETHOD(GenerateSkinnedMesh)(THIS_ DWORD Options,
|
|
FLOAT minWeight,
|
|
CONST LPDWORD pAdjacencyIn,
|
|
LPDWORD pAdjacencyOut,
|
|
DWORD* pFaceRemap,
|
|
LPD3DXBUFFER *ppVertexRemap,
|
|
LPD3DXMESH* ppMesh) PURE;
|
|
STDMETHOD(UpdateSkinnedMesh)(THIS_ CONST D3DXMATRIX* pBoneTransforms, CONST D3DXMATRIX* pBoneInvTransforms, LPD3DXMESH pMesh) PURE;
|
|
};
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif /* __cplusplus */
|
|
|
|
HRESULT WINAPI
|
|
D3DXCreateMesh(
|
|
DWORD NumFaces,
|
|
DWORD NumVertices,
|
|
DWORD Options,
|
|
CONST DWORD *pDeclaration,
|
|
LPDIRECT3DDEVICE8 pD3D,
|
|
LPD3DXMESH* ppMesh);
|
|
|
|
HRESULT WINAPI
|
|
D3DXCreateMeshFVF(
|
|
DWORD NumFaces,
|
|
DWORD NumVertices,
|
|
DWORD Options,
|
|
DWORD FVF,
|
|
LPDIRECT3DDEVICE8 pD3D,
|
|
LPD3DXMESH* ppMesh);
|
|
|
|
HRESULT WINAPI
|
|
D3DXCreateSPMesh(
|
|
LPD3DXMESH pMesh,
|
|
CONST DWORD* pAdjacency,
|
|
CONST LPD3DXATTRIBUTEWEIGHTS pVertexAttributeWeights,
|
|
CONST FLOAT *pVertexWeights,
|
|
LPD3DXSPMESH* ppSMesh);
|
|
|
|
/* clean a mesh up for simplification, try to make manifold */
|
|
HRESULT WINAPI
|
|
D3DXCleanMesh(
|
|
LPD3DXMESH pMeshIn,
|
|
CONST DWORD* pAdjacencyIn,
|
|
LPD3DXMESH* ppMeshOut,
|
|
DWORD* pAdjacencyOut,
|
|
LPD3DXBUFFER* ppErrorsAndWarnings);
|
|
|
|
HRESULT WINAPI
|
|
D3DXValidMesh(
|
|
LPD3DXMESH pMeshIn,
|
|
CONST DWORD* pAdjacency,
|
|
LPD3DXBUFFER* ppErrorsAndWarnings);
|
|
|
|
HRESULT WINAPI
|
|
D3DXGeneratePMesh(
|
|
LPD3DXMESH pMesh,
|
|
CONST DWORD* pAdjacency,
|
|
CONST LPD3DXATTRIBUTEWEIGHTS pVertexAttributeWeights,
|
|
CONST FLOAT *pVertexWeights,
|
|
DWORD MinValue,
|
|
DWORD Options,
|
|
LPD3DXPMESH* ppPMesh);
|
|
|
|
HRESULT WINAPI
|
|
D3DXSimplifyMesh(
|
|
LPD3DXMESH pMesh,
|
|
CONST DWORD* pAdjacency,
|
|
CONST LPD3DXATTRIBUTEWEIGHTS pVertexAttributeWeights,
|
|
CONST FLOAT *pVertexWeights,
|
|
DWORD MinValue,
|
|
DWORD Options,
|
|
LPD3DXMESH* ppMesh);
|
|
|
|
HRESULT WINAPI
|
|
D3DXComputeBoundingSphere(
|
|
PVOID pPointsFVF,
|
|
DWORD NumVertices,
|
|
DWORD FVF,
|
|
D3DXVECTOR3 *pCenter,
|
|
FLOAT *pRadius);
|
|
|
|
HRESULT WINAPI
|
|
D3DXComputeBoundingBox(
|
|
PVOID pPointsFVF,
|
|
DWORD NumVertices,
|
|
DWORD FVF,
|
|
D3DXVECTOR3 *pMin,
|
|
D3DXVECTOR3 *pMax);
|
|
|
|
HRESULT WINAPI
|
|
D3DXComputeNormals(
|
|
LPD3DXBASEMESH pMesh,
|
|
CONST DWORD *pAdjacency);
|
|
|
|
HRESULT WINAPI
|
|
D3DXCreateBuffer(
|
|
DWORD NumBytes,
|
|
LPD3DXBUFFER *ppBuffer);
|
|
|
|
HRESULT WINAPI
|
|
D3DXLoadMeshFromX(
|
|
LPSTR pFilename,
|
|
DWORD Options,
|
|
LPDIRECT3DDEVICE8 pD3D,
|
|
LPD3DXBUFFER *ppAdjacency,
|
|
LPD3DXBUFFER *ppMaterials,
|
|
DWORD *pNumMaterials,
|
|
LPD3DXMESH *ppMesh);
|
|
|
|
HRESULT WINAPI
|
|
D3DXLoadMeshFromXInMemory(
|
|
PBYTE Memory,
|
|
DWORD SizeOfMemory,
|
|
DWORD Options,
|
|
LPDIRECT3DDEVICE8 pD3D,
|
|
LPD3DXBUFFER *ppAdjacency,
|
|
LPD3DXBUFFER *ppMaterials,
|
|
DWORD *pNumMaterials,
|
|
LPD3DXMESH *ppMesh);
|
|
|
|
HRESULT WINAPI
|
|
D3DXLoadMeshFromXResource(
|
|
HMODULE Module,
|
|
LPCTSTR Name,
|
|
LPCTSTR Type,
|
|
DWORD Options,
|
|
LPDIRECT3DDEVICE8 pD3D,
|
|
LPD3DXBUFFER *ppAdjacency,
|
|
LPD3DXBUFFER *ppMaterials,
|
|
DWORD *pNumMaterials,
|
|
LPD3DXMESH *ppMesh);
|
|
|
|
HRESULT WINAPI
|
|
D3DXSaveMeshToX(
|
|
LPSTR pFilename,
|
|
LPD3DXMESH pMesh,
|
|
CONST DWORD* pAdjacency,
|
|
CONST LPD3DXMATERIAL pMaterials,
|
|
DWORD NumMaterials,
|
|
DWORD Format
|
|
);
|
|
|
|
HRESULT WINAPI
|
|
D3DXCreatePMeshFromStream(
|
|
IStream *pStream,
|
|
DWORD Options,
|
|
LPDIRECT3DDEVICE8 pD3DDevice,
|
|
LPD3DXBUFFER *ppMaterials,
|
|
DWORD* pNumMaterials,
|
|
LPD3DXPMESH *ppPMesh);
|
|
|
|
HRESULT WINAPI
|
|
D3DXCreateSkinMesh(
|
|
DWORD NumFaces,
|
|
DWORD NumVertices,
|
|
DWORD NumBones,
|
|
DWORD Options,
|
|
CONST DWORD *pDeclaration,
|
|
LPDIRECT3DDEVICE8 pD3D,
|
|
LPD3DXSKINMESH* ppSkinMesh);
|
|
|
|
HRESULT WINAPI
|
|
D3DXCreateSkinMeshFVF(
|
|
DWORD NumFaces,
|
|
DWORD NumVertices,
|
|
DWORD NumBones,
|
|
DWORD Options,
|
|
DWORD FVF,
|
|
LPDIRECT3DDEVICE8 pD3D,
|
|
LPD3DXSKINMESH* ppSkinMesh);
|
|
|
|
HRESULT WINAPI
|
|
D3DXCreateSkinMeshFromMesh(
|
|
LPD3DXMESH pMesh,
|
|
DWORD numBones,
|
|
LPD3DXSKINMESH* ppSkinMesh);
|
|
|
|
HRESULT WINAPI
|
|
D3DXLoadMeshFromXof(
|
|
LPDIRECTXFILEDATA pXofObjMesh,
|
|
DWORD Options,
|
|
LPDIRECT3DDEVICE8 pD3DDevice,
|
|
LPD3DXBUFFER *ppAdjacency,
|
|
LPD3DXBUFFER *ppMaterials,
|
|
DWORD *pNumMaterials,
|
|
LPD3DXMESH *ppMesh);
|
|
|
|
HRESULT WINAPI
|
|
D3DXLoadSkinMeshFromXof(
|
|
LPDIRECTXFILEDATA pxofobjMesh,
|
|
DWORD Options,
|
|
LPDIRECT3DDEVICE8 pD3D,
|
|
LPD3DXBUFFER* ppAdjacency,
|
|
LPD3DXBUFFER* ppMaterials,
|
|
DWORD *pMatOut,
|
|
LPD3DXBUFFER* ppBoneNames,
|
|
LPD3DXBUFFER* ppBoneTransforms,
|
|
LPD3DXSKINMESH* ppMesh);
|
|
|
|
HRESULT WINAPI
|
|
D3DXTessellateNPatches(
|
|
LPD3DXMESH pMeshIn,
|
|
CONST DWORD* pAdjacencyIn,
|
|
FLOAT NumSegs,
|
|
BOOL QuadraticInterpNormals, /* if false use linear intrep for normals, if true use quadratic */
|
|
LPD3DXMESH *ppMeshOut,
|
|
LPD3DXBUFFER *ppAdjacencyOut);
|
|
|
|
UINT WINAPI
|
|
D3DXGetFVFVertexSize(DWORD FVF);
|
|
|
|
HRESULT WINAPI
|
|
D3DXDeclaratorFromFVF(
|
|
DWORD FVF,
|
|
DWORD Declaration[MAX_FVF_DECL_SIZE]);
|
|
|
|
HRESULT WINAPI
|
|
D3DXFVFFromDeclarator(
|
|
CONST DWORD *pDeclarator,
|
|
DWORD *pFVF);
|
|
|
|
HRESULT WINAPI
|
|
D3DXWeldVertices(
|
|
CONST LPD3DXMESH pMesh,
|
|
LPD3DXWELDEPSILONS pEpsilons,
|
|
CONST DWORD *pAdjacencyIn,
|
|
DWORD *pAdjacencyOut,
|
|
DWORD* pFaceRemap,
|
|
LPD3DXBUFFER *ppVertexRemap);
|
|
|
|
typedef struct _D3DXINTERSECTINFO
|
|
{
|
|
DWORD FaceIndex; /* index of face intersected */
|
|
FLOAT U; /* Barycentric Hit Coordinates */
|
|
FLOAT V; /* Barycentric Hit Coordinates */
|
|
FLOAT Dist; /* Ray-Intersection Parameter Distance */
|
|
} D3DXINTERSECTINFO, *LPD3DXINTERSECTINFO;
|
|
|
|
HRESULT WINAPI
|
|
D3DXIntersect(
|
|
LPD3DXBASEMESH pMesh,
|
|
CONST D3DXVECTOR3 *pRayPos,
|
|
CONST D3DXVECTOR3 *pRayDir,
|
|
BOOL *pHit, /* True if any faces were intersected */
|
|
DWORD *pFaceIndex, /* index of closest face intersected */
|
|
FLOAT *pU, /* Barycentric Hit Coordinates */
|
|
FLOAT *pV, /* Barycentric Hit Coordinates */
|
|
FLOAT *pDist, /* Ray-Intersection Parameter Distance */
|
|
LPD3DXBUFFER *ppAllHits, /* Array of D3DXINTERSECTINFOs for all hits (not just closest) */
|
|
DWORD *pCountOfHits); /* Number of entries in AllHits array */
|
|
|
|
HRESULT WINAPI
|
|
D3DXIntersectSubset(
|
|
LPD3DXBASEMESH pMesh,
|
|
DWORD AttribId,
|
|
CONST D3DXVECTOR3 *pRayPos,
|
|
CONST D3DXVECTOR3 *pRayDir,
|
|
BOOL *pHit, /* True if any faces were intersected */
|
|
DWORD *pFaceIndex, /* index of closest face intersected */
|
|
FLOAT *pU, /* Barycentric Hit Coordinates */
|
|
FLOAT *pV, /* Barycentric Hit Coordinates */
|
|
FLOAT *pDist, /* Ray-Intersection Parameter Distance */
|
|
LPD3DXBUFFER *ppAllHits, /* Array of D3DXINTERSECTINFOs for all hits (not just closest) */
|
|
DWORD *pCountOfHits); /* Number of entries in AllHits array */
|
|
|
|
HRESULT WINAPI D3DXSplitMesh
|
|
(
|
|
CONST LPD3DXMESH pMeshIn,
|
|
CONST DWORD *pAdjacencyIn,
|
|
CONST DWORD MaxSize,
|
|
CONST DWORD Options,
|
|
DWORD *pMeshesOut,
|
|
LPD3DXBUFFER *ppMeshArrayOut,
|
|
LPD3DXBUFFER *ppAdjacencyArrayOut,
|
|
LPD3DXBUFFER *ppFaceRemapArrayOut,
|
|
LPD3DXBUFFER *ppVertRemapArrayOut
|
|
);
|
|
|
|
BOOL D3DXIntersectTri
|
|
(
|
|
CONST D3DXVECTOR3 *p0, /* Triangle vertex 0 position */
|
|
CONST D3DXVECTOR3 *p1, /* Triangle vertex 1 position */
|
|
CONST D3DXVECTOR3 *p2, /* Triangle vertex 2 position */
|
|
CONST D3DXVECTOR3 *pRayPos, /* Ray origin */
|
|
CONST D3DXVECTOR3 *pRayDir, /* Ray direction */
|
|
FLOAT *pU, /* Barycentric Hit Coordinates */
|
|
FLOAT *pV, /* Barycentric Hit Coordinates */
|
|
FLOAT *pDist); /* Ray-Intersection Parameter Distance */
|
|
|
|
BOOL WINAPI
|
|
D3DXSphereBoundProbe(
|
|
CONST D3DXVECTOR3 *pCenter,
|
|
FLOAT Radius,
|
|
CONST D3DXVECTOR3 *pRayPosition,
|
|
CONST D3DXVECTOR3 *pRayDirection);
|
|
|
|
BOOL WINAPI
|
|
D3DXBoxBoundProbe(
|
|
CONST D3DXVECTOR3 *pMin,
|
|
CONST D3DXVECTOR3 *pMax,
|
|
CONST D3DXVECTOR3 *pRayPosition,
|
|
CONST D3DXVECTOR3 *pRayDirection);
|
|
|
|
enum _D3DXERR {
|
|
D3DXERR_CANNOTMODIFYINDEXBUFFER = MAKE_DDHRESULT(2900),
|
|
D3DXERR_INVALIDMESH = MAKE_DDHRESULT(2901),
|
|
D3DXERR_CANNOTATTRSORT = MAKE_DDHRESULT(2902),
|
|
D3DXERR_SKINNINGNOTSUPPORTED = MAKE_DDHRESULT(2903),
|
|
D3DXERR_TOOMANYINFLUENCES = MAKE_DDHRESULT(2904),
|
|
D3DXERR_INVALIDDATA = MAKE_DDHRESULT(2905),
|
|
D3DXERR_LOADEDMESHASNODATA = MAKE_DDHRESULT(2906),
|
|
};
|
|
|
|
#define D3DX_COMP_TANGENT_NONE 0xFFFFFFFF
|
|
|
|
HRESULT WINAPI D3DXComputeTangent(LPD3DXMESH InMesh,
|
|
DWORD TexStage,
|
|
LPD3DXMESH OutMesh,
|
|
DWORD TexStageUVec,
|
|
DWORD TexStageVVec,
|
|
DWORD Wrap,
|
|
DWORD *Adjacency);
|
|
|
|
HRESULT WINAPI
|
|
D3DXConvertMeshSubsetToSingleStrip
|
|
(
|
|
LPD3DXBASEMESH MeshIn,
|
|
DWORD AttribId,
|
|
DWORD IBOptions,
|
|
LPDIRECT3DINDEXBUFFER8 *ppIndexBuffer,
|
|
DWORD *pNumIndices
|
|
);
|
|
|
|
HRESULT WINAPI
|
|
D3DXConvertMeshSubsetToStrips
|
|
(
|
|
LPD3DXBASEMESH MeshIn,
|
|
DWORD AttribId,
|
|
DWORD IBOptions,
|
|
LPDIRECT3DINDEXBUFFER8 *ppIndexBuffer,
|
|
DWORD *pNumIndices,
|
|
LPD3DXBUFFER *ppStripLengths,
|
|
DWORD *pNumStrips
|
|
);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif /* __cplusplus */
|
|
|
|
#endif /* __D3DX8MESH_H__ */
|