/*
 *  d3d.h       Direct3D functions and interfaces
 *
 * =========================================================================
 *
 *                          Open Watcom Project
 *
 * Copyright (c) 2004-2026 The Open Watcom Contributors. All Rights Reserved.
 *
 *    This file is automatically generated. Do not edit directly.
 *
 * =========================================================================
 */

#ifndef _D3D_H_
#define _D3D_H_

#ifndef _ENABLE_AUTODEPEND
 #pragma read_only_file
#endif

#include <d3dtypes.h>
#include <d3dcaps.h>

#ifdef __cplusplus
extern "C" {
#endif

/* Direct3D version number */
#ifndef DIRECT3D_VERSION
    #define DIRECT3D_VERSION    0x0700
#endif

/* For Direct3D 8.0 and higher, ignore the entire contents of this file. */
#if (DIRECT3D_VERSION < 0x0800)

/* Direct3D calling convention */
#define D3DAPI  WINAPI

/* IDirect3DDevice::NextViewport() flags */
#if (DIRECT3D_VERSION >= 0x0500)
    #define D3DNEXT_NEXT    0x00000001L
    #define D3DNEXT_HEAD    0x00000002L
    #define D3DNEXT_TAIL    0x00000004L
#endif

/* IDirect3DDevice2::DrawPrimitive() flags */
#if (DIRECT3D_VERSION >= 0x0500)
    #define D3DDP_WAIT                  0x00000001L
#endif
#if (DIRECT3D_VERSION == 0x0500)
    #define D3DDP_OUTOFORDER            0x00000002L
#endif
#if (DIRECT3D_VERSION >= 0x0500)
    #define D3DDP_DONOTCLIP             0x00000004L
    #define D3DDP_DONOTUPDATEEXTENTS    0x00000008L
#endif
#if (DIRECT3D_VERSION >= 0x0600)
    #define D3DDP_DONOTLIGHT            0x00000010L
#endif

/* Direct3D error codes */
#define D3D_OK                                  DD_OK
#define D3DERR_BADMAJORVERSION                  MAKE_DDHRESULT( 700 )
#define D3DERR_BADMINORVERSION                  MAKE_DDHRESULT( 701 )
#if (DIRECT3D_VERSION >= 0x0500)
    #define D3DERR_INVALID_DEVICE               MAKE_DDHRESULT( 705 )
    #define D3DERR_INITFAILED                   MAKE_DDHRESULT( 706 )
    #define D3DERR_DEVICEAGGREGATED             MAKE_DDHRESULT( 707 )
#endif
#define D3DERR_EXECUTE_CREATE_FAILED            MAKE_DDHRESULT( 710 )
#define D3DERR_EXECUTE_DESTROY_FAILED           MAKE_DDHRESULT( 711 )
#define D3DERR_EXECUTE_LOCK_FAILED              MAKE_DDHRESULT( 712 )
#define D3DERR_EXECUTE_UNLOCK_FAILED            MAKE_DDHRESULT( 713 )
#define D3DERR_EXECUTE_LOCKED                   MAKE_DDHRESULT( 714 )
#define D3DERR_EXECUTE_NOT_LOCKED               MAKE_DDHRESULT( 715 )
#define D3DERR_EXECUTE_FAILED                   MAKE_DDHRESULT( 716 )
#define D3DERR_EXECUTE_CLIPPED_FAILED           MAKE_DDHRESULT( 717 )
#define D3DERR_TEXTURE_NO_SUPPORT               MAKE_DDHRESULT( 720 )
#define D3DERR_TEXTURE_CREATE_FAILED            MAKE_DDHRESULT( 721 )
#define D3DERR_TEXTURE_DESTROY_FAILED           MAKE_DDHRESULT( 722 )
#define D3DERR_TEXTURE_LOCK_FAILED              MAKE_DDHRESULT( 723 )
#define D3DERR_TEXTURE_UNLOCK_FAILED            MAKE_DDHRESULT( 724 )
#define D3DERR_TEXTURE_LOAD_FAILED              MAKE_DDHRESULT( 725 )
#define D3DERR_TEXTURE_SWAP_FAILED              MAKE_DDHRESULT( 726 )
#define D3DERR_TEXTURE_LOCKED                   MAKE_DDHRESULT( 727 )
#define D3DERR_TEXTURE_NOT_LOCKED               MAKE_DDHRESULT( 728 )
#define D3DERR_TEXTURE_GETSURF_FAILED           MAKE_DDHRESULT( 729 )
#define D3DERR_MATRIX_CREATE_FAILED             MAKE_DDHRESULT( 730 )
#define D3DERR_MATRIX_DESTROY_FAILED            MAKE_DDHRESULT( 731 )
#define D3DERR_MATRIX_SETDATA_FAILED            MAKE_DDHRESULT( 732 )
#define D3DERR_MATRIX_GETDATA_FAILED            MAKE_DDHRESULT( 733 )
#define D3DERR_SETVIEWPORTDATA_FAILED           MAKE_DDHRESULT( 734 )
#if (DIRECT3D_VERSION >= 0x0500)
    #define D3DERR_INVALIDCURRENTVIEWPORT       MAKE_DDHRESULT( 735 )
    #define D3DERR_INVALIDPRIMITIVETYPE         MAKE_DDHRESULT( 736 )
    #define D3DERR_INVALIDVERTEXTYPE            MAKE_DDHRESULT( 737 )
    #define D3DERR_TEXTURE_BADSIZE              MAKE_DDHRESULT( 738 )
    #define D3DERR_INVALIDRAMPTEXTURE           MAKE_DDHRESULT( 739 )
#endif
#define D3DERR_MATERIAL_CREATE_FAILED           MAKE_DDHRESULT( 740 )
#define D3DERR_MATERIAL_DESTROY_FAILED          MAKE_DDHRESULT( 741 )
#define D3DERR_MATERIAL_SETDATA_FAILED          MAKE_DDHRESULT( 742 )
#define D3DERR_MATERIAL_GETDATA_FAILED          MAKE_DDHRESULT( 743 )
#if (DIRECT3D_VERSION >= 0x0500)
    #define D3DERR_INVALIDPALETTE               MAKE_DDHRESULT( 744 )
    #define D3DERR_ZBUFF_NEEDS_SYSTEMMEMORY     MAKE_DDHRESULT( 745 )
    #define D3DERR_ZBUFF_NEEDS_VIDEOMEMORY      MAKE_DDHRESULT( 746 )
    #define D3DERR_SURFACENOTINVIDMEM           MAKE_DDHRESULT( 747 )
#endif
#define D3DERR_LIGHT_SET_FAILED                 MAKE_DDHRESULT( 750 )
#if (DIRECT3D_VERSION >= 0x0500)
    #define D3DERR_LIGHTHASVIEWPORT             MAKE_DDHRESULT( 751 )
    #define D3DERR_LIGHTNOTINTHISVIEWPORT       MAKE_DDHRESULT( 752 )
#endif
#define D3DERR_SCENE_IN_SCENE                   MAKE_DDHRESULT( 760 )
#define D3DERR_SCENE_NOT_IN_SCENE               MAKE_DDHRESULT( 761 )
#define D3DERR_SCENE_BEGIN_FAILED               MAKE_DDHRESULT( 762 )
#define D3DERR_SCENE_END_FAILED                 MAKE_DDHRESULT( 763 )
#if (DIRECT3D_VERSION >= 0x0500)
    #define D3DERR_INBEGIN                      MAKE_DDHRESULT( 770 )
    #define D3DERR_NOTINBEGIN                   MAKE_DDHRESULT( 771 )
    #define D3DERR_NOVIEWPORTS                  MAKE_DDHRESULT( 772 )
    #define D3DERR_VIEWPORTDATANOTSET           MAKE_DDHRESULT( 773 )
    #define D3DERR_VIEWPORTHASNODEVICE          MAKE_DDHRESULT( 774 )
    #define D3DERR_NOCURRENTVIEWPORT            MAKE_DDHRESULT( 775 )
#endif
#if (DIRECT3D_VERSION >= 0x0600)
    #define D3DERR_INVALIDVERTEXFORMAT          MAKE_DDHRESULT( 2048 )
    #define D3DERR_COLORKEYATTACHED             MAKE_DDHRESULT( 2050 )
    #define D3DERR_VERTEXBUFFEROPTIMIZED        MAKE_DDHRESULT( 2060 )
    #define D3DERR_VBUF_CREATE_FAILED           MAKE_DDHRESULT( 2061 )
    #define D3DERR_VERTEXBUFFERLOCKED           MAKE_DDHRESULT( 2062 )
    #define D3DERR_VERTEXBUFFERUNLOCKFAILED     MAKE_DDHRESULT( 2063 )
    #define D3DERR_ZBUFFER_NOTPRESENT           MAKE_DDHRESULT( 2070 )
    #define D3DERR_STENCILBUFFER_NOTPRESENT     MAKE_DDHRESULT( 2071 )
    #define D3DERR_WRONGTEXTUREFORMAT           MAKE_DDHRESULT( 2072 )
    #define D3DERR_UNSUPPORTEDCOLOROPERATION    MAKE_DDHRESULT( 2073 )
    #define D3DERR_UNSUPPORTEDCOLORARG          MAKE_DDHRESULT( 2074 )
    #define D3DERR_UNSUPPORTEDALPHAOPERATION    MAKE_DDHRESULT( 2075 )
    #define D3DERR_UNSUPPORTEDALPHAARG          MAKE_DDHRESULT( 2076 )
    #define D3DERR_TOOMANYOPERATIONS            MAKE_DDHRESULT( 2077 )
    #define D3DERR_CONFLICTINGTEXTUREFILTER     MAKE_DDHRESULT( 2078 )
    #define D3DERR_UNSUPPORTEDFACTORVALUE       MAKE_DDHRESULT( 2079 )
    #define D3DERR_CONFLICTINGRENDERSTATE       MAKE_DDHRESULT( 2081 )
    #define D3DERR_UNSUPPORTEDTEXTUREFILTER     MAKE_DDHRESULT( 2082 )
    #define D3DERR_TOOMANYPRIMITIVES            MAKE_DDHRESULT( 2083 )
    #define D3DERR_INVALIDMATRIX                MAKE_DDHRESULT( 2084 )
    #define D3DERR_TOOMANYVERTICES              MAKE_DDHRESULT( 2085 )
    #define D3DERR_CONFLICTINGTEXTUREPALETTE    MAKE_DDHRESULT( 2086 )
#endif
#if (DIRECT3D_VERSION >= 0x0700)
    #define D3DERR_INVALIDSTATEBLOCK            MAKE_DDHRESULT( 2100 )
    #define D3DERR_INBEGINSTATEBLOCK            MAKE_DDHRESULT( 2101 )
    #define D3DERR_NOTINBEGINSTATEBLOCK         MAKE_DDHRESULT( 2102 )
#endif

/* Direct3D interface pointers */
typedef interface IDirect3D                 *LPDIRECT3D;
typedef interface IDirect3DDevice           *LPDIRECT3DDEVICE;
typedef interface IDirect3DExecuteBuffer    *LPDIRECT3DEXECUTEBUFFER;
typedef interface IDirect3DLight            *LPDIRECT3DLIGHT;
typedef interface IDirect3DMaterial         *LPDIRECT3DMATERIAL;
typedef interface IDirect3DTexture          *LPDIRECT3DTEXTURE;
typedef interface IDirect3DViewport         *LPDIRECT3DVIEWPORT;
#if (DIRECT3D_VERSION >= 0x0500)
typedef interface IDirect3D2                *LPDIRECT3D2;
typedef interface IDirect3DDevice2          *LPDIRECT3DDEVICE2;
typedef interface IDirect3DMaterial2        *LPDIRECT3DMATERIAL2;
typedef interface IDirect3DTexture2         *LPDIRECT3DTEXTURE2;
typedef interface IDirect3DViewport2        *LPDIRECT3DVIEWPORT2;
#endif
#if (DIRECT3D_VERSION >= 0x0600)
typedef interface IDirect3D3                *LPDIRECT3D3;
typedef interface IDirect3DDevice3          *LPDIRECT3DDEVICE3;
typedef interface IDirect3DMaterial3        *LPDIRECT3DMATERIAL3;
typedef interface IDirect3DViewport3        *LPDIRECT3DVIEWPORT3;
typedef interface IDirect3DVertexBuffer     *LPDIRECT3DVERTEXBUFFER;
#endif
#if (DIRECT3D_VERSION >= 0x0700)
typedef interface IDirect3D7                *LPDIRECT3D7;
typedef interface IDirect3DDevice7          *LPDIRECT3DDEVICE7;
typedef interface IDirect3DVertexBuffer7    *LPDIRECT3DVERTEXBUFFER7;
#endif

/* IDirect3D interface */
#undef INTERFACE
#define INTERFACE   IDirect3D
DECLARE_INTERFACE_( IDirect3D, IUnknown ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;

    /* IDirect3D methods */
    STDMETHOD( Initialize )( THIS_ REFCLSID ) PURE;
    STDMETHOD( EnumDevices )( THIS_ LPD3DENUMDEVICESCALLBACK, LPVOID ) PURE;
    STDMETHOD( CreateLight )( THIS_ LPDIRECT3DLIGHT *, IUnknown * ) PURE;
    STDMETHOD( CreateMaterial )( THIS_ LPDIRECT3DMATERIAL *, IUnknown * ) PURE;
    STDMETHOD( CreateViewport )( THIS_ LPDIRECT3DVIEWPORT *, IUnknown * ) PURE;
    STDMETHOD( FindDevice )( THIS_ LPD3DFINDDEVICESEARCH, LPD3DFINDDEVICERESULT ) PURE;
};

/* IDirect3DDevice interface */
#undef INTERFACE
#define INTERFACE   IDirect3DDevice
DECLARE_INTERFACE_( IDirect3DDevice, IUnknown ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;

    /* IDirect3DDevice methods */
    STDMETHOD( Initialize )( THIS_ LPDIRECT3D, LPGUID, LPD3DDEVICEDESC ) PURE;
    STDMETHOD( GetCaps )( THIS_ LPD3DDEVICEDESC, LPD3DDEVICEDESC ) PURE;
    STDMETHOD( SwapTextureHandle )( THIS_ LPDIRECT3DTEXTURE, LPDIRECT3DTEXTURE ) PURE;
    STDMETHOD( CreateExecuteBuffer )( THIS_ LPD3DEXECUTEBUFFERDESC, LPDIRECT3DEXECUTEBUFFER *, IUnknown * ) PURE;
    STDMETHOD( GetStats )( THIS_ LPD3DSTATS ) PURE;
    STDMETHOD( Execute )( THIS_ LPDIRECT3DEXECUTEBUFFER, LPDIRECT3DVIEWPORT, DWORD ) PURE;
    STDMETHOD( AddViewport )( THIS_ LPDIRECT3DVIEWPORT ) PURE;
    STDMETHOD( DeleteViewport )( THIS_ LPDIRECT3DVIEWPORT ) PURE;
    STDMETHOD( NextViewport )( THIS_ LPDIRECT3DVIEWPORT, LPDIRECT3DVIEWPORT *, DWORD ) PURE;
    STDMETHOD( Pick )( THIS_ LPDIRECT3DEXECUTEBUFFER, LPDIRECT3DVIEWPORT, DWORD, LPD3DRECT ) PURE;
    STDMETHOD( GetPickRecords )( THIS_ LPDWORD, LPD3DPICKRECORD ) PURE;
    STDMETHOD( EnumTextureFormats )( THIS_ LPD3DENUMTEXTUREFORMATSCALLBACK, LPVOID ) PURE;
    STDMETHOD( CreateMatrix )( THIS_ LPD3DMATRIXHANDLE ) PURE;
    STDMETHOD( SetMatrix )( THIS_ D3DMATRIXHANDLE, const LPD3DMATRIX ) PURE;
    STDMETHOD( GetMatrix )( THIS_ D3DMATRIXHANDLE, LPD3DMATRIX ) PURE;
    STDMETHOD( DeleteMatrix )( THIS_ D3DMATRIXHANDLE ) PURE;
    STDMETHOD( BeginScene )( THIS ) PURE;
    STDMETHOD( EndScene )( THIS ) PURE;
    STDMETHOD( GetDirect3D )( THIS_ LPDIRECT3D * ) PURE;
};

/* IDirect3DExecuteBuffer interface */
#undef INTERFACE
#define INTERFACE   IDirect3DExecuteBuffer
DECLARE_INTERFACE_( IDirect3DExecuteBuffer, IUnknown ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;

    /* IDirect3DExecuteBuffer methods */
    STDMETHOD( Initialize )( THIS_ LPDIRECT3DDEVICE, LPD3DEXECUTEBUFFERDESC ) PURE;
    STDMETHOD( Lock )( THIS_ LPD3DEXECUTEBUFFERDESC ) PURE;
    STDMETHOD( Unlock )( THIS ) PURE;
    STDMETHOD( SetExecuteData )( THIS_ LPD3DEXECUTEDATA ) PURE;
    STDMETHOD( GetExecuteData )( THIS_ LPD3DEXECUTEDATA ) PURE;
    STDMETHOD( Validate )( THIS_ LPDWORD, LPD3DVALIDATECALLBACK, LPVOID, DWORD ) PURE;
    STDMETHOD( Optimize )( THIS_ DWORD ) PURE;
};

/* IDirect3DLight interface */
#undef INTERFACE
#define INTERFACE   IDirect3DLight
DECLARE_INTERFACE_( IDirect3DLight, IUnknown ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;

    /* IDirect3DLight methods */
    STDMETHOD( Initialize )( THIS_ LPDIRECT3D ) PURE;
    STDMETHOD( SetLight )( THIS_ LPD3DLIGHT ) PURE;
    STDMETHOD( GetLight )( THIS_ LPD3DLIGHT ) PURE;
};

/* IDirect3DMaterial interface */
#undef INTERFACE
#define INTERFACE   IDirect3DMaterial
DECLARE_INTERFACE_( IDirect3DMaterial, IUnknown ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;

    /* IDirect3DMaterial methods */
    STDMETHOD( Initialize )( THIS_ LPDIRECT3D ) PURE;
    STDMETHOD( SetMaterial )( THIS_ LPD3DMATERIAL ) PURE;
    STDMETHOD( GetMaterial )( THIS_ LPD3DMATERIAL ) PURE;
    STDMETHOD( GetHandle )( THIS_ LPDIRECT3DDEVICE, LPD3DMATERIALHANDLE ) PURE;
    STDMETHOD( Reserve )( THIS ) PURE;
    STDMETHOD( Unreserve )( THIS ) PURE;
};

/* IDirect3DTexture interface */
#undef INTERFACE
#define INTERFACE   IDirect3DTexture
DECLARE_INTERFACE_( IDirect3DTexture, IUnknown ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;

    /* IDirect3DTexture methods */
    STDMETHOD( Initialize )( THIS_ LPDIRECT3DDEVICE, LPDIRECTDRAWSURFACE ) PURE;
    STDMETHOD( GetHandle )( THIS_ LPDIRECT3DDEVICE, LPD3DTEXTUREHANDLE ) PURE;
    STDMETHOD( PaletteChanged )( THIS_ DWORD, DWORD ) PURE;
    STDMETHOD( Load )( THIS_ LPDIRECT3DTEXTURE ) PURE;
    STDMETHOD( Unload )( THIS ) PURE;
};

/* IDirect3DViewport interface */
#undef INTERFACE
#define INTERFACE   IDirect3DViewport
DECLARE_INTERFACE_( IDirect3DViewport, IUnknown ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;

    /* IDirect3DViewport methods */
    STDMETHOD( Initialize )( THIS_ LPDIRECT3D ) PURE;
    STDMETHOD( GetViewport )( THIS_ LPD3DVIEWPORT ) PURE;
    STDMETHOD( SetViewport )( THIS_ LPD3DVIEWPORT ) PURE;
    STDMETHOD( TransformVertices )( THIS_ DWORD, LPD3DTRANSFORMDATA, DWORD, LPDWORD ) PURE;
    STDMETHOD( LightElements )( THIS_ DWORD, LPD3DLIGHTDATA ) PURE;
    STDMETHOD( SetBackground )( THIS_ D3DMATERIALHANDLE ) PURE;
    STDMETHOD( GetBackground )( THIS_ LPD3DMATERIALHANDLE, LPBOOL ) PURE;
    STDMETHOD( SetBackgroundDepth )( THIS_ LPDIRECTDRAWSURFACE ) PURE;
    STDMETHOD( GetBackgroundDepth )( THIS_ LPDIRECTDRAWSURFACE *, LPBOOL ) PURE;
    STDMETHOD( Clear )( THIS_ DWORD, LPD3DRECT, DWORD ) PURE;
    STDMETHOD( AddLight )( THIS_ LPDIRECT3DLIGHT ) PURE;
    STDMETHOD( DeleteLight )( THIS_ LPDIRECT3DLIGHT ) PURE;
    STDMETHOD( NextLight )( THIS_ LPDIRECT3DLIGHT, LPDIRECT3DLIGHT *, DWORD ) PURE;
};

/* IDirect3D2 interface */
#if (DIRECT3D_VERSION >= 0x0500)
#undef INTERFACE
#define INTERFACE   IDirect3D2
DECLARE_INTERFACE_( IDirect3D2, IUnknown ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;

    /* IDirect3D2 methods */
    STDMETHOD( EnumDevices )( THIS_ LPD3DENUMDEVICESCALLBACK, LPVOID ) PURE;
    STDMETHOD( CreateLight )( THIS_ LPDIRECT3DLIGHT *, IUnknown * ) PURE;
    STDMETHOD( CreateMaterial )( THIS_ LPDIRECT3DMATERIAL2 *, IUnknown * ) PURE;
    STDMETHOD( CreateViewport )( THIS_ LPDIRECT3DVIEWPORT2 *, IUnknown * ) PURE;
    STDMETHOD( FindDevice )( THIS_ LPD3DFINDDEVICESEARCH, LPD3DFINDDEVICERESULT ) PURE;
    STDMETHOD( CreateDevice )( THIS_ REFCLSID, LPDIRECTDRAWSURFACE, LPDIRECT3DDEVICE2 * ) PURE;
};
#endif

/* IDirect3DDevice2 interface */
#if (DIRECT3D_VERSION >= 0x0500)
#undef INTERFACE
#define INTERFACE   IDirect3DDevice2
DECLARE_INTERFACE_( IDirect3DDevice2, IUnknown ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;

    /* IDirect3DDevice2 methods */
    STDMETHOD( GetCaps )( THIS_ LPD3DDEVICEDESC, LPD3DDEVICEDESC ) PURE;
    STDMETHOD( SwapTextureHandles )( THIS_ LPDIRECT3DTEXTURE2, LPDIRECT3DTEXTURE2 ) PURE;
    STDMETHOD( GetStats )( THIS_ LPD3DSTATS ) PURE;
    STDMETHOD( AddViewport )( THIS_ LPDIRECT3DVIEWPORT2 ) PURE;
    STDMETHOD( DeleteViewport )( THIS_ LPDIRECT3DVIEWPORT2 ) PURE;
    STDMETHOD( NextViewport )( THIS_ LPDIRECT3DVIEWPORT2, LPDIRECT3DVIEWPORT2 *, DWORD ) PURE;
    STDMETHOD( EnumTextureFormats )( THIS_ LPD3DENUMTEXTUREFORMATSCALLBACK, LPVOID ) PURE;
    STDMETHOD( BeginScene )( THIS ) PURE;
    STDMETHOD( EndScene )( THIS ) PURE;
    STDMETHOD( GetDirect3D )( THIS_ LPDIRECT3D2 * ) PURE;
    STDMETHOD( SetCurrentViewport )( THIS_ LPDIRECT3DVIEWPORT2 ) PURE;
    STDMETHOD( GetCurrentViewport )( THIS_ LPDIRECT3DVIEWPORT2 * ) PURE;
    STDMETHOD( SetRenderTarget )( THIS_ LPDIRECTDRAWSURFACE, DWORD ) PURE;
    STDMETHOD( GetRenderTarget )( THIS_ LPDIRECTDRAWSURFACE * ) PURE;
    STDMETHOD( Begin )( THIS_ D3DPRIMITIVETYPE, D3DVERTEXTYPE, DWORD ) PURE;
    STDMETHOD( BeginIndexed )( THIS_ D3DPRIMITIVETYPE, D3DVERTEXTYPE, LPVOID, DWORD, DWORD ) PURE;
    STDMETHOD( Vertex )( THIS_ LPVOID ) PURE;
    STDMETHOD( Index )( THIS_ WORD ) PURE;
    STDMETHOD( End )( THIS_ DWORD ) PURE;
    STDMETHOD( GetRenderState )( THIS_ D3DRENDERSTATETYPE, LPDWORD ) PURE;
    STDMETHOD( SetRenderState )( THIS_ D3DRENDERSTATETYPE, DWORD ) PURE;
    STDMETHOD( GetLightState )( THIS_ D3DLIGHTSTATETYPE, LPDWORD ) PURE;
    STDMETHOD( SetLightState )( THIS_ D3DLIGHTSTATETYPE, DWORD ) PURE;
    STDMETHOD( SetTransform )( THIS_ D3DTRANSFORMSTATETYPE, LPD3DMATRIX ) PURE;
    STDMETHOD( GetTransform )( THIS_ D3DTRANSFORMSTATETYPE, LPD3DMATRIX ) PURE;
    STDMETHOD( MultiplyTransform )( THIS_ D3DTRANSFORMSTATETYPE, LPD3DMATRIX ) PURE;
    STDMETHOD( DrawPrimitive )( THIS_ D3DPRIMITIVETYPE, D3DVERTEXTYPE, LPVOID, DWORD, DWORD ) PURE;
    STDMETHOD( DrawIndexedPrimitive )( THIS_ D3DPRIMITIVETYPE, D3DVERTEXTYPE, LPVOID, DWORD, LPWORD, DWORD, DWORD ) PURE;
    STDMETHOD( SetClipStatus )( THIS_ LPD3DCLIPSTATUS ) PURE;
    STDMETHOD( GetClipStatus )( THIS_ LPD3DCLIPSTATUS ) PURE;
};
#endif

/* IDirect3DMaterial2 interface */
#if (DIRECT3D_VERSION >= 0x0500)
#undef INTERFACE
#define INTERFACE   IDirect3DMaterial2
DECLARE_INTERFACE_( IDirect3DMaterial2, IUnknown ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;

    /* IDirect3DMaterial2 methods */
    STDMETHOD( SetMaterial )( THIS_ LPD3DMATERIAL ) PURE;
    STDMETHOD( GetMaterial )( THIS_ LPD3DMATERIAL ) PURE;
    STDMETHOD( GetHandle )( THIS_ LPDIRECT3DDEVICE2, LPD3DMATERIALHANDLE ) PURE;
};
#endif

/* IDirect3DTexture2 interface */
#if (DIRECT3D_VERSION >= 0x0500)
#undef INTERFACE
#define INTERFACE   IDirect3DTexture2
DECLARE_INTERFACE_( IDirect3DTexture2, IUnknown ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;

    /* IDirect3DTexture2 methods */
    STDMETHOD( GetHandle )( THIS_ LPDIRECT3DDEVICE2, LPD3DTEXTUREHANDLE ) PURE;
    STDMETHOD( PaletteChanged )( THIS_ DWORD, DWORD ) PURE;
    STDMETHOD( Load )( THIS_ LPDIRECT3DTEXTURE2 ) PURE;
};
#endif

/* IDirect3DViewport2 interface */
#if (DIRECT3D_VERSION >= 0x0500)
#undef INTERFACE
#define INTERFACE   IDirect3DViewport2
DECLARE_INTERFACE_( IDirect3DViewport2, IDirect3DViewport ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;

    /* IDirect3DViewport methods */
    STDMETHOD( Initialize )( THIS_ LPDIRECT3D ) PURE;
    STDMETHOD( GetViewport )( THIS_ LPD3DVIEWPORT ) PURE;
    STDMETHOD( SetViewport )( THIS_ LPD3DVIEWPORT ) PURE;
    STDMETHOD( TransformVertices )( THIS_ DWORD, LPD3DTRANSFORMDATA, DWORD, LPDWORD ) PURE;
    STDMETHOD( LightElements )( THIS_ DWORD, LPD3DLIGHTDATA ) PURE;
    STDMETHOD( SetBackground )( THIS_ D3DMATERIALHANDLE ) PURE;
    STDMETHOD( GetBackground )( THIS_ LPD3DMATERIALHANDLE, LPBOOL ) PURE;
    STDMETHOD( SetBackgroundDepth )( THIS_ LPDIRECTDRAWSURFACE ) PURE;
    STDMETHOD( GetBackgroundDepth )( THIS_ LPDIRECTDRAWSURFACE *, LPBOOL ) PURE;
    STDMETHOD( Clear )( THIS_ DWORD, LPD3DRECT, DWORD ) PURE;
    STDMETHOD( AddLight )( THIS_ LPDIRECT3DLIGHT ) PURE;
    STDMETHOD( DeleteLight )( THIS_ LPDIRECT3DLIGHT ) PURE;
    STDMETHOD( NextLight )( THIS_ LPDIRECT3DLIGHT, LPDIRECT3DLIGHT *, DWORD ) PURE;

    /* IDirect3DViewport2 methods */
    STDMETHOD( GetViewport2 )( THIS_ LPD3DVIEWPORT2 ) PURE;
    STDMETHOD( SetViewport2 )( THIS_ LPD3DVIEWPORT2 ) PURE;
};
#endif

/* IDirect3D3 interface */
#if (DIRECT3D_VERSION >= 0x0600)
#undef INTERFACE
#define INTERFACE   IDirect3D3
DECLARE_INTERFACE_( IDirect3D3, IUnknown ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;

    /* IDirect3D3 methods */
    STDMETHOD( EnumDevices )( THIS_ LPD3DENUMDEVICESCALLBACK, LPVOID ) PURE;
    STDMETHOD( CreateLight )( THIS_ LPDIRECT3DLIGHT *, LPUNKNOWN ) PURE;
    STDMETHOD( CreateMaterial )( THIS_ LPDIRECT3DMATERIAL3 *, LPUNKNOWN ) PURE;
    STDMETHOD( CreateViewport )( THIS_ LPDIRECT3DVIEWPORT3 *, LPUNKNOWN ) PURE;
    STDMETHOD( FindDevice )( THIS_ LPD3DFINDDEVICESEARCH, LPD3DFINDDEVICERESULT ) PURE;
    STDMETHOD( CreateDevice )( THIS_ REFCLSID, LPDIRECTDRAWSURFACE4, LPDIRECT3DDEVICE3 *, LPUNKNOWN ) PURE;
    STDMETHOD( CreateVertexBuffer )( THIS_ LPD3DVERTEXBUFFERDESC, LPDIRECT3DVERTEXBUFFER *, DWORD, LPUNKNOWN ) PURE;
    STDMETHOD( EnumZBufferFormats )( THIS_ REFCLSID, LPD3DENUMPIXELFORMATSCALLBACK, LPVOID ) PURE;
    STDMETHOD( EvictManagedTextures )( THIS ) PURE;
};
#endif

/* IDirect3DDevice3 interface */
#if (DIRECT3D_VERSION >= 0x0600)
#undef INTERFACE
#define INTERFACE   IDirect3DDevice3
DECLARE_INTERFACE_( IDirect3DDevice3, IUnknown ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;

    /* IDirect3DDevice3 methods */
    STDMETHOD( GetCaps )( THIS_ LPD3DDEVICEDESC, LPD3DDEVICEDESC ) PURE;
    STDMETHOD( GetStats )( THIS_ LPD3DSTATS ) PURE;
    STDMETHOD( AddViewport )( THIS_ LPDIRECT3DVIEWPORT3 ) PURE;
    STDMETHOD( DeleteViewport )( THIS_ LPDIRECT3DVIEWPORT3 ) PURE;
    STDMETHOD( NextViewport )( THIS_ LPDIRECT3DVIEWPORT3, LPDIRECT3DVIEWPORT3 *, DWORD ) PURE;
    STDMETHOD( EnumTextureFormats )( THIS_ LPD3DENUMPIXELFORMATSCALLBACK, LPVOID ) PURE;
    STDMETHOD( BeginScene )( THIS ) PURE;
    STDMETHOD( EndScene )( THIS ) PURE;
    STDMETHOD( GetDirect3D )( THIS_ LPDIRECT3D3 * ) PURE;
    STDMETHOD( SetCurrentViewport )( THIS_ LPDIRECT3DVIEWPORT3 ) PURE;
    STDMETHOD( GetCurrentViewport )( THIS_ LPDIRECT3DVIEWPORT3 * ) PURE;
    STDMETHOD( SetRenderTarget )( THIS_ LPDIRECTDRAWSURFACE4, DWORD ) PURE;
    STDMETHOD( GetRenderTarget )( THIS_ LPDIRECTDRAWSURFACE4 * ) PURE;
    STDMETHOD( Begin )( THIS_ D3DPRIMITIVETYPE, DWORD, DWORD ) PURE;
    STDMETHOD( BeginIndexed )( THIS_ D3DPRIMITIVETYPE, DWORD, LPVOID, DWORD, DWORD ) PURE;
    STDMETHOD( Vertex )( THIS_ LPVOID ) PURE;
    STDMETHOD( Index )( THIS_ WORD ) PURE;
    STDMETHOD( End )( THIS_ DWORD ) PURE;
    STDMETHOD( GetRenderState )( THIS_ D3DRENDERSTATETYPE, LPDWORD ) PURE;
    STDMETHOD( SetRenderState )( THIS_ D3DRENDERSTATETYPE, DWORD ) PURE;
    STDMETHOD( GetLightState )( THIS_ D3DLIGHTSTATETYPE, LPDWORD ) PURE;
    STDMETHOD( SetLightState )( THIS_ D3DLIGHTSTATETYPE, DWORD ) PURE;
    STDMETHOD( SetTransform )( THIS_ D3DTRANSFORMSTATETYPE, LPD3DMATRIX ) PURE;
    STDMETHOD( GetTransform )( THIS_ D3DTRANSFORMSTATETYPE, LPD3DMATRIX ) PURE;
    STDMETHOD( MultiplyTransform )( THIS_ D3DTRANSFORMSTATETYPE, LPD3DMATRIX ) PURE;
    STDMETHOD( DrawPrimitive )( THIS_ D3DPRIMITIVETYPE, DWORD, LPVOID, DWORD, DWORD ) PURE;
    STDMETHOD( DrawIndexedPrimitive )( THIS_ D3DPRIMITIVETYPE, DWORD, LPVOID, DWORD, LPWORD, DWORD, DWORD ) PURE;
    STDMETHOD( SetClipStatus )( THIS_ LPD3DCLIPSTATUS ) PURE;
    STDMETHOD( GetClipStatus )( THIS_ LPD3DCLIPSTATUS ) PURE;
    STDMETHOD( DrawPrimitiveStrided )( THIS_ D3DPRIMITIVETYPE, DWORD, LPD3DDRAWPRIMITIVESTRIDEDDATA, DWORD, DWORD ) PURE;
    STDMETHOD( DrawIndexedPrimitiveStrided )( THIS_ D3DPRIMITIVETYPE, DWORD, LPD3DDRAWPRIMITIVESTRIDEDDATA, DWORD, LPWORD, DWORD, DWORD ) PURE;
    STDMETHOD( DrawPrimitiveVB )( THIS_ D3DPRIMITIVETYPE, LPDIRECT3DVERTEXBUFFER, DWORD, DWORD, DWORD ) PURE;
    STDMETHOD( DrawIndexedPrimitiveVB )( THIS_ D3DPRIMITIVETYPE, LPDIRECT3DVERTEXBUFFER, LPWORD, DWORD, DWORD ) PURE;
    STDMETHOD( ComputeSphereVisibility )( THIS_ LPD3DVECTOR, LPD3DVALUE, DWORD, DWORD, LPDWORD ) PURE;
    STDMETHOD( GetTexture )( THIS_ DWORD, LPDIRECT3DTEXTURE2 * ) PURE;
    STDMETHOD( SetTexture )( THIS_ DWORD, LPDIRECT3DTEXTURE2 ) PURE;
    STDMETHOD( GetTextureStageState )( THIS_ DWORD, D3DTEXTURESTAGESTATETYPE, LPDWORD ) PURE;
    STDMETHOD( SetTextureStageState )( THIS_ DWORD, D3DTEXTURESTAGESTATETYPE, DWORD ) PURE;
    STDMETHOD( ValidateDevice )( THIS_ LPDWORD ) PURE;
};
#endif

/* IDirect3DMaterial3 interface */
#if (DIRECT3D_VERSION >= 0x0600)
#undef INTERFACE
#define INTERFACE   IDirect3DMaterial3
DECLARE_INTERFACE_( IDirect3DMaterial3, IUnknown ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;

    /* IDirect3DMaterial3 methods */
    STDMETHOD( SetMaterial )( THIS_ LPD3DMATERIAL ) PURE;
    STDMETHOD( GetMaterial )( THIS_ LPD3DMATERIAL ) PURE;
    STDMETHOD( GetHandle )( THIS_ LPDIRECT3DDEVICE3, LPD3DMATERIALHANDLE ) PURE;
};
#endif

/* IDirect3DViewport3 interface */
#if (DIRECT3D_VERSION >= 0x0600)
#undef INTERFACE
#define INTERFACE   IDirect3DViewport3
DECLARE_INTERFACE_( IDirect3DViewport3, IDirect3DViewport2 ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;

    /* IDirect3DViewport methods */
    STDMETHOD( Initialize )( THIS_ LPDIRECT3D ) PURE;
    STDMETHOD( GetViewport )( THIS_ LPD3DVIEWPORT ) PURE;
    STDMETHOD( SetViewport )( THIS_ LPD3DVIEWPORT ) PURE;
    STDMETHOD( TransformVertices )( THIS_ DWORD, LPD3DTRANSFORMDATA, DWORD, LPDWORD ) PURE;
    STDMETHOD( LightElements )( THIS_ DWORD, LPD3DLIGHTDATA ) PURE;
    STDMETHOD( SetBackground )( THIS_ D3DMATERIALHANDLE ) PURE;
    STDMETHOD( GetBackground )( THIS_ LPD3DMATERIALHANDLE, LPBOOL ) PURE;
    STDMETHOD( SetBackgroundDepth )( THIS_ LPDIRECTDRAWSURFACE ) PURE;
    STDMETHOD( GetBackgroundDepth )( THIS_ LPDIRECTDRAWSURFACE *, LPBOOL ) PURE;
    STDMETHOD( Clear )( THIS_ DWORD, LPD3DRECT, DWORD ) PURE;
    STDMETHOD( AddLight )( THIS_ LPDIRECT3DLIGHT ) PURE;
    STDMETHOD( DeleteLight )( THIS_ LPDIRECT3DLIGHT ) PURE;
    STDMETHOD( NextLight )( THIS_ LPDIRECT3DLIGHT, LPDIRECT3DLIGHT *, DWORD ) PURE;

    /* IDirect3DViewport2 methods */
    STDMETHOD( GetViewport2 )( THIS_ LPD3DVIEWPORT2 ) PURE;
    STDMETHOD( SetViewport2 )( THIS_ LPD3DVIEWPORT2 ) PURE;

    /* IDirect3DViewport3 methods */
    STDMETHOD( SetBackgroundDepth2 )( THIS_ LPDIRECTDRAWSURFACE4 ) PURE;
    STDMETHOD( GetBackgroundDepth2 )( THIS_ LPDIRECTDRAWSURFACE4 *, LPBOOL ) PURE;
    STDMETHOD( Clear2 )( THIS_ DWORD, LPD3DRECT, DWORD, D3DCOLOR, D3DVALUE, DWORD ) PURE;
};
#endif

/* IDirect3DVertexBuffer interface */
#if (DIRECT3D_VERSION >= 0x0600)
#undef INTERFACE
#define INTERFACE   IDirect3DVertexBuffer
DECLARE_INTERFACE_( IDirect3DVertexBuffer, IUnknown ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;

    /* IDirect3DVertexBuffer methods */
    STDMETHOD( Lock )( THIS_ DWORD, LPVOID *, LPDWORD ) PURE;
    STDMETHOD( Unlock )( THIS ) PURE;
    STDMETHOD( ProcessVertices )( THIS_ DWORD, DWORD, DWORD, LPDIRECT3DVERTEXBUFFER, DWORD, LPDIRECT3DDEVICE3, DWORD ) PURE;
    STDMETHOD( GetVertexBufferDesc )( THIS_ LPD3DVERTEXBUFFERDESC ) PURE;
    STDMETHOD( Optimize )( THIS_ LPDIRECT3DDEVICE3, DWORD ) PURE;
};
#endif

/* IDirect3D7 interface */
#if (DIRECT3D_VERSION >= 0x0700)
#undef INTERFACE
#define INTERFACE   IDirect3D7
DECLARE_INTERFACE_( IDirect3D7, IUnknown ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;

    /* IDirect3D7 methods */
    STDMETHOD( EnumDevices )( THIS_ LPD3DENUMDEVICESCALLBACK7, LPVOID ) PURE;
    STDMETHOD( CreateDevice )( THIS_ REFCLSID, LPDIRECTDRAWSURFACE7, LPDIRECT3DDEVICE7 * ) PURE;
    STDMETHOD( CreateVertexBuffer )( THIS_ LPD3DVERTEXBUFFERDESC, LPDIRECT3DVERTEXBUFFER7 *, DWORD ) PURE;
    STDMETHOD( EnumZBufferFormats )( THIS_ REFCLSID, LPD3DENUMPIXELFORMATSCALLBACK, LPVOID ) PURE;
    STDMETHOD( EvictManagedTextures )( THIS ) PURE;
};
#endif

/* IDirect3DDevice7 interface */
#if (DIRECT3D_VERSION >= 0x0700)
#undef INTERFACE
#define INTERFACE   IDirect3DDevice7
DECLARE_INTERFACE_( IDirect3DDevice7, IUnknown ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;

    /* IDirect3DDevice7 methods */
    STDMETHOD( GetCaps )( THIS_ LPD3DDEVICEDESC7 ) PURE;
    STDMETHOD( EnumTextureFormats )( THIS_ LPD3DENUMPIXELFORMATSCALLBACK, LPVOID ) PURE;
    STDMETHOD( BeginScene )( THIS ) PURE;
    STDMETHOD( EndScene )( THIS ) PURE;
    STDMETHOD( GetDirect3D )( THIS_ LPDIRECT3D7 * ) PURE;
    STDMETHOD( SetRenderTarget )( THIS_ LPDIRECTDRAWSURFACE7, DWORD ) PURE;
    STDMETHOD( GetRenderTarget )( THIS_ LPDIRECTDRAWSURFACE7 * ) PURE;
    STDMETHOD( Clear )( THIS_ DWORD, LPD3DRECT, DWORD, D3DCOLOR, D3DVALUE, DWORD ) PURE;
    STDMETHOD( SetTransform )( THIS_ D3DTRANSFORMSTATETYPE, LPD3DMATRIX ) PURE;
    STDMETHOD( GetTransform )( THIS_ D3DTRANSFORMSTATETYPE, LPD3DMATRIX ) PURE;
    STDMETHOD( SetViewport )( THIS_ LPD3DVIEWPORT7 ) PURE;
    STDMETHOD( MultiplyTransform )( THIS_ D3DTRANSFORMSTATETYPE, LPD3DMATRIX ) PURE;
    STDMETHOD( GetViewport )( THIS_ LPD3DVIEWPORT7 ) PURE;
    STDMETHOD( SetMaterial )( THIS_ LPD3DMATERIAL7 ) PURE;
    STDMETHOD( GetMaterial )( THIS_ LPD3DMATERIAL7 ) PURE;
    STDMETHOD( SetLight )( THIS_ DWORD, LPD3DLIGHT7 ) PURE;
    STDMETHOD( GetLight )( THIS_ DWORD, LPD3DLIGHT7 ) PURE;
    STDMETHOD( SetRenderState )( THIS_ D3DRENDERSTATETYPE, DWORD ) PURE;
    STDMETHOD( GetRenderState )( THIS_ D3DRENDERSTATETYPE, LPDWORD ) PURE;
    STDMETHOD( BeginStateBlock )( THIS ) PURE;
    STDMETHOD( EndStateBlock )( THIS_ LPDWORD ) PURE;
    STDMETHOD( PreLoad )( THIS_ LPDIRECTDRAWSURFACE7 ) PURE;
    STDMETHOD( DrawPrimitive )( THIS_ D3DPRIMITIVETYPE, DWORD, LPVOID, DWORD, DWORD ) PURE;
    STDMETHOD( DrawIndexedPrimitive )( THIS_ D3DPRIMITIVETYPE, DWORD, LPVOID, DWORD, LPWORD, DWORD, DWORD ) PURE;
    STDMETHOD( SetClipStatus )( THIS_ LPD3DCLIPSTATUS ) PURE;
    STDMETHOD( GetClipStatus )( THIS_ LPD3DCLIPSTATUS ) PURE;
    STDMETHOD( DrawPrimitiveStrided )( THIS_ D3DPRIMITIVETYPE, DWORD, LPD3DDRAWPRIMITIVESTRIDEDDATA, DWORD, DWORD ) PURE;
    STDMETHOD( DrawIndexedPrimitiveStrided )( THIS_ D3DPRIMITIVETYPE, DWORD, LPD3DDRAWPRIMITIVESTRIDEDDATA, DWORD, LPWORD, DWORD, DWORD ) PURE;
    STDMETHOD( DrawPrimitiveVB )( THIS_ D3DPRIMITIVETYPE, LPDIRECT3DVERTEXBUFFER7, DWORD, DWORD, DWORD ) PURE;
    STDMETHOD( DrawIndexedPrimitiveVB )( THIS_ D3DPRIMITIVETYPE, LPDIRECT3DVERTEXBUFFER7, DWORD, DWORD, LPWORD, DWORD, DWORD ) PURE;
    STDMETHOD( ComputeSphereVisibility )( THIS_ LPD3DVECTOR, LPD3DVALUE, DWORD, DWORD, LPDWORD ) PURE;
    STDMETHOD( GetTexture )( THIS_ DWORD, LPDIRECTDRAWSURFACE7 * ) PURE;
    STDMETHOD( SetTexture )( THIS_ DWORD, LPDIRECTDRAWSURFACE7 ) PURE;
    STDMETHOD( GetTextureStageState )( THIS_ DWORD, D3DTEXTURESTAGESTATETYPE, LPDWORD ) PURE;
    STDMETHOD( SetTextureStageState )( THIS_ DWORD, D3DTEXTURESTAGESTATETYPE, DWORD ) PURE;
    STDMETHOD( ValidateDevice )( THIS_ LPDWORD ) PURE;
    STDMETHOD( ApplyStateBlock )( THIS_ DWORD ) PURE;
    STDMETHOD( CaptureStateBlock )( THIS_ DWORD ) PURE;
    STDMETHOD( DeleteStateBlock )( THIS_ DWORD ) PURE;
    STDMETHOD( CreateStateBlock )( THIS_ D3DSTATEBLOCKTYPE, LPDWORD ) PURE;
    STDMETHOD( Load )( THIS_ LPDIRECTDRAWSURFACE7, LPPOINT, LPDIRECTDRAWSURFACE7, LPRECT, DWORD ) PURE;
    STDMETHOD( LightEnable )( THIS_ DWORD, BOOL ) PURE;
    STDMETHOD( GetLightEnable )( THIS_ DWORD, BOOL * ) PURE;
    STDMETHOD( SetClipPlane )( THIS_ DWORD, D3DVALUE * ) PURE;
    STDMETHOD( GetClipPlane )( THIS_ DWORD, D3DVALUE * ) PURE;
    STDMETHOD( GetInfo )( THIS_ DWORD, LPVOID, DWORD ) PURE;
};
#endif

/* IDirect3DVertexBuffer7 interface */
#if (DIRECT3D_VERSION >= 0x0700)
#undef INTERFACE
#define INTERFACE   IDirect3DVertexBuffer7
DECLARE_INTERFACE_( IDirect3DVertexBuffer7, IUnknown ) {
    /* IUnknown methods */
    STDMETHOD( QueryInterface )( THIS_ REFIID, void ** ) PURE;
    STDMETHOD_( ULONG, AddRef )( THIS ) PURE;
    STDMETHOD_( ULONG, Release )( THIS ) PURE;

    /* IDirect3DVertexBuffer7 methods */
    STDMETHOD( Lock )( THIS_ DWORD, LPVOID *, LPDWORD ) PURE;
    STDMETHOD( Unlock )( THIS ) PURE;
    STDMETHOD( ProcessVertices )( THIS_ DWORD, DWORD, DWORD, LPDIRECT3DVERTEXBUFFER7, DWORD, LPDIRECT3DDEVICE7, DWORD ) PURE;
    STDMETHOD( GetVertexBufferDesc )( THIS_ LPD3DVERTEXBUFFERDESC ) PURE;
    STDMETHOD( Optimize )( THIS_ LPDIRECT3DDEVICE7, DWORD ) PURE;
    STDMETHOD( ProcessVerticesStrided )( THIS_ DWORD, DWORD, DWORD, LPD3DDRAWPRIMITIVESTRIDEDDATA, DWORD, LPDIRECT3DDEVICE7, DWORD ) PURE;
};
#endif

/* C/C++ object macros */
#define IDirect3D_QueryInterface( x, p1, p2 ) \
    _INTRFMEMBP( x, QueryInterface, p1, p2 )
#define IDirect3D_AddRef( x ) \
    _INTRFMEMBN( x, AddRef )
#define IDirect3D_Release( x ) \
    _INTRFMEMBN( x, Release )
#define IDirect3D_Initialize( x, p ) \
    _INTRFMEMBP( x, Initialize, p )
#define IDirect3D_EnumDevices( x, p1, p2 ) \
    _INTRFMEMBP( x, EnumDevices, p1, p2 )
#define IDirect3D_CreateLight( x, p1, p2 ) \
    _INTRFMEMBP( x, CreateLight, p1, p2 )
#define IDirect3D_CreateMaterial( x, p1, p2 ) \
    _INTRFMEMBP( x, CreateMaterial, p1, p2 )
#define IDirect3D_CreateViewport( x, p1, p2 ) \
    _INTRFMEMBP( x, CreateViewport, p1, p2 )
#define IDirect3D_FindDevice( x, p1, p2 ) \
    _INTRFMEMBP( x, FindDevice, p1, p2 )
#define IDirect3DDevice_QueryInterface( x, p1, p2 ) \
    _INTRFMEMBP( x, QueryInterface, p1, p2 )
#define IDirect3DDevice_AddRef( x ) \
    _INTRFMEMBN( x, AddRef )
#define IDirect3DDevice_Release( x ) \
    _INTRFMEMBN( x, Release )
#define IDirect3DDevice_Initialize( x, p1, p2, p3 ) \
    _INTRFMEMBP( x, Initialize, p1, p2, p3 )
#define IDirect3DDevice_GetCaps( x, p1, p2 ) \
    _INTRFMEMBP( x, GetCaps, p1, p2 )
#define IDirect3DDevice_SwapTextureHandles( x, p1, p2 ) \
    _INTRFMEMBP( x, SwapTextureHandles, p1, p2 )
#define IDirect3DDevice_CreateExecuteBuffer( x, p1, p2, p3 ) \
    _INTRFMEMBP( x, CreateExecuteBuffer, p1, p2, p3 )
#define IDirect3DDevice_GetStats( x, p ) \
    _INTRFMEMBP( x, GetStats, p )
#define IDirect3DDevice_Execute( x, p1, p2, p3 ) \
    _INTRFMEMBP( x, Execute, p1, p2, p3 )
#define IDirect3DDevice_AddViewport( x, p ) \
    _INTRFMEMBP( x, AddViewport, p )
#define IDirect3DDevice_DeleteViewport( x, p ) \
    _INTRFMEMBP( x, DeleteViewport, p )
#define IDirect3DDevice_NextViewport( x, p1, p2, p3 ) \
    _INTRFMEMBP( x, NextViewport, p1, p2, p3 )
#define IDirect3DDevice_Pick( x, p1, p2, p3, p4 ) \
    _INTRFMEMBP( x, Pick, p1, p2, p3, p4 )
#define IDirect3DDevice_GetPickRecords( x, p1, p2 ) \
    _INTRFMEMBP( x, GetPickRecords, p1, p2 )
#define IDirect3DDevice_EnumTextureFormats( x, p1, p2 ) \
    _INTRFMEMBP( x, EnumTextureFormats, p1, p2 )
#define IDirect3DDevice_CreateMatrix( x, p ) \
    _INTRFMEMBP( x, CreateMatrix, p )
#define IDirect3DDevice_SetMatrix( x, p1, p2 ) \
    _INTRFMEMBP( x, SetMatrix, p1, p2 )
#define IDirect3DDevice_GetMatrix( x, p1, p2 ) \
    _INTRFMEMBP( x, GetMatrix, p1, p2 )
#define IDirect3DDevice_DeleteMatrix( x, p ) \
    _INTRFMEMBP( x, DeleteMatrix, p )
#define IDirect3DDevice_BeginScene( x ) \
    _INTRFMEMBN( x, BeginScene )
#define IDirect3DDevice_EndScene( x ) \
    _INTRFMEMBN( x, EndScene )
#define IDirect3DDevice_GetDirect3D( x, p ) \
    _INTRFMEMBP( x, GetDirect3D, p )
#define IDirect3DExecuteBuffer_QueryInterface( x, p1, p2 ) \
    _INTRFMEMBP( x, QueryInterface, p1, p2 )
#define IDirect3DExecuteBuffer_AddRef( x ) \
    _INTRFMEMBN( x, AddRef )
#define IDirect3DExecuteBuffer_Release( x ) \
    _INTRFMEMBN( x, Release )
#define IDirect3DExecuteBuffer_Initialize( x, p1, p2 ) \
    _INTRFMEMBP( x, Initialize, p1, p2 )
#define IDirect3DExecuteBuffer_Lock( x, p ) \
    _INTRFMEMBP( x, Lock, p )
#define IDirect3DExecuteBuffer_Unlock( x ) \
    _INTRFMEMBN( x, Unlock )
#define IDirect3DExecuteBuffer_SetExecuteData( x, p ) \
    _INTRFMEMBP( x, SetExecuteData, p )
#define IDirect3DExecuteBuffer_GetExecuteData( x, p ) \
    _INTRFMEMBP( x, GetExecuteData, p )
#define IDirect3DExecuteBuffer_Validate( x, p1, p2, p3, p4 ) \
    _INTRFMEMBP( x, Validate, p1, p2, p3, p4 )
#define IDirect3DExecuteBuffer_Optimize( x, p ) \
    _INTRFMEMBP( x, Optimize, p )
#define IDirect3DLight_QueryInterface( x, p1, p2 ) \
    _INTRFMEMBP( x, QueryInterface, p1, p2 )
#define IDirect3DLight_AddRef( x ) \
    _INTRFMEMBN( x, AddRef )
#define IDirect3DLight_Release( x ) \
    _INTRFMEMBN( x, Release )
#define IDirect3DLight_Initialize( x, p ) \
    _INTRFMEMBP( x, Initialize, p )
#define IDirect3DLight_SetLight( x, p ) \
    _INTRFMEMBP( x, SetLight, p )
#define IDirect3DLight_GetLight( x, p ) \
    _INTRFMEMBP( x, GetLight, p )
#define IDirect3DMaterial_QueryInterface( x, p1, p2 ) \
    _INTRFMEMBP( x, QueryInterface, p1, p2 )
#define IDirect3DMaterial_AddRef( x ) \
    _INTRFMEMBN( x, AddRef )
#define IDirect3DMaterial_Release( x ) \
    _INTRFMEMBN( x, Release )
#define IDirect3DMaterial_Initialize( x, p ) \
    _INTRFMEMBP( x, Initialize, p )
#define IDirect3DMaterial_SetMaterial( x, p ) \
    _INTRFMEMBP( x, SetMaterial, p )
#define IDirect3DMaterial_GetMaterial( x, p ) \
    _INTRFMEMBP( x, GetMaterial, p )
#define IDirect3DMaterial_GetHandle( x, p1, p2 ) \
    _INTRFMEMBP( x, GetHandle, p1, p2 )
#define IDirect3DMaterial_Reserve( x ) \
    _INTRFMEMBN( x, Reserve )
#define IDirect3DMaterial_Unreserve( x ) \
    _INTRFMEMBN( x, Unreserve )
#define IDirect3DTexture_QueryInterface( x, p1, p2 ) \
    _INTRFMEMBP( x, QueryInterface, p1, p2 )
#define IDirect3DTexture_AddRef( x ) \
    _INTRFMEMBN( x, AddRef )
#define IDirect3DTexture_Release( x ) \
    _INTRFMEMBN( x, Release )
#define IDirect3DTexture_Initialize( x, p1, p2 ) \
    _INTRFMEMBP( x, Initialize, p1, p2 )
#define IDirect3DTexture_GetHandle( x, p1, p2 ) \
    _INTRFMEMBP( x, GetHandle, p1, p2 )
#define IDirect3DTexture_PaletteChanged( x, p1, p2 ) \
    _INTRFMEMBP( x, PaletteChanged, p1, p2 )
#define IDirect3DTexture_Load( x, p ) \
    _INTRFMEMBP( x, Load, p )
#define IDirect3DTexture_Unload( x ) \
    _INTRFMEMBN( x, Unload )
#define IDirect3DViewport_QueryInterface( x, p1, p2 ) \
    _INTRFMEMBP( x, QueryInterface, p1, p2 )
#define IDirect3DViewport_AddRef( x ) \
    _INTRFMEMBN( x, AddRef )
#define IDirect3DViewport_Release( x ) \
    _INTRFMEMBN( x, Release )
#define IDirect3DViewport_Initialize( x, p ) \
    _INTRFMEMBP( x, Initialize, p )
#define IDirect3DViewport_GetViewport( x, p ) \
    _INTRFMEMBP( x, GetViewport, p )
#define IDirect3DViewport_SetViewport( x, p ) \
    _INTRFMEMBP( x, SetViewport, p )
#define IDirect3DViewport_TransformVertices( x, p1, p2, p3, p4 ) \
    _INTRFMEMBP( x, TransformVertices, p1, p2, p3, p4 )
#define IDirect3DViewport_LightElements( x, p1, p2 ) \
    _INTRFMEMBP( x, LightElements, p1, p2 )
#define IDirect3DViewport_SetBackground( x, p ) \
    _INTRFMEMBP( x, SetBackground, p )
#define IDirect3DViewport_GetBackground( x, p1, p2 ) \
    _INTRFMEMBP( x, GetBackground, p1, p2 )
#define IDirect3DViewport_SetBackgroundDepth( x, p ) \
    _INTRFMEMBP( x, SetBackgroundDepth, p )
#define IDirect3DViewport_GetBackgroundDepth( x, p1, p2 ) \
    _INTRFMEMBP( x, GetBackgroundDepth, p1, p2 )
#define IDirect3DViewport_Clear( x, p1, p2, p3 ) \
    _INTRFMEMBP( x, Clear, p1, p2, p3 )
#define IDirect3DViewport_AddLight( x, p ) \
    _INTRFMEMBP( x, AddLight, p )
#define IDirect3DViewport_DeleteLight( x, p ) \
    _INTRFMEMBP( x, DeleteLight, p )
#define IDirect3DViewport_NextLight( x, p1, p2, p3 ) \
    _INTRFMEMBP( x, NextLight, p1, p2, p3 )
#if (DIRECT3D_VERSION >= 0x0500)
    #define IDirect3D2_QueryInterface( x, p1, p2 ) \
        _INTRFMEMBP( x, QueryInterface, p1, p2 )
    #define IDirect3D2_AddRef( x ) \
        _INTRFMEMBN( x, AddRef )
    #define IDirect3D2_Release( x ) \
        _INTRFMEMBN( x, Release )
    #define IDirect3D2_EnumDevices( x, p1, p2 ) \
        _INTRFMEMBP( x, EnumDevices, p1, p2 )
    #define IDirect3D2_CreateLight( x, p1, p2 ) \
        _INTRFMEMBP( x, CreateLight, p1, p2 )
    #define IDirect3D2_CreateMaterial( x, p1, p2 ) \
        _INTRFMEMBP( x, CreateMaterial, p1, p2 )
    #define IDirect3D2_CreateViewport( x, p1, p2 ) \
        _INTRFMEMBP( x, CreateViewport, p1, p2 )
    #define IDirect3D2_FindDevice( x, p1, p2 ) \
        _INTRFMEMBP( x, FindDevice, p1, p2 )
    #define IDirect3D2_CreateDevice( x, p1, p2, p3 ) \
        _INTRFMEMBP( x, CreateDevice, p1, p2, p3 )
    #define IDirect3DDevice2_QueryInterface( x, p1, p2 ) \
        _INTRFMEMBP( x, QueryInterface, p1, p2 )
    #define IDirect3DDevice2_AddRef( x ) \
        _INTRFMEMBN( x, AddRef )
    #define IDirect3DDevice2_Release( x ) \
        _INTRFMEMBN( x, Release )
    #define IDirect3DDevice2_GetCaps( x, p1, p2 ) \
        _INTRFMEMBP( x, GetCaps, p1, p2 )
    #define IDirect3DDevice2_SwapTextureHandles( x, p1, p2 ) \
        _INTRFMEMBP( x, SwapTextureHandles, p1, p2 )
    #define IDirect3DDevice2_GetStats( x, p ) \
        _INTRFMEMBP( x, GetStats, p )
    #define IDirect3DDevice2_AddViewport( x, p ) \
        _INTRFMEMBP( x, AddViewport, p )
    #define IDirect3DDevice2_DeleteViewport( x, p ) \
        _INTRFMEMBP( x, DeleteViewport, p )
    #define IDirect3DDevice2_NextViewport( x, p1, p2, p3 ) \
        _INTRFMEMBP( x, NextViewport, p1, p2, p3 )
    #define IDirect3DDevice2_EnumTextureFormats( x, p1, p2 ) \
        _INTRFMEMBP( x, EnumTextureFormats, p1, p2 )
    #define IDirect3DDevice2_BeginScene( x ) \
        _INTRFMEMBN( x, BeginScene )
    #define IDirect3DDevice2_EndScene( x ) \
        _INTRFMEMBN( x, EndScene )
    #define IDirect3DDevice2_GetDirect3D( x, p ) \
        _INTRFMEMBP( x, GetDirect3D, p )
    #define IDirect3DDevice2_SetCurrentViewport( x, p ) \
        _INTRFMEMBP( x, SetCurrentViewport, p )
    #define IDirect3DDevice2_GetCurrentViewport( x, p ) \
        _INTRFMEMBP( x, GetCurrentViewport, p )
    #define IDirect3DDevice2_SetRenderTarget( x, p1, p2 ) \
        _INTRFMEMBP( x, SetRenderTarget, p1, p2 )
    #define IDirect3DDevice2_GetRenderTarget( x, p ) \
        _INTRFMEMBP( x, GetRenderTarget, p )
    #define IDirect3DDevice2_Begin( x, p1, p2, p3 ) \
        _INTRFMEMBP( x, Begin, p1, p2, p3 )
    #define IDirect3DDevice2_BeginIndexed( x, p1, p2, p3, p4, p5 ) \
        _INTRFMEMBP( x, BeginIndexed, p1, p2, p3, p4, p5 )
    #define IDirect3DDevice2_Vertex( x, p ) \
        _INTRFMEMBP( x, Vertex, p )
    #define IDirect3DDevice2_Index( x, p ) \
        _INTRFMEMBP( x, Index, p )
    #define IDirect3DDevice2_End( x, p ) \
        _INTRFMEMBP( x, End, p )
    #define IDirect3DDevice2_GetRenderState( x, p1, p2 ) \
        _INTRFMEMBP( x, GetRenderState, p1, p2 )
    #define IDirect3DDevice2_SetRenderState( x, p1, p2 ) \
        _INTRFMEMBP( x, SetRenderState, p1, p2 )
    #define IDirect3DDevice2_GetLightState( x, p1, p2 ) \
        _INTRFMEMBP( x, GetLightState, p1, p2 )
    #define IDirect3DDevice2_SetLightState( x, p1, p2 ) \
        _INTRFMEMBP( x, SetLightState, p1, p2 )
    #define IDirect3DDevice2_SetTransform( x, p1, p2 ) \
        _INTRFMEMBP( x, SetTransform, p1, p2 )
    #define IDirect3DDevice2_GetTransform( x, p1, p2 ) \
        _INTRFMEMBP( x, GetTransform, p1, p2 )
    #define IDirect3DDevice2_MultiplyTransform( x, p1, p2 ) \
        _INTRFMEMBP( x, MultiplyTransform, p1, p2 )
    #define IDirect3DDevice2_DrawPrimitive( x, p1, p2, p3, p4, p5 ) \
        _INTRFMEMBP( x, DrawPrimitive, p1, p2, p3, p4, p5 )
    #define IDirect3DDevice2_DrawIndexedPrimitive( x, p1, p2, p3, p4, p5, p6, p7 ) \
        _INTRFMEMBP( x, DrawIndexedPrimitive, p1, p2, p3, p4, p5, p6, p7 )
    #define IDirect3DDevice2_SetClipStatus( x, p ) \
        _INTRFMEMBP( x, SetClipStatus, p )
    #define IDirect3DDevice2_GetClipStatus( x, p ) \
        _INTRFMEMBP( x, GetClipStatus, p )
    #define IDirect3DMaterial2_QueryInterface( x, p1, p2 ) \
        _INTRFMEMBP( x, QueryInterface, p1, p2 )
    #define IDirect3DMaterial2_AddRef( x ) \
        _INTRFMEMBN( x, AddRef )
    #define IDirect3DMaterial2_Release( x ) \
        _INTRFMEMBN( x, Release )
    #define IDirect3DMaterial2_SetMaterial( x, p ) \
        _INTRFMEMBP( x, SetMaterial, p )
    #define IDirect3DMaterial2_GetMaterial( x, p ) \
        _INTRFMEMBP( x, GetMaterial, p )
    #define IDirect3DMaterial2_GetHandle( x, p1, p2 ) \
        _INTRFMEMBP( x, GetHandle, p1, p2 )
    #define IDirect3DTexture2_QueryInterface( x, p1, p2 ) \
        _INTRFMEMBP( x, QueryInterface, p1, p2 )
    #define IDirect3DTexture2_AddRef( x ) \
        _INTRFMEMBN( x, AddRef )
    #define IDirect3DTexture2_Release( x ) \
        _INTRFMEMBN( x, Release )
    #define IDirect3DTexture2_GetHandle( x, p1, p2 ) \
        _INTRFMEMBP( x, GetHandle, p1, p2 )
    #define IDirect3DTexture2_PaletteChanged( x, p1, p2 ) \
        _INTRFMEMBP( x, PaletteChanged, p1, p2 )
    #define IDirect3DTexture2_Load( x, p ) \
        _INTRFMEMBP( x, Load, p )
    #define IDirect3DViewport2_QueryInterface( x, p1, p2 ) \
        _INTRFMEMBP( x, QueryInterface, p1, p2 )
    #define IDirect3DViewport2_AddRef( x ) \
        _INTRFMEMBN( x, AddRef )
    #define IDirect3DViewport2_Release( x ) \
        _INTRFMEMBN( x, Release )
    #define IDirect3DViewport2_Initialize( x, p ) \
        _INTRFMEMBP( x, Initialize, p )
    #define IDirect3DViewport2_GetViewport( x, p ) \
        _INTRFMEMBP( x, GetViewport, p )
    #define IDirect3DViewport2_SetViewport( x, p ) \
        _INTRFMEMBP( x, SetViewport, p )
    #define IDirect3DViewport2_TransformVertices( x, p1, p2, p3, p4 ) \
        _INTRFMEMBP( x, TransformVertices, p1, p2, p3, p4 )
    #define IDirect3DViewport2_LightElements( x, p1, p2 ) \
        _INTRFMEMBP( x, LightElements, p1, p2 )
    #define IDirect3DViewport2_SetBackground( x, p ) \
        _INTRFMEMBP( x, SetBackground, p )
    #define IDirect3DViewport2_GetBackground( x, p1, p2 ) \
        _INTRFMEMBP( x, GetBackground, p1, p2 )
    #define IDirect3DViewport2_SetBackgroundDepth( x, p ) \
        _INTRFMEMBP( x, SetBackgroundDepth, p )
    #define IDirect3DViewport2_GetBackgroundDepth( x, p1, p2 ) \
        _INTRFMEMBP( x, GetBackgroundDepth, p1, p2 )
    #define IDirect3DViewport2_Clear( x, p1, p2, p3 ) \
        _INTRFMEMBP( x, Clear, p1, p2, p3 )
    #define IDirect3DViewport2_AddLight( x, p ) \
        _INTRFMEMBP( x, AddLight, p )
    #define IDirect3DViewport2_DeleteLight( x, p ) \
        _INTRFMEMBP( x, DeleteLight, p )
    #define IDirect3DViewport2_NextLight( x, p1, p2, p3 ) \
        _INTRFMEMBP( x, NextLight, p1, p2, p3 )
    #define IDirect3DViewport2_GetViewport2( x, p ) \
        _INTRFMEMBP( x, GetViewport2, p )
    #define IDirect3DViewport2_SetViewport2( x, p ) \
        _INTRFMEMBP( x, SetViewport2, p )
#endif
#if (DIRECT3D_VERSION >= 0x0600)
    #define IDirect3D3_QueryInterface( x, p1, p2 ) \
        _INTRFMEMBP( x, QueryInterface, p1, p2 )
    #define IDirect3D3_AddRef( x ) \
        _INTRFMEMBN( x, AddRef )
    #define IDirect3D3_Release( x ) \
        _INTRFMEMBN( x, Release )
    #define IDirect3D3_EnumDevices( x, p1, p2 ) \
        _INTRFMEMBP( x, EnumDevices, p1, p2 )
    #define IDirect3D3_CreateLight( x, p1, p2 ) \
        _INTRFMEMBP( x, CreateLight, p1, p2 )
    #define IDirect3D3_CreateMaterial( x, p1, p2 ) \
        _INTRFMEMBP( x, CreateMaterial, p1, p2 )
    #define IDirect3D3_CreateViewport( x, p1, p2 ) \
        _INTRFMEMBP( x, CreateViewport, p1, p2 )
    #define IDirect3D3_FindDevice( x, p1, p2 ) \
        _INTRFMEMBP( x, FindDevice, p1, p2 )
    #define IDirect3D3_CreateDevice( x, p1, p2, p3, p4 ) \
        _INTRFMEMBP( x, CreateDevice, p1, p2, p3, p4 )
    #define IDirect3D3_CreateVertexBuffer( x, p1, p2, p3, p4 ) \
        _INTRFMEMBP( x, CreateVertexBuffer, p1, p2, p3, p4 )
    #define IDirect3D3_EnumZBufferFormats( x, p1, p2, p3 ) \
        _INTRFMEMBP( x, EnumZBufferFormats, p1, p2, p3 )
    #define IDirect3D3_EvictManagedTextures( x ) \
        _INTRFMEMBN( x, EvictManagedTextures )
    #define IDirect3DDevice3_QueryInterface( x, p1, p2 ) \
        _INTRFMEMBP( x, QueryInterface, p1, p2 )
    #define IDirect3DDevice3_AddRef( x ) \
        _INTRFMEMBN( x, AddRef )
    #define IDirect3DDevice3_Release( x ) \
        _INTRFMEMBN( x, Release )
    #define IDirect3DDevice3_GetCaps( x, p1, p2 ) \
        _INTRFMEMBP( x, GetCaps, p1, p2 )
    #define IDirect3DDevice3_GetStats( x, p ) \
        _INTRFMEMBP( x, GetStats, p )
    #define IDirect3DDevice3_AddViewport( x, p ) \
        _INTRFMEMBP( x, AddViewport, p )
    #define IDirect3DDevice3_DeleteViewport( x, p ) \
        _INTRFMEMBP( x, DeleteViewport, p )
    #define IDirect3DDevice3_NextViewport( x, p1, p2, p3 ) \
        _INTRFMEMBP( x, NextViewport, p1, p2, p3 )
    #define IDirect3DDevice3_EnumTextureFormats( x, p1, p2 ) \
        _INTRFMEMBP( x, EnumTextureFormats, p1, p2 )
    #define IDirect3DDevice3_BeginScene( x ) \
        _INTRFMEMBN( x, BeginScene )
    #define IDirect3DDevice3_EndScene( x ) \
        _INTRFMEMBN( x, EndScene )
    #define IDirect3DDevice3_GetDirect3D( x, p ) \
        _INTRFMEMBP( x, GetDirect3D, p )
    #define IDirect3DDevice3_SetCurrentViewport( x, p ) \
        _INTRFMEMBP( x, SetCurrentViewport, p )
    #define IDirect3DDevice3_GetCurrentViewport( x, p ) \
        _INTRFMEMBP( x, GetCurrentViewport, p )
    #define IDirect3DDevice3_SetRenderTarget( x, p1, p2 ) \
        _INTRFMEMBP( x, SetRenderTarget, p1, p2 )
    #define IDirect3DDevice3_GetRenderTarget( x, p ) \
        _INTRFMEMBP( x, GetRenderTarget, p )
    #define IDirect3DDevice3_Begin( x, p1, p2, p3 ) \
        _INTRFMEMBP( x, Begin, p1, p2, p3 )
    #define IDirect3DDevice3_BeginIndexed( x, p1, p2, p3, p4, p5 ) \
        _INTRFMEMBP( x, BeginIndexed, p1, p2, p3, p4, p5 )
    #define IDirect3DDevice3_Vertex( x, p ) \
        _INTRFMEMBP( x, Vertex, p )
    #define IDirect3DDevice3_Index( x, p ) \
        _INTRFMEMBP( x, Index, p )
    #define IDirect3DDevice3_End( x, p ) \
        _INTRFMEMBP( x, End, p )
    #define IDirect3DDevice3_GetRenderState( x, p1, p2 ) \
        _INTRFMEMBP( x, GetRenderState, p1, p2 )
    #define IDirect3DDevice3_SetRenderState( x, p1, p2 ) \
        _INTRFMEMBP( x, SetRenderState, p1, p2 )
    #define IDirect3DDevice3_GetLightState( x, p1, p2 ) \
        _INTRFMEMBP( x, GetLightState, p1, p2 )
    #define IDirect3DDevice3_SetLightState( x, p1, p2 ) \
        _INTRFMEMBP( x, SetLightState, p1, p2 )
    #define IDirect3DDevice3_SetTransform( x, p1, p2 ) \
        _INTRFMEMBP( x, SetTransform, p1, p2 )
    #define IDirect3DDevice3_GetTransform( x, p1, p2 ) \
        _INTRFMEMBP( x, GetTransform, p1, p2 )
    #define IDirect3DDevice3_MultiplyTransform( x, p1, p2 ) \
        _INTRFMEMBP( x, MultiplyTransform, p1, p2 )
    #define IDirect3DDevice3_DrawPrimitive( x, p1, p2, p3, p4, p5 ) \
        _INTRFMEMBP( x, DrawPrimitive, p1, p2, p3, p4, p5 )
    #define IDirect3DDevice3_DrawIndexedPrimitive( x, p1, p2, p3, p4, p5, p6, p7 ) \
        _INTRFMEMBP( x, DrawIndexedPrimitive, p1, p2, p3, p4, p5, p6, p7 )
    #define IDirect3DDevice3_SetClipStatus( x, p ) \
        _INTRFMEMBP( x, SetClipStatus, p )
    #define IDirect3DDevice3_GetClipStatus( x, p ) \
        _INTRFMEMBP( x, GetClipStatus, p )
    #define IDirect3DDevice3_DrawPrimitiveStrided( x, p1, p2, p3, p4, p5 ) \
        _INTRFMEMBP( x, DrawPrimitiveStrided, p1, p2, p3, p4, p5 )
    #define IDirect3DDevice3_DrawIndexedPrimitiveStrided( x, p1, p2, p3, p4, p5, p6, p7 ) \
        _INTRFMEMBP( x, DrawIndexedPrimitiveStrided, p1, p2, p3, p4, p5, p6, p7 )
    #define IDirect3DDevice3_DrawPrimitiveVB( x, p1, p2, p3, p4, p5 ) \
        _INTRFMEMBP( x, DrawPrimitiveVB, p1, p2, p3, p4, p5 )
    #define IDirect3DDevice3_DrawIndexedPrimitiveVB( x, p1, p2, p3, p4, p5 ) \
        _INTRFMEMBP( x, DrawIndexedPrimitiveVB, p1, p2, p3, p4, p5 )
    #define IDirect3DDevice3_ComputeSphereVisibility( x, p1, p2, p3, p4, p5 ) \
        _INTRFMEMBP( x, ComputeSphereVisibility, p1, p2, p3, p4, p5 )
    #define IDirect3DDevice3_GetTexture( x, p1, p2 ) \
        _INTRFMEMBP( x, GetTexture, p1, p2 )
    #define IDirect3DDevice3_SetTexture( x, p1, p2 ) \
        _INTRFMEMBP( x, SetTexture, p1, p2 )
    #define IDirect3DDevice3_GetTextureStageState( x, p1, p2, p3 ) \
        _INTRFMEMBP( x, GetTextureStageState, p1, p2, p3 )
    #define IDirect3DDevice3_SetTextureStageState( x, p1, p2, p3 ) \
        _INTRFMEMBP( x, SetTextureStageState, p1, p2, p3 )
    #define IDirect3DDevice3_ValidateDevice( x, p ) \
        _INTRFMEMBP( x, ValidateDevice, p )
    #define IDirect3DMaterial3_QueryInterface( x, p1, p2 ) \
        _INTRFMEMBP( x, QueryInterface, p1, p2 )
    #define IDirect3DMaterial3_AddRef( x ) \
        _INTRFMEMBN( x, AddRef )
    #define IDirect3DMaterial3_Release( x ) \
        _INTRFMEMBN( x, Release )
    #define IDirect3DMaterial3_SetMaterial( x, p ) \
        _INTRFMEMBP( x, SetMaterial, p )
    #define IDirect3DMaterial3_GetMaterial( x, p ) \
        _INTRFMEMBP( x, GetMaterial, p )
    #define IDirect3DMaterial3_GetHandle( x, p1, p2 ) \
        _INTRFMEMBP( x, GetHandle, p1, p2 )
    #define IDirect3DViewport3_QueryInterface( x, p1, p2 ) \
        _INTRFMEMBP( x, QueryInterface, p1, p2 )
    #define IDirect3DViewport3_AddRef( x ) \
        _INTRFMEMBN( x, AddRef )
    #define IDirect3DViewport3_Release( x ) \
        _INTRFMEMBN( x, Release )
    #define IDirect3DViewport3_Initialize( x, p ) \
        _INTRFMEMBP( x, Initialize, p )
    #define IDirect3DViewport3_GetViewport( x, p ) \
        _INTRFMEMBP( x, GetViewport, p )
    #define IDirect3DViewport3_SetViewport( x, p ) \
        _INTRFMEMBP( x, SetViewport, p )
    #define IDirect3DViewport3_TransformVertices( x, p1, p2, p3, p4 ) \
        _INTRFMEMBP( x, TransformVertices, p1, p2, p3, p4 )
    #define IDirect3DViewport3_LightElements( x, p1, p2 ) \
        _INTRFMEMBP( x, LightElements, p1, p2 )
    #define IDirect3DViewport3_SetBackground( x, p ) \
        _INTRFMEMBP( x, SetBackground, p )
    #define IDirect3DViewport3_GetBackground( x, p1, p2 ) \
        _INTRFMEMBP( x, GetBackground, p1, p2 )
    #define IDirect3DViewport3_SetBackgroundDepth( x, p ) \
        _INTRFMEMBP( x, SetBackgroundDepth, p )
    #define IDirect3DViewport3_GetBackgroundDepth( x, p1, p2 ) \
        _INTRFMEMBP( x, GetBackgroundDepth, p1, p2 )
    #define IDirect3DViewport3_Clear( x, p1, p2, p3 ) \
        _INTRFMEMBP( x, Clear, p1, p2, p3 )
    #define IDirect3DViewport3_AddLight( x, p ) \
        _INTRFMEMBP( x, AddLight, p )
    #define IDirect3DViewport3_DeleteLight( x, p ) \
        _INTRFMEMBP( x, DeleteLight, p )
    #define IDirect3DViewport3_NextLight( x, p1, p2, p3 ) \
        _INTRFMEMBP( x, NextLight, p1, p2, p3 )
    #define IDirect3DViewport3_GetViewport2( x, p ) \
        _INTRFMEMBP( x, GetViewport2, p )
    #define IDirect3DViewport3_SetViewport2( x, p ) \
        _INTRFMEMBP( x, SetViewport2, p )
    #define IDirect3DViewport3_SetBackgroundDepth2( x, p ) \
        _INTRFMEMBP( x, SetBackgroundDepth2, p )
    #define IDirect3DViewport3_GetBackgroundDepth2( x, p1, p2 ) \
        _INTRFMEMBP( x, GetBackgroundDepth2, p1, p2 )
    #define IDirect3DViewport3_Clear2( x, p1, p2, p3, p4, p5, p6 ) \
        _INTRFMEMBP( x, Clear2, p1, p2, p3, p4, p5, p6 )
    #define IDirect3DVertexBuffer_QueryInterface( x, p1, p2 ) \
        _INTRFMEMBP( x, QueryInterface, p1, p2 )
    #define IDirect3DVertexBuffer_AddRef( x ) \
        _INTRFMEMBN( x, AddRef )
    #define IDirect3DVertexBuffer_Release( x ) \
        _INTRFMEMBN( x, Release )
    #define IDirect3DVertexBuffer_Lock( x, p1, p2, p3 ) \
        _INTRFMEMBP( x, Lock, p1, p2, p3 )
    #define IDirect3DVertexBuffer_Unlock( x ) \
        _INTRFMEMBN( x, Unlock )
    #define IDirect3DVertexBuffer_ProcessVertices( x, p1, p2, p3, p4, p5, p6, p7 ) \
        _INTRFMEMBP( x, ProcessVertices, p1, p2, p3, p4, p5, p6, p7 )
    #define IDirect3DVertexBuffer_GetVertexBufferDesc( x, p ) \
        _INTRFMEMBP( x, GetVertexBufferDesc, p )
    #define IDirect3DVertexBuffer_Optimize( x, p1, p2 ) \
        _INTRFMEMBP( x, Optimize, p1, p2 )
#endif
#if (DIRECT3D_VERSION >= 0x0700)
    #define IDirect3D7_QueryInterface( x, p1, p2 ) \
        _INTRFMEMBP( x, QueryInterface, p1, p2 )
    #define IDirect3D7_AddRef( x ) \
        _INTRFMEMBN( x, AddRef )
    #define IDirect3D7_Release( x ) \
        _INTRFMEMBN( x, Release )
    #define IDirect3D7_EnumDevices( x, p1, p2 ) \
        _INTRFMEMBP( x, EnumDevices, p1, p2 )
    #define IDirect3D7_CreateDevice( x, p1, p2, p3 ) \
        _INTRFMEMBP( x, CreateDevice, p1, p2, p3 )
    #define IDirect3D7_CreateVertexBuffer( x, p1, p2, p3 ) \
        _INTRFMEMBP( x, CreateVertexBuffer, p1, p2, p3 )
    #define IDirect3D7_EnumZBufferFormats( x, p1, p2, p3 ) \
        _INTRFMEMBP( x, EnumZBufferFormats, p1, p2, p3 )
    #define IDirect3D7_EvictManagedTextures( x ) \
        _INTRFMEMBN( x, EvictManagedTextures )
    #define IDirect3DDevice7_QueryInterface( x, p1, p2 ) \
        _INTRFMEMBP( x, QueryInterface, p1, p2 )
    #define IDirect3DDevice7_AddRef( x ) \
        _INTRFMEMBN( x, AddRef )
    #define IDirect3DDevice7_Release( x ) \
        _INTRFMEMBN( x, Release )
    #define IDirect3DDevice7_GetCaps( x, p ) \
        _INTRFMEMBP( x, GetCaps, p )
    #define IDirect3DDevice7_EnumTextureFormats( x, p1, p2 ) \
        _INTRFMEMBP( x, EnumTextureFormats, p1, p2 )
    #define IDirect3DDevice7_BeginScene( x ) \
        _INTRFMEMBN( x, BeginScene )
    #define IDirect3DDevice7_EndScene( x ) \
        _INTRFMEMBN( x, EndScene )
    #define IDirect3DDevice7_GetDirect3D( x, p ) \
        _INTRFMEMBP( x, GetDirect3D, p )
    #define IDirect3DDevice7_SetRenderTarget( x, p1, p2 ) \
        _INTRFMEMBP( x, SetRenderTarget, p1, p2 )
    #define IDirect3DDevice7_GetRenderTarget( x, p ) \
        _INTRFMEMBP( x, GetRenderTarget, p )
    #define IDirect3DDevice7_Clear( x, p1, p2, p3, p4, p5, p6 ) \
        _INTRFMEMBP( x, Clear, p1, p2, p3, p4, p5, p6 )
    #define IDirect3DDevice7_SetTransform( x, p1, p2 ) \
        _INTRFMEMBP( x, SetTransform, p1, p2 )
    #define IDirect3DDevice7_GetTransform( x, p1, p2 ) \
        _INTRFMEMBP( x, GetTransform, p1, p2 )
    #define IDirect3DDevice7_SetViewport( x, p ) \
        _INTRFMEMBP( x, SetViewport, p )
    #define IDirect3DDevice7_MultiplyTransform( x, p1, p2 ) \
        _INTRFMEMBP( x, MultiplyTransform, p1, p2 )
    #define IDirect3DDevice7_GetViewport( x, p ) \
        _INTRFMEMBP( x, GetViewport, p )
    #define IDirect3DDevice7_SetMaterial( x, p ) \
        _INTRFMEMBP( x, SetMaterial, p )
    #define IDirect3DDevice7_GetMaterial( x, p ) \
        _INTRFMEMBP( x, GetMaterial, p )
    #define IDirect3DDevice7_SetLight( x, p1, p2 ) \
        _INTRFMEMBP( x, SetLight, p1, p2 )
    #define IDirect3DDevice7_GetLight( x, p1, p2 ) \
        _INTRFMEMBP( x, GetLight, p1, p2 )
    #define IDirect3DDevice7_SetRenderState( x, p1, p2 ) \
        _INTRFMEMBP( x, SetRenderState, p1, p2 )
    #define IDirect3DDevice7_GetRenderState( x, p1, p2 ) \
        _INTRFMEMBP( x, GetRenderState, p1, p2 )
    #define IDirect3DDevice7_BeginStateBlock( x ) \
        _INTRFMEMBN( x, BeginStateBlock )
    #define IDirect3DDevice7_EndStateBlock( x, p ) \
        _INTRFMEMBP( x, EndStateBlock, p )
    #define IDirect3DDevice7_PreLoad( x, p ) \
        _INTRFMEMBP( x, PreLoad, p )
    #define IDirect3DDevice7_DrawPrimitive( x, p1, p2, p3, p4, p5 ) \
        _INTRFMEMBP( x, DrawPrimitive, p1, p2, p3, p4, p5 )
    #define IDirect3DDevice7_DrawIndexedPrimitive( x, p1, p2, p3, p4, p5, p6, p7 ) \
        _INTRFMEMBP( x, DrawIndexedPrimitive, p1, p2, p3, p4, p5, p6, p7 )
    #define IDirect3DDevice7_SetClipStatus( x, p ) \
        _INTRFMEMBP( x, SetClipStatus, p )
    #define IDirect3DDevice7_GetClipStatus( x, p ) \
        _INTRFMEMBP( x, GetClipStatus, p )
    #define IDirect3DDevice7_DrawPrimitiveStrided( x, p1, p2, p3, p4, p5 ) \
        _INTRFMEMBP( x, DrawPrimitiveStrided, p1, p2, p3, p4, p5 )
    #define IDirect3DDevice7_DrawIndexedPrimitiveStrided( x, p1, p2, p3, p4, p5, p6, p7 ) \
        _INTRFMEMBP( x, DrawIndexedPrimitiveStrided, p1, p2, p3, p4, p5, p6, p7 )
    #define IDirect3DDevice7_DrawPrimitiveVB( x, p1, p2, p3, p4, p5 ) \
        _INTRFMEMBP( x, DrawPrimitiveVB, p1, p2, p3, p4, p5 )
    #define IDirect3DDevice7_DrawIndexedPrimitiveVB( x, p1, p2, p3, p4, p5, p6, p7 ) \
        _INTRFMEMBP( x, DrawIndexedPrimitiveVB, p1, p2, p3, p4, p5, p6, p7 )
    #define IDirect3DDevice7_ComputeSphereVisiblity( x, p1, p2, p3, p4, p5 ) \
        _INTRFMEMBP( x, ComputeSphereVisibility, p1, p2, p3, p4, p5 )
    #define IDirect3DDevice7_GetTexture( x, p1, p2 ) \
        _INTRFMEMBP( x, GetTexture, p1, p2 )
    #define IDirect3DDevice7_SetTexture( x, p1, p2 ) \
        _INTRFMEMBP( x, SetTexture, p1, p2 )
    #define IDirect3DDevice7_GetTextureStageState( x, p1, p2, p3 ) \
        _INTRFMEMBP( x, GetTextureStageState, p1, p2, p3 )
    #define IDirect3DDevice7_SetTextureStageState( x, p1, p2, p3 ) \
        _INTRFMEMBP( x, SetTextureStageState, p1, p2, p3 )
    #define IDirect3DDevice7_ValidateDevice( x, p ) \
        _INTRFMEMBP( x, ValidateDevice, p )
    #define IDirect3DDevice7_ApplyStateBlock( x, p ) \
        _INTRFMEMBP( x, ApplyStateBlock, p )
    #define IDirect3DDevice7_CaptureStateBlock( x, p ) \
        _INTRFMEMBP( x, CaptureStateBlock, p )
    #define IDirect3DDevice7_DeleteStateBlock( x, p ) \
        _INTRFMEMBP( x, DeleteStateBlock, p )
    #define IDirect3DDevice7_CreateStateBlock( x, p1, p2 ) \
        _INTRFMEMBP( x, CreateStateBlock, p1, p2 )
    #define IDirect3DDevice7_Load( x, p1, p2, p3, p4, p5 ) \
        _INTRFMEMBP( x, Load, p1, p2, p3, p4, p5 )
    #define IDirect3DDevice7_LightEnable( x, p1, p2 ) \
        _INTRFMEMBP( x, LightEnable, p1, p2 )
    #define IDirect3DDevice7_GetLightEnable( x, p1, p2 ) \
        _INTRFMEMBP( x, GetLightEnable, p1, p2 )
    #define IDirect3DDevice7_SetClipPlane( x, p1, p2 ) \
        _INTRFMEMBP( x, SetClipPlane, p1, p2 )
    #define IDirect3DDevice7_GetClipPlane( x, p1, p2 ) \
        _INTRFMEMBP( x, GetClipPlane, p1, p2 )
    #define IDirect3DDevice7_GetInfo( x, p1, p2, p3 ) \
        _INTRFMEMBP( x, GetInfo, p1, p2, p3 )
    #define IDirect3DVertexBuffer7_QueryInterface( x, p1, p2 ) \
        _INTRFMEMBP( x, QueryInterface, p1, p2 )
    #define IDirect3DVertexBuffer7_AddRef( x ) \
        _INTRFMEMBN( x, AddRef )
    #define IDirect3DVertexBuffer7_Release( x ) \
        _INTRFMEMBN( x, Release )
    #define IDirect3DVertexBuffer7_Lock( x, p1, p2, p3 ) \
        _INTRFMEMBP( x, Lock, p1, p2, p3 )
    #define IDirect3DVertexBuffer7_Unlock( x ) \
        _INTRFMEMBN( x, Unlock )
    #define IDirect3DVertexBuffer7_ProcessVertices( x, p1, p2, p3, p4, p5, p6, p7 ) \
        _INTRFMEMBP( x, ProcessVertices, p1, p2, p3, p4, p5, p6, p7 )
    #define IDirect3DVertexBuffer7_GetVertexBufferDesc( x, p ) \
        _INTRFMEMBP( x, GetVertexBufferDesc, p )
    #define IDirect3DVertexBuffer7_Optimize( x, p1, p2 ) \
        _INTRFMEMBP( x, Optimize, p1, p2 )
    #define IDirect3DVertexBuffer7_ProcessVerticesStrided( x, p1, p2, p3, p4, p5, p6, p7 ) \
        _INTRFMEMBP( x, ProcessVerticesStrided, p1, p2, p3, p4, p5, p6, p7 )
#endif

#endif /* (DIRECT3D_VERSION < 0x0800) */

#ifdef __cplusplus
} /* extern "C" */
#endif

/* GUIDs */
EXTERN_C const IID  __cdecl IID_IDirect3D;
EXTERN_C const IID  __cdecl IID_IDirect3DDevice;
EXTERN_C const IID  __cdecl IID_IDirect3DExecuteBuffer;
EXTERN_C const IID  __cdecl IID_IDirect3DLight;
EXTERN_C const IID  __cdecl IID_IDirect3DMaterial;
EXTERN_C const IID  __cdecl IID_IDirect3DTexture;
EXTERN_C const IID  __cdecl IID_IDirect3DViewport;
#if (DIRECT3D_VERSION >= 0x0500)
EXTERN_C const IID  __cdecl IID_IDirect3D2;
EXTERN_C const IID  __cdecl IID_IDirect3DDevice2;
EXTERN_C const IID  __cdecl IID_IDirect3DMaterial2;
EXTERN_C const IID  __cdecl IID_IDirect3DTexture2;
EXTERN_C const IID  __cdecl IID_IDirect3DViewport2;
EXTERN_C const IID  __cdecl IID_IDirect3DRampDevice;
EXTERN_C const IID  __cdecl IID_IDirect3DRGBDevice;
EXTERN_C const IID  __cdecl IID_IDirect3DHALDevice;
EXTERN_C const IID  __cdecl IID_IDirect3DMMXDevice;
#endif
#if (DIRECT3D_VERSION >= 0x0600)
EXTERN_C const IID  __cdecl IID_IDirect3D3;
EXTERN_C const IID  __cdecl IID_IDirect3DDevice3;
EXTERN_C const IID  __cdecl IID_IDirect3DMaterial3;
EXTERN_C const IID  __cdecl IID_IDirect3DViewport3;
EXTERN_C const IID  __cdecl IID_IDirect3DVertexBuffer;
EXTERN_C const IID  __cdecl IID_IDirect3DRefDevice;
EXTERN_C const IID  __cdecl IID_IDirect3DNullDevice;
#endif
#if (DIRECT3D_VERSION >= 0x0700)
EXTERN_C const IID  __cdecl IID_IDirect3D7;
EXTERN_C const IID  __cdecl IID_IDirect3DDevice7;
EXTERN_C const IID  __cdecl IID_IDirect3DVertexBuffer7;
EXTERN_C const IID  __cdecl IID_IDirect3DTnLHalDevice;
#endif

#endif /* _D3D_H_ */
