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