|
|
|
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