#ifndef _D3DRMOBJ_H
#define _D3DRMOBJ_H

/* Direct3DRM definitions */

#include <objbase.h>
#define VIRTUAL
#include "d3drmdef.h"
#include "d3d.h"

#ifdef __cplusplus
extern "C" {
#endif

#define IUNKNOWN_METHODS(kind) \
    STDMETHOD(QueryInterface)(THIS_ REFIID,LPVOID*) kind; \
    STDMETHOD_(ULONG,AddRef)(THIS) kind; \
    STDMETHOD_(ULONG,Release)(THIS) kind

#define IDIRECT3DRMOBJECT_METHODS(kind) \
    STDMETHOD(Clone)(THIS_ LPUNKNOWN,REFIID,LPVOID*) kind; \
    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK,LPVOID) kind; \
    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK,LPVOID) kind; \
    STDMETHOD(SetAppData)(THIS_ DWORD) kind; \
    STDMETHOD_(DWORD,GetAppData)(THIS) kind; \
    STDMETHOD(SetName)(THIS_ LPCSTR) kind; \
    STDMETHOD(GetName)(THIS_ LPDWORD,LPSTR) kind; \
    STDMETHOD(GetClassName)(THIS_ LPDWORD,LPSTR) kind

#define WIN_TYPES(itype,ptype) \
    typedef interface itype *LP##ptype,**LPLP##ptype

WIN_TYPES(IDirect3DRMObject,DIRECT3DRMOBJECT);
WIN_TYPES(IDirect3DRMObject2,DIRECT3DRMOBJECT2);
WIN_TYPES(IDirect3DRMDevice,DIRECT3DRMDEVICE);
WIN_TYPES(IDirect3DRMDevice2,DIRECT3DRMDEVICE2);
WIN_TYPES(IDirect3DRMDevice3,DIRECT3DRMDEVICE3);
WIN_TYPES(IDirect3DRMViewport,DIRECT3DRMVIEWPORT);
WIN_TYPES(IDirect3DRMViewport2,DIRECT3DRMVIEWPORT2);
WIN_TYPES(IDirect3DRMFrame,DIRECT3DRMFRAME);
WIN_TYPES(IDirect3DRMFrame2,DIRECT3DRMFRAME2);
WIN_TYPES(IDirect3DRMFrame3,DIRECT3DRMFRAME3);
WIN_TYPES(IDirect3DRMVisual,DIRECT3DRMVISUAL);
WIN_TYPES(IDirect3DRMMesh,DIRECT3DRMMESH);
WIN_TYPES(IDirect3DRMMeshBuilder,DIRECT3DRMMESHBUILDER);
WIN_TYPES(IDirect3DRMMeshBuilder2,DIRECT3DRMMESHBUILDER2);
WIN_TYPES(IDirect3DRMMeshBuilder3,DIRECT3DRMMESHBUILDER3);
WIN_TYPES(IDirect3DRMFace,DIRECT3DRMFACE);
WIN_TYPES(IDirect3DRMFace2,DIRECT3DRMFACE2);
WIN_TYPES(IDirect3DRMLight,DIRECT3DRMLIGHT);
WIN_TYPES(IDirect3DRMTexture,DIRECT3DRMTEXTURE);
WIN_TYPES(IDirect3DRMTexture2,DIRECT3DRMTEXTURE2);
WIN_TYPES(IDirect3DRMTexture3,DIRECT3DRMTEXTURE3);
WIN_TYPES(IDirect3DRMWrap,DIRECT3DRMWRAP);
WIN_TYPES(IDirect3DRMMaterial,DIRECT3DRMMATERIAL);
WIN_TYPES(IDirect3DRMMaterial2,DIRECT3DRMMATERIAL2);
WIN_TYPES(IDirect3DRMInterpolator,DIRECT3DRMINTERPOLATOR);
WIN_TYPES(IDirect3DRMAnimation,DIRECT3DRMANIMATION);
WIN_TYPES(IDirect3DRMAnimation2,DIRECT3DRMANIMATION2);
WIN_TYPES(IDirect3DRMAnimationSet,DIRECT3DRMANIMATIONSET);
WIN_TYPES(IDirect3DRMAnimationSet2,DIRECT3DRMANIMATIONSET2);
WIN_TYPES(IDirect3DRMUserVisual,DIRECT3DRMUSERVISUAL);
WIN_TYPES(IDirect3DRMShadow,DIRECT3DRMSHADOW);
WIN_TYPES(IDirect3DRMShadow2,DIRECT3DRMSHADOW2);
WIN_TYPES(IDirect3DRMArray,DIRECT3DRMARRAY);
WIN_TYPES(IDirect3DRMObjectArray,DIRECT3DRMOBJECTARRAY);
WIN_TYPES(IDirect3DRMDeviceArray,DIRECT3DRMDEVICEARRAY);
WIN_TYPES(IDirect3DRMFaceArray,DIRECT3DRMFACEARRAY);
WIN_TYPES(IDirect3DRMViewportArray,DIRECT3DRMVIEWPORTARRAY);
WIN_TYPES(IDirect3DRMFrameArray,DIRECT3DRMFRAMEARRAY);
WIN_TYPES(IDirect3DRMAnimationArray,DIRECT3DRMANIMATIONARRAY);
WIN_TYPES(IDirect3DRMVisualArray,DIRECT3DRMVISUALARRAY);
WIN_TYPES(IDirect3DRMPickedArray,DIRECT3DRMPICKEDARRAY);
WIN_TYPES(IDirect3DRMPicked2Array,DIRECT3DRMPICKED2ARRAY);
WIN_TYPES(IDirect3DRMLightArray,DIRECT3DRMLIGHTARRAY);
WIN_TYPES(IDirect3DRMProgressiveMesh,DIRECT3DRMPROGRESSIVEMESH);
WIN_TYPES(IDirect3DRMClippedVisual,DIRECT3DRMCLIPPEDVISUAL);

DEFINE_GUID(CLSID_CDirect3DRMDevice,0x4fa3568e,0x623f,0x11cf,0xac,0x4a,0x0,0x0,0xc0,0x38,0x25,0xa1);
DEFINE_GUID(CLSID_CDirect3DRMViewport,0x4fa3568f,0x623f,0x11cf,0xac,0x4a,0x0,0x0,0xc0,0x38,0x25,0xa1);
DEFINE_GUID(CLSID_CDirect3DRMFrame,0x4fa35690,0x623f,0x11cf,0xac,0x4a,0x0,0x0,0xc0,0x38,0x25,0xa1);
DEFINE_GUID(CLSID_CDirect3DRMMesh,0x4fa35691,0x623f,0x11cf,0xac,0x4a,0x0,0x0,0xc0,0x38,0x25,0xa1);
DEFINE_GUID(CLSID_CDirect3DRMMeshBuilder,0x4fa35692,0x623f,0x11cf,0xac,0x4a,0x0,0x0,0xc0,0x38,0x25,0xa1);
DEFINE_GUID(CLSID_CDirect3DRMFace,0x4fa35693,0x623f,0x11cf,0xac,0x4a,0x0,0x0,0xc0,0x38,0x25,0xa1);
DEFINE_GUID(CLSID_CDirect3DRMLight,0x4fa35694,0x623f,0x11cf,0xac,0x4a,0x0,0x0,0xc0,0x38,0x25,0xa1);
DEFINE_GUID(CLSID_CDirect3DRMTexture,0x4fa35695,0x623f,0x11cf,0xac,0x4a,0x0,0x0,0xc0,0x38,0x25,0xa1);
DEFINE_GUID(CLSID_CDirect3DRMWrap,0x4fa35696,0x623f,0x11cf,0xac,0x4a,0x0,0x0,0xc0,0x38,0x25,0xa1);
DEFINE_GUID(CLSID_CDirect3DRMMaterial,0x4fa35697,0x623f,0x11cf,0xac,0x4a,0x0,0x0,0xc0,0x38,0x25,0xa1);
DEFINE_GUID(CLSID_CDirect3DRMAnimation,0x4fa35698,0x623f,0x11cf,0xac,0x4a,0x0,0x0,0xc0,0x38,0x25,0xa1);
DEFINE_GUID(CLSID_CDirect3DRMAnimationSet,0x4fa35699,0x623f,0x11cf,0xac,0x4a,0x0,0x0,0xc0,0x38,0x25,0xa1);
DEFINE_GUID(CLSID_CDirect3DRMUserVisual,0x4fa3569a,0x623f,0x11cf,0xac,0x4a,0x0,0x0,0xc0,0x38,0x25,0xa1);
DEFINE_GUID(CLSID_CDirect3DRMShadow,0x4fa3569b,0x623f,0x11cf,0xac,0x4a,0x0,0x0,0xc0,0x38,0x25,0xa1);
DEFINE_GUID(CLSID_CDirect3DRMViewportInterpolator,0xde9eaa1,0x3b84,0x11d0,0x9b,0x6d,0x0,0x0,0xc0,0x78,0x1b,0xc3);
DEFINE_GUID(CLSID_CDirect3DRMFrameInterpolator,0xde9eaa2,0x3b84,0x11d0,0x9b,0x6d,0x0,0x0,0xc0,0x78,0x1b,0xc3);
DEFINE_GUID(CLSID_CDirect3DRMMeshInterpolator,0xde9eaa3,0x3b84,0x11d0,0x9b,0x6d,0x0,0x0,0xc0,0x78,0x1b,0xc3);
DEFINE_GUID(CLSID_CDirect3DRMLightInterpolator,0xde9eaa6,0x3b84,0x11d0,0x9b,0x6d,0x0,0x0,0xc0,0x78,0x1b,0xc3);
DEFINE_GUID(CLSID_CDirect3DRMMaterialInterpolator,0xde9eaa7,0x3b84,0x11d0,0x9b,0x6d,0x0,0x0,0xc0,0x78,0x1b,0xc3);
DEFINE_GUID(CLSID_CDirect3DRMTextureInterpolator,0xde9eaa8,0x3b84,0x11d0,0x9b,0x6d,0x0,0x0,0xc0,0x78,0x1b,0xc3);
DEFINE_GUID(CLSID_CDirect3DRMProgressiveMesh,0x4516ec40,0x8f20,0x11d0,0x9b,0x6d,0x00,0x00,0xc0,0x78,0x1b,0xc3);
DEFINE_GUID(CLSID_CDirect3DRMClippedVisual,0x5434e72d,0x6d66,0x11d1,0xbb,0xb,0x0,0x0,0xf8,0x75,0x86,0x5a);

DEFINE_GUID(IID_IDirect3DRMObject,0xeb16cb00,0xd271,0x11ce,0xac,0x48,0x0,0x0,0xc0,0x38,0x25,0xa1);
DEFINE_GUID(IID_IDirect3DRMObject2,0x4516ec7c,0x8f20,0x11d0,0x9b,0x6d,0x00,0x00,0xc0,0x78,0x1b,0xc3);
DEFINE_GUID(IID_IDirect3DRMDevice,0xe9e19280,0x6e05,0x11cf,0xac,0x4a,0x0,0x0,0xc0,0x38,0x25,0xa1);
DEFINE_GUID(IID_IDirect3DRMDevice2,0x4516ec78,0x8f20,0x11d0,0x9b,0x6d,0x00,0x00,0xc0,0x78,0x1b,0xc3);
DEFINE_GUID(IID_IDirect3DRMDevice3,0x549f498b,0xbfeb,0x11d1,0x8e,0xd8,0x0,0xa0,0xc9,0x67,0xa4,0x82);
DEFINE_GUID(IID_IDirect3DRMViewport,0xeb16cb02,0xd271,0x11ce,0xac,0x48,0x0,0x0,0xc0,0x38,0x25,0xa1);
DEFINE_GUID(IID_IDirect3DRMViewport2,0x4a1b1be6,0xbfed,0x11d1,0x8e,0xd8,0x0,0xa0,0xc9,0x67,0xa4,0x82);
DEFINE_GUID(IID_IDirect3DRMFrame,0xeb16cb03,0xd271,0x11ce,0xac,0x48,0x0,0x0,0xc0,0x38,0x25,0xa1);
DEFINE_GUID(IID_IDirect3DRMFrame2,0xc3dfbd60,0x3988,0x11d0,0x9e,0xc2,0x0,0x0,0xc0,0x29,0x1a,0xc3);
DEFINE_GUID(IID_IDirect3DRMFrame3,0xff6b7f70,0xa40e,0x11d1,0x91,0xf9,0x0,0x0,0xf8,0x75,0x8e,0x66);
DEFINE_GUID(IID_IDirect3DRMVisual,0xeb16cb04,0xd271,0x11ce,0xac,0x48,0x0,0x0,0xc0,0x38,0x25,0xa1);
DEFINE_GUID(IID_IDirect3DRMMesh,0xa3a80d01,0x6e12,0x11cf,0xac,0x4a,0x0,0x0,0xc0,0x38,0x25,0xa1);
DEFINE_GUID(IID_IDirect3DRMMeshBuilder,0xa3a80d02,0x6e12,0x11cf,0xac,0x4a,0x0,0x0,0xc0,0x38,0x25,0xa1);
DEFINE_GUID(IID_IDirect3DRMMeshBuilder2,0x4516ec77,0x8f20,0x11d0,0x9b,0x6d,0x0,0x0,0xc0,0x78,0x1b,0xc3);
DEFINE_GUID(IID_IDirect3DRMMeshBuilder3,0x4516ec82,0x8f20,0x11d0,0x9b,0x6d,0x00,0x00,0xc0,0x78,0x1b,0xc3);
DEFINE_GUID(IID_IDirect3DRMFace,0xeb16cb07,0xd271,0x11ce,0xac,0x48,0x0,0x0,0xc0,0x38,0x25,0xa1);
DEFINE_GUID(IID_IDirect3DRMFace2,0x4516ec81,0x8f20,0x11d0,0x9b,0x6d,0x00,0x00,0xc0,0x78,0x1b,0xc3);
DEFINE_GUID(IID_IDirect3DRMLight,0xeb16cb08,0xd271,0x11ce,0xac,0x48,0x0,0x0,0xc0,0x38,0x25,0xa1);
DEFINE_GUID(IID_IDirect3DRMTexture,0xeb16cb09,0xd271,0x11ce,0xac,0x48,0x0,0x0,0xc0,0x38,0x25,0xa1);
DEFINE_GUID(IID_IDirect3DRMTexture2,0x120f30c0,0x1629,0x11d0,0x94,0x1c,0x0,0x80,0xc8,0xc,0xfa,0x7b);
DEFINE_GUID(IID_IDirect3DRMTexture3,0xff6b7f73,0xa40e,0x11d1,0x91,0xf9,0x0,0x0,0xf8,0x75,0x8e,0x66);
DEFINE_GUID(IID_IDirect3DRMWrap,0xeb16cb0a,0xd271,0x11ce,0xac,0x48,0x0,0x0,0xc0,0x38,0x25,0xa1);
DEFINE_GUID(IID_IDirect3DRMMaterial,0xeb16cb0b,0xd271,0x11ce,0xac,0x48,0x0,0x0,0xc0,0x38,0x25,0xa1);
DEFINE_GUID(IID_IDirect3DRMMaterial2,0xff6b7f75,0xa40e,0x11d1,0x91,0xf9,0x0,0x0,0xf8,0x75,0x8e,0x66);
DEFINE_GUID(IID_IDirect3DRMAnimation,0xeb16cb0d,0xd271,0x11ce,0xac,0x48,0x0,0x0,0xc0,0x38,0x25,0xa1);
DEFINE_GUID(IID_IDirect3DRMAnimation2,0xff6b7f77,0xa40e,0x11d1,0x91,0xf9,0x0,0x0,0xf8,0x75,0x8e,0x66);
DEFINE_GUID(IID_IDirect3DRMAnimationSet,0xeb16cb0e,0xd271,0x11ce,0xac,0x48,0x0,0x0,0xc0,0x38,0x25,0xa1);
DEFINE_GUID(IID_IDirect3DRMAnimationSet2,0xff6b7f79,0xa40e,0x11d1,0x91,0xf9,0x0,0x0,0xf8,0x75,0x8e,0x66);
DEFINE_GUID(IID_IDirect3DRMObjectArray,0x242f6bc2,0x3849,0x11d0,0x9b,0x6d,0x0,0x0,0xc0,0x78,0x1b,0xc3);
DEFINE_GUID(IID_IDirect3DRMDeviceArray,0xeb16cb10,0xd271,0x11ce,0xac,0x48,0x0,0x0,0xc0,0x38,0x25,0xa1);
DEFINE_GUID(IID_IDirect3DRMViewportArray,0xeb16cb11,0xd271,0x11ce,0xac,0x48,0x0,0x0,0xc0,0x38,0x25,0xa1);
DEFINE_GUID(IID_IDirect3DRMFrameArray,0xeb16cb12,0xd271,0x11ce,0xac,0x48,0x0,0x0,0xc0,0x38,0x25,0xa1);
DEFINE_GUID(IID_IDirect3DRMVisualArray,0xeb16cb13,0xd271,0x11ce,0xac,0x48,0x0,0x0,0xc0,0x38,0x25,0xa1);
DEFINE_GUID(IID_IDirect3DRMLightArray,0xeb16cb14,0xd271,0x11ce,0xac,0x48,0x0,0x0,0xc0,0x38,0x25,0xa1);
DEFINE_GUID(IID_IDirect3DRMPickedArray,0xeb16cb16,0xd271,0x11ce,0xac,0x48,0x0,0x0,0xc0,0x38,0x25,0xa1);
DEFINE_GUID(IID_IDirect3DRMFaceArray,0xeb16cb17,0xd271,0x11ce,0xac,0x48,0x0,0x0,0xc0,0x38,0x25,0xa1);
DEFINE_GUID(IID_IDirect3DRMAnimationArray,0xd5f1cae0,0x4bd7,0x11d1,0xb9,0x74,0x0,0x60,0x8,0x3e,0x45,0xf3);
DEFINE_GUID(IID_IDirect3DRMUserVisual,0x59163de0,0x6d43,0x11cf,0xac,0x4a,0x0,0x0,0xc0,0x38,0x25,0xa1);
DEFINE_GUID(IID_IDirect3DRMShadow,0xaf359780,0x6ba3,0x11cf,0xac,0x4a,0x0,0x0,0xc0,0x38,0x25,0xa1);
DEFINE_GUID(IID_IDirect3DRMShadow2,0x86b44e25,0x9c82,0x11d1,0xbb,0xb,0x0,0xa0,0xc9,0x81,0xa0,0xa6);
DEFINE_GUID(IID_IDirect3DRMInterpolator,0x242f6bc1,0x3849,0x11d0,0x9b,0x6d,0x0,0x0,0xc0,0x78,0x1b,0xc3);
DEFINE_GUID(IID_IDirect3DRMProgressiveMesh,0x4516ec79,0x8f20,0x11d0,0x9b,0x6d,0x0,0x0,0xc0,0x78,0x1b,0xc3);
DEFINE_GUID(IID_IDirect3DRMPicked2Array,0x4516ec7b,0x8f20,0x11d0,0x9b,0x6d,0x0,0x0,0xc0,0x78,0x1b,0xc3);
DEFINE_GUID(IID_IDirect3DRMClippedVisual,0x5434e733,0x6d66,0x11d1,0xbb,0xb,0x0,0x0,0xf8,0x75,0x86,0x5a);

typedef void (__cdecl *D3DRMOBJECTCALLBACK)(LPDIRECT3DRMOBJECT,LPVOID);
typedef void (__cdecl *D3DRMFRAMEMOVECALLBACK)(LPDIRECT3DRMFRAME,LPVOID,D3DVALUE);
typedef void (__cdecl *D3DRMFRAME3MOVECALLBACK)(LPDIRECT3DRMFRAME3,LPVOID,D3DVALUE);
typedef void (__cdecl *D3DRMUPDATECALLBACK)(LPDIRECT3DRMDEVICE,LPVOID,int,LPD3DRECT);
typedef void (__cdecl *D3DRMDEVICE3UPDATECALLBACK)(LPDIRECT3DRMDEVICE3,LPVOID,int,LPD3DRECT);
typedef int (__cdecl *D3DRMUSERVISUALCALLBACK)(LPDIRECT3DRMUSERVISUAL,LPVOID,D3DRMUSERVISUALREASON,LPDIRECT3DRMDEVICE,LPDIRECT3DRMVIEWPORT);
typedef HRESULT (__cdecl *D3DRMLOADTEXTURECALLBACK)(char*,void*,LPDIRECT3DRMTEXTURE*);
typedef HRESULT (__cdecl *D3DRMLOADTEXTURE3CALLBACK)(char*,void*,LPDIRECT3DRMTEXTURE3*);
typedef void (__cdecl *D3DRMLOADCALLBACK)(LPDIRECT3DRMOBJECT,REFIID,LPVOID);
typedef HRESULT (__cdecl *D3DRMDOWNSAMPLECALLBACK)(LPDIRECT3DRMTEXTURE3,LPVOID,LPDIRECTDRAWSURFACE,LPDIRECTDRAWSURFACE);
typedef HRESULT (__cdecl *D3DRMVALIDATIONCALLBACK)(LPDIRECT3DRMTEXTURE3,LPVOID,DWORD,DWORD,LPRECT);

typedef struct _D3DRMPICKDESC {
    ULONG ulFaceIdx;
    LONG lGroupIdx;
    D3DVECTOR vPosition;
} D3DRMPICKDESC, *LPD3DRMPICKDESC;

typedef struct _D3DRMPICKDESC2 {
    ULONG ulFaceIdx;
    LONG lGroupIdx;
    D3DVECTOR dvPosition;
    D3DVALUE tu;
    D3DVALUE tv;
    D3DVECTOR dvNormal;
    D3DCOLOR dcColor;
} D3DRMPICKDESC2, *LPD3DRMPICKDESC2;

#undef INTERFACE
#define INTERFACE IDirect3DRMObject
DECLARE_INTERFACE_(IDirect3DRMObject,IUnknown)
{
    IUNKNOWN_METHODS(PURE);
    IDIRECT3DRMOBJECT_METHODS(PURE);
};

#undef INTERFACE
#define INTERFACE IDirect3DRMObject2
DECLARE_INTERFACE_(IDirect3DRMObject2,IUnknown)
{
    IUNKNOWN_METHODS(PURE);
    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK,LPVOID) PURE;
    STDMETHOD(Clone)(THIS_ LPUNKNOWN,REFIID,LPVOID*) PURE; \
    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK,LPVOID) PURE; \
    STDMETHOD(GetClientData)(THIS_ DWORD,LPVOID*) PURE;
    STDMETHOD(GetDirect3DRM)(THIS_ LPDIRECT3DRM*) PURE;
    STDMETHOD(GetName)(THIS_ LPDWORD,LPSTR) PURE;
    STDMETHOD(SetClientData)(THIS_ DWORD,LPVOID,DWORD) PURE;
    STDMETHOD(SetName)(THIS_ LPCSTR) PURE;
    STDMETHOD(GetAge)(THIS_ DWORD,LPDWORD) PURE;
};

#undef INTERFACE
#define INTERFACE IDirect3DRMVisual
DECLARE_INTERFACE_(IDirect3DRMVisual,IDirect3DRMObject)
{
    IUNKNOWN_METHODS(PURE);
    IDIRECT3DRMOBJECT_METHODS(PURE);
};

#undef INTERFACE
#define INTERFACE IDirect3DRMDevice
DECLARE_INTERFACE_(IDirect3DRMDevice,IDirect3DRMObject)
{
    IUNKNOWN_METHODS(PURE);
    IDIRECT3DRMOBJECT_METHODS(PURE);
    STDMETHOD(Init)(THIS_ ULONG,ULONG) PURE;
    STDMETHOD(InitFromD3D)(THIS_ LPDIRECT3D,LPDIRECT3DDEVICE) PURE;
    STDMETHOD(InitFromClipper)(THIS_ LPDIRECTDRAWCLIPPER,LPGUID,int,int) PURE;
    STDMETHOD(Update)(THIS) PURE;
    STDMETHOD(AddUpdateCallback)(THIS_ D3DRMUPDATECALLBACK,LPVOID) PURE;
    STDMETHOD(DeleteUpdateCallback)(THIS_ D3DRMUPDATECALLBACK,LPVOID) PURE;
    STDMETHOD(SetBufferCount)(THIS_ DWORD) PURE;
    STDMETHOD_(DWORD,GetBufferCount)(THIS) PURE;
    STDMETHOD(SetDither)(THIS_ BOOL) PURE;
    STDMETHOD(SetShades)(THIS_ DWORD) PURE;
    STDMETHOD(SetQuality)(THIS_ D3DRMRENDERQUALITY) PURE;
    STDMETHOD(SetTextureQuality)(THIS_ D3DRMTEXTUREQUALITY) PURE;
    STDMETHOD(GetViewports)(THIS_ LPDIRECT3DRMVIEWPORTARRAY*) PURE;
    STDMETHOD_(BOOL,GetDither)(THIS) PURE;
    STDMETHOD_(DWORD,GetShades)(THIS) PURE;
    STDMETHOD_(DWORD,GetHeight)(THIS) PURE;
    STDMETHOD_(DWORD,GetWidth)(THIS) PURE;
    STDMETHOD_(DWORD,GetTrianglesDrawn)(THIS) PURE;
    STDMETHOD_(DWORD,GetWireframeOptions)(THIS) PURE;
    STDMETHOD_(D3DRMRENDERQUALITY,GetQuality)(THIS) PURE;
    STDMETHOD_(D3DCOLORMODEL,GetColorModel)(THIS) PURE;
    STDMETHOD_(D3DRMTEXTUREQUALITY,GetTextureQuality)(THIS) PURE;
    STDMETHOD(GetDirect3DDevice)(THIS_ LPDIRECT3DDEVICE*) PURE;
};

#undef INTERFACE
#define INTERFACE IDirect3DRMDevice2
DECLARE_INTERFACE_(IDirect3DRMDevice2,IDirect3DRMDevice)
{
    IUNKNOWN_METHODS(PURE);
    IDIRECT3DRMOBJECT_METHODS(PURE);
    STDMETHOD(Init)(THIS_ ULONG,ULONG) PURE;
    STDMETHOD(InitFromD3D)(THIS_ LPDIRECT3D,LPDIRECT3DDEVICE) PURE;
    STDMETHOD(InitFromClipper)(THIS_ LPDIRECTDRAWCLIPPER,LPGUID,int,int) PURE;
    STDMETHOD(Update)(THIS) PURE;
    STDMETHOD(AddUpdateCallback)(THIS_ D3DRMUPDATECALLBACK,LPVOID) PURE;
    STDMETHOD(DeleteUpdateCallback)(THIS_ D3DRMUPDATECALLBACK,LPVOID) PURE;
    STDMETHOD(SetBufferCount)(THIS_ DWORD) PURE;
    STDMETHOD_(DWORD,GetBufferCount)(THIS) PURE;
    STDMETHOD(SetDither)(THIS_ BOOL) PURE;
    STDMETHOD(SetShades)(THIS_ DWORD) PURE;
    STDMETHOD(SetQuality)(THIS_ D3DRMRENDERQUALITY) PURE;
    STDMETHOD(SetTextureQuality)(THIS_ D3DRMTEXTUREQUALITY) PURE;
    STDMETHOD(GetViewports)(THIS_ LPDIRECT3DRMVIEWPORTARRAY*) PURE;
    STDMETHOD_(BOOL,GetDither)(THIS) PURE;
    STDMETHOD_(DWORD,GetShades)(THIS) PURE;
    STDMETHOD_(DWORD,GetHeight)(THIS) PURE;
    STDMETHOD_(DWORD,GetWidth)(THIS) PURE;
    STDMETHOD_(DWORD,GetTrianglesDrawn)(THIS) PURE;
    STDMETHOD_(DWORD,GetWireframeOptions)(THIS) PURE;
    STDMETHOD_(D3DRMRENDERQUALITY,GetQuality)(THIS) PURE;
    STDMETHOD_(D3DCOLORMODEL,GetColorModel)(THIS) PURE;
    STDMETHOD_(D3DRMTEXTUREQUALITY,GetTextureQuality)(THIS) PURE;
    STDMETHOD(GetDirect3DDevice)(THIS_ LPDIRECT3DDEVICE*) PURE;
    STDMETHOD(InitFromD3D2)(THIS_ LPDIRECT3D2,LPDIRECT3DDEVICE2) PURE;
    STDMETHOD(InitFromSurface)(THIS_ LPGUID,LPDIRECTDRAW,LPDIRECTDRAWSURFACE) PURE;
    STDMETHOD(SetRenderMode)(THIS_ DWORD) PURE;
    STDMETHOD_(DWORD,GetRenderMode)(THIS) PURE;
    STDMETHOD(GetDirect3DDevice2)(THIS_ LPDIRECT3DDEVICE2*) PURE;
};

#undef INTERFACE
#define INTERFACE IDirect3DRMDevice3
DECLARE_INTERFACE_(IDirect3DRMDevice3,IDirect3DRMObject)
{
    IUNKNOWN_METHODS(PURE);
    IDIRECT3DRMOBJECT_METHODS(PURE);
    STDMETHOD(Init)(THIS_ ULONG,ULONG) PURE;
    STDMETHOD(InitFromD3D)(THIS_ LPDIRECT3D,LPDIRECT3DDEVICE) PURE;
    STDMETHOD(InitFromClipper)(THIS_ LPDIRECTDRAWCLIPPER,LPGUID,int,int) PURE;
    STDMETHOD(Update)(THIS) PURE;
    STDMETHOD(AddUpdateCallback)(THIS_ D3DRMDEVICE3UPDATECALLBACK,LPVOID) PURE;
    STDMETHOD(DeleteUpdateCallback)(THIS_ D3DRMDEVICE3UPDATECALLBACK,LPVOID) PURE;
    STDMETHOD(SetBufferCount)(THIS_ DWORD) PURE;
    STDMETHOD_(DWORD,GetBufferCount)(THIS) PURE;
    STDMETHOD(SetDither)(THIS_ BOOL) PURE;
    STDMETHOD(SetShades)(THIS_ DWORD) PURE;
    STDMETHOD(SetQuality)(THIS_ D3DRMRENDERQUALITY) PURE;
    STDMETHOD(SetTextureQuality)(THIS_ D3DRMTEXTUREQUALITY) PURE;
    STDMETHOD(GetViewports)(THIS_ LPDIRECT3DRMVIEWPORTARRAY*) PURE;
    STDMETHOD_(BOOL,GetDither)(THIS) PURE;
    STDMETHOD_(DWORD,GetShades)(THIS) PURE;
    STDMETHOD_(DWORD,GetHeight)(THIS) PURE;
    STDMETHOD_(DWORD,GetWidth)(THIS) PURE;
    STDMETHOD_(DWORD,GetTrianglesDrawn)(THIS) PURE;
    STDMETHOD_(DWORD,GetWireframeOptions)(THIS) PURE;
    STDMETHOD_(D3DRMRENDERQUALITY,GetQuality)(THIS) PURE;
    STDMETHOD_(D3DCOLORMODEL,GetColorModel)(THIS) PURE;
    STDMETHOD_(D3DRMTEXTUREQUALITY,GetTextureQuality)(THIS) PURE;
    STDMETHOD(GetDirect3DDevice)(THIS_ LPDIRECT3DDEVICE*) PURE;
    STDMETHOD(InitFromD3D2)(THIS_ LPDIRECT3D2,LPDIRECT3DDEVICE2) PURE;
    STDMETHOD(InitFromSurface)(THIS_ LPGUID,LPDIRECTDRAW,LPDIRECTDRAWSURFACE,DWORD) PURE;
    STDMETHOD(SetRenderMode)(THIS_ DWORD) PURE;
    STDMETHOD_(DWORD,GetRenderMode)(THIS) PURE;
    STDMETHOD(GetDirect3DDevice2)(THIS_ LPDIRECT3DDEVICE2*) PURE;
    STDMETHOD(FindPreferredTextureFormat)(THIS_ DWORD,DWORD,LPDDPIXELFORMAT) PURE;
    STDMETHOD(RenderStateChange)(THIS_ D3DRENDERSTATETYPE,DWORD,DWORD) PURE;
    STDMETHOD(LightStateChange)(THIS_ D3DLIGHTSTATETYPE,DWORD,DWORD) PURE;
    STDMETHOD(GetStateChangeOptions)(THIS_ DWORD,DWORD,LPDWORD) PURE;
    STDMETHOD(SetStateChangeOptions)(THIS_ DWORD,DWORD,DWORD) PURE;
};

#undef INTERFACE
#define INTERFACE IDirect3DRMViewport
DECLARE_INTERFACE_(IDirect3DRMViewport,IDirect3DRMObject)
{
    IUNKNOWN_METHODS(PURE);
    IDIRECT3DRMOBJECT_METHODS(PURE);
    STDMETHOD(Init)(THIS_ LPDIRECT3DRMDEVICE,LPDIRECT3DRMFRAME,DWORD,DWORD,DWORD,DWORD) PURE;
    STDMETHOD(Clear)(THIS) PURE;
    STDMETHOD(Render)(THIS_ LPDIRECT3DRMFRAME) PURE;
    STDMETHOD(SetFront)(THIS_ D3DVALUE) PURE;
    STDMETHOD(SetBack)(THIS_ D3DVALUE) PURE;
    STDMETHOD(SetField)(THIS_ D3DVALUE) PURE;
    STDMETHOD(SetUniformScaling)(THIS_ BOOL) PURE;
    STDMETHOD(SetCamera)(THIS_ LPDIRECT3DRMFRAME) PURE;
    STDMETHOD(SetProjection)(THIS_ D3DRMPROJECTIONTYPE) PURE;
    STDMETHOD(Transform)(THIS_ D3DRMVECTOR4D*,D3DVECTOR*) PURE;
    STDMETHOD(InverseTransform)(THIS_ D3DVECTOR*,D3DRMVECTOR4D*) PURE;
    STDMETHOD(Configure)(THIS_ LONG,LONG,DWORD,DWORD) PURE;
    STDMETHOD(ForceUpdate)(THIS_ DWORD,DWORD,DWORD,DWORD) PURE;
    STDMETHOD(SetPlane)(THIS_ D3DVALUE,D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(GetCamera)(THIS_ LPDIRECT3DRMFRAME*) PURE;
    STDMETHOD(GetDevice)(THIS_ LPDIRECT3DRMDEVICE*) PURE;
    STDMETHOD(GetPlane)(THIS_ D3DVALUE*,D3DVALUE*,D3DVALUE*,D3DVALUE*) PURE;
    STDMETHOD(Pick)(THIS_ LONG,LONG,LPDIRECT3DRMPICKEDARRAY*) PURE;
    STDMETHOD_(BOOL,GetUniformScaling)(THIS) PURE;
    STDMETHOD_(LONG,GetX)(THIS) PURE;
    STDMETHOD_(LONG,GetY)(THIS) PURE;
    STDMETHOD_(DWORD,GetWidth)(THIS) PURE;
    STDMETHOD_(DWORD,GetHeight)(THIS) PURE;
    STDMETHOD_(D3DVALUE,GetField)(THIS) PURE;
    STDMETHOD_(D3DVALUE,GetBack)(THIS) PURE;
    STDMETHOD_(D3DVALUE,GetFront)(THIS) PURE;
    STDMETHOD_(D3DRMPROJECTIONTYPE,GetProjection)(THIS) PURE;
    STDMETHOD(GetDirect3DViewport)(THIS_ LPDIRECT3DVIEWPORT*) PURE;
};

#undef INTERFACE
#define INTERFACE IDirect3DRMViewport2
DECLARE_INTERFACE_(IDirect3DRMViewport2,IDirect3DRMObject)
{
    IUNKNOWN_METHODS(PURE);
    IDIRECT3DRMOBJECT_METHODS(PURE);
    STDMETHOD(Init)(THIS_ LPDIRECT3DRMDEVICE3,LPDIRECT3DRMFRAME3,DWORD,DWORD,DWORD,DWORD) PURE;
    STDMETHOD(Clear)(THIS_ DWORD) PURE;
    STDMETHOD(Render)(THIS_ LPDIRECT3DRMFRAME3) PURE;
    STDMETHOD(SetFront)(THIS_ D3DVALUE) PURE;
    STDMETHOD(SetBack)(THIS_ D3DVALUE) PURE;
    STDMETHOD(SetField)(THIS_ D3DVALUE) PURE;
    STDMETHOD(SetUniformScaling)(THIS_ BOOL) PURE;
    STDMETHOD(SetCamera)(THIS_ LPDIRECT3DRMFRAME3) PURE;
    STDMETHOD(SetProjection)(THIS_ D3DRMPROJECTIONTYPE) PURE;
    STDMETHOD(Transform)(THIS_ D3DRMVECTOR4D*,D3DVECTOR*) PURE;
    STDMETHOD(InverseTransform)(THIS_ D3DVECTOR*,D3DRMVECTOR4D*) PURE;
    STDMETHOD(Configure)(THIS_ LONG,LONG,DWORD,DWORD) PURE;
    STDMETHOD(ForceUpdate)(THIS_ DWORD,DWORD,DWORD,DWORD) PURE;
    STDMETHOD(SetPlane)(THIS_ D3DVALUE,D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(GetCamera)(THIS_ LPDIRECT3DRMFRAME3*) PURE;
    STDMETHOD(GetDevice)(THIS_ LPDIRECT3DRMDEVICE3*) PURE;
    STDMETHOD(GetPlane)(THIS_ D3DVALUE *,D3DVALUE*,D3DVALUE*,D3DVALUE*) PURE;
    STDMETHOD(Pick)(THIS_ LONG,LONG,LPDIRECT3DRMPICKEDARRAY*) PURE;
    STDMETHOD_(BOOL,GetUniformScaling)(THIS) PURE;
    STDMETHOD_(LONG,GetX)(THIS) PURE;
    STDMETHOD_(LONG,GetY)(THIS) PURE;
    STDMETHOD_(DWORD,GetWidth)(THIS) PURE;
    STDMETHOD_(DWORD,GetHeight)(THIS) PURE;
    STDMETHOD_(D3DVALUE,GetField)(THIS) PURE;
    STDMETHOD_(D3DVALUE,GetBack)(THIS) PURE;
    STDMETHOD_(D3DVALUE,GetFront)(THIS) PURE;
    STDMETHOD_(D3DRMPROJECTIONTYPE,GetProjection)(THIS) PURE;
    STDMETHOD(GetDirect3DViewport)(THIS_ LPDIRECT3DVIEWPORT*) PURE;
    STDMETHOD(TransformVectors)(THIS_ DWORD,LPD3DRMVECTOR4D,LPD3DVECTOR) PURE;
    STDMETHOD(InverseTransformVectors)(THIS_ DWORD,LPD3DVECTOR,LPD3DRMVECTOR4D) PURE;
};

#undef INTERFACE
#define INTERFACE IDirect3DRMFrame
DECLARE_INTERFACE_(IDirect3DRMFrame,IDirect3DRMVisual)
{
    IUNKNOWN_METHODS(PURE);
    IDIRECT3DRMOBJECT_METHODS(PURE);
    STDMETHOD(AddChild)(THIS_ LPDIRECT3DRMFRAME) PURE;
    STDMETHOD(AddLight)(THIS_ LPDIRECT3DRMLIGHT) PURE;
    STDMETHOD(AddMoveCallback)(THIS_ D3DRMFRAMEMOVECALLBACK,VOID*) PURE;
    STDMETHOD(AddTransform)(THIS_ D3DRMCOMBINETYPE,D3DRMMATRIX4D) PURE;
    STDMETHOD(AddTranslation)(THIS_ D3DRMCOMBINETYPE,D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(AddScale)(THIS_ D3DRMCOMBINETYPE,D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(AddRotation)(THIS_ D3DRMCOMBINETYPE,D3DVALUE,D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(AddVisual)(THIS_ LPDIRECT3DRMVISUAL) PURE;
    STDMETHOD(GetChildren)(THIS_ LPDIRECT3DRMFRAMEARRAY*) PURE;
    STDMETHOD_(D3DCOLOR,GetColor)(THIS) PURE;
    STDMETHOD(GetLights)(THIS_ LPDIRECT3DRMLIGHTARRAY*) PURE;
    STDMETHOD_(D3DRMMATERIALMODE,GetMaterialMode)(THIS) PURE;
    STDMETHOD(GetParent)(THIS_ LPDIRECT3DRMFRAME*) PURE;
    STDMETHOD(GetPosition)(THIS_ LPDIRECT3DRMFRAME,LPD3DVECTOR) PURE;
    STDMETHOD(GetRotation)(THIS_ LPDIRECT3DRMFRAME,LPD3DVECTOR,LPD3DVALUE) PURE;
    STDMETHOD(GetScene)(THIS_ LPDIRECT3DRMFRAME*) PURE;
    STDMETHOD_(D3DRMSORTMODE,GetSortMode)(THIS) PURE;
    STDMETHOD(GetTexture)(THIS_ LPDIRECT3DRMTEXTURE*) PURE;
    STDMETHOD(GetTransform)(THIS_ D3DRMMATRIX4D) PURE;
    STDMETHOD(GetVelocity)(THIS_ LPDIRECT3DRMFRAME,LPD3DVECTOR,BOOL) PURE;
    STDMETHOD(GetOrientation)(THIS_ LPDIRECT3DRMFRAME,LPD3DVECTOR,LPD3DVECTOR) PURE;
    STDMETHOD(GetVisuals)(THIS_ LPDIRECT3DRMVISUALARRAY*) PURE;
    STDMETHOD(GetTextureTopology)(THIS_ BOOL*,BOOL*) PURE;
    STDMETHOD(InverseTransform)(THIS_ D3DVECTOR*,D3DVECTOR*) PURE;
    STDMETHOD(Load)(THIS_ LPVOID,LPVOID,D3DRMLOADOPTIONS,D3DRMLOADTEXTURECALLBACK,LPVOID) PURE;
    STDMETHOD(LookAt)(THIS_ LPDIRECT3DRMFRAME,LPDIRECT3DRMFRAME,D3DRMFRAMECONSTRAINT) PURE;
    STDMETHOD(Move)(THIS_ D3DVALUE) PURE;
    STDMETHOD(DeleteChild)(THIS_ LPDIRECT3DRMFRAME) PURE;
    STDMETHOD(DeleteLight)(THIS_ LPDIRECT3DRMLIGHT) PURE;
    STDMETHOD(DeleteMoveCallback)(THIS_ D3DRMFRAMEMOVECALLBACK,VOID*) PURE;
    STDMETHOD(DeleteVisual)(THIS_ LPDIRECT3DRMVISUAL) PURE;
    STDMETHOD_(D3DCOLOR,GetSceneBackground)(THIS) PURE;
    STDMETHOD(GetSceneBackgroundDepth)(THIS_ LPDIRECTDRAWSURFACE*) PURE;
    STDMETHOD_(D3DCOLOR,GetSceneFogColor)(THIS) PURE;
    STDMETHOD_(BOOL,GetSceneFogEnable)(THIS) PURE;
    STDMETHOD_(D3DRMFOGMODE,GetSceneFogMode)(THIS) PURE;
    STDMETHOD(GetSceneFogParams)(THIS_ D3DVALUE*,D3DVALUE*,D3DVALUE*) PURE;
    STDMETHOD(SetSceneBackground)(THIS_ D3DCOLOR) PURE;
    STDMETHOD(SetSceneBackgroundRGB)(THIS_ D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(SetSceneBackgroundDepth)(THIS_ LPDIRECTDRAWSURFACE) PURE;
    STDMETHOD(SetSceneBackgroundImage)(THIS_ LPDIRECT3DRMTEXTURE) PURE;
    STDMETHOD(SetSceneFogEnable)(THIS_ BOOL) PURE;
    STDMETHOD(SetSceneFogColor)(THIS_ D3DCOLOR) PURE;
    STDMETHOD(SetSceneFogMode)(THIS_ D3DRMFOGMODE) PURE;
    STDMETHOD(SetSceneFogParams)(THIS_ D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE;
    STDMETHOD(SetColorRGB)(THIS_ D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD_(D3DRMZBUFFERMODE,GetZbufferMode)(THIS) PURE;
    STDMETHOD(SetMaterialMode)(THIS_ D3DRMMATERIALMODE) PURE;
    STDMETHOD(SetOrientation)(THIS_ LPDIRECT3DRMFRAME,D3DVALUE,D3DVALUE,D3DVALUE,D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(SetPosition)(THIS_ LPDIRECT3DRMFRAME,D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(SetRotation)(THIS_ LPDIRECT3DRMFRAME,D3DVALUE,D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(SetSortMode)(THIS_ D3DRMSORTMODE) PURE;
    STDMETHOD(SetTexture)(THIS_ LPDIRECT3DRMTEXTURE) PURE;
    STDMETHOD(SetTextureTopology)(THIS_ BOOL,BOOL) PURE;
    STDMETHOD(SetVelocity)(THIS_ LPDIRECT3DRMFRAME,D3DVALUE,D3DVALUE,D3DVALUE,BOOL) PURE;
    STDMETHOD(SetZbufferMode)(THIS_ D3DRMZBUFFERMODE) PURE;
    STDMETHOD(Transform)(THIS_ D3DVECTOR*,D3DVECTOR*) PURE;
};

#undef INTERFACE
#define INTERFACE IDirect3DRMFrame2
DECLARE_INTERFACE_(IDirect3DRMFrame2,IDirect3DRMFrame)
{
    IUNKNOWN_METHODS(PURE);
    IDIRECT3DRMOBJECT_METHODS(PURE);
    STDMETHOD(AddChild)(THIS_ LPDIRECT3DRMFRAME) PURE;
    STDMETHOD(AddLight)(THIS_ LPDIRECT3DRMLIGHT) PURE;
    STDMETHOD(AddMoveCallback)(THIS_ D3DRMFRAMEMOVECALLBACK,VOID*) PURE;
    STDMETHOD(AddTransform)(THIS_ D3DRMCOMBINETYPE,D3DRMMATRIX4D) PURE;
    STDMETHOD(AddTranslation)(THIS_ D3DRMCOMBINETYPE,D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(AddScale)(THIS_ D3DRMCOMBINETYPE,D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(AddRotation)(THIS_ D3DRMCOMBINETYPE,D3DVALUE,D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(AddVisual)(THIS_ LPDIRECT3DRMVISUAL) PURE;
    STDMETHOD(GetChildren)(THIS_ LPDIRECT3DRMFRAMEARRAY*) PURE;
    STDMETHOD_(D3DCOLOR,GetColor)(THIS) PURE;
    STDMETHOD(GetLights)(THIS_ LPDIRECT3DRMLIGHTARRAY*) PURE;
    STDMETHOD_(D3DRMMATERIALMODE,GetMaterialMode)(THIS) PURE;
    STDMETHOD(GetParent)(THIS_ LPDIRECT3DRMFRAME*) PURE;
    STDMETHOD(GetPosition)(THIS_ LPDIRECT3DRMFRAME,LPD3DVECTOR) PURE;
    STDMETHOD(GetRotation)(THIS_ LPDIRECT3DRMFRAME,LPD3DVECTOR,LPD3DVALUE) PURE;
    STDMETHOD(GetScene)(THIS_ LPDIRECT3DRMFRAME*) PURE;
    STDMETHOD_(D3DRMSORTMODE,GetSortMode)(THIS) PURE;
    STDMETHOD(GetTexture)(THIS_ LPDIRECT3DRMTEXTURE*) PURE;
    STDMETHOD(GetTransform)(THIS_ D3DRMMATRIX4D) PURE;
    STDMETHOD(GetVelocity)(THIS_ LPDIRECT3DRMFRAME,LPD3DVECTOR,BOOL) PURE;
    STDMETHOD(GetOrientation)(THIS_ LPDIRECT3DRMFRAME,LPD3DVECTOR,LPD3DVECTOR) PURE;
    STDMETHOD(GetVisuals)(THIS_ LPDIRECT3DRMVISUALARRAY*) PURE;
    STDMETHOD(GetTextureTopology)(THIS_ BOOL*,BOOL*) PURE;
    STDMETHOD(InverseTransform)(THIS_ D3DVECTOR*,D3DVECTOR*) PURE;
    STDMETHOD(Load)(THIS_ LPVOID,LPVOID,D3DRMLOADOPTIONS,D3DRMLOADTEXTURECALLBACK,LPVOID) PURE;
    STDMETHOD(LookAt)(THIS_ LPDIRECT3DRMFRAME,LPDIRECT3DRMFRAME,D3DRMFRAMECONSTRAINT) PURE;
    STDMETHOD(Move)(THIS_ D3DVALUE) PURE;
    STDMETHOD(DeleteChild)(THIS_ LPDIRECT3DRMFRAME) PURE;
    STDMETHOD(DeleteLight)(THIS_ LPDIRECT3DRMLIGHT) PURE;
    STDMETHOD(DeleteMoveCallback)(THIS_ D3DRMFRAMEMOVECALLBACK,VOID*) PURE;
    STDMETHOD(DeleteVisual)(THIS_ LPDIRECT3DRMVISUAL) PURE;
    STDMETHOD_(D3DCOLOR,GetSceneBackground)(THIS) PURE;
    STDMETHOD(GetSceneBackgroundDepth)(THIS_ LPDIRECTDRAWSURFACE*) PURE;
    STDMETHOD_(D3DCOLOR,GetSceneFogColor)(THIS) PURE;
    STDMETHOD_(BOOL,GetSceneFogEnable)(THIS) PURE;
    STDMETHOD_(D3DRMFOGMODE,GetSceneFogMode)(THIS) PURE;
    STDMETHOD(GetSceneFogParams)(THIS_ D3DVALUE*,D3DVALUE*,D3DVALUE*) PURE;
    STDMETHOD(SetSceneBackground)(THIS_ D3DCOLOR) PURE;
    STDMETHOD(SetSceneBackgroundRGB)(THIS_ D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(SetSceneBackgroundDepth)(THIS_ LPDIRECTDRAWSURFACE) PURE;
    STDMETHOD(SetSceneBackgroundImage)(THIS_ LPDIRECT3DRMTEXTURE) PURE;
    STDMETHOD(SetSceneFogEnable)(THIS_ BOOL) PURE;
    STDMETHOD(SetSceneFogColor)(THIS_ D3DCOLOR) PURE;
    STDMETHOD(SetSceneFogMode)(THIS_ D3DRMFOGMODE) PURE;
    STDMETHOD(SetSceneFogParams)(THIS_ D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE;
    STDMETHOD(SetColorRGB)(THIS_ D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD_(D3DRMZBUFFERMODE,GetZbufferMode)(THIS) PURE;
    STDMETHOD(SetMaterialMode)(THIS_ D3DRMMATERIALMODE) PURE;
    STDMETHOD(SetOrientation)(THIS_ LPDIRECT3DRMFRAME,D3DVALUE,D3DVALUE,D3DVALUE,D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(SetPosition)(THIS_ LPDIRECT3DRMFRAME reference,D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(SetRotation)(THIS_ LPDIRECT3DRMFRAME reference,D3DVALUE,D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(SetSortMode)(THIS_ D3DRMSORTMODE) PURE;
    STDMETHOD(SetTexture)(THIS_ LPDIRECT3DRMTEXTURE) PURE;
    STDMETHOD(SetTextureTopology)(THIS_ BOOL,BOOL) PURE;
    STDMETHOD(SetVelocity)(THIS_ LPDIRECT3DRMFRAME,D3DVALUE,D3DVALUE,D3DVALUE,BOOL) PURE;
    STDMETHOD(SetZbufferMode)(THIS_ D3DRMZBUFFERMODE) PURE;
    STDMETHOD(Transform)(THIS_ D3DVECTOR*,D3DVECTOR*) PURE;
    STDMETHOD(AddMoveCallback2)(THIS_ D3DRMFRAMEMOVECALLBACK,VOID*,DWORD) PURE;
    STDMETHOD(GetBox)(THIS_ LPD3DRMBOX) PURE;
    STDMETHOD_(BOOL,GetBoxEnable)(THIS) PURE;
    STDMETHOD(GetAxes)(THIS_ LPD3DVECTOR,LPD3DVECTOR);
    STDMETHOD(GetMaterial)(THIS_ LPDIRECT3DRMMATERIAL*) PURE;
    STDMETHOD_(BOOL,GetInheritAxes)(THIS);
    STDMETHOD(GetHierarchyBox)(THIS_ LPD3DRMBOX) PURE;
    STDMETHOD(SetBox)(THIS_ LPD3DRMBOX) PURE;
    STDMETHOD(SetBoxEnable)(THIS_ BOOL) PURE;
    STDMETHOD(SetAxes)(THIS_ D3DVALUE,D3DVALUE,D3DVALUE,D3DVALUE,D3DVALUE,D3DVALUE);
    STDMETHOD(SetInheritAxes)(THIS_ BOOL);
    STDMETHOD(SetMaterial)(THIS_ LPDIRECT3DRMMATERIAL) PURE;
    STDMETHOD(SetQuaternion)(THIS_ LPDIRECT3DRMFRAME,D3DRMQUATERNION*) PURE;
    STDMETHOD(RayPick)(THIS_ LPDIRECT3DRMFRAME,LPD3DRMRAY,DWORD,LPDIRECT3DRMPICKED2ARRAY*) PURE;
    STDMETHOD(Save)(THIS_ LPCSTR,D3DRMXOFFORMAT,D3DRMSAVEOPTIONS);
};

#undef INTERFACE
#define INTERFACE IDirect3DRMFrame3
DECLARE_INTERFACE_(IDirect3DRMFrame3,IDirect3DRMVisual)
{
    IUNKNOWN_METHODS(PURE);
    IDIRECT3DRMOBJECT_METHODS(PURE);
    STDMETHOD(AddChild)(THIS_ LPDIRECT3DRMFRAME3) PURE;
    STDMETHOD(AddLight)(THIS_ LPDIRECT3DRMLIGHT) PURE;
    STDMETHOD(AddMoveCallback)(THIS_ D3DRMFRAME3MOVECALLBACK,VOID *,DWORD) PURE;
    STDMETHOD(AddTransform)(THIS_ D3DRMCOMBINETYPE,D3DRMMATRIX4D) PURE;
    STDMETHOD(AddTranslation)(THIS_ D3DRMCOMBINETYPE,D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(AddScale)(THIS_ D3DRMCOMBINETYPE,D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(AddRotation)(THIS_ D3DRMCOMBINETYPE,D3DVALUE,D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(AddVisual)(THIS_ LPUNKNOWN) PURE;
    STDMETHOD(GetChildren)(THIS_ LPDIRECT3DRMFRAMEARRAY*) PURE;
    STDMETHOD_(D3DCOLOR,GetColor)(THIS) PURE;
    STDMETHOD(GetLights)(THIS_ LPDIRECT3DRMLIGHTARRAY*) PURE;
    STDMETHOD_(D3DRMMATERIALMODE,GetMaterialMode)(THIS) PURE;
    STDMETHOD(GetParent)(THIS_ LPDIRECT3DRMFRAME3*) PURE;
    STDMETHOD(GetPosition)(THIS_ LPDIRECT3DRMFRAME3,LPD3DVECTOR) PURE;
    STDMETHOD(GetRotation)(THIS_ LPDIRECT3DRMFRAME3,LPD3DVECTOR,LPD3DVALUE) PURE;
    STDMETHOD(GetScene)(THIS_ LPDIRECT3DRMFRAME3*) PURE;
    STDMETHOD_(D3DRMSORTMODE,GetSortMode)(THIS) PURE;
    STDMETHOD(GetTexture)(THIS_ LPDIRECT3DRMTEXTURE3*) PURE;
    STDMETHOD(GetTransform)(THIS_ LPDIRECT3DRMFRAME3,D3DRMMATRIX4D) PURE;
    STDMETHOD(GetVelocity)(THIS_ LPDIRECT3DRMFRAME3,LPD3DVECTOR,BOOL) PURE;
    STDMETHOD(GetOrientation)(THIS_ LPDIRECT3DRMFRAME3,LPD3DVECTOR,LPD3DVECTOR) PURE;
    STDMETHOD(GetVisuals)(THIS_ LPDWORD,LPUNKNOWN*) PURE;
    STDMETHOD(InverseTransform)(THIS_ D3DVECTOR*,D3DVECTOR*) PURE;
    STDMETHOD(Load)(THIS_ LPVOID,LPVOID,D3DRMLOADOPTIONS,D3DRMLOADTEXTURE3CALLBACK,LPVOID) PURE;
    STDMETHOD(LookAt)(THIS_ LPDIRECT3DRMFRAME3,LPDIRECT3DRMFRAME3,D3DRMFRAMECONSTRAINT) PURE;
    STDMETHOD(Move)(THIS_ D3DVALUE) PURE;
    STDMETHOD(DeleteChild)(THIS_ LPDIRECT3DRMFRAME3) PURE;
    STDMETHOD(DeleteLight)(THIS_ LPDIRECT3DRMLIGHT) PURE;
    STDMETHOD(DeleteMoveCallback)(THIS_ D3DRMFRAME3MOVECALLBACK,VOID*) PURE;
    STDMETHOD(DeleteVisual)(THIS_ LPUNKNOWN) PURE;
    STDMETHOD_(D3DCOLOR,GetSceneBackground)(THIS) PURE;
    STDMETHOD(GetSceneBackgroundDepth)(THIS_ LPDIRECTDRAWSURFACE*) PURE;
    STDMETHOD_(D3DCOLOR,GetSceneFogColor)(THIS) PURE;
    STDMETHOD_(BOOL,GetSceneFogEnable)(THIS) PURE;
    STDMETHOD_(D3DRMFOGMODE,GetSceneFogMode)(THIS) PURE;
    STDMETHOD(GetSceneFogParams)(THIS_ D3DVALUE*,D3DVALUE*,D3DVALUE*) PURE;
    STDMETHOD(SetSceneBackground)(THIS_ D3DCOLOR) PURE;
    STDMETHOD(SetSceneBackgroundRGB)(THIS_ D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(SetSceneBackgroundDepth)(THIS_ LPDIRECTDRAWSURFACE) PURE;
    STDMETHOD(SetSceneBackgroundImage)(THIS_ LPDIRECT3DRMTEXTURE3) PURE;
    STDMETHOD(SetSceneFogEnable)(THIS_ BOOL) PURE;
    STDMETHOD(SetSceneFogColor)(THIS_ D3DCOLOR) PURE;
    STDMETHOD(SetSceneFogMode)(THIS_ D3DRMFOGMODE) PURE;
    STDMETHOD(SetSceneFogParams)(THIS_ D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE;
    STDMETHOD(SetColorRGB)(THIS_ D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD_(D3DRMZBUFFERMODE,GetZbufferMode)(THIS) PURE;
    STDMETHOD(SetMaterialMode)(THIS_ D3DRMMATERIALMODE) PURE;
    STDMETHOD(SetOrientation)(THIS_ LPDIRECT3DRMFRAME3,D3DVALUE,D3DVALUE,D3DVALUE,D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(SetPosition)(THIS_ LPDIRECT3DRMFRAME3,D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(SetRotation)(THIS_ LPDIRECT3DRMFRAME3,D3DVALUE,D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(SetSortMode)(THIS_ D3DRMSORTMODE) PURE;
    STDMETHOD(SetTexture)(THIS_ LPDIRECT3DRMTEXTURE3) PURE;
    STDMETHOD(SetVelocity)(THIS_ LPDIRECT3DRMFRAME3,D3DVALUE,D3DVALUE,D3DVALUE,BOOL) PURE;
    STDMETHOD(SetZbufferMode)(THIS_ D3DRMZBUFFERMODE) PURE;
    STDMETHOD(Transform)(THIS_ D3DVECTOR*,D3DVECTOR*) PURE;
    STDMETHOD(GetBox)(THIS_ LPD3DRMBOX) PURE;
    STDMETHOD_(BOOL,GetBoxEnable)(THIS) PURE;
    STDMETHOD(GetAxes)(THIS_ LPD3DVECTOR,LPD3DVECTOR);
    STDMETHOD(GetMaterial)(THIS_ LPDIRECT3DRMMATERIAL2*) PURE;
    STDMETHOD_(BOOL,GetInheritAxes)(THIS);
    STDMETHOD(GetHierarchyBox)(THIS_ LPD3DRMBOX) PURE;
    STDMETHOD(SetBox)(THIS_ LPD3DRMBOX) PURE;
    STDMETHOD(SetBoxEnable)(THIS_ BOOL) PURE;
    STDMETHOD(SetAxes)(THIS_ D3DVALUE,D3DVALUE,D3DVALUE,D3DVALUE,D3DVALUE,D3DVALUE);
    STDMETHOD(SetInheritAxes)(THIS_ BOOL);
    STDMETHOD(SetMaterial)(THIS_ LPDIRECT3DRMMATERIAL2) PURE;
    STDMETHOD(SetQuaternion)(THIS_ LPDIRECT3DRMFRAME3,D3DRMQUATERNION*) PURE;
    STDMETHOD(RayPick)(THIS_ LPDIRECT3DRMFRAME3,LPD3DRMRAY,DWORD,LPDIRECT3DRMPICKED2ARRAY*) PURE;
    STDMETHOD(Save)(THIS_ LPCSTR,D3DRMXOFFORMAT,D3DRMSAVEOPTIONS);
    STDMETHOD(TransformVectors)(THIS_ LPDIRECT3DRMFRAME3,DWORD,LPD3DVECTOR,LPD3DVECTOR) PURE;
    STDMETHOD(InverseTransformVectors)(THIS_ LPDIRECT3DRMFRAME3,DWORD,LPD3DVECTOR,LPD3DVECTOR) PURE;
    STDMETHOD(SetTraversalOptions)(THIS_ DWORD) PURE;
    STDMETHOD(GetTraversalOptions)(THIS_ LPDWORD) PURE;
    STDMETHOD(SetSceneFogMethod)(THIS_ DWORD) PURE;
    STDMETHOD(GetSceneFogMethod)(THIS_ LPDWORD) PURE;
    STDMETHOD(SetMaterialOverride)(THIS_ LPD3DRMMATERIALOVERRIDE) PURE;
    STDMETHOD(GetMaterialOverride)(THIS_ LPD3DRMMATERIALOVERRIDE) PURE;
};

#undef INTERFACE
#define INTERFACE IDirect3DRMMesh
DECLARE_INTERFACE_(IDirect3DRMMesh,IDirect3DRMVisual)
{
    IUNKNOWN_METHODS(PURE);
    IDIRECT3DRMOBJECT_METHODS(PURE);
    STDMETHOD(Scale)(THIS_ D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(Translate)(THIS_ D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(GetBox)(THIS_ D3DRMBOX*) PURE;
    STDMETHOD(AddGroup)(THIS_ unsigned,unsigned,unsigned,unsigned*,D3DRMGROUPINDEX*) PURE;
    STDMETHOD(SetVertices)(THIS_ D3DRMGROUPINDEX,unsigned,unsigned,D3DRMVERTEX*) PURE;
    STDMETHOD(SetGroupColor)(THIS_ D3DRMGROUPINDEX,D3DCOLOR) PURE;
    STDMETHOD(SetGroupColorRGB)(THIS_ D3DRMGROUPINDEX,D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(SetGroupMapping)(THIS_ D3DRMGROUPINDEX,D3DRMMAPPING) PURE;
    STDMETHOD(SetGroupQuality)(THIS_ D3DRMGROUPINDEX,D3DRMRENDERQUALITY) PURE;
    STDMETHOD(SetGroupMaterial)(THIS_ D3DRMGROUPINDEX,LPDIRECT3DRMMATERIAL) PURE;
    STDMETHOD(SetGroupTexture)(THIS_ D3DRMGROUPINDEX,LPDIRECT3DRMTEXTURE) PURE;
    STDMETHOD_(unsigned,GetGroupCount)(THIS) PURE;
    STDMETHOD(GetGroup)(THIS_ D3DRMGROUPINDEX,unsigned*,unsigned*,unsigned*,DWORD*,unsigned*) PURE;
    STDMETHOD(GetVertices)(THIS_ D3DRMGROUPINDEX,DWORD,DWORD,D3DRMVERTEX*) PURE;
    STDMETHOD_(D3DCOLOR,GetGroupColor)(THIS_ D3DRMGROUPINDEX) PURE;
    STDMETHOD_(D3DRMMAPPING,GetGroupMapping)(THIS_ D3DRMGROUPINDEX) PURE;
    STDMETHOD_(D3DRMRENDERQUALITY,GetGroupQuality)(THIS_ D3DRMGROUPINDEX) PURE;
    STDMETHOD(GetGroupMaterial)(THIS_ D3DRMGROUPINDEX,LPDIRECT3DRMMATERIAL*) PURE;
    STDMETHOD(GetGroupTexture)(THIS_ D3DRMGROUPINDEX,LPDIRECT3DRMTEXTURE*) PURE;
};

#undef INTERFACE
#define INTERFACE IDirect3DRMProgressiveMesh
DECLARE_INTERFACE_(IDirect3DRMProgressiveMesh,IDirect3DRMVisual)
{
    IUNKNOWN_METHODS(PURE);
    IDIRECT3DRMOBJECT_METHODS(PURE);
    STDMETHOD(Load)(THIS_ LPVOID,LPVOID,D3DRMLOADOPTIONS,D3DRMLOADTEXTURECALLBACK,LPVOID) PURE;
    STDMETHOD(GetLoadStatus)(THIS_ LPD3DRMPMESHLOADSTATUS) PURE;
    STDMETHOD(SetMinRenderDetail)(THIS_ D3DVALUE) PURE;
    STDMETHOD(Abort)(THIS_ DWORD) PURE;
    STDMETHOD(GetFaceDetail)(THIS_ LPDWORD) PURE;
    STDMETHOD(GetVertexDetail)(THIS_ LPDWORD) PURE;
    STDMETHOD(SetFaceDetail)(THIS_ DWORD) PURE;
    STDMETHOD(SetVertexDetail)(THIS_ DWORD) PURE;
    STDMETHOD(GetFaceDetailRange)(THIS_ LPDWORD,LPDWORD) PURE;
    STDMETHOD(GetVertexDetailRange)(THIS_ LPDWORD,LPDWORD) PURE;
    STDMETHOD(GetDetail)(THIS_ D3DVALUE*) PURE;
    STDMETHOD(SetDetail)(THIS_ D3DVALUE) PURE;
    STDMETHOD(RegisterEvents)(THIS_ HANDLE,DWORD,DWORD) PURE;
    STDMETHOD(CreateMesh)(THIS_ LPDIRECT3DRMMESH*) PURE;
    STDMETHOD(Duplicate)(THIS_ LPDIRECT3DRMPROGRESSIVEMESH*) PURE;
    STDMETHOD(GetBox)(THIS_ LPD3DRMBOX) PURE;
    STDMETHOD(SetQuality)(THIS_ D3DRMRENDERQUALITY) PURE;
    STDMETHOD(GetQuality)(THIS_ LPD3DRMRENDERQUALITY) PURE;
};

#undef INTERFACE
#define INTERFACE IDirect3DRMShadow
DECLARE_INTERFACE_(IDirect3DRMShadow,IDirect3DRMVisual)
{
    IUNKNOWN_METHODS(PURE);
    IDIRECT3DRMOBJECT_METHODS(PURE);
    STDMETHOD(Init)(THIS_ LPDIRECT3DRMVISUAL,LPDIRECT3DRMLIGHT,D3DVALUE,D3DVALUE,D3DVALUE,D3DVALUE,D3DVALUE,D3DVALUE) PURE;
};

#undef INTERFACE
#define INTERFACE IDirect3DRMShadow2
DECLARE_INTERFACE_(IDirect3DRMShadow2,IDirect3DRMVisual)
{
    IUNKNOWN_METHODS(PURE);
    IDIRECT3DRMOBJECT_METHODS(PURE);
    STDMETHOD(Init)(THIS_ LPUNKNOWN,LPDIRECT3DRMLIGHT,D3DVALUE,D3DVALUE,D3DVALUE,D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(GetVisual)(THIS_ LPDIRECT3DRMVISUAL*) PURE;
    STDMETHOD(SetVisual)(THIS_ LPUNKNOWN pUNK,DWORD) PURE;
    STDMETHOD(GetLight)(THIS_ LPDIRECT3DRMLIGHT*) PURE;
    STDMETHOD(SetLight)(THIS_ LPDIRECT3DRMLIGHT,DWORD) PURE;
    STDMETHOD(GetPlane)(THIS_ LPD3DVALUE,LPD3DVALUE,LPD3DVALUE,LPD3DVALUE,LPD3DVALUE,LPD3DVALUE) PURE;
    STDMETHOD(SetPlane)(THIS_ D3DVALUE,D3DVALUE,D3DVALUE,D3DVALUE,D3DVALUE,D3DVALUE,DWORD) PURE;
    STDMETHOD(GetOptions)(THIS_ LPDWORD) PURE;
    STDMETHOD(SetOptions)(THIS_ DWORD) PURE;
};

#undef INTERFACE
#define INTERFACE IDirect3DRMFace
DECLARE_INTERFACE_(IDirect3DRMFace,IDirect3DRMObject)
{
    IUNKNOWN_METHODS(PURE);
    IDIRECT3DRMOBJECT_METHODS(PURE);
    STDMETHOD(AddVertex)(THIS_ D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(AddVertexAndNormalIndexed)(THIS_ DWORD,DWORD) PURE;
    STDMETHOD(SetColorRGB)(THIS_ D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE;
    STDMETHOD(SetTexture)(THIS_ LPDIRECT3DRMTEXTURE) PURE;
    STDMETHOD(SetTextureCoordinates)(THIS_ DWORD,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(SetMaterial)(THIS_ LPDIRECT3DRMMATERIAL) PURE;
    STDMETHOD(SetTextureTopology)(THIS_ BOOL,BOOL) PURE;
    STDMETHOD(GetVertex)(THIS_ DWORD,D3DVECTOR*,D3DVECTOR*) PURE;
    STDMETHOD(GetVertices)(THIS_ DWORD*,D3DVECTOR*,D3DVECTOR*);
    STDMETHOD(GetTextureCoordinates)(THIS_ DWORD,D3DVALUE*,D3DVALUE*) PURE;
    STDMETHOD(GetTextureTopology)(THIS_ BOOL*,BOOL*) PURE;
    STDMETHOD(GetNormal)(THIS_ D3DVECTOR*) PURE;
    STDMETHOD(GetTexture)(THIS_ LPDIRECT3DRMTEXTURE*) PURE;
    STDMETHOD(GetMaterial)(THIS_ LPDIRECT3DRMMATERIAL*) PURE;
    STDMETHOD_(int,GetVertexCount)(THIS) PURE;
    STDMETHOD_(int,GetVertexIndex)(THIS_ DWORD) PURE;
    STDMETHOD_(int,GetTextureCoordinateIndex)(THIS_ DWORD) PURE;
    STDMETHOD_(D3DCOLOR,GetColor)(THIS) PURE;
};

#undef INTERFACE
#define INTERFACE IDirect3DRMFace2
DECLARE_INTERFACE_(IDirect3DRMFace2,IDirect3DRMObject)
{
    IUNKNOWN_METHODS(PURE);
    IDIRECT3DRMOBJECT_METHODS(PURE);
    STDMETHOD(AddVertex)(THIS_ D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(AddVertexAndNormalIndexed)(THIS_ DWORD,DWORD) PURE;
    STDMETHOD(SetColorRGB)(THIS_ D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE;
    STDMETHOD(SetTexture)(THIS_ LPDIRECT3DRMTEXTURE3) PURE;
    STDMETHOD(SetTextureCoordinates)(THIS_ DWORD,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(SetMaterial)(THIS_ LPDIRECT3DRMMATERIAL2) PURE;
    STDMETHOD(SetTextureTopology)(THIS_ BOOL,BOOL) PURE;
    STDMETHOD(GetVertex)(THIS_ DWORD,D3DVECTOR*,D3DVECTOR*) PURE;
    STDMETHOD(GetVertices)(THIS_ DWORD*,D3DVECTOR*,D3DVECTOR*);
    STDMETHOD(GetTextureCoordinates)(THIS_ DWORD,D3DVALUE*,D3DVALUE*) PURE;
    STDMETHOD(GetTextureTopology)(THIS_ BOOL*,BOOL*) PURE;
    STDMETHOD(GetNormal)(THIS_ D3DVECTOR*) PURE;
    STDMETHOD(GetTexture)(THIS_ LPDIRECT3DRMTEXTURE3*) PURE;
    STDMETHOD(GetMaterial)(THIS_ LPDIRECT3DRMMATERIAL2*) PURE;
    STDMETHOD_(int,GetVertexCount)(THIS) PURE;
    STDMETHOD_(int,GetVertexIndex)(THIS_ DWORD) PURE;
    STDMETHOD_(int,GetTextureCoordinateIndex)(THIS_ DWORD) PURE;
    STDMETHOD_(D3DCOLOR,GetColor)(THIS) PURE;
};

#undef INTERFACE
#define INTERFACE IDirect3DRMMeshBuilder
DECLARE_INTERFACE_(IDirect3DRMMeshBuilder,IDirect3DRMVisual)
{
    IUNKNOWN_METHODS(PURE);
    IDIRECT3DRMOBJECT_METHODS(PURE);
    STDMETHOD(Load)(THIS_ LPVOID,LPVOID,D3DRMLOADOPTIONS,D3DRMLOADTEXTURECALLBACK,LPVOID) PURE;
    STDMETHOD(Save)(THIS_ const char *,D3DRMXOFFORMAT,D3DRMSAVEOPTIONS) PURE;
    STDMETHOD(Scale)(THIS_ D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(Translate)(THIS_ D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(SetColorSource)(THIS_ D3DRMCOLORSOURCE) PURE;
    STDMETHOD(GetBox)(THIS_ D3DRMBOX*) PURE;
    STDMETHOD(GenerateNormals)(THIS) PURE;
    STDMETHOD_(D3DRMCOLORSOURCE,GetColorSource)(THIS) PURE;
    STDMETHOD(AddMesh)(THIS_ LPDIRECT3DRMMESH) PURE;
    STDMETHOD(AddMeshBuilder)(THIS_ LPDIRECT3DRMMESHBUILDER) PURE;
    STDMETHOD(AddFrame)(THIS_ LPDIRECT3DRMFRAME) PURE;
    STDMETHOD(AddFace)(THIS_ LPDIRECT3DRMFACE) PURE;
    STDMETHOD(AddFaces)(THIS_ DWORD,D3DVECTOR*,DWORD,D3DVECTOR*,DWORD*,LPDIRECT3DRMFACEARRAY*) PURE;
    STDMETHOD(ReserveSpace)(THIS_ DWORD,DWORD,DWORD) PURE;
    STDMETHOD(SetColorRGB)(THIS_ D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE;
    STDMETHOD(SetTexture)(THIS_ LPDIRECT3DRMTEXTURE) PURE;
    STDMETHOD(SetMaterial)(THIS_ LPDIRECT3DRMMATERIAL) PURE;
    STDMETHOD(SetTextureTopology)(THIS_ BOOL,BOOL) PURE;
    STDMETHOD(SetQuality)(THIS_ D3DRMRENDERQUALITY) PURE;
    STDMETHOD(SetPerspective)(THIS_ BOOL) PURE;
    STDMETHOD(SetVertex)(THIS_ DWORD,D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(SetNormal)(THIS_ DWORD,D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(SetTextureCoordinates)(THIS_ DWORD,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(SetVertexColor)(THIS_ DWORD,D3DCOLOR) PURE;
    STDMETHOD(SetVertexColorRGB)(THIS_ DWORD,D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(GetFaces)(THIS_ LPDIRECT3DRMFACEARRAY*) PURE;
    STDMETHOD(GetVertices)(THIS_ DWORD*,D3DVECTOR*,DWORD*,D3DVECTOR*,DWORD*,DWORD*) PURE;
    STDMETHOD(GetTextureCoordinates)(THIS_ DWORD,D3DVALUE*,D3DVALUE*) PURE;
    STDMETHOD_(int,AddVertex)(THIS_ D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD_(int,AddNormal)(THIS_ D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(CreateFace)(THIS_ LPDIRECT3DRMFACE*) PURE;
    STDMETHOD_(D3DRMRENDERQUALITY,GetQuality)(THIS) PURE;
    STDMETHOD_(BOOL,GetPerspective)(THIS) PURE;
    STDMETHOD_(int,GetFaceCount)(THIS) PURE;
    STDMETHOD_(int,GetVertexCount)(THIS) PURE;
    STDMETHOD_(D3DCOLOR,GetVertexColor)(THIS_ DWORD) PURE;
    STDMETHOD(CreateMesh)(THIS_ LPDIRECT3DRMMESH*) PURE;
};

#undef INTERFACE
#define INTERFACE IDirect3DRMMeshBuilder2
DECLARE_INTERFACE_(IDirect3DRMMeshBuilder2,IDirect3DRMMeshBuilder)
{
    IUNKNOWN_METHODS(PURE);
    IDIRECT3DRMOBJECT_METHODS(PURE);
    STDMETHOD(Load)(THIS_ LPVOID,LPVOID,D3DRMLOADOPTIONS,D3DRMLOADTEXTURECALLBACK,LPVOID) PURE;
    STDMETHOD(Save)(THIS_ const char *,D3DRMXOFFORMAT,D3DRMSAVEOPTIONS) PURE;
    STDMETHOD(Scale)(THIS_ D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(Translate)(THIS_ D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(SetColorSource)(THIS_ D3DRMCOLORSOURCE) PURE;
    STDMETHOD(GetBox)(THIS_ D3DRMBOX*) PURE;
    STDMETHOD(GenerateNormals)(THIS) PURE;
    STDMETHOD_(D3DRMCOLORSOURCE,GetColorSource)(THIS) PURE;
    STDMETHOD(AddMesh)(THIS_ LPDIRECT3DRMMESH) PURE;
    STDMETHOD(AddMeshBuilder)(THIS_ LPDIRECT3DRMMESHBUILDER) PURE;
    STDMETHOD(AddFrame)(THIS_ LPDIRECT3DRMFRAME) PURE;
    STDMETHOD(AddFace)(THIS_ LPDIRECT3DRMFACE) PURE;
    STDMETHOD(AddFaces)(THIS_ DWORD,D3DVECTOR*,DWORD,D3DVECTOR*,DWORD*,LPDIRECT3DRMFACEARRAY*) PURE;
    STDMETHOD(ReserveSpace)(THIS_ DWORD,DWORD,DWORD) PURE;
    STDMETHOD(SetColorRGB)(THIS_ D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE;
    STDMETHOD(SetTexture)(THIS_ LPDIRECT3DRMTEXTURE) PURE;
    STDMETHOD(SetMaterial)(THIS_ LPDIRECT3DRMMATERIAL) PURE;
    STDMETHOD(SetTextureTopology)(THIS_ BOOL,BOOL) PURE;
    STDMETHOD(SetQuality)(THIS_ D3DRMRENDERQUALITY) PURE;
    STDMETHOD(SetPerspective)(THIS_ BOOL) PURE;
    STDMETHOD(SetVertex)(THIS_ DWORD,D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(SetNormal)(THIS_ DWORD,D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(SetTextureCoordinates)(THIS_ DWORD,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(SetVertexColor)(THIS_ DWORD,D3DCOLOR) PURE;
    STDMETHOD(SetVertexColorRGB)(THIS_ DWORD,D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(GetFaces)(THIS_ LPDIRECT3DRMFACEARRAY*) PURE;
    STDMETHOD(GetVertices)(THIS_ DWORD*,D3DVECTOR*,DWORD*,D3DVECTOR*,DWORD*,DWORD*) PURE;
    STDMETHOD(GetTextureCoordinates)(THIS_ DWORD,D3DVALUE*,D3DVALUE*) PURE;
    STDMETHOD_(int,AddVertex)(THIS_ D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD_(int,AddNormal)(THIS_ D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(CreateFace)(THIS_ LPDIRECT3DRMFACE*) PURE;
    STDMETHOD_(D3DRMRENDERQUALITY,GetQuality)(THIS) PURE;
    STDMETHOD_(BOOL,GetPerspective)(THIS) PURE;
    STDMETHOD_(int,GetFaceCount)(THIS) PURE;
    STDMETHOD_(int,GetVertexCount)(THIS) PURE;
    STDMETHOD_(D3DCOLOR,GetVertexColor)(THIS_ DWORD) PURE;
    STDMETHOD(CreateMesh)(THIS_ LPDIRECT3DRMMESH*) PURE;
    STDMETHOD(GenerateNormals2)(THIS_ D3DVALUE,DWORD) PURE;
    STDMETHOD(GetFace)(THIS_ DWORD,LPDIRECT3DRMFACE*) PURE;
};

#undef INTERFACE
#define INTERFACE IDirect3DRMMeshBuilder3
DECLARE_INTERFACE_(IDirect3DRMMeshBuilder3,IDirect3DRMVisual)
{
    IUNKNOWN_METHODS(PURE);
    IDIRECT3DRMOBJECT_METHODS(PURE);
    STDMETHOD(Load)(THIS_ LPVOID,LPVOID,D3DRMLOADOPTIONS,D3DRMLOADTEXTURE3CALLBACK,LPVOID) PURE;
    STDMETHOD(Save)(THIS_ const char *,D3DRMXOFFORMAT,D3DRMSAVEOPTIONS) PURE;
    STDMETHOD(Scale)(THIS_ D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(Translate)(THIS_ D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(SetColorSource)(THIS_ D3DRMCOLORSOURCE) PURE;
    STDMETHOD(GetBox)(THIS_ D3DRMBOX*) PURE;
    STDMETHOD(GenerateNormals)(THIS_ D3DVALUE,DWORD) PURE;
    STDMETHOD_(D3DRMCOLORSOURCE,GetColorSource)(THIS) PURE;
    STDMETHOD(AddMesh)(THIS_ LPDIRECT3DRMMESH) PURE;
    STDMETHOD(AddMeshBuilder)(THIS_ LPDIRECT3DRMMESHBUILDER3,DWORD) PURE;
    STDMETHOD(AddFrame)(THIS_ LPDIRECT3DRMFRAME3) PURE;
    STDMETHOD(AddFace)(THIS_ LPDIRECT3DRMFACE2) PURE;
    STDMETHOD(AddFaces)(THIS_ DWORD,D3DVECTOR*,DWORD,D3DVECTOR*,DWORD*,LPDIRECT3DRMFACEARRAY*) PURE;
    STDMETHOD(ReserveSpace)(THIS_ DWORD,DWORD,DWORD) PURE;
    STDMETHOD(SetColorRGB)(THIS_ D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE;
    STDMETHOD(SetTexture)(THIS_ LPDIRECT3DRMTEXTURE3) PURE;
    STDMETHOD(SetMaterial)(THIS_ LPDIRECT3DRMMATERIAL2) PURE;
    STDMETHOD(SetTextureTopology)(THIS_ BOOL,BOOL) PURE;
    STDMETHOD(SetQuality)(THIS_ D3DRMRENDERQUALITY) PURE;
    STDMETHOD(SetPerspective)(THIS_ BOOL) PURE;
    STDMETHOD(SetVertex)(THIS_ DWORD,D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(SetNormal)(THIS_ DWORD,D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(SetTextureCoordinates)(THIS_ DWORD,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(SetVertexColor)(THIS_ DWORD,D3DCOLOR) PURE;
    STDMETHOD(SetVertexColorRGB)(THIS_ DWORD,D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(GetFaces)(THIS_ LPDIRECT3DRMFACEARRAY*) PURE;
    STDMETHOD(GetGeometry)(THIS_ DWORD*,D3DVECTOR*,DWORD*,D3DVECTOR*,DWORD*,DWORD*) PURE;
    STDMETHOD(GetTextureCoordinates)(THIS_ DWORD,D3DVALUE*,D3DVALUE*) PURE;
    STDMETHOD_(int,AddVertex)(THIS_ D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD_(int,AddNormal)(THIS_ D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(CreateFace)(THIS_ LPDIRECT3DRMFACE2*) PURE;
    STDMETHOD_(D3DRMRENDERQUALITY,GetQuality)(THIS) PURE;
    STDMETHOD_(BOOL,GetPerspective)(THIS) PURE;
    STDMETHOD_(int,GetFaceCount)(THIS) PURE;
    STDMETHOD_(int,GetVertexCount)(THIS) PURE;
    STDMETHOD_(D3DCOLOR,GetVertexColor)(THIS_ DWORD) PURE;
    STDMETHOD(CreateMesh)(THIS_ LPDIRECT3DRMMESH*) PURE;
    STDMETHOD(GetFace)(THIS_ DWORD index,LPDIRECT3DRMFACE2*) PURE;
    STDMETHOD(GetVertex)(THIS_ DWORD,LPD3DVECTOR) PURE;
    STDMETHOD(GetNormal)(THIS_ DWORD,LPD3DVECTOR) PURE;
    STDMETHOD(DeleteVertices)(THIS_ DWORD,DWORD) PURE;
    STDMETHOD(DeleteNormals)(THIS_ DWORD,DWORD) PURE;
    STDMETHOD(DeleteFace)(THIS_ LPDIRECT3DRMFACE2) PURE;
    STDMETHOD(Empty)(THIS_ DWORD) PURE;
    STDMETHOD(Optimize)(THIS_ DWORD) PURE;
    STDMETHOD(AddFacesIndexed)(THIS_ DWORD,DWORD*,DWORD*,DWORD*) PURE;
    STDMETHOD(CreateSubMesh)(THIS_ LPUNKNOWN*) PURE;
    STDMETHOD(GetParentMesh)(THIS_ DWORD,LPUNKNOWN*) PURE;
    STDMETHOD(GetSubMeshes)(THIS_ LPDWORD,LPUNKNOWN*) PURE;
    STDMETHOD(DeleteSubMesh)(THIS_ LPUNKNOWN) PURE;
    STDMETHOD(Enable)(THIS_ DWORD) PURE;
    STDMETHOD(GetEnable)(THIS_ DWORD*) PURE;
    STDMETHOD(AddTriangles)(THIS_ DWORD,DWORD,DWORD,LPVOID) PURE;
    STDMETHOD(SetVertices)(THIS_ DWORD,DWORD,LPD3DVECTOR) PURE;
    STDMETHOD(GetVertices)(THIS_ DWORD,LPDWORD,LPD3DVECTOR) PURE;
    STDMETHOD(SetNormals)(THIS_ DWORD,DWORD,LPD3DVECTOR) PURE;
    STDMETHOD(GetNormals)(THIS_ DWORD,LPDWORD,LPD3DVECTOR) PURE;
    STDMETHOD_(int,GetNormalCount)(THIS) PURE;
};  

#undef INTERFACE
#define INTERFACE IDirect3DRMLight
DECLARE_INTERFACE_(IDirect3DRMLight,IDirect3DRMObject)
{
    IUNKNOWN_METHODS(PURE);
    IDIRECT3DRMOBJECT_METHODS(PURE);
    STDMETHOD(SetType)(THIS_ D3DRMLIGHTTYPE) PURE;
    STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE;
    STDMETHOD(SetColorRGB)(THIS_ D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(SetRange)(THIS_ D3DVALUE) PURE;
    STDMETHOD(SetUmbra)(THIS_ D3DVALUE) PURE;
    STDMETHOD(SetPenumbra)(THIS_ D3DVALUE) PURE;
    STDMETHOD(SetConstantAttenuation)(THIS_ D3DVALUE) PURE;
    STDMETHOD(SetLinearAttenuation)(THIS_ D3DVALUE) PURE;
    STDMETHOD(SetQuadraticAttenuation)(THIS_ D3DVALUE) PURE;
    STDMETHOD_(D3DVALUE,GetRange)(THIS) PURE;
    STDMETHOD_(D3DVALUE,GetUmbra)(THIS) PURE;
    STDMETHOD_(D3DVALUE,GetPenumbra)(THIS) PURE;
    STDMETHOD_(D3DVALUE,GetConstantAttenuation)(THIS) PURE;
    STDMETHOD_(D3DVALUE,GetLinearAttenuation)(THIS) PURE;
    STDMETHOD_(D3DVALUE,GetQuadraticAttenuation)(THIS) PURE;
    STDMETHOD_(D3DCOLOR,GetColor)(THIS) PURE;
    STDMETHOD_(D3DRMLIGHTTYPE,GetType)(THIS) PURE;
    STDMETHOD(SetEnableFrame)(THIS_ LPDIRECT3DRMFRAME) PURE;
    STDMETHOD(GetEnableFrame)(THIS_ LPDIRECT3DRMFRAME*) PURE;
};

#undef INTERFACE
#define INTERFACE IDirect3DRMTexture
DECLARE_INTERFACE_(IDirect3DRMTexture,IDirect3DRMVisual)
{
    IUNKNOWN_METHODS(PURE);
    IDIRECT3DRMOBJECT_METHODS(PURE);
    STDMETHOD(InitFromFile)(THIS_ const char *) PURE;
    STDMETHOD(InitFromSurface)(THIS_ LPDIRECTDRAWSURFACE) PURE;
    STDMETHOD(InitFromResource)(THIS_ HRSRC) PURE;
    STDMETHOD(Changed)(THIS_ BOOL,BOOL) PURE;
    STDMETHOD(SetColors)(THIS_ DWORD) PURE;
    STDMETHOD(SetShades)(THIS_ DWORD) PURE;
    STDMETHOD(SetDecalSize)(THIS_ D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(SetDecalOrigin)(THIS_ LONG,LONG) PURE;
    STDMETHOD(SetDecalScale)(THIS_ DWORD) PURE;
    STDMETHOD(SetDecalTransparency)(THIS_ BOOL) PURE;
    STDMETHOD(SetDecalTransparentColor)(THIS_ D3DCOLOR) PURE;
    STDMETHOD(GetDecalSize)(THIS_ D3DVALUE*,D3DVALUE*) PURE;
    STDMETHOD(GetDecalOrigin)(THIS_ LONG*,LONG*) PURE;
    STDMETHOD_(D3DRMIMAGE *,GetImage)(THIS) PURE;
    STDMETHOD_(DWORD,GetShades)(THIS) PURE;
    STDMETHOD_(DWORD,GetColors)(THIS) PURE;
    STDMETHOD_(DWORD,GetDecalScale)(THIS) PURE;
    STDMETHOD_(BOOL,GetDecalTransparency)(THIS) PURE;
    STDMETHOD_(D3DCOLOR,GetDecalTransparentColor)(THIS) PURE;
};

#undef INTERFACE
#define INTERFACE IDirect3DRMTexture2
DECLARE_INTERFACE_(IDirect3DRMTexture2,IDirect3DRMTexture)
{
    IUNKNOWN_METHODS(PURE);
    IDIRECT3DRMOBJECT_METHODS(PURE);
    STDMETHOD(InitFromFile)(THIS_ const char *) PURE;
    STDMETHOD(InitFromSurface)(THIS_ LPDIRECTDRAWSURFACE) PURE;
    STDMETHOD(InitFromResource)(THIS_ HRSRC) PURE;
    STDMETHOD(Changed)(THIS_ BOOL,BOOL) PURE;
    STDMETHOD(SetColors)(THIS_ DWORD) PURE;
    STDMETHOD(SetShades)(THIS_ DWORD) PURE;
    STDMETHOD(SetDecalSize)(THIS_ D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(SetDecalOrigin)(THIS_ LONG,LONG) PURE;
    STDMETHOD(SetDecalScale)(THIS_ DWORD) PURE;
    STDMETHOD(SetDecalTransparency)(THIS_ BOOL) PURE;
    STDMETHOD(SetDecalTransparentColor)(THIS_ D3DCOLOR) PURE;
    STDMETHOD(GetDecalSize)(THIS_ D3DVALUE*,D3DVALUE*) PURE;
    STDMETHOD(GetDecalOrigin)(THIS_ LONG*,LONG*) PURE;
    STDMETHOD_(D3DRMIMAGE *,GetImage)(THIS) PURE;
    STDMETHOD_(DWORD,GetShades)(THIS) PURE;
    STDMETHOD_(DWORD,GetColors)(THIS) PURE;
    STDMETHOD_(DWORD,GetDecalScale)(THIS) PURE;
    STDMETHOD_(BOOL,GetDecalTransparency)(THIS) PURE;
    STDMETHOD_(D3DCOLOR,GetDecalTransparentColor)(THIS) PURE;
    STDMETHOD(InitFromImage)(THIS_ LPD3DRMIMAGE) PURE;
    STDMETHOD(InitFromResource2)(THIS_ HMODULE,LPCTSTR,LPCTSTR) PURE;
    STDMETHOD(GenerateMIPMap)(THIS_ DWORD) PURE;
};

#undef INTERFACE
#define INTERFACE IDirect3DRMTexture3
DECLARE_INTERFACE_(IDirect3DRMTexture3,IDirect3DRMVisual)
{
    IUNKNOWN_METHODS(PURE);
    IDIRECT3DRMOBJECT_METHODS(PURE);
    STDMETHOD(InitFromFile)(THIS_ const char *) PURE;
    STDMETHOD(InitFromSurface)(THIS_ LPDIRECTDRAWSURFACE) PURE;
    STDMETHOD(InitFromResource)(THIS_ HRSRC) PURE;
    STDMETHOD(Changed)(THIS_ DWORD,DWORD,LPRECT) PURE;
    STDMETHOD(SetColors)(THIS_ DWORD) PURE;
    STDMETHOD(SetShades)(THIS_ DWORD) PURE;
    STDMETHOD(SetDecalSize)(THIS_ D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(SetDecalOrigin)(THIS_ LONG,LONG) PURE;
    STDMETHOD(SetDecalScale)(THIS_ DWORD) PURE;
    STDMETHOD(SetDecalTransparency)(THIS_ BOOL) PURE;
    STDMETHOD(SetDecalTransparentColor)(THIS_ D3DCOLOR) PURE;
    STDMETHOD(GetDecalSize)(THIS_ D3DVALUE*,D3DVALUE*) PURE;
    STDMETHOD(GetDecalOrigin)(THIS_ LONG*,LONG*) PURE;
    STDMETHOD_(D3DRMIMAGE *,GetImage)(THIS) PURE;
    STDMETHOD_(DWORD,GetShades)(THIS) PURE;
    STDMETHOD_(DWORD,GetColors)(THIS) PURE;
    STDMETHOD_(DWORD,GetDecalScale)(THIS) PURE;
    STDMETHOD_(BOOL,GetDecalTransparency)(THIS) PURE;
    STDMETHOD_(D3DCOLOR,GetDecalTransparentColor)(THIS) PURE;
    STDMETHOD(InitFromImage)(THIS_ LPD3DRMIMAGE) PURE;
    STDMETHOD(InitFromResource2)(THIS_ HMODULE,LPCTSTR,LPCTSTR) PURE;
    STDMETHOD(GenerateMIPMap)(THIS_ DWORD) PURE;
    STDMETHOD(GetSurface)(THIS_ DWORD,LPDIRECTDRAWSURFACE*) PURE;
    STDMETHOD(SetCacheOptions)(THIS_ LONG,DWORD) PURE;
    STDMETHOD(GetCacheOptions)(THIS_ LPLONG,LPDWORD) PURE;
    STDMETHOD(SetDownsampleCallback)(THIS_ D3DRMDOWNSAMPLECALLBACK,LPVOID) PURE;
    STDMETHOD(SetValidationCallback)(THIS_ D3DRMVALIDATIONCALLBACK,LPVOID) PURE;
};

#undef INTERFACE
#define INTERFACE IDirect3DRMWrap
DECLARE_INTERFACE_(IDirect3DRMWrap,IDirect3DRMObject)
{
    IUNKNOWN_METHODS(PURE);
    IDIRECT3DRMOBJECT_METHODS(PURE);
    STDMETHOD(Init)(THIS_ D3DRMWRAPTYPE,LPDIRECT3DRMFRAME,D3DVALUE,D3DVALUE,D3DVALUE,D3DVALUE,D3DVALUE,D3DVALUE,D3DVALUE,D3DVALUE,D3DVALUE,D3DVALUE,D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(Apply)(THIS_ LPDIRECT3DRMOBJECT) PURE;
    STDMETHOD(ApplyRelative)(THIS_ LPDIRECT3DRMFRAME,LPDIRECT3DRMOBJECT) PURE;
};

#undef INTERFACE
#define INTERFACE IDirect3DRMMaterial
DECLARE_INTERFACE_(IDirect3DRMMaterial,IDirect3DRMObject)
{
    IUNKNOWN_METHODS(PURE);
    IDIRECT3DRMOBJECT_METHODS(PURE);
    STDMETHOD(SetPower)(THIS_ D3DVALUE) PURE;
    STDMETHOD(SetSpecular)(THIS_ D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(SetEmissive)(THIS_ D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD_(D3DVALUE,GetPower)(THIS) PURE;
    STDMETHOD(GetSpecular)(THIS_ D3DVALUE*,D3DVALUE*,D3DVALUE*) PURE;
    STDMETHOD(GetEmissive)(THIS_ D3DVALUE*,D3DVALUE*,D3DVALUE*) PURE;
};

#undef INTERFACE
#define INTERFACE IDirect3DRMMaterial2
DECLARE_INTERFACE_(IDirect3DRMMaterial2,IDirect3DRMObject)
{
    IUNKNOWN_METHODS(PURE);
    IDIRECT3DRMOBJECT_METHODS(PURE);
    STDMETHOD(SetPower)(THIS_ D3DVALUE) PURE;
    STDMETHOD(SetSpecular)(THIS_ D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(SetEmissive)(THIS_ D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD_(D3DVALUE,GetPower)(THIS) PURE;
    STDMETHOD(GetSpecular)(THIS_ D3DVALUE*,D3DVALUE*,D3DVALUE*) PURE;
    STDMETHOD(GetEmissive)(THIS_ D3DVALUE*,D3DVALUE*,D3DVALUE*) PURE;
    STDMETHOD(GetAmbient)(THIS_ D3DVALUE*,D3DVALUE*,D3DVALUE*) PURE;
    STDMETHOD(SetAmbient)(THIS_ D3DVALUE,D3DVALUE,D3DVALUE) PURE;
};

#undef INTERFACE
#define INTERFACE IDirect3DRMAnimation
DECLARE_INTERFACE_(IDirect3DRMAnimation,IDirect3DRMObject)
{
    IUNKNOWN_METHODS(PURE);
    IDIRECT3DRMOBJECT_METHODS(PURE);
    STDMETHOD(SetOptions)(THIS_ D3DRMANIMATIONOPTIONS) PURE;
    STDMETHOD(AddRotateKey)(THIS_ D3DVALUE,D3DRMQUATERNION*) PURE;
    STDMETHOD(AddPositionKey)(THIS_ D3DVALUE,D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(AddScaleKey)(THIS_ D3DVALUE,D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(DeleteKey)(THIS_ D3DVALUE) PURE;
    STDMETHOD(SetFrame)(THIS_ LPDIRECT3DRMFRAME) PURE;
    STDMETHOD(SetTime)(THIS_ D3DVALUE) PURE;
    STDMETHOD_(D3DRMANIMATIONOPTIONS,GetOptions)(THIS) PURE;
};

#undef INTERFACE
#define INTERFACE IDirect3DRMAnimation2
DECLARE_INTERFACE_(IDirect3DRMAnimation2,IDirect3DRMObject)
{
    IUNKNOWN_METHODS(PURE);
    IDIRECT3DRMOBJECT_METHODS(PURE);
    STDMETHOD(SetOptions)(THIS_ D3DRMANIMATIONOPTIONS) PURE;
    STDMETHOD(AddRotateKey)(THIS_ D3DVALUE,D3DRMQUATERNION*) PURE;
    STDMETHOD(AddPositionKey)(THIS_ D3DVALUE,D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(AddScaleKey)(THIS_ D3DVALUE,D3DVALUE,D3DVALUE,D3DVALUE) PURE;
    STDMETHOD(DeleteKey)(THIS_ D3DVALUE) PURE;
    STDMETHOD(SetFrame)(THIS_ LPDIRECT3DRMFRAME3) PURE;
    STDMETHOD(SetTime)(THIS_ D3DVALUE) PURE;
    STDMETHOD_(D3DRMANIMATIONOPTIONS,GetOptions)(THIS) PURE;
    STDMETHOD(GetFrame)(THIS_ LPDIRECT3DRMFRAME3*) PURE;
    STDMETHOD(DeleteKeyByID)(THIS_ DWORD) PURE;
    STDMETHOD(AddKey)(THIS_ LPD3DRMANIMATIONKEY) PURE;
    STDMETHOD(ModifyKey)(THIS_ LPD3DRMANIMATIONKEY) PURE;
    STDMETHOD(GetKeys)(THIS_ D3DVALUE,D3DVALUE,LPDWORD,LPD3DRMANIMATIONKEY);
};

#undef INTERFACE
#define INTERFACE IDirect3DRMAnimationSet
DECLARE_INTERFACE_(IDirect3DRMAnimationSet,IDirect3DRMObject)
{
    IUNKNOWN_METHODS(PURE);
    IDIRECT3DRMOBJECT_METHODS(PURE);
    STDMETHOD(AddAnimation)(THIS_ LPDIRECT3DRMANIMATION) PURE;
    STDMETHOD(Load)(THIS_ LPVOID,LPVOID,D3DRMLOADOPTIONS,D3DRMLOADTEXTURECALLBACK,LPVOID,LPDIRECT3DRMFRAME) PURE;
    STDMETHOD(DeleteAnimation)(THIS_ LPDIRECT3DRMANIMATION) PURE;
    STDMETHOD(SetTime)(THIS_ D3DVALUE) PURE;
};

#undef INTERFACE
#define INTERFACE IDirect3DRMAnimationSet2
DECLARE_INTERFACE_(IDirect3DRMAnimationSet2,IDirect3DRMObject)
{
    IUNKNOWN_METHODS(PURE);
    IDIRECT3DRMOBJECT_METHODS(PURE);
    STDMETHOD(AddAnimation)(THIS_ LPDIRECT3DRMANIMATION2) PURE;
    STDMETHOD(Load)(THIS_ LPVOID,LPVOID,D3DRMLOADOPTIONS,D3DRMLOADTEXTURE3CALLBACK,LPVOID,LPDIRECT3DRMFRAME3) PURE;
    STDMETHOD(DeleteAnimation)(THIS_ LPDIRECT3DRMANIMATION2) PURE;
    STDMETHOD(SetTime)(THIS_ D3DVALUE) PURE;
    STDMETHOD(GetAnimations)(THIS_ LPDIRECT3DRMANIMATIONARRAY*) PURE;
};

#undef INTERFACE
#define INTERFACE IDirect3DRMUserVisual
DECLARE_INTERFACE_(IDirect3DRMUserVisual,IDirect3DRMVisual)
{
    IUNKNOWN_METHODS(PURE);
    IDIRECT3DRMOBJECT_METHODS(PURE);
    STDMETHOD(Init)(THIS_ D3DRMUSERVISUALCALLBACK,void*) PURE;
};

#undef INTERFACE
#define INTERFACE IDirect3DRMArray
DECLARE_INTERFACE_(IDirect3DRMArray,IUnknown)
{
    IUNKNOWN_METHODS(PURE);
    STDMETHOD_(DWORD,GetSize)(THIS) PURE;
};

#undef INTERFACE
#define INTERFACE IDirect3DRMObjectArray
DECLARE_INTERFACE_(IDirect3DRMObjectArray,IDirect3DRMArray)
{
    IUNKNOWN_METHODS(PURE);
    STDMETHOD_(DWORD,GetSize)(THIS) PURE;
    STDMETHOD(GetElement)(THIS_ DWORD,LPDIRECT3DRMOBJECT*) PURE;
};

#undef INTERFACE
#define INTERFACE IDirect3DRMDeviceArray
DECLARE_INTERFACE_(IDirect3DRMDeviceArray,IDirect3DRMArray)
{
    IUNKNOWN_METHODS(PURE);
    STDMETHOD_(DWORD,GetSize)(THIS) PURE;
    STDMETHOD(GetElement)(THIS_ DWORD,LPDIRECT3DRMDEVICE*) PURE;
};

#undef INTERFACE
#define INTERFACE IDirect3DRMFrameArray
DECLARE_INTERFACE_(IDirect3DRMFrameArray,IDirect3DRMArray)
{
    IUNKNOWN_METHODS(PURE);
    STDMETHOD_(DWORD,GetSize)(THIS) PURE;
    STDMETHOD(GetElement)(THIS_ DWORD,LPDIRECT3DRMFRAME*) PURE;
};

#undef INTERFACE
#define INTERFACE IDirect3DRMViewportArray
DECLARE_INTERFACE_(IDirect3DRMViewportArray,IDirect3DRMArray)
{
    IUNKNOWN_METHODS(PURE);
    STDMETHOD_(DWORD,GetSize)(THIS) PURE;
    STDMETHOD(GetElement)(THIS_ DWORD,LPDIRECT3DRMVIEWPORT*) PURE;
};

#undef INTERFACE
#define INTERFACE IDirect3DRMVisualArray
DECLARE_INTERFACE_(IDirect3DRMVisualArray,IDirect3DRMArray)
{
    IUNKNOWN_METHODS(PURE);
    STDMETHOD_(DWORD,GetSize)(THIS) PURE;
    STDMETHOD(GetElement)(THIS_ DWORD,LPDIRECT3DRMVISUAL*) PURE;
};

#undef INTERFACE
#define INTERFACE IDirect3DRMAnimationArray
DECLARE_INTERFACE_(IDirect3DRMAnimationArray,IDirect3DRMArray)
{
    IUNKNOWN_METHODS(PURE);
    STDMETHOD_(DWORD,GetSize)(THIS) PURE;
    STDMETHOD(GetElement)(THIS_ DWORD,LPDIRECT3DRMANIMATION2*) PURE;
};

#undef INTERFACE
#define INTERFACE IDirect3DRMPickedArray
DECLARE_INTERFACE_(IDirect3DRMPickedArray,IDirect3DRMArray)
{
    IUNKNOWN_METHODS(PURE);
    STDMETHOD_(DWORD,GetSize)(THIS) PURE;
    STDMETHOD(GetPick)(THIS_ DWORD,LPDIRECT3DRMVISUAL*,LPDIRECT3DRMFRAMEARRAY*,LPD3DRMPICKDESC) PURE;
};

#undef INTERFACE
#define INTERFACE IDirect3DRMLightArray
DECLARE_INTERFACE_(IDirect3DRMLightArray,IDirect3DRMArray)
{
    IUNKNOWN_METHODS(PURE);
    STDMETHOD_(DWORD,GetSize)(THIS) PURE;
    STDMETHOD(GetElement)(THIS_ DWORD,LPDIRECT3DRMLIGHT*) PURE;
};

#undef INTERFACE
#define INTERFACE IDirect3DRMFaceArray
DECLARE_INTERFACE_(IDirect3DRMFaceArray,IDirect3DRMArray)
{
    IUNKNOWN_METHODS(PURE);
    STDMETHOD_(DWORD,GetSize)(THIS) PURE;
    STDMETHOD(GetElement)(THIS_ DWORD,LPDIRECT3DRMFACE*) PURE;
};

#undef INTERFACE
#define INTERFACE IDirect3DRMPicked2Array
DECLARE_INTERFACE_(IDirect3DRMPicked2Array,IDirect3DRMArray)
{
    IUNKNOWN_METHODS(PURE);
    STDMETHOD_(DWORD,GetSize)(THIS) PURE;
    STDMETHOD(GetPick)(THIS_ DWORD,LPDIRECT3DRMVISUAL*,LPDIRECT3DRMFRAMEARRAY*,LPD3DRMPICKDESC2) PURE;
};

#undef INTERFACE
#define INTERFACE IDirect3DRMInterpolator
DECLARE_INTERFACE_(IDirect3DRMInterpolator,IDirect3DRMObject)
{
    IUNKNOWN_METHODS(PURE);
    IDIRECT3DRMOBJECT_METHODS(PURE);
    STDMETHOD(AttachObject)(THIS_ LPDIRECT3DRMOBJECT) PURE;
    STDMETHOD(GetAttachedObjects)(THIS_ LPDIRECT3DRMOBJECTARRAY *) PURE;
    STDMETHOD(DetachObject)(THIS_ LPDIRECT3DRMOBJECT) PURE;
    STDMETHOD(SetIndex)(THIS_ D3DVALUE) PURE;
    STDMETHOD_(D3DVALUE,GetIndex)(THIS) PURE;
    STDMETHOD(Interpolate)(THIS_ D3DVALUE,LPDIRECT3DRMOBJECT,D3DRMINTERPOLATIONOPTIONS) PURE;
};

#undef INTERFACE
#define INTERFACE IDirect3DRMClippedVisual
DECLARE_INTERFACE_(IDirect3DRMClippedVisual,IDirect3DRMVisual)
{
    IUNKNOWN_METHODS(PURE);
    IDIRECT3DRMOBJECT_METHODS(PURE);
    STDMETHOD(Init) (THIS_ LPDIRECT3DRMVISUAL) PURE;
    STDMETHOD(AddPlane)(THIS_ LPDIRECT3DRMFRAME3,LPD3DVECTOR,LPD3DVECTOR,DWORD,LPDWORD) PURE;
    STDMETHOD(DeletePlane)(THIS_ DWORD,DWORD) PURE;
    STDMETHOD(GetPlaneIDs)(THIS_ LPDWORD,LPDWORD,DWORD) PURE;
    STDMETHOD(GetPlane)(THIS_ DWORD,LPDIRECT3DRMFRAME3,LPD3DVECTOR,LPD3DVECTOR,DWORD) PURE;
    STDMETHOD(SetPlane)(THIS_ DWORD,LPDIRECT3DRMFRAME3,LPD3DVECTOR,LPD3DVECTOR,DWORD) PURE;
};

#ifdef __cplusplus
};
#endif

#endif /* _D3DRMOBJ_H */

