ID3DXPMesh Interface

 

 

' ****************************************************************************************
' ID3DXPMesh interface
' $IID_ID3DXPMesh = $IID_ID3DXPMesh = GUID$("{8875769A-D579-4088-AAEB-534D1AD84E96}")
' ****************************************************************************************

' ****************************************************************************************
' Applications use the methods of the ID3DXPMesh interface to manipulate progressive mesh
' objects. A progressive mesh enables progressive refinement of the mesh object.
' Remarks
'    To obtain the ID3DXPMesh interface, call the D3DXGeneratePMesh function. Or, create a
'    progressive mesh with D3DXCreatePMeshFromStream.
'    This interface inherits additional functionality from the ID3DXBaseMesh interface.
'    The LPD3DXPMESH type is defined as a pointer to the ID3DXPMesh interface, as shown below.
' Interface Information
'    Stock Implementation   d3d9.dll
'    Custom Implementation  No
'    Inherits from  ID3DXBaseMesh
'    Header     d3dx9mesh.h
'    Import library     d3dx9.lib
'    Minimum operating systems  Windows 98
' ****************************************************************************************
'DECLARE_INTERFACE_(ID3DXPMesh, ID3DXBaseMesh)
'{
'    // IUnknown
'  0.  STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
'  1.  STDMETHOD_(ULONG, AddRef)(THIS) PURE;
'  2.  STDMETHOD_(ULONG, Release)(THIS) PURE;

'    // ID3DXBaseMesh
'  3.  STDMETHOD(DrawSubset)(THIS_ DWORD AttribId) PURE;
'  4.  STDMETHOD_(DWORD, GetNumFaces)(THIS) PURE;
'  5.  STDMETHOD_(DWORD, GetNumVertices)(THIS) PURE;
'  6.  STDMETHOD_(DWORD, GetFVF)(THIS) PURE;
'  7.  STDMETHOD(GetDeclaration)(THIS_ D3DVERTEXELEMENT9 Declaration[MAX_FVF_DECL_SIZE]) PURE;
'  8.  STDMETHOD_(DWORD, GetNumBytesPerVertex)(THIS) PURE;
'  9.  STDMETHOD_(DWORD, GetOptions)(THIS) PURE;
' 10.  STDMETHOD(GetDevice)(THIS_ LPDIRECT3DDEVICE9* ppDevice) PURE;
' 11.  STDMETHOD(CloneMeshFVF)(THIS_ DWORD Options,
'                DWORD FVF, LPDIRECT3DDEVICE9 pD3DDevice, LPD3DXMESH* ppCloneMesh) PURE;
' 12.  STDMETHOD(CloneMesh)(THIS_ DWORD Options,
'                CONST D3DVERTEXELEMENT9 *pDeclaration, LPDIRECT3DDEVICE9 pD3DDevice, LPD3DXMESH* ppCloneMesh) PURE;
' 13.  STDMETHOD(GetVertexBuffer)(THIS_ LPDIRECT3DVERTEXBUFFER9* ppVB) PURE;
' 14.  STDMETHOD(GetIndexBuffer)(THIS_ LPDIRECT3DINDEXBUFFER9* ppIB) PURE;
' 15.  STDMETHOD(LockVertexBuffer)(THIS_ DWORD Flags, LPVOID *ppData) PURE;
' 16.  STDMETHOD(UnlockVertexBuffer)(THIS) PURE;
' 17.  STDMETHOD(LockIndexBuffer)(THIS_ DWORD Flags, LPVOID *ppData) PURE;
' 18.  STDMETHOD(UnlockIndexBuffer)(THIS) PURE;
' 19.  STDMETHOD(GetAttributeTable)(
'                THIS_ D3DXATTRIBUTERANGE *pAttribTable, DWORD* pAttribTableSize) PURE;

' 20.  STDMETHOD(ConvertPointRepsToAdjacency)(THIS_ CONST DWORD* pPRep, DWORD* pAdjacency) PURE;
' 21.  STDMETHOD(ConvertAdjacencyToPointReps)(THIS_ CONST DWORD* pAdjacency, DWORD* pPRep) PURE;
' 22.  STDMETHOD(GenerateAdjacency)(THIS_ FLOAT Epsilon, DWORD* pAdjacency) PURE;

' 23.  STDMETHOD(UpdateSemantics)(THIS_ D3DVERTEXELEMENT9 Declaration[MAX_FVF_DECL_SIZE]) PURE;

'    // ID3DXPMesh
' 24.  STDMETHOD(ClonePMeshFVF)(THIS_ DWORD Options,
'                DWORD FVF, LPDIRECT3DDEVICE9 pD3DDevice, LPD3DXPMESH* ppCloneMesh) PURE;
' 25.  STDMETHOD(ClonePMesh)(THIS_ DWORD Options,
'                CONST D3DVERTEXELEMENT9 *pDeclaration, LPDIRECT3DDEVICE9 pD3DDevice, LPD3DXPMESH* ppCloneMesh) PURE;
' 26.  STDMETHOD(SetNumFaces)(THIS_ DWORD Faces) PURE;
' 27.  STDMETHOD(SetNumVertices)(THIS_ DWORD Vertices) PURE;
' 28.  STDMETHOD_(DWORD, GetMaxFaces)(THIS) PURE;
' 29.  STDMETHOD_(DWORD, GetMinFaces)(THIS) PURE;
' 30.  STDMETHOD_(DWORD, GetMaxVertices)(THIS) PURE;
' 31.  STDMETHOD_(DWORD, GetMinVertices)(THIS) PURE;
' 32.  STDMETHOD(Save)(THIS_ IStream *pStream, CONST D3DXMATERIAL* pMaterials, CONST D3DXEFFECTINSTANCE* pEffectInstances, DWORD NumMaterials) PURE;

' 33.  STDMETHOD(Optimize)(THIS_ DWORD Flags, DWORD* pAdjacencyOut,
'                     DWORD* pFaceRemap, LPD3DXBUFFER *ppVertexRemap,
'                     LPD3DXMESH* ppOptMesh) PURE;

' 34.  STDMETHOD(OptimizeBaseLOD)(THIS_ DWORD Flags, DWORD* pFaceRemap) PURE;
' 35.  STDMETHOD(TrimByFaces)(THIS_ DWORD NewFacesMin, DWORD NewFacesMax, DWORD *rgiFaceRemap, DWORD *rgiVertRemap) PURE;
' 36.  STDMETHOD(TrimByVertices)(THIS_ DWORD NewVerticesMin, DWORD NewVerticesMax, DWORD *rgiFaceRemap, DWORD *rgiVertRemap) PURE;

' 37.  STDMETHOD(GetAdjacency)(THIS_ DWORD* pAdjacency) PURE;

'    //  Used to generate the immediate "ancestor" for each vertex when it is removed by a vsplit.  Allows generation of geomorphs
'    //     Vertex buffer must be equal to or greater than the maximum number of vertices in the pmesh
' 38.  STDMETHOD(GenerateVertexHistory)(THIS_ DWORD* pVertexHistory) PURE;
'};
' ****************************************************************************************

' ****************************************************************************************
' ClonePMeshFVF method
' Clones a progressive mesh using a flexible vertex format (FVF) code.
' HRESULT ClonePMeshFVF(
'   DWORD Options,
'   DWORD FVF,
'   LPDIRECT3DDEVICE9 pD3DDevice,
'   LPD3DXPMESH * ppCloneMesh
' );
' ****************************************************************************************
FUNCTION ID3DXPMesh_ClonePMeshFVF ALIAS "ID3DXPMesh_ClonePMeshFVF" ( _
    BYVAL pthis AS DWORD PTR, BYVAL Options AS DWORD, BYVAL FVF AS DWORD, _
    BYVAL pD3DDevice AS DWORD, BYREF ppCloneMesh AS DWORD) EXPORT AS LONG

    LOCAL HRESULT AS LONG
    IF pthis = %NULL THEN FUNCTION = %E_POINTER : EXIT FUNCTION
    CALL DWORD @@pthis[24] USING ID3DXPMesh_ClonePMeshFVF(pthis, Options, FVF, pD3DDevice, ppCloneMesh) TO HRESULT
    FUNCTION = HRESULT

END FUNCTION
' ****************************************************************************************

' ****************************************************************************************
' ClonePMesh method
' Clones a progressive mesh using a declarator.
' HRESULT ClonePMesh(
'   DWORD Options,
'   CONST D3DVERTEXELEMENT9 * pDeclaration,
'   LPDIRECT3DDEVICE9 pD3DDevice,
'   LpD3DDeviceXPMESH * ppCloneMesh
' );
' ****************************************************************************************
FUNCTION ID3DXPMesh_ClonePMesh ALIAS "ID3DXPMesh_ClonePMesh" ( _
    BYVAL pthis AS DWORD PTR, BYVAL Options AS DWORD, BYVAL pDeclaration AS DWORD, _
    BYVAL pD3DDevice AS DWORD, BYREF ppCloneMesh AS DWORD) EXPORT AS LONG

    LOCAL HRESULT AS LONG
    IF pthis = %NULL THEN FUNCTION = %E_POINTER : EXIT FUNCTION
    CALL DWORD @@pthis[25] USING ID3DXPMesh_ClonePMesh(pthis, Options, pDeclaration, pD3DDevice, ppCloneMesh) TO HRESULT
    FUNCTION = HRESULT

END FUNCTION
' ****************************************************************************************

' ****************************************************************************************
' SetNumFaces method
' Sets the current level of detail to as close to the specified number of faces as possible.
' HRESULT SetNumFaces(
'   DWORD Faces
' );
' ****************************************************************************************
FUNCTION ID3DXPMesh_SetNumFaces ALIAS "ID3DXPMesh_SetNumFaces" ( _
    BYVAL pthis AS DWORD PTR, BYVAL Faces AS DWORD) EXPORT AS LONG

    LOCAL HRESULT AS LONG
    IF pthis = %NULL THEN FUNCTION = %E_POINTER : EXIT FUNCTION
    CALL DWORD @@pthis[26] USING ID3DXPMesh_SetNumFaces(pthis, Faces) TO HRESULT
    FUNCTION = HRESULT

END FUNCTION
' ****************************************************************************************

' ****************************************************************************************
' SetNumVertices method
' Sets the current level of detail to as close to the specified number of vertices as possible.
' HRESULT SetNumVertices(
'   DWORD Vertices
' );
' ****************************************************************************************
FUNCTION ID3DXPMesh_SetNumVertices ALIAS "ID3DXPMesh_SetNumVertices" ( _
    BYVAL pthis AS DWORD PTR, BYVAL Vertices AS DWORD) EXPORT AS LONG

    LOCAL HRESULT AS LONG
    IF pthis = %NULL THEN FUNCTION = %E_POINTER : EXIT FUNCTION
    CALL DWORD @@pthis[27] USING ID3DXPMesh_SetNumVertices(pthis, Vertices) TO HRESULT
    FUNCTION = HRESULT

END FUNCTION
' ****************************************************************************************

' ****************************************************************************************
' GetMaxFaces method
' Retrieves the maximum number of faces that the progressive mesh supports.
' DWORD GetMaxFaces();
' ****************************************************************************************
FUNCTION ID3DXPMesh_GetMaxFaces ALIAS "ID3DXPMesh_GetMaxFaces" (BYVAL pthis AS DWORD PTR) EXPORT AS DWORD

    LOCAL DWRESULT AS DWORD
    IF pthis = %NULL THEN EXIT FUNCTION
    CALL DWORD @@pthis[28] USING ID3DXPMesh_GetMaxFaces(pthis) TO DWRESULT
    FUNCTION = DWRESULT

END FUNCTION
' ****************************************************************************************

' ****************************************************************************************
' GetMinFaces method
' Retrieves the minimum number of faces that the progressive mesh supports.
' DWORD GetMinFaces();
' ****************************************************************************************
FUNCTION ID3DXPMesh_GetMinFaces ALIAS "ID3DXPMesh_GetMinFaces" (BYVAL pthis AS DWORD PTR) EXPORT AS DWORD

    LOCAL DWRESULT AS DWORD
    IF pthis = %NULL THEN EXIT FUNCTION
    CALL DWORD @@pthis[29] USING ID3DXPMesh_GetMinFaces(pthis) TO DWRESULT
    FUNCTION = DWRESULT

END FUNCTION
' ****************************************************************************************

' ****************************************************************************************
' GetMaxVertices method
' Retrieves the maximum number of vertices that the progressive mesh supports.
' DWORD GetMaxVertices();
' ****************************************************************************************
FUNCTION ID3DXPMesh_GetMaxVertices ALIAS "ID3DXPMesh_GetMaxVertices" (BYVAL pthis AS DWORD PTR) EXPORT AS DWORD

    LOCAL DWRESULT AS DWORD
    IF pthis = %NULL THEN EXIT FUNCTION
    CALL DWORD @@pthis[30] USING ID3DXPMesh_GetMaxVertices(pthis) TO DWRESULT
    FUNCTION = DWRESULT

END FUNCTION
' ****************************************************************************************

' ****************************************************************************************
' GetMinVertices method
' Retrieves the minimum number of vertices that the progressive mesh supports.
' DWORD GetMinVertices();
' ****************************************************************************************
FUNCTION ID3DXPMesh_GetMinVertices ALIAS "ID3DXPMesh_GetMinVertices" (BYVAL pthis AS DWORD PTR) EXPORT AS DWORD

    LOCAL DWRESULT AS DWORD
    IF pthis = %NULL THEN EXIT FUNCTION
    CALL DWORD @@pthis[31] USING ID3DXPMesh_GetMinVertices(pthis) TO DWRESULT
    FUNCTION = DWRESULT

END FUNCTION
' ****************************************************************************************

' ****************************************************************************************
' Save method
' Saves the progressive mesh to the specified stream object.
' HRESULT Save(
'   IStream * pStream,
'   CONST D3DXMATERIAL * pMaterials,
'   CONST D3DXEFFECTINSTANCE* pEffectInstances,
'   DWORD NumMaterials
' );
' ****************************************************************************************
FUNCTION ID3DXPMesh_Save ALIAS "ID3DXPMesh_Save" ( _
    BYVAL pthis AS DWORD PTR, BYVAL pStream AS DWORD, BYVAL pMaterials AS DWORD, _
    BYVAL pEffectInstances AS DWORD, BYVAL NumMaterials AS DWORD) EXPORT AS LONG

    LOCAL HRESULT AS LONG
    IF pthis = %NULL THEN FUNCTION = %E_POINTER : EXIT FUNCTION
    CALL DWORD @@pthis[32] USING ID3DXPMesh_Save(pthis, pStream, pMaterials, pEffectInstances, NumMaterials) TO HRESULT
    FUNCTION = HRESULT

END FUNCTION
' ****************************************************************************************

' ****************************************************************************************
' Optimize method
' Generates an output mesh with reordered faces and vertices to optimize performance.
' HRESULT Optimize(
'   DWORD Flags,
'   DWORD * pAdjacencyOut,
'   DWORD * pFaceRemap,
'   LPD3DXBUFFER * ppVertexRemap,
'   LPD3DXMESH * ppOptMesh
' );
' ****************************************************************************************
FUNCTION ID3DXPMesh_Optimize ALIAS "ID3DXPMesh_Optimize" ( _
    BYVAL pthis AS DWORD PTR, BYVAL Flags AS DWORD, BYREF pAdjacencyOut AS DWORD, _
    BYREF pFaceRemap AS DWORD, BYREF ppVertexRemap AS DWORD, BYREF ppOptMesh AS DWORD) EXPORT AS LONG

    LOCAL HRESULT AS LONG
    IF pthis = %NULL THEN FUNCTION = %E_POINTER : EXIT FUNCTION
    CALL DWORD @@pthis[33] USING ID3DXPMesh_Optimize(pthis, Flags, pAdjacencyOut, pFaceRemap, ppVertexRemap, ppOptmesh) TO HRESULT
    FUNCTION = HRESULT

END FUNCTION
' ****************************************************************************************

' ****************************************************************************************
' OptimizeBaseLOD method
' Optimizes the base level of detail (LOD) part of an ID3DXPMesh object.
' HRESULT OptimizeBaseLOD(
'   DWORD Flags,
'   DWORD * pFaceRemap
' );
' ****************************************************************************************
FUNCTION ID3DXPMesh_OptimizeBaseLOD ALIAS "ID3DXPMesh_OptimizeBaseLOD" ( _
    BYVAL pthis AS DWORD PTR, BYVAL Flags AS DWORD, BYVAL pFaceRemap AS DWORD) EXPORT AS LONG

    LOCAL HRESULT AS LONG
    IF pthis = %NULL THEN FUNCTION = %E_POINTER : EXIT FUNCTION
    CALL DWORD @@pthis[34] USING ID3DXPMesh_OptimizeBaseLOD(pthis, Flags, pFaceRemap) TO HRESULT
    FUNCTION = HRESULT

END FUNCTION
' ****************************************************************************************

' ****************************************************************************************
' TrimByFaces method
' Modifies the minimum and maximum level of detail (LOD) of an ID3DXPMesh object.
' HRESULT TrimByFaces(
'   DWORD NewFacesMin,
'   DWORD NewFacesMax,
'   DWORD * rgiFaceRemap,
'   DWORD * rgiVertRemap
' );
' ****************************************************************************************
FUNCTION ID3DXPMesh_TrimByFaces ALIAS "ID3DXPMesh_TrimByFaces" ( _
    BYVAL pthis AS DWORD PTR, BYVAL NewFacesMin AS DWORD, BYVAL NewFacesMax AS DWORD, _
    BYREF rgiFaceRemap AS DWORD, BYREF rgiVertRemap AS DWORD) EXPORT AS LONG

    LOCAL HRESULT AS LONG
    IF pthis = %NULL THEN FUNCTION = %E_POINTER : EXIT FUNCTION
    CALL DWORD @@pthis[35] USING ID3DXPMesh_TrimByFaces(pthis, NewFacesMin, NewFacesMax, rgiFaceRemap, rgiVertRemap) TO HRESULT
    FUNCTION = HRESULT

END FUNCTION
' ****************************************************************************************

' ****************************************************************************************
' TrimByVertices method
' Modifies the minimum and maximum level of detail (LOD) of an ID3DXPMesh object.
' HRESULT TrimByVertices(
'   DWORD NewVerticesMin,
'   DWORD NewVerticessMax,
'   DWORD * rgiFaceRemap,
'   DWORD * rgiVertRemap
' );
' ****************************************************************************************
FUNCTION ID3DXPMesh_TrimByVertices ALIAS "ID3DXPMesh_TrimByVertices" ( _
    BYVAL pthis AS DWORD PTR, BYVAL NewVerticesMin AS DWORD, BYVAL NewVerticesMax AS DWORD, _
    BYREF rgiFaceRemap AS DWORD, BYREF rgiVertRemap AS DWORD) EXPORT AS LONG

    LOCAL HRESULT AS LONG
    IF pthis = %NULL THEN FUNCTION = %E_POINTER : EXIT FUNCTION
    CALL DWORD @@pthis[36] USING ID3DXPMesh_TrimByVertices(pthis, NewVerticesMin, NewVerticesMax, rgiFaceRemap, rgiVertRemap) TO HRESULT
    FUNCTION = HRESULT

END FUNCTION
' ****************************************************************************************

' ****************************************************************************************
' GetAdjacency method
' Returns the face adjacency array of the mesh.
' HRESULT GetAdjacency(
'   DWORD * pAdjacency
' );
' ****************************************************************************************
FUNCTION ID3DXPMesh_GetAdjacency ALIAS "ID3DXPMesh_GetAdjacency" (BYVAL pthis AS DWORD PTR) EXPORT AS DWORD

    LOCAL DWRESULT AS DWORD
    IF pthis = %NULL THEN FUNCTION = %E_POINTER : EXIT FUNCTION
    CALL DWORD @@pthis[37] USING ID3DXPMesh_GetAdjacency(pthis) TO DWRESULT
    FUNCTION = DWRESULT

END FUNCTION
' ****************************************************************************************

' ****************************************************************************************
' GenerateVertexHistory method
' Generates an immediate ancestor for each vertex when it is removed by a vertex split.
' Allows generation of a geomorph.
' HRESULT GenerateVertexHistory(
'   DWORD * pVertexHistory
' );
' ****************************************************************************************
FUNCTION ID3DXPMesh_GenerateVertexHistory ALIAS "ID3DXPMesh_GenerateVertexHistory" ( _
    BYVAL pthis AS DWORD PTR, BYVAL pVertexHistory AS DWORD) EXPORT AS LONG

    LOCAL HRESULT AS LONG
    IF pthis = %NULL THEN FUNCTION = %E_POINTER : EXIT FUNCTION
    CALL DWORD @@pthis[38] USING ID3DXPMesh_GenerateVertexHistory(pthis, pVertexHistory) TO HRESULT
    FUNCTION = HRESULT

END FUNCTION
' ****************************************************************************************
 

 

Page last updated on Tuesday, 14 March 2006 23:10:20 +0100