|
|
|
ID3DXFragmenterLinker Interface |
|
' ****************************************************************************************
' ID3DXFragmentLinker interface
' $IID_ID3DXFragmentLinker = GUID$("{1A2C0CC2-E5B6-4ebc-9E8D-390E057811B6}")
' ****************************************************************************************
' ****************************************************************************************
' The ID3DXFragmentLinker interface is used to link shader fragments at runtime.
' Remarks
' The LPD3DXFRAGMENTLINKER type is defined as a pointer to the ID3DXFragmentLinker interface.
'Interface Information
' Stock Implementation d3d9.dll
' Custom Implementation No
' Inherits from IUnknown
' Header d3dx9shader.h
' Import library d3dx9.lib
' Minimum operating systems Windows 98
' ****************************************************************************************
' ****************************************************************************************
'DECLARE_INTERFACE_(ID3DXFragmentLinker, IUnknown)
'{
' // IUnknown
' 0. STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
' 1. STDMETHOD_(ULONG, AddRef)(THIS) PURE;
' 2. STDMETHOD_(ULONG, Release)(THIS) PURE;
' // ID3DXFragmentLinker
' // fragment access and information retrieval functions
' 3. STDMETHOD(GetDevice)(THIS_ LPDIRECT3DDEVICE9* ppDevice) PURE;
' 4. STDMETHOD_(UINT, GetNumberOfFragments)(THIS) PURE;
' 5. STDMETHOD_(D3DXHANDLE, GetFragmentHandleByIndex)(THIS_ UINT Index) PURE;
' 6. STDMETHOD_(D3DXHANDLE, GetFragmentHandleByName)(THIS_ LPCSTR Name) PURE;
' 7. STDMETHOD(GetFragmentDesc)(THIS_ D3DXHANDLE Name, LPD3DXFRAGMENT_DESC FragDesc) PURE;
' // add the fragments in the buffer to the linker
' 8. STDMETHOD(AddFragments)(THIS_ CONST DWORD *Fragments) PURE;
' // Create a buffer containing the fragments. Suitable for saving to disk
' 9. STDMETHOD(GetAllFragments)(THIS_ LPD3DXBUFFER *ppBuffer) PURE;
' 10. STDMETHOD(GetFragment)(THIS_ D3DXHANDLE Name, LPD3DXBUFFER *ppBuffer) PURE;
' 11. STDMETHOD(LinkShader)(THIS_ LPCSTR pProfile, DWORD Flags, CONST D3DXHANDLE *rgFragmentHandles, UINT cFragments, LPD3DXBUFFER *ppBuffer, LPD3DXBUFFER *ppErrorMsgs) PURE;
' 12. STDMETHOD(LinkVertexShader)(THIS_ LPCSTR pProfile, DWORD Flags, CONST D3DXHANDLE *rgFragmentHandles, UINT cFragments, LPDIRECT3DVERTEXSHADER9 *pVShader, LPD3DXBUFFER *ppErrorMsgs) PURE;
' 13. STDMETHOD(LinkPixelShader)(THIS_ LPCSTR pProfile, DWORD Flags, CONST D3DXHANDLE *rgFragmentHandles, UINT cFragments, LPDIRECT3DPIXELSHADER9 *pPShader, LPD3DXBUFFER *ppErrorMsgs) PURE;
' 14. STDMETHOD(ClearCache)(THIS) PURE;
'};
' ****************************************************************************************
' ****************************************************************************************
' GetDevice method
' Get the device.
' HRESULT GetDevice(
' LPDIRECT3DDEVICE9* ppDevice
' );
' ****************************************************************************************
FUNCTION ID3DXFragmentLinker_GetDevice ALIAS "ID3DXFragmentLinker_GetDevice" ( _
BYVAL pthis AS DWORD PTR, BYREF ppDevice AS DWORD) EXPORT AS LONG
LOCAL HRESULT AS LONG
IF pthis = %NULL THEN FUNCTION = %E_POINTER : EXIT FUNCTION
CALL DWORD @@pthis[3] USING ID3DXFragmentLinker_GetDevice(pthis, ppDevice) TO HRESULT
FUNCTION = HRESULT
END FUNCTION
' ****************************************************************************************
' ****************************************************************************************
' GetNumberOfFragments method
' Get the number of fragments in the linker.
' UINT GetNumberOfFragments();
' ****************************************************************************************
FUNCTION ID3DXFragmentLinker_GetNumberOfFragments ALIAS "ID3DXFragmentLinker_GetNumberOfFragments" (BYVAL pthis AS DWORD PTR) EXPORT AS DWORD
LOCAL DWRESULT AS DWORD
IF pthis = %NULL THEN EXIT FUNCTION
CALL DWORD @@pthis[4] USING ID3DXFragmentLinker_GetNumberOfFragments(pthis) TO DWRESULT
FUNCTION = DWRESULT
END FUNCTION
' ****************************************************************************************
' ****************************************************************************************
' GetFragmentHandleByIndex method
' Get a fragment handle by index.
' D3DXHANDLE GetFragmentHandleByIndex(
' UINT Index
' );
' ****************************************************************************************
FUNCTION ID3DXFragmentLinker_GetFragmentHandleByIndex ALIAS "ID3DXFragmentLinker_GetFragmentHandleByIndex" (BYVAL pthis AS DWORD PTR) EXPORT AS DWORD
LOCAL DWRESULT AS DWORD
IF pthis = %NULL THEN EXIT FUNCTION
CALL DWORD @@pthis[5] USING ID3DXFragmentLinker_GetFragmentHandleByIndex(pthis) TO DWRESULT
FUNCTION = DWRESULT
END FUNCTION
' ****************************************************************************************
' ****************************************************************************************
' GetFragmentHandleByName method
' Get a fragment handle by name.
' D3DXHANDLE GetFragmentHandleByName(
' LPCSTR Name
' );
' ****************************************************************************************
FUNCTION ID3DXFragmentLinker_GetFragmentHandleByName ALIAS "ID3DXFragmentLinker_GetFragmentHandleByName" ( _
BYVAL pthis AS DWORD PTR, BYREF pName AS ASCIIZ) EXPORT AS DWORD
LOCAL DWRESULT AS DWORD
IF pthis = %NULL THEN EXIT FUNCTION
CALL DWORD @@pthis[6] USING ID3DXFragmentLinker_GetFragmentHandleByName(pthis, pName) TO DWRESULT
FUNCTION = DWRESULT
END FUNCTION
' ****************************************************************************************
' ****************************************************************************************
' GetFragmentDesc method
' Get the D3DXFRAGMENT_DESC structure which describes the named fragment.
' HRESULT GetFragmentDesc(
' D3DXHANDLE Name,
' LPD3DXFRAGMENT_DESC FragDesc
' );
' ****************************************************************************************
FUNCTION ID3DXFragmentLinker_GetFragmentDesc ALIAS "ID3DXFragmentLinker_GetFragmentDesc" ( _
BYVAL pthis AS DWORD PTR, BYREF FragDesc AS D3DXFRAGMENT_DESC) EXPORT AS LONG
LOCAL HRESULT AS LONG
IF pthis = %NULL THEN FUNCTION = %E_POINTER : EXIT FUNCTION
CALL DWORD @@pthis[7] USING ID3DXFragmentLinker_GetFragmentDesc(pthis, FragDesc) TO HRESULT
FUNCTION = HRESULT
END FUNCTION
' ****************************************************************************************
' ****************************************************************************************
' AddFragments method
' Add the fragments from a buffer to the fragment linker.
' HRESULT AddFragments(
' CONST DWORD* pFragments
' );
' ****************************************************************************************
FUNCTION ID3DXFragmentLinker_AddFragments ALIAS "ID3DXFragmentLinker_AddFragments" ( _
BYVAL pthis AS DWORD PTR, BYVAL pFragments AS DWORD) EXPORT AS LONG
LOCAL HRESULT AS DWORD
IF pthis = %NULL THEN FUNCTION = %E_POINTER : EXIT FUNCTION
CALL DWORD @@pthis[8] USING ID3DXFragmentLinker_AddFragments(pthis, pFragments) TO HRESULT
FUNCTION = HRESULT
END FUNCTION
' ****************************************************************************************
' ****************************************************************************************
' GetAllFragments method
' Allocates a buffer and copies the fragment data into it.
' HRESULT GetAllFragments(
' LPD3DXBUFFER* ppBuffer
' );
' ****************************************************************************************
FUNCTION ID3DXFragmentLinker_GetAllFragments ALIAS "ID3DXFragmentLinker_GetAllFragments" ( _
BYVAL pthis AS DWORD PTR, BYVAL ppBuffer AS DWORD) EXPORT AS LONG
LOCAL HRESULT AS DWORD
IF pthis = %NULL THEN FUNCTION = %E_POINTER : EXIT FUNCTION
CALL DWORD @@pthis[9] USING ID3DXFragmentLinker_GetAllFragments(pthis, ppBuffer) TO HRESULT
FUNCTION = HRESULT
END FUNCTION
' ****************************************************************************************
' ****************************************************************************************
' GetFragment method
' Create a buffer containing a linker fragment. This can be used for saving the fragment
' to disk.
' HRESULT GetFragment(
' D3DXHANDLE Name,
' LPD3DXBUFFER* ppBuffer
' );
' ****************************************************************************************
FUNCTION ID3DXFragmentLinker_GetFragment ALIAS "ID3DXFragmentLinker_GetFragment" ( _
BYVAL pthis AS DWORD PTR, BYREF ppBuffer AS DWORD) EXPORT AS LONG
LOCAL HRESULT AS DWORD
IF pthis = %NULL THEN FUNCTION = %E_POINTER : EXIT FUNCTION
CALL DWORD @@pthis[10] USING ID3DXFragmentLinker_GetFragment(pthis, ppBuffer) TO HRESULT
FUNCTION = HRESULT
END FUNCTION
' ****************************************************************************************
' ****************************************************************************************
' LinkShader method
' Link a compiled shader at run time. This is a very lightweight operation.
' HRESULT LinkShader(
' LPCSTR pProfile,
' DWORD Flags,
' CONST D3DXHANDLE * rgFragmentHandles,
' UINT cFragments,
' LPD3DXBUFFER* ppBuffer,
' LPD3DXBUFFER * ppErrorMsgs
' );
' ****************************************************************************************
FUNCTION ID3DXFragmentLinker_LinkShader ALIAS "ID3DXFragmentLinker_LinkShader" ( _
BYVAL pthis AS DWORD PTR, BYREF pProfile AS ASCIIZ, BYVAL Flags AS DWORD, _
BYVAL rgFragmentHandles AS DWORD, BYVAL cFragments AS DWORD, _
BYREF ppBuffer AS DWORD, BYREF ppErrorMsgs AS DWORD) EXPORT AS LONG
LOCAL HRESULT AS DWORD
IF pthis = %NULL THEN FUNCTION = %E_POINTER : EXIT FUNCTION
CALL DWORD @@pthis[11] USING ID3DXFragmentLinker_LinkShader(pthis, pProfile, Flags, rgFragmentHandles, cFragments, ppBuffer, ppErrorMsgs) TO HRESULT
FUNCTION = HRESULT
END FUNCTION
' ****************************************************************************************
' ****************************************************************************************
' LinkVertexShader method
' Link a compiled vertex shader at run time. This is a very lightweight operation.
' HRESULT LinkVertexShader(
' LPCSTR pProfile,
' DWORD Flags,
' CONST D3DXHANDLE * rgFragmentHandles,
' UINT cFragments,
' LPDIRECT3DVERTEXSHADER9* pVShader,
' LPD3DXBUFFER * ppErrorMsgs
' );
' ****************************************************************************************
FUNCTION ID3DXFragmentLinker_LinkVertexShader ALIAS "ID3DXFragmentLinker_LinkVertexShader" ( _
BYVAL pthis AS DWORD PTR, BYREF pProfile AS ASCIIZ, BYVAL Flags AS DWORD, _
BYVAL rgFragmentHandles AS DWORD, BYVAL cFragments AS DWORD, _
BYREF pVShader AS DWORD, BYREF ppErrorMsgs AS DWORD) EXPORT AS LONG
LOCAL HRESULT AS DWORD
IF pthis = %NULL THEN FUNCTION = %E_POINTER : EXIT FUNCTION
CALL DWORD @@pthis[12] USING ID3DXFragmentLinker_LinkVertexShader(pthis, pProfile, Flags, rgFragmentHandles, cFragments, pVShader, ppErrorMsgs) TO HRESULT
FUNCTION = HRESULT
END FUNCTION
' ****************************************************************************************
' ****************************************************************************************
' LinkPixelShader method
' Link a compiled pixel shader at run time. This is a very lightweight operation.
' HRESULT LinkPixelShader(
' LPCSTR pProfile,
' DWORD Flags,
' CONST D3DXHANDLE * rgFragmentHandles,
' UINT cFragments,
' LPDIRECT3DPIXELSHADER9 * pPShader,
' LPD3DXBUFFER * ppErrorMsgs
' );
' ****************************************************************************************
FUNCTION ID3DXFragmentLinker_LinkPixelShader ALIAS "ID3DXFragmentLinker_LinkPixelShader" ( _
BYVAL pthis AS DWORD PTR, BYREF pProfile AS ASCIIZ, BYVAL Flags AS DWORD, _
BYVAL rgFragmentHandles AS DWORD, BYVAL cFragments AS DWORD, _
BYREF pPShader AS DWORD, BYREF ppErrorMsgs AS DWORD) EXPORT AS LONG
LOCAL HRESULT AS DWORD
IF pthis = %NULL THEN FUNCTION = %E_POINTER : EXIT FUNCTION
CALL DWORD @@pthis[13] USING ID3DXFragmentLinker_LinkPixelShader(pthis, pProfile, Flags, rgFragmentHandles, cFragments, pPShader, ppErrorMsgs) TO HRESULT
FUNCTION = HRESULT
END FUNCTION
' ****************************************************************************************
' ****************************************************************************************
' ClearCache method
' Clear the fragment linker cache.
' HRESULT ClearCache();
' ****************************************************************************************
FUNCTION ID3DXFragmentLinker_ClearCache ALIAS "ID3DXFragmentLinker_ClearCache" (BYVAL pthis AS DWORD PTR) EXPORT AS LONG
LOCAL HRESULT AS DWORD
IF pthis = %NULL THEN FUNCTION = %E_POINTER : EXIT FUNCTION
CALL DWORD @@pthis[14] USING ID3DXFragmentLinker_ClearCache(pthis) TO HRESULT
FUNCTION = HRESULT
END FUNCTION
' ****************************************************************************************
|
Page last updated on Tuesday, 14 March 2006 23:55:00 +0100