Home | History | Annotate | Download | only in INC
      1 /*==========================================================================;
      2  *
      3  *  Copyright (C) 1995-1996 Microsoft Corporation.  All Rights Reserved.
      4  *
      5  *  File:       d3drm.h
      6  *  Content:    Direct3DRM include file
      7  *
      8  ***************************************************************************/
      9 
     10 #ifndef _D3DRMOBJ_H_
     11 #define _D3DRMOBJ_H_
     12 
     13 #include <objbase.h> /* Use Windows header files */
     14 #define VIRTUAL
     15 
     16 #include "d3drmdef.h"
     17 #include "d3d.h"
     18 
     19 #ifdef __cplusplus
     20 extern "C" {
     21 #endif
     22 
     23 /*
     24  * The methods for IUnknown
     25  */
     26 #define IUNKNOWN_METHODS(kind) \
     27     STDMETHOD(QueryInterface)           (THIS_ REFIID riid, LPVOID *ppvObj) kind; \
     28     STDMETHOD_(ULONG, AddRef)           (THIS) kind; \
     29     STDMETHOD_(ULONG, Release)          (THIS) kind
     30 
     31 /*
     32  * The methods for IDirect3DRMObject
     33  */
     34 #define IDIRECT3DRMOBJECT_METHODS(kind) \
     35     STDMETHOD(Clone)                    (THIS_ LPUNKNOWN pUnkOuter, REFIID riid, LPVOID *ppvObj) kind; \
     36     STDMETHOD(AddDestroyCallback)       (THIS_ D3DRMOBJECTCALLBACK, LPVOID argument) kind; \
     37     STDMETHOD(DeleteDestroyCallback)    (THIS_ D3DRMOBJECTCALLBACK, LPVOID argument) kind; \
     38     STDMETHOD(SetAppData)               (THIS_ DWORD data) kind; \
     39     STDMETHOD_(DWORD, GetAppData)       (THIS) kind; \
     40     STDMETHOD(SetName)                  (THIS_ LPCSTR) kind; \
     41     STDMETHOD(GetName)                  (THIS_ LPDWORD lpdwSize, LPSTR lpName) kind; \
     42     STDMETHOD(GetClassName)             (THIS_ LPDWORD lpdwSize, LPSTR lpName) kind
     43 
     44 
     45 #define WIN_TYPES(itype, ptype) \
     46     typedef interface itype FAR *LP##ptype, FAR **LPLP##ptype
     47 
     48 WIN_TYPES(IDirect3DRMObject, DIRECT3DRMOBJECT);
     49 WIN_TYPES(IDirect3DRMDevice, DIRECT3DRMDEVICE);
     50 WIN_TYPES(IDirect3DRMViewport, DIRECT3DRMVIEWPORT);
     51 WIN_TYPES(IDirect3DRMFrame, DIRECT3DRMFRAME);
     52 WIN_TYPES(IDirect3DRMVisual, DIRECT3DRMVISUAL);
     53 WIN_TYPES(IDirect3DRMMesh, DIRECT3DRMMESH);
     54 WIN_TYPES(IDirect3DRMMeshBuilder, DIRECT3DRMMESHBUILDER);
     55 WIN_TYPES(IDirect3DRMFace, DIRECT3DRMFACE);
     56 WIN_TYPES(IDirect3DRMLight, DIRECT3DRMLIGHT);
     57 WIN_TYPES(IDirect3DRMTexture, DIRECT3DRMTEXTURE);
     58 WIN_TYPES(IDirect3DRMWrap, DIRECT3DRMWRAP);
     59 WIN_TYPES(IDirect3DRMMaterial, DIRECT3DRMMATERIAL);
     60 WIN_TYPES(IDirect3DRMAnimation, DIRECT3DRMANIMATION);
     61 WIN_TYPES(IDirect3DRMAnimationSet, DIRECT3DRMANIMATIONSET);
     62 WIN_TYPES(IDirect3DRMUserVisual, DIRECT3DRMUSERVISUAL);
     63 WIN_TYPES(IDirect3DRMShadow, DIRECT3DRMSHADOW);
     64 WIN_TYPES(IDirect3DRMArray, DIRECT3DRMOBJECTARRAY);
     65 WIN_TYPES(IDirect3DRMDeviceArray, DIRECT3DRMDEVICEARRAY);
     66 WIN_TYPES(IDirect3DRMFaceArray, DIRECT3DRMFACEARRAY);
     67 WIN_TYPES(IDirect3DRMViewportArray, DIRECT3DRMVIEWPORTARRAY);
     68 WIN_TYPES(IDirect3DRMFrameArray, DIRECT3DRMFRAMEARRAY);
     69 WIN_TYPES(IDirect3DRMVisualArray, DIRECT3DRMVISUALARRAY);
     70 WIN_TYPES(IDirect3DRMPickedArray, DIRECT3DRMPICKEDARRAY);
     71 WIN_TYPES(IDirect3DRMLightArray, DIRECT3DRMLIGHTARRAY);
     72 
     73 /*
     74  * Direct3DRM Object classes
     75  */
     76 DEFINE_GUID(CLSID_CDirect3DRMDevice,        0x4fa3568e, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
     77 DEFINE_GUID(CLSID_CDirect3DRMViewport,      0x4fa3568f, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
     78 DEFINE_GUID(CLSID_CDirect3DRMFrame,         0x4fa35690, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
     79 DEFINE_GUID(CLSID_CDirect3DRMMesh,          0x4fa35691, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
     80 DEFINE_GUID(CLSID_CDirect3DRMMeshBuilder,   0x4fa35692, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
     81 DEFINE_GUID(CLSID_CDirect3DRMFace,          0x4fa35693, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
     82 DEFINE_GUID(CLSID_CDirect3DRMLight,         0x4fa35694, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
     83 DEFINE_GUID(CLSID_CDirect3DRMTexture,       0x4fa35695, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
     84 DEFINE_GUID(CLSID_CDirect3DRMWrap,          0x4fa35696, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
     85 DEFINE_GUID(CLSID_CDirect3DRMMaterial,      0x4fa35697, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
     86 DEFINE_GUID(CLSID_CDirect3DRMAnimation,     0x4fa35698, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
     87 DEFINE_GUID(CLSID_CDirect3DRMAnimationSet,  0x4fa35699, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
     88 DEFINE_GUID(CLSID_CDirect3DRMUserVisual,    0x4fa3569a, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
     89 DEFINE_GUID(CLSID_CDirect3DRMShadow,        0x4fa3569b, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
     90 
     91 /*
     92  * Direct3DRM Object interfaces
     93  */
     94 DEFINE_GUID(IID_IDirect3DRMObject,          0xeb16cb00, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
     95 DEFINE_GUID(IID_IDirect3DRMDevice,          0xe9e19280, 0x6e05, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
     96 DEFINE_GUID(IID_IDirect3DRMViewport,        0xeb16cb02, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
     97 DEFINE_GUID(IID_IDirect3DRMFrame,           0xeb16cb03, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
     98 DEFINE_GUID(IID_IDirect3DRMVisual,          0xeb16cb04, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
     99 DEFINE_GUID(IID_IDirect3DRMMesh,            0xa3a80d01, 0x6e12, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
    100 DEFINE_GUID(IID_IDirect3DRMMeshBuilder,     0xa3a80d02, 0x6e12, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
    101 DEFINE_GUID(IID_IDirect3DRMFace,            0xeb16cb07, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
    102 DEFINE_GUID(IID_IDirect3DRMLight,           0xeb16cb08, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
    103 DEFINE_GUID(IID_IDirect3DRMTexture,         0xeb16cb09, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
    104 DEFINE_GUID(IID_IDirect3DRMWrap,            0xeb16cb0a, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
    105 DEFINE_GUID(IID_IDirect3DRMMaterial,        0xeb16cb0b, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
    106 DEFINE_GUID(IID_IDirect3DRMAnimation,       0xeb16cb0d, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
    107 DEFINE_GUID(IID_IDirect3DRMAnimationSet,    0xeb16cb0e, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
    108 DEFINE_GUID(IID_IDirect3DRMDeviceArray,     0xeb16cb10, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
    109 DEFINE_GUID(IID_IDirect3DRMViewportArray,   0xeb16cb11, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
    110 DEFINE_GUID(IID_IDirect3DRMFrameArray,      0xeb16cb12, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
    111 DEFINE_GUID(IID_IDirect3DRMVisualArray,     0xeb16cb13, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
    112 DEFINE_GUID(IID_IDirect3DRMLightArray,      0xeb16cb14, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
    113 DEFINE_GUID(IID_IDirect3DRMPickedArray,     0xeb16cb16, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
    114 DEFINE_GUID(IID_IDirect3DRMFaceArray,       0xeb16cb17, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
    115 DEFINE_GUID(IID_IDirect3DRMUserVisual,      0x59163de0, 0x6d43, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
    116 DEFINE_GUID(IID_IDirect3DRMShadow,          0xaf359780, 0x6ba3, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
    117 
    118 typedef void (*D3DRMOBJECTCALLBACK)(LPDIRECT3DRMOBJECT obj, LPVOID arg);
    119 typedef void (*D3DRMFRAMEMOVECALLBACK)(LPDIRECT3DRMFRAME obj, LPVOID arg, D3DVALUE delta);
    120 typedef void (*D3DRMUPDATECALLBACK)(LPDIRECT3DRMDEVICE obj, LPVOID arg, int, LPD3DRECT);
    121 typedef int (*D3DRMUSERVISUALCALLBACK)(LPDIRECT3DRMUSERVISUAL obj, LPVOID arg,
    122                                     D3DRMUSERVISUALREASON reason,
    123                                     LPDIRECT3DRMDEVICE dev,
    124                                     LPDIRECT3DRMVIEWPORT view);
    125 typedef HRESULT (*D3DRMLOADTEXTURECALLBACK)
    126     (char *tex_name, void *arg, LPDIRECT3DRMTEXTURE *);
    127 typedef void (*D3DRMLOADCALLBACK)
    128      (LPDIRECT3DRMOBJECT object, REFIID objectguid, LPVOID arg);
    129 
    130 
    131 
    132 typedef struct _D3DRMPICKDESC
    133 {
    134     ULONG       ulFaceIdx;
    135     LONG        lGroupIdx;
    136     D3DVECTOR   vPosition;
    137 
    138 } D3DRMPICKDESC, *LPD3DRMPICKDESC;
    139 
    140 #undef INTERFACE
    141 #define INTERFACE IDirect3DRMObject
    142 
    143 /*
    144  * Base class
    145  */
    146 DECLARE_INTERFACE_(IDirect3DRMObject, IUnknown)
    147 {
    148     IUNKNOWN_METHODS(PURE);
    149     IDIRECT3DRMOBJECT_METHODS(PURE);
    150 };
    151 
    152 #undef INTERFACE
    153 #define INTERFACE IDirect3DRMVisual
    154 
    155 DECLARE_INTERFACE_(IDirect3DRMVisual, IDirect3DRMObject)
    156 {
    157     IUNKNOWN_METHODS(PURE);
    158     IDIRECT3DRMOBJECT_METHODS(PURE);
    159 };
    160 
    161 #undef INTERFACE
    162 #define INTERFACE IDirect3DRMDevice
    163 
    164 DECLARE_INTERFACE_(IDirect3DRMDevice, IDirect3DRMObject)
    165 {
    166     IUNKNOWN_METHODS(PURE);
    167     IDIRECT3DRMOBJECT_METHODS(PURE);
    168 
    169     /*
    170      * IDirect3DRMDevice methods
    171      */
    172     STDMETHOD(Init)(THIS_ ULONG width, ULONG height) PURE;
    173     STDMETHOD(InitFromD3D)(THIS_ LPDIRECT3D lpD3D, LPDIRECT3DDEVICE lpD3DDev) PURE;
    174     STDMETHOD(InitFromClipper)(THIS_ LPDIRECTDRAWCLIPPER lpDDClipper, LPGUID lpGUID, int width, int height) PURE;
    175 
    176     STDMETHOD(Update)(THIS) PURE;
    177     STDMETHOD(AddUpdateCallback)(THIS_ D3DRMUPDATECALLBACK, LPVOID arg) PURE;
    178     STDMETHOD(DeleteUpdateCallback)(THIS_ D3DRMUPDATECALLBACK, LPVOID arg) PURE;
    179     STDMETHOD(SetBufferCount)(THIS_ DWORD) PURE;
    180     STDMETHOD_(DWORD, GetBufferCount)(THIS) PURE;
    181 
    182     STDMETHOD(SetDither)(THIS_ BOOL) PURE;
    183     STDMETHOD(SetShades)(THIS_ DWORD) PURE;
    184     STDMETHOD(SetQuality)(THIS_ D3DRMRENDERQUALITY) PURE;
    185     STDMETHOD(SetTextureQuality)(THIS_ D3DRMTEXTUREQUALITY) PURE;
    186 
    187     STDMETHOD(GetViewports)(THIS_ LPDIRECT3DRMVIEWPORTARRAY *return_views) PURE;
    188 
    189     STDMETHOD_(BOOL, GetDither)(THIS) PURE;
    190     STDMETHOD_(DWORD, GetShades)(THIS) PURE;
    191     STDMETHOD_(DWORD, GetHeight)(THIS) PURE;
    192     STDMETHOD_(DWORD, GetWidth)(THIS) PURE;
    193     STDMETHOD_(DWORD, GetTrianglesDrawn)(THIS) PURE;
    194     STDMETHOD_(DWORD, GetWireframeOptions)(THIS) PURE;
    195     STDMETHOD_(D3DRMRENDERQUALITY, GetQuality)(THIS) PURE;
    196     STDMETHOD_(D3DCOLORMODEL, GetColorModel)(THIS) PURE;
    197     STDMETHOD_(D3DRMTEXTUREQUALITY, GetTextureQuality)(THIS) PURE;
    198     STDMETHOD(GetDirect3DDevice)(THIS_ LPDIRECT3DDEVICE *) PURE;
    199 };
    200 
    201 #undef INTERFACE
    202 #define INTERFACE IDirect3DRMViewport
    203 
    204 DECLARE_INTERFACE_(IDirect3DRMViewport, IDirect3DRMObject)
    205 {
    206     IUNKNOWN_METHODS(PURE);
    207     IDIRECT3DRMOBJECT_METHODS(PURE);
    208 
    209     /*
    210      * IDirect3DRMViewport methods
    211      */
    212     STDMETHOD(Init)
    213     (   THIS_ LPDIRECT3DRMDEVICE dev, LPDIRECT3DRMFRAME camera,
    214         DWORD xpos, DWORD ypos, DWORD width, DWORD height
    215     ) PURE;
    216     STDMETHOD(Clear)(THIS) PURE;
    217     STDMETHOD(Render)(THIS_ LPDIRECT3DRMFRAME) PURE;
    218 
    219     STDMETHOD(SetFront)(THIS_ D3DVALUE) PURE;
    220     STDMETHOD(SetBack)(THIS_ D3DVALUE) PURE;
    221     STDMETHOD(SetField)(THIS_ D3DVALUE) PURE;
    222     STDMETHOD(SetUniformScaling)(THIS_ BOOL) PURE;
    223     STDMETHOD(SetCamera)(THIS_ LPDIRECT3DRMFRAME) PURE;
    224     STDMETHOD(SetProjection)(THIS_ D3DRMPROJECTIONTYPE) PURE;
    225     STDMETHOD(Transform)(THIS_ D3DRMVECTOR4D *d, D3DVECTOR *s) PURE;
    226     STDMETHOD(InverseTransform)(THIS_ D3DVECTOR *d, D3DRMVECTOR4D *s) PURE;
    227     STDMETHOD(Configure)(THIS_ LONG x, LONG y, DWORD width, DWORD height) PURE;
    228     STDMETHOD(ForceUpdate)(THIS_ DWORD x1, DWORD y1, DWORD x2, DWORD y2) PURE;
    229     STDMETHOD(SetPlane)(THIS_ D3DVALUE left, D3DVALUE right, D3DVALUE bottom, D3DVALUE top) PURE;
    230 
    231     STDMETHOD(GetCamera)(THIS_ LPDIRECT3DRMFRAME *) PURE;
    232     STDMETHOD(GetDevice)(THIS_ LPDIRECT3DRMDEVICE *) PURE;
    233     STDMETHOD(GetPlane)(THIS_ D3DVALUE *left, D3DVALUE *right, D3DVALUE *bottom, D3DVALUE *top) PURE;
    234     STDMETHOD(Pick)(THIS_ LONG x, LONG y, LPDIRECT3DRMPICKEDARRAY *return_visuals) PURE;
    235 
    236     STDMETHOD_(BOOL, GetUniformScaling)(THIS) PURE;
    237     STDMETHOD_(LONG, GetX)(THIS) PURE;
    238     STDMETHOD_(LONG, GetY)(THIS) PURE;
    239     STDMETHOD_(DWORD, GetWidth)(THIS) PURE;
    240     STDMETHOD_(DWORD, GetHeight)(THIS) PURE;
    241     STDMETHOD_(D3DVALUE, GetField)(THIS) PURE;
    242     STDMETHOD_(D3DVALUE, GetBack)(THIS) PURE;
    243     STDMETHOD_(D3DVALUE, GetFront)(THIS) PURE;
    244     STDMETHOD_(D3DRMPROJECTIONTYPE, GetProjection)(THIS) PURE;
    245     STDMETHOD(GetDirect3DViewport)(THIS_ LPDIRECT3DVIEWPORT *) PURE;
    246 };
    247 
    248 #undef INTERFACE
    249 #define INTERFACE IDirect3DRMFrame
    250 
    251 DECLARE_INTERFACE_(IDirect3DRMFrame, IDirect3DRMVisual)
    252 {
    253     IUNKNOWN_METHODS(PURE);
    254     IDIRECT3DRMOBJECT_METHODS(PURE);
    255 
    256     /*
    257      * IDirect3DRMFrame methods
    258      */
    259     STDMETHOD(AddChild)(THIS_ LPDIRECT3DRMFRAME child) PURE;
    260     STDMETHOD(AddLight)(THIS_ LPDIRECT3DRMLIGHT) PURE;
    261     STDMETHOD(AddMoveCallback)(THIS_ D3DRMFRAMEMOVECALLBACK, VOID *arg) PURE;
    262     STDMETHOD(AddTransform)(THIS_ D3DRMCOMBINETYPE, D3DRMMATRIX4D) PURE;
    263     STDMETHOD(AddTranslation)(THIS_ D3DRMCOMBINETYPE, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
    264     STDMETHOD(AddScale)(THIS_ D3DRMCOMBINETYPE, D3DVALUE sx, D3DVALUE sy, D3DVALUE sz) PURE;
    265     STDMETHOD(AddRotation)(THIS_ D3DRMCOMBINETYPE, D3DVALUE x, D3DVALUE y, D3DVALUE z, D3DVALUE theta) PURE;
    266     STDMETHOD(AddVisual)(THIS_ LPDIRECT3DRMVISUAL) PURE;
    267     STDMETHOD(GetChildren)(THIS_ LPDIRECT3DRMFRAMEARRAY *children) PURE;
    268     STDMETHOD_(D3DCOLOR, GetColor)(THIS) PURE;
    269     STDMETHOD(GetLights)(THIS_ LPDIRECT3DRMLIGHTARRAY *lights) PURE;
    270     STDMETHOD_(D3DRMMATERIALMODE, GetMaterialMode)(THIS) PURE;
    271     STDMETHOD(GetParent)(THIS_ LPDIRECT3DRMFRAME *) PURE;
    272     STDMETHOD(GetPosition)(THIS_ LPDIRECT3DRMFRAME reference, LPD3DVECTOR return_position) PURE;
    273     STDMETHOD(GetRotation)(THIS_ LPDIRECT3DRMFRAME reference, LPD3DVECTOR axis, LPD3DVALUE return_theta) PURE;
    274     STDMETHOD(GetScene)(THIS_ LPDIRECT3DRMFRAME *) PURE;
    275     STDMETHOD_(D3DRMSORTMODE, GetSortMode)(THIS) PURE;
    276     STDMETHOD(GetTexture)(THIS_ LPDIRECT3DRMTEXTURE *) PURE;
    277     STDMETHOD(GetTransform)(THIS_ D3DRMMATRIX4D return_matrix) PURE;
    278     STDMETHOD(GetVelocity)(THIS_ LPDIRECT3DRMFRAME reference, LPD3DVECTOR return_velocity, BOOL with_rotation) PURE;
    279     STDMETHOD(GetOrientation)(THIS_ LPDIRECT3DRMFRAME reference, LPD3DVECTOR dir, LPD3DVECTOR up) PURE;
    280     STDMETHOD(GetVisuals)(THIS_ LPDIRECT3DRMVISUALARRAY *visuals) PURE;
    281     STDMETHOD(GetTextureTopology)(THIS_ BOOL *wrap_u, BOOL *wrap_v) PURE;
    282     STDMETHOD(InverseTransform)(THIS_ D3DVECTOR *d, D3DVECTOR *s) PURE;
    283     STDMETHOD(Load)(THIS_ LPVOID filename, LPVOID name, D3DRMLOADOPTIONS loadflags, D3DRMLOADTEXTURECALLBACK, LPVOID lpArg)PURE;
    284     STDMETHOD(LookAt)(THIS_ LPDIRECT3DRMFRAME target, LPDIRECT3DRMFRAME reference, D3DRMFRAMECONSTRAINT) PURE;
    285     STDMETHOD(Move)(THIS_ D3DVALUE delta) PURE;
    286     STDMETHOD(DeleteChild)(THIS_ LPDIRECT3DRMFRAME) PURE;
    287     STDMETHOD(DeleteLight)(THIS_ LPDIRECT3DRMLIGHT) PURE;
    288     STDMETHOD(DeleteMoveCallback)(THIS_ D3DRMFRAMEMOVECALLBACK, VOID *arg) PURE;
    289     STDMETHOD(DeleteVisual)(THIS_ LPDIRECT3DRMVISUAL) PURE;
    290     STDMETHOD_(D3DCOLOR, GetSceneBackground)(THIS) PURE;
    291     STDMETHOD(GetSceneBackgroundDepth)(THIS_ LPDIRECTDRAWSURFACE *) PURE;
    292     STDMETHOD_(D3DCOLOR, GetSceneFogColor)(THIS) PURE;
    293     STDMETHOD_(BOOL, GetSceneFogEnable)(THIS) PURE;
    294     STDMETHOD_(D3DRMFOGMODE, GetSceneFogMode)(THIS) PURE;
    295     STDMETHOD(GetSceneFogParams)(THIS_ D3DVALUE *return_start, D3DVALUE *return_end, D3DVALUE *return_density) PURE;
    296     STDMETHOD(SetSceneBackground)(THIS_ D3DCOLOR) PURE;
    297     STDMETHOD(SetSceneBackgroundRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
    298     STDMETHOD(SetSceneBackgroundDepth)(THIS_ LPDIRECTDRAWSURFACE) PURE;
    299     STDMETHOD(SetSceneBackgroundImage)(THIS_ LPDIRECT3DRMTEXTURE) PURE;
    300     STDMETHOD(SetSceneFogEnable)(THIS_ BOOL) PURE;
    301     STDMETHOD(SetSceneFogColor)(THIS_ D3DCOLOR) PURE;
    302     STDMETHOD(SetSceneFogMode)(THIS_ D3DRMFOGMODE) PURE;
    303     STDMETHOD(SetSceneFogParams)(THIS_ D3DVALUE start, D3DVALUE end, D3DVALUE density) PURE;
    304     STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE;
    305     STDMETHOD(SetColorRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
    306     STDMETHOD_(D3DRMZBUFFERMODE, GetZbufferMode)(THIS) PURE;
    307     STDMETHOD(SetMaterialMode)(THIS_ D3DRMMATERIALMODE) PURE;
    308     STDMETHOD(SetOrientation)
    309     (   THIS_ LPDIRECT3DRMFRAME reference,
    310         D3DVALUE dx, D3DVALUE dy, D3DVALUE dz,
    311         D3DVALUE ux, D3DVALUE uy, D3DVALUE uz
    312     ) PURE;
    313     STDMETHOD(SetPosition)(THIS_ LPDIRECT3DRMFRAME reference, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
    314     STDMETHOD(SetRotation)(THIS_ LPDIRECT3DRMFRAME reference, D3DVALUE x, D3DVALUE y, D3DVALUE z, D3DVALUE theta) PURE;
    315     STDMETHOD(SetSortMode)(THIS_ D3DRMSORTMODE) PURE;
    316     STDMETHOD(SetTexture)(THIS_ LPDIRECT3DRMTEXTURE) PURE;
    317     STDMETHOD(SetTextureTopology)(THIS_ BOOL wrap_u, BOOL wrap_v) PURE;
    318     STDMETHOD(SetVelocity)(THIS_ LPDIRECT3DRMFRAME reference, D3DVALUE x, D3DVALUE y, D3DVALUE z, BOOL with_rotation) PURE;
    319     STDMETHOD(SetZbufferMode)(THIS_ D3DRMZBUFFERMODE) PURE;
    320     STDMETHOD(Transform)(THIS_ D3DVECTOR *d, D3DVECTOR *s) PURE;
    321 };
    322 
    323 #undef INTERFACE
    324 #define INTERFACE IDirect3DRMMesh
    325 
    326 DECLARE_INTERFACE_(IDirect3DRMMesh, IDirect3DRMVisual)
    327 {
    328     IUNKNOWN_METHODS(PURE);
    329     IDIRECT3DRMOBJECT_METHODS(PURE);
    330 
    331     /*
    332      * IDirect3DRMMesh methods
    333      */
    334     STDMETHOD(Scale)(THIS_ D3DVALUE sx, D3DVALUE sy, D3DVALUE sz) PURE;
    335     STDMETHOD(Translate)(THIS_ D3DVALUE tx, D3DVALUE ty, D3DVALUE tz) PURE;
    336     STDMETHOD(GetBox)(THIS_ D3DRMBOX *) PURE;
    337     STDMETHOD(AddGroup)(THIS_ unsigned vCount, unsigned fCount, unsigned vPerFace, unsigned *fData, D3DRMGROUPINDEX *returnId) PURE;
    338     STDMETHOD(SetVertices)(THIS_ D3DRMGROUPINDEX id, unsigned index, unsigned count, D3DRMVERTEX *values) PURE;
    339     STDMETHOD(SetGroupColor)(THIS_ D3DRMGROUPINDEX id, D3DCOLOR value) PURE;
    340     STDMETHOD(SetGroupColorRGB)(THIS_ D3DRMGROUPINDEX id, D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
    341     STDMETHOD(SetGroupMapping)(THIS_ D3DRMGROUPINDEX id, D3DRMMAPPING value) PURE;
    342     STDMETHOD(SetGroupQuality)(THIS_ D3DRMGROUPINDEX id, D3DRMRENDERQUALITY value) PURE;
    343     STDMETHOD(SetGroupMaterial)(THIS_ D3DRMGROUPINDEX id, LPDIRECT3DRMMATERIAL value) PURE;
    344     STDMETHOD(SetGroupTexture)(THIS_ D3DRMGROUPINDEX id, LPDIRECT3DRMTEXTURE value) PURE;
    345 
    346     STDMETHOD_(unsigned, GetGroupCount)(THIS) PURE;
    347     STDMETHOD(GetGroup)(THIS_ D3DRMGROUPINDEX id, unsigned *vCount, unsigned *fCount, unsigned *vPerFace, DWORD *fDataSize, unsigned *fData) PURE;
    348     STDMETHOD(GetVertices)(THIS_ D3DRMGROUPINDEX id, DWORD index, DWORD count, D3DRMVERTEX *returnPtr) PURE;
    349     STDMETHOD_(D3DCOLOR, GetGroupColor)(THIS_ D3DRMGROUPINDEX id) PURE;
    350     STDMETHOD_(D3DRMMAPPING, GetGroupMapping)(THIS_ D3DRMGROUPINDEX id) PURE;
    351     STDMETHOD_(D3DRMRENDERQUALITY, GetGroupQuality)(THIS_ D3DRMGROUPINDEX id) PURE;
    352     STDMETHOD(GetGroupMaterial)(THIS_ D3DRMGROUPINDEX id, LPDIRECT3DRMMATERIAL *returnPtr) PURE;
    353     STDMETHOD(GetGroupTexture)(THIS_ D3DRMGROUPINDEX id, LPDIRECT3DRMTEXTURE *returnPtr) PURE;
    354 };
    355 
    356 #undef INTERFACE
    357 #define INTERFACE IDirect3DRMShadow
    358 
    359 DECLARE_INTERFACE_(IDirect3DRMShadow, IDirect3DRMVisual)
    360 {
    361     IUNKNOWN_METHODS(PURE);
    362     IDIRECT3DRMOBJECT_METHODS(PURE);
    363 
    364     /*
    365      * IDirect3DRMShadow methods
    366      */
    367     STDMETHOD(Init)
    368     (   THIS_ LPDIRECT3DRMVISUAL visual, LPDIRECT3DRMLIGHT light,
    369         D3DVALUE px, D3DVALUE py, D3DVALUE pz,
    370         D3DVALUE nx, D3DVALUE ny, D3DVALUE nz
    371     ) PURE;
    372 };
    373 
    374 #undef INTERFACE
    375 #define INTERFACE IDirect3DRMFace
    376 
    377 DECLARE_INTERFACE_(IDirect3DRMFace, IDirect3DRMObject)
    378 {
    379     IUNKNOWN_METHODS(PURE);
    380     IDIRECT3DRMOBJECT_METHODS(PURE);
    381 
    382     /*
    383      * IDirect3DRMFace methods
    384      */
    385      STDMETHOD(AddVertex)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
    386      STDMETHOD(AddVertexAndNormalIndexed)(THIS_ DWORD vertex, DWORD normal) PURE;
    387      STDMETHOD(SetColorRGB)(THIS_ D3DVALUE, D3DVALUE, D3DVALUE) PURE;
    388      STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE;
    389      STDMETHOD(SetTexture)(THIS_ LPDIRECT3DRMTEXTURE) PURE;
    390      STDMETHOD(SetTextureCoordinates)(THIS_ DWORD vertex, D3DVALUE u, D3DVALUE v) PURE;
    391      STDMETHOD(SetMaterial)(THIS_ LPDIRECT3DRMMATERIAL) PURE;
    392      STDMETHOD(SetTextureTopology)(THIS_ BOOL wrap_u, BOOL wrap_v) PURE;
    393 
    394      STDMETHOD(GetVertex)(THIS_ DWORD index, D3DVECTOR *vertex, D3DVECTOR *normal) PURE;
    395      STDMETHOD(GetVertices)(THIS_ DWORD *vertex_count, D3DVECTOR *coords, D3DVECTOR *normals);
    396      STDMETHOD(GetTextureCoordinates)(THIS_ DWORD vertex, D3DVALUE *u, D3DVALUE *v) PURE;
    397      STDMETHOD(GetTextureTopology)(THIS_ BOOL *wrap_u, BOOL *wrap_v) PURE;
    398      STDMETHOD(GetNormal)(THIS_ D3DVECTOR *) PURE;
    399      STDMETHOD(GetTexture)(THIS_ LPDIRECT3DRMTEXTURE *) PURE;
    400      STDMETHOD(GetMaterial)(THIS_ LPDIRECT3DRMMATERIAL *) PURE;
    401 
    402      STDMETHOD_(int, GetVertexCount)(THIS) PURE;
    403      STDMETHOD_(int, GetVertexIndex)(THIS_ DWORD which) PURE;
    404      STDMETHOD_(int, GetTextureCoordinateIndex)(THIS_ DWORD which) PURE;
    405      STDMETHOD_(D3DCOLOR, GetColor)(THIS) PURE;
    406 };
    407 
    408 #undef INTERFACE
    409 #define INTERFACE IDirect3DRMMeshBuilder
    410 
    411 DECLARE_INTERFACE_(IDirect3DRMMeshBuilder, IDirect3DRMVisual)
    412 {
    413     IUNKNOWN_METHODS(PURE);
    414     IDIRECT3DRMOBJECT_METHODS(PURE);
    415 
    416     /*
    417      * IDirect3DRMMeshBuilder methods
    418      */
    419     STDMETHOD(Load)(THIS_ LPVOID filename, LPVOID name, D3DRMLOADOPTIONS loadflags, D3DRMLOADTEXTURECALLBACK, LPVOID lpArg) PURE;
    420     STDMETHOD(Save)(THIS_ const char *filename, D3DRMXOFFORMAT, D3DRMSAVEOPTIONS save) PURE;
    421     STDMETHOD(Scale)(THIS_ D3DVALUE sx, D3DVALUE sy, D3DVALUE sz) PURE;
    422     STDMETHOD(Translate)(THIS_ D3DVALUE tx, D3DVALUE ty, D3DVALUE tz) PURE;
    423     STDMETHOD(SetColorSource)(THIS_ D3DRMCOLORSOURCE) PURE;
    424     STDMETHOD(GetBox)(THIS_ D3DRMBOX *) PURE;
    425     STDMETHOD(GenerateNormals)(THIS) PURE;
    426     STDMETHOD_(D3DRMCOLORSOURCE, GetColorSource)(THIS) PURE;
    427 
    428     STDMETHOD(AddMesh)(THIS_ LPDIRECT3DRMMESH) PURE;
    429     STDMETHOD(AddMeshBuilder)(THIS_ LPDIRECT3DRMMESHBUILDER) PURE;
    430     STDMETHOD(AddFrame)(THIS_ LPDIRECT3DRMFRAME) PURE;
    431     STDMETHOD(AddFace)(THIS_ LPDIRECT3DRMFACE) PURE;
    432     STDMETHOD(AddFaces)
    433     (   THIS_ DWORD vcount, D3DVECTOR *vertices, DWORD ncount, D3DVECTOR *normals,
    434         DWORD *data, LPDIRECT3DRMFACEARRAY*
    435     ) PURE;
    436     STDMETHOD(ReserveSpace)(THIS_ DWORD vertex_Count, DWORD normal_count, DWORD face_count) PURE;
    437     STDMETHOD(SetColorRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
    438     STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE;
    439     STDMETHOD(SetTexture)(THIS_ LPDIRECT3DRMTEXTURE) PURE;
    440     STDMETHOD(SetMaterial)(THIS_ LPDIRECT3DRMMATERIAL) PURE;
    441     STDMETHOD(SetTextureTopology)(THIS_ BOOL wrap_u, BOOL wrap_v) PURE;
    442     STDMETHOD(SetQuality)(THIS_ D3DRMRENDERQUALITY) PURE;
    443     STDMETHOD(SetPerspective)(THIS_ BOOL) PURE;
    444     STDMETHOD(SetVertex)(THIS_ DWORD index, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
    445     STDMETHOD(SetNormal)(THIS_ DWORD index, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
    446     STDMETHOD(SetTextureCoordinates)(THIS_ DWORD index, D3DVALUE u, D3DVALUE v) PURE;
    447     STDMETHOD(SetVertexColor)(THIS_ DWORD index, D3DCOLOR) PURE;
    448     STDMETHOD(SetVertexColorRGB)(THIS_ DWORD index, D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
    449 
    450     STDMETHOD(GetFaces)(THIS_ LPDIRECT3DRMFACEARRAY*) PURE;
    451     STDMETHOD(GetVertices)
    452     (   THIS_ DWORD *vcount, D3DVECTOR *vertices, DWORD *ncount, D3DVECTOR *normals, DWORD *face_data_size, DWORD *face_data
    453     ) PURE;
    454     STDMETHOD(GetTextureCoordinates)(THIS_ DWORD index, D3DVALUE *u, D3DVALUE *v) PURE;
    455 
    456     STDMETHOD_(int, AddVertex)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
    457     STDMETHOD_(int, AddNormal)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
    458     STDMETHOD(CreateFace)(THIS_ LPDIRECT3DRMFACE*) PURE;
    459     STDMETHOD_(D3DRMRENDERQUALITY, GetQuality)(THIS) PURE;
    460     STDMETHOD_(BOOL, GetPerspective)(THIS) PURE;
    461     STDMETHOD_(int, GetFaceCount)(THIS) PURE;
    462     STDMETHOD_(int, GetVertexCount)(THIS) PURE;
    463     STDMETHOD_(D3DCOLOR, GetVertexColor)(THIS_ DWORD index) PURE;
    464 
    465     STDMETHOD(CreateMesh)(THIS_ LPDIRECT3DRMMESH*) PURE;
    466 };
    467 
    468 #undef INTERFACE
    469 #define INTERFACE IDirect3DRMLight
    470 
    471 DECLARE_INTERFACE_(IDirect3DRMLight, IDirect3DRMObject)
    472 {
    473     IUNKNOWN_METHODS(PURE);
    474     IDIRECT3DRMOBJECT_METHODS(PURE);
    475 
    476     /*
    477      * IDirect3DRMLight methods
    478      */
    479     STDMETHOD(SetType)(THIS_ D3DRMLIGHTTYPE) PURE;
    480     STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE;
    481     STDMETHOD(SetColorRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
    482     STDMETHOD(SetRange)(THIS_ D3DVALUE) PURE;
    483     STDMETHOD(SetUmbra)(THIS_ D3DVALUE) PURE;
    484     STDMETHOD(SetPenumbra)(THIS_ D3DVALUE) PURE;
    485     STDMETHOD(SetConstantAttenuation)(THIS_ D3DVALUE) PURE;
    486     STDMETHOD(SetLinearAttenuation)(THIS_ D3DVALUE) PURE;
    487     STDMETHOD(SetQuadraticAttenuation)(THIS_ D3DVALUE) PURE;
    488 
    489     STDMETHOD_(D3DVALUE, GetRange)(THIS) PURE;
    490     STDMETHOD_(D3DVALUE, GetUmbra)(THIS) PURE;
    491     STDMETHOD_(D3DVALUE, GetPenumbra)(THIS) PURE;
    492     STDMETHOD_(D3DVALUE, GetConstantAttenuation)(THIS) PURE;
    493     STDMETHOD_(D3DVALUE, GetLinearAttenuation)(THIS) PURE;
    494     STDMETHOD_(D3DVALUE, GetQuadraticAttenuation)(THIS) PURE;
    495     STDMETHOD_(D3DCOLOR, GetColor)(THIS) PURE;
    496     STDMETHOD_(D3DRMLIGHTTYPE, GetType)(THIS) PURE;
    497 
    498     STDMETHOD(SetEnableFrame)(THIS_ LPDIRECT3DRMFRAME) PURE;
    499     STDMETHOD(GetEnableFrame)(THIS_ LPDIRECT3DRMFRAME*) PURE;
    500 };
    501 
    502 #undef INTERFACE
    503 #define INTERFACE IDirect3DRMTexture
    504 
    505 DECLARE_INTERFACE_(IDirect3DRMTexture, IDirect3DRMVisual)
    506 {
    507     IUNKNOWN_METHODS(PURE);
    508     IDIRECT3DRMOBJECT_METHODS(PURE);
    509 
    510     /*
    511      * IDirect3DRMTexture methods
    512      */
    513     STDMETHOD(InitFromFile)(THIS_ const char *filename) PURE;
    514     STDMETHOD(InitFromSurface)(THIS_ LPDIRECTDRAWSURFACE lpDDS) PURE;
    515     STDMETHOD(InitFromResource)(THIS_ HRSRC) PURE;
    516     STDMETHOD(Changed)(THIS_ BOOL pixels, BOOL palette) PURE;
    517 
    518     STDMETHOD(SetColors)(THIS_ DWORD) PURE;
    519     STDMETHOD(SetShades)(THIS_ DWORD) PURE;
    520     STDMETHOD(SetDecalSize)(THIS_ D3DVALUE width, D3DVALUE height) PURE;
    521     STDMETHOD(SetDecalOrigin)(THIS_ LONG x, LONG y) PURE;
    522     STDMETHOD(SetDecalScale)(THIS_ DWORD) PURE;
    523     STDMETHOD(SetDecalTransparency)(THIS_ BOOL) PURE;
    524     STDMETHOD(SetDecalTransparentColor)(THIS_ D3DCOLOR) PURE;
    525 
    526     STDMETHOD(GetDecalSize)(THIS_ D3DVALUE *width_return, D3DVALUE *height_return) PURE;
    527     STDMETHOD(GetDecalOrigin)(THIS_ LONG *x_return, LONG *y_return) PURE;
    528 
    529     STDMETHOD_(D3DRMIMAGE *, GetImage)(THIS) PURE;
    530     STDMETHOD_(DWORD, GetShades)(THIS) PURE;
    531     STDMETHOD_(DWORD, GetColors)(THIS) PURE;
    532     STDMETHOD_(DWORD, GetDecalScale)(THIS) PURE;
    533     STDMETHOD_(BOOL, GetDecalTransparency)(THIS) PURE;
    534     STDMETHOD_(D3DCOLOR, GetDecalTransparentColor)(THIS) PURE;
    535 };
    536 
    537 #undef INTERFACE
    538 #define INTERFACE IDirect3DRMWrap
    539 
    540 DECLARE_INTERFACE_(IDirect3DRMWrap, IDirect3DRMObject)
    541 {
    542     IUNKNOWN_METHODS(PURE);
    543     IDIRECT3DRMOBJECT_METHODS(PURE);
    544 
    545     /*
    546      * IDirect3DRMWrap methods
    547      */
    548     STDMETHOD(Init)
    549     (   THIS_ D3DRMWRAPTYPE, LPDIRECT3DRMFRAME ref,
    550         D3DVALUE ox, D3DVALUE oy, D3DVALUE oz,
    551         D3DVALUE dx, D3DVALUE dy, D3DVALUE dz,
    552         D3DVALUE ux, D3DVALUE uy, D3DVALUE uz,
    553         D3DVALUE ou, D3DVALUE ov,
    554         D3DVALUE su, D3DVALUE sv
    555     ) PURE;
    556     STDMETHOD(Apply)(THIS_ LPDIRECT3DRMOBJECT) PURE;
    557     STDMETHOD(ApplyRelative)(THIS_ LPDIRECT3DRMFRAME frame, LPDIRECT3DRMOBJECT) PURE;
    558 };
    559 
    560 #undef INTERFACE
    561 #define INTERFACE IDirect3DRMMaterial
    562 
    563 DECLARE_INTERFACE_(IDirect3DRMMaterial, IDirect3DRMObject)
    564 {
    565     IUNKNOWN_METHODS(PURE);
    566     IDIRECT3DRMOBJECT_METHODS(PURE);
    567 
    568     /*
    569      * IDirect3DRMMaterial methods
    570      */
    571     STDMETHOD(SetPower)(THIS_ D3DVALUE power) PURE;
    572     STDMETHOD(SetSpecular)(THIS_ D3DVALUE r, D3DVALUE g, D3DVALUE b) PURE;
    573     STDMETHOD(SetEmissive)(THIS_ D3DVALUE r, D3DVALUE g, D3DVALUE b) PURE;
    574 
    575     STDMETHOD_(D3DVALUE, GetPower)(THIS) PURE;
    576     STDMETHOD(GetSpecular)(THIS_ D3DVALUE* r, D3DVALUE* g, D3DVALUE* b) PURE;
    577     STDMETHOD(GetEmissive)(THIS_ D3DVALUE* r, D3DVALUE* g, D3DVALUE* b) PURE;
    578 };
    579 
    580 #undef INTERFACE
    581 #define INTERFACE IDirect3DRMAnimation
    582 
    583 DECLARE_INTERFACE_(IDirect3DRMAnimation, IDirect3DRMObject)
    584 {
    585     IUNKNOWN_METHODS(PURE);
    586     IDIRECT3DRMOBJECT_METHODS(PURE);
    587 
    588     /*
    589      * IDirect3DRMAnimation methods
    590      */
    591     STDMETHOD(SetOptions)(THIS_ D3DRMANIMATIONOPTIONS flags) PURE;
    592     STDMETHOD(AddRotateKey)(THIS_ D3DVALUE time, D3DRMQUATERNION *q) PURE;
    593     STDMETHOD(AddPositionKey)(THIS_ D3DVALUE time, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
    594     STDMETHOD(AddScaleKey)(THIS_ D3DVALUE time, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
    595     STDMETHOD(DeleteKey)(THIS_ D3DVALUE time) PURE;
    596     STDMETHOD(SetFrame)(THIS_ LPDIRECT3DRMFRAME frame) PURE;
    597     STDMETHOD(SetTime)(THIS_ D3DVALUE time) PURE;
    598 
    599     STDMETHOD_(D3DRMANIMATIONOPTIONS, GetOptions)(THIS) PURE;
    600 };
    601 
    602 #undef INTERFACE
    603 #define INTERFACE IDirect3DRMAnimationSet
    604 
    605 DECLARE_INTERFACE_(IDirect3DRMAnimationSet, IDirect3DRMObject)
    606 {
    607     IUNKNOWN_METHODS(PURE);
    608     IDIRECT3DRMOBJECT_METHODS(PURE);
    609 
    610     /*
    611      * IDirect3DRMAnimationSet methods
    612      */
    613     STDMETHOD(AddAnimation)(THIS_ LPDIRECT3DRMANIMATION aid) PURE;
    614     STDMETHOD(Load)(THIS_ LPVOID filename, LPVOID name, D3DRMLOADOPTIONS loadflags, D3DRMLOADTEXTURECALLBACK, LPVOID lpArg, LPDIRECT3DRMFRAME parent)PURE;
    615     STDMETHOD(DeleteAnimation)(THIS_ LPDIRECT3DRMANIMATION aid) PURE;
    616     STDMETHOD(SetTime)(THIS_ D3DVALUE time) PURE;
    617 };
    618 
    619 #undef INTERFACE
    620 #define INTERFACE IDirect3DRMUserVisual
    621 
    622 DECLARE_INTERFACE_(IDirect3DRMUserVisual, IDirect3DRMVisual)
    623 {
    624     IUNKNOWN_METHODS(PURE);
    625     IDIRECT3DRMOBJECT_METHODS(PURE);
    626 
    627     /*
    628      * IDirect3DRMUserVisual methods
    629      */
    630     STDMETHOD(Init)(THIS_ D3DRMUSERVISUALCALLBACK fn, void *arg) PURE;
    631 };
    632 
    633 #undef INTERFACE
    634 #define INTERFACE IDirect3DRMArray
    635 
    636 DECLARE_INTERFACE_(IDirect3DRMArray, IUnknown)
    637 {
    638     IUNKNOWN_METHODS(PURE);
    639 
    640     STDMETHOD_(DWORD, GetSize)(THIS) PURE;
    641     /* No GetElement method as it would get overloaded
    642      * in derived classes, and overloading is
    643      * a no-no in COM
    644      */
    645 };
    646 
    647 #undef INTERFACE
    648 #define INTERFACE IDirect3DRMDeviceArray
    649 
    650 DECLARE_INTERFACE_(IDirect3DRMDeviceArray, IDirect3DRMArray)
    651 {
    652     IUNKNOWN_METHODS(PURE);
    653 
    654     STDMETHOD_(DWORD, GetSize)(THIS) PURE;
    655     STDMETHOD(GetElement)(THIS_ DWORD index, LPDIRECT3DRMDEVICE *) PURE;
    656 };
    657 
    658 #undef INTERFACE
    659 #define INTERFACE IDirect3DRMFrameArray
    660 
    661 DECLARE_INTERFACE_(IDirect3DRMFrameArray, IDirect3DRMArray)
    662 {
    663     IUNKNOWN_METHODS(PURE);
    664 
    665     STDMETHOD_(DWORD, GetSize)(THIS) PURE;
    666     STDMETHOD(GetElement)(THIS_ DWORD index, LPDIRECT3DRMFRAME *) PURE;
    667 };
    668 
    669 #undef INTERFACE
    670 #define INTERFACE IDirect3DRMViewportArray
    671 
    672 DECLARE_INTERFACE_(IDirect3DRMViewportArray, IDirect3DRMArray)
    673 {
    674     IUNKNOWN_METHODS(PURE);
    675 
    676     STDMETHOD_(DWORD, GetSize)(THIS) PURE;
    677     STDMETHOD(GetElement)(THIS_ DWORD index, LPDIRECT3DRMVIEWPORT *) PURE;
    678 };
    679 
    680 #undef INTERFACE
    681 #define INTERFACE IDirect3DRMVisualArray
    682 
    683 DECLARE_INTERFACE_(IDirect3DRMVisualArray, IDirect3DRMArray)
    684 {
    685     IUNKNOWN_METHODS(PURE);
    686 
    687     STDMETHOD_(DWORD, GetSize)(THIS) PURE;
    688     STDMETHOD(GetElement)(THIS_ DWORD index, LPDIRECT3DRMVISUAL *) PURE;
    689 };
    690 
    691 #undef INTERFACE
    692 #define INTERFACE IDirect3DRMPickedArray
    693 
    694 DECLARE_INTERFACE_(IDirect3DRMPickedArray, IDirect3DRMArray)
    695 {
    696     IUNKNOWN_METHODS(PURE);
    697 
    698     STDMETHOD_(DWORD, GetSize)(THIS) PURE;
    699     STDMETHOD(GetPick)(THIS_ DWORD index, LPDIRECT3DRMVISUAL *, LPDIRECT3DRMFRAMEARRAY *, LPD3DRMPICKDESC) PURE;
    700 };
    701 
    702 #undef INTERFACE
    703 #define INTERFACE IDirect3DRMLightArray
    704 
    705 DECLARE_INTERFACE_(IDirect3DRMLightArray, IDirect3DRMArray)
    706 {
    707     IUNKNOWN_METHODS(PURE);
    708 
    709     STDMETHOD_(DWORD, GetSize)(THIS) PURE;
    710     STDMETHOD(GetElement)(THIS_ DWORD index, LPDIRECT3DRMLIGHT *) PURE;
    711 };
    712 
    713 #undef INTERFACE
    714 #define INTERFACE IDirect3DRMFaceArray
    715 
    716 DECLARE_INTERFACE_(IDirect3DRMFaceArray, IDirect3DRMArray)
    717 {
    718     IUNKNOWN_METHODS(PURE);
    719 
    720     STDMETHOD_(DWORD, GetSize)(THIS) PURE;
    721     STDMETHOD(GetElement)(THIS_ DWORD index, LPDIRECT3DRMFACE *) PURE;
    722 };
    723 
    724 #ifdef __cplusplus
    725 };
    726 #endif
    727 #endif /* _D3DRMOBJ_H_ */
    728