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
20extern "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
48WIN_TYPES(IDirect3DRMObject, DIRECT3DRMOBJECT);
49WIN_TYPES(IDirect3DRMDevice, DIRECT3DRMDEVICE);
50WIN_TYPES(IDirect3DRMViewport, DIRECT3DRMVIEWPORT);
51WIN_TYPES(IDirect3DRMFrame, DIRECT3DRMFRAME);
52WIN_TYPES(IDirect3DRMVisual, DIRECT3DRMVISUAL);
53WIN_TYPES(IDirect3DRMMesh, DIRECT3DRMMESH);
54WIN_TYPES(IDirect3DRMMeshBuilder, DIRECT3DRMMESHBUILDER);
55WIN_TYPES(IDirect3DRMFace, DIRECT3DRMFACE);
56WIN_TYPES(IDirect3DRMLight, DIRECT3DRMLIGHT);
57WIN_TYPES(IDirect3DRMTexture, DIRECT3DRMTEXTURE);
58WIN_TYPES(IDirect3DRMWrap, DIRECT3DRMWRAP);
59WIN_TYPES(IDirect3DRMMaterial, DIRECT3DRMMATERIAL);
60WIN_TYPES(IDirect3DRMAnimation, DIRECT3DRMANIMATION);
61WIN_TYPES(IDirect3DRMAnimationSet, DIRECT3DRMANIMATIONSET);
62WIN_TYPES(IDirect3DRMUserVisual, DIRECT3DRMUSERVISUAL);
63WIN_TYPES(IDirect3DRMShadow, DIRECT3DRMSHADOW);
64WIN_TYPES(IDirect3DRMArray, DIRECT3DRMOBJECTARRAY);
65WIN_TYPES(IDirect3DRMDeviceArray, DIRECT3DRMDEVICEARRAY);
66WIN_TYPES(IDirect3DRMFaceArray, DIRECT3DRMFACEARRAY);
67WIN_TYPES(IDirect3DRMViewportArray, DIRECT3DRMVIEWPORTARRAY);
68WIN_TYPES(IDirect3DRMFrameArray, DIRECT3DRMFRAMEARRAY);
69WIN_TYPES(IDirect3DRMVisualArray, DIRECT3DRMVISUALARRAY);
70WIN_TYPES(IDirect3DRMPickedArray, DIRECT3DRMPICKEDARRAY);
71WIN_TYPES(IDirect3DRMLightArray, DIRECT3DRMLIGHTARRAY);
72
73/*
74 * Direct3DRM Object classes
75 */
76DEFINE_GUID(CLSID_CDirect3DRMDevice,        0x4fa3568e, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
77DEFINE_GUID(CLSID_CDirect3DRMViewport,      0x4fa3568f, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
78DEFINE_GUID(CLSID_CDirect3DRMFrame,         0x4fa35690, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
79DEFINE_GUID(CLSID_CDirect3DRMMesh,          0x4fa35691, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
80DEFINE_GUID(CLSID_CDirect3DRMMeshBuilder,   0x4fa35692, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
81DEFINE_GUID(CLSID_CDirect3DRMFace,          0x4fa35693, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
82DEFINE_GUID(CLSID_CDirect3DRMLight,         0x4fa35694, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
83DEFINE_GUID(CLSID_CDirect3DRMTexture,       0x4fa35695, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
84DEFINE_GUID(CLSID_CDirect3DRMWrap,          0x4fa35696, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
85DEFINE_GUID(CLSID_CDirect3DRMMaterial,      0x4fa35697, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
86DEFINE_GUID(CLSID_CDirect3DRMAnimation,     0x4fa35698, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
87DEFINE_GUID(CLSID_CDirect3DRMAnimationSet,  0x4fa35699, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
88DEFINE_GUID(CLSID_CDirect3DRMUserVisual,    0x4fa3569a, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
89DEFINE_GUID(CLSID_CDirect3DRMShadow,        0x4fa3569b, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
90
91/*
92 * Direct3DRM Object interfaces
93 */
94DEFINE_GUID(IID_IDirect3DRMObject,          0xeb16cb00, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
95DEFINE_GUID(IID_IDirect3DRMDevice,          0xe9e19280, 0x6e05, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
96DEFINE_GUID(IID_IDirect3DRMViewport,        0xeb16cb02, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
97DEFINE_GUID(IID_IDirect3DRMFrame,           0xeb16cb03, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
98DEFINE_GUID(IID_IDirect3DRMVisual,          0xeb16cb04, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
99DEFINE_GUID(IID_IDirect3DRMMesh,            0xa3a80d01, 0x6e12, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
100DEFINE_GUID(IID_IDirect3DRMMeshBuilder,     0xa3a80d02, 0x6e12, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
101DEFINE_GUID(IID_IDirect3DRMFace,            0xeb16cb07, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
102DEFINE_GUID(IID_IDirect3DRMLight,           0xeb16cb08, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
103DEFINE_GUID(IID_IDirect3DRMTexture,         0xeb16cb09, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
104DEFINE_GUID(IID_IDirect3DRMWrap,            0xeb16cb0a, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
105DEFINE_GUID(IID_IDirect3DRMMaterial,        0xeb16cb0b, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
106DEFINE_GUID(IID_IDirect3DRMAnimation,       0xeb16cb0d, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
107DEFINE_GUID(IID_IDirect3DRMAnimationSet,    0xeb16cb0e, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
108DEFINE_GUID(IID_IDirect3DRMDeviceArray,     0xeb16cb10, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
109DEFINE_GUID(IID_IDirect3DRMViewportArray,   0xeb16cb11, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
110DEFINE_GUID(IID_IDirect3DRMFrameArray,      0xeb16cb12, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
111DEFINE_GUID(IID_IDirect3DRMVisualArray,     0xeb16cb13, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
112DEFINE_GUID(IID_IDirect3DRMLightArray,      0xeb16cb14, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
113DEFINE_GUID(IID_IDirect3DRMPickedArray,     0xeb16cb16, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
114DEFINE_GUID(IID_IDirect3DRMFaceArray,       0xeb16cb17, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
115DEFINE_GUID(IID_IDirect3DRMUserVisual,      0x59163de0, 0x6d43, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
116DEFINE_GUID(IID_IDirect3DRMShadow,          0xaf359780, 0x6ba3, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
117
118typedef void (*D3DRMOBJECTCALLBACK)(LPDIRECT3DRMOBJECT obj, LPVOID arg);
119typedef void (*D3DRMFRAMEMOVECALLBACK)(LPDIRECT3DRMFRAME obj, LPVOID arg, D3DVALUE delta);
120typedef void (*D3DRMUPDATECALLBACK)(LPDIRECT3DRMDEVICE obj, LPVOID arg, int, LPD3DRECT);
121typedef int (*D3DRMUSERVISUALCALLBACK)(LPDIRECT3DRMUSERVISUAL obj, LPVOID arg,
122                                    D3DRMUSERVISUALREASON reason,
123                                    LPDIRECT3DRMDEVICE dev,
124                                    LPDIRECT3DRMVIEWPORT view);
125typedef HRESULT (*D3DRMLOADTEXTURECALLBACK)
126    (char *tex_name, void *arg, LPDIRECT3DRMTEXTURE *);
127typedef void (*D3DRMLOADCALLBACK)
128     (LPDIRECT3DRMOBJECT object, REFIID objectguid, LPVOID arg);
129
130
131
132typedef 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 */
146DECLARE_INTERFACE_(IDirect3DRMObject, IUnknown)
147{
148    IUNKNOWN_METHODS(PURE);
149    IDIRECT3DRMOBJECT_METHODS(PURE);
150};
151
152#undef INTERFACE
153#define INTERFACE IDirect3DRMVisual
154
155DECLARE_INTERFACE_(IDirect3DRMVisual, IDirect3DRMObject)
156{
157    IUNKNOWN_METHODS(PURE);
158    IDIRECT3DRMOBJECT_METHODS(PURE);
159};
160
161#undef INTERFACE
162#define INTERFACE IDirect3DRMDevice
163
164DECLARE_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
204DECLARE_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
251DECLARE_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
326DECLARE_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
359DECLARE_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
377DECLARE_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
411DECLARE_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
471DECLARE_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
505DECLARE_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
540DECLARE_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
563DECLARE_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
583DECLARE_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
605DECLARE_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
622DECLARE_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
636DECLARE_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
650DECLARE_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
661DECLARE_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
672DECLARE_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
683DECLARE_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
694DECLARE_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
705DECLARE_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
716DECLARE_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