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  */
DECLARE_INTERFACE_(IDirect3DRMObject,IUnknown)146 DECLARE_INTERFACE_(IDirect3DRMObject, IUnknown)
147 {
148     IUNKNOWN_METHODS(PURE);
149     IDIRECT3DRMOBJECT_METHODS(PURE);
150 };
151 
152 #undef INTERFACE
153 #define INTERFACE IDirect3DRMVisual
154 
DECLARE_INTERFACE_(IDirect3DRMVisual,IDirect3DRMObject)155 DECLARE_INTERFACE_(IDirect3DRMVisual, IDirect3DRMObject)
156 {
157     IUNKNOWN_METHODS(PURE);
158     IDIRECT3DRMOBJECT_METHODS(PURE);
159 };
160 
161 #undef INTERFACE
162 #define INTERFACE IDirect3DRMDevice
163 
DECLARE_INTERFACE_(IDirect3DRMDevice,IDirect3DRMObject)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 
DECLARE_INTERFACE_(IDirect3DRMViewport,IDirect3DRMObject)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 
DECLARE_INTERFACE_(IDirect3DRMFrame,IDirect3DRMVisual)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 
DECLARE_INTERFACE_(IDirect3DRMMesh,IDirect3DRMVisual)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 
DECLARE_INTERFACE_(IDirect3DRMShadow,IDirect3DRMVisual)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 
DECLARE_INTERFACE_(IDirect3DRMFace,IDirect3DRMObject)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 
DECLARE_INTERFACE_(IDirect3DRMMeshBuilder,IDirect3DRMVisual)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 
DECLARE_INTERFACE_(IDirect3DRMLight,IDirect3DRMObject)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 
DECLARE_INTERFACE_(IDirect3DRMTexture,IDirect3DRMVisual)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 
DECLARE_INTERFACE_(IDirect3DRMWrap,IDirect3DRMObject)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 
DECLARE_INTERFACE_(IDirect3DRMMaterial,IDirect3DRMObject)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 
DECLARE_INTERFACE_(IDirect3DRMAnimation,IDirect3DRMObject)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 
DECLARE_INTERFACE_(IDirect3DRMAnimationSet,IDirect3DRMObject)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 
DECLARE_INTERFACE_(IDirect3DRMUserVisual,IDirect3DRMVisual)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 
DECLARE_INTERFACE_(IDirect3DRMArray,IUnknown)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 
DECLARE_INTERFACE_(IDirect3DRMDeviceArray,IDirect3DRMArray)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 
DECLARE_INTERFACE_(IDirect3DRMFrameArray,IDirect3DRMArray)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 
DECLARE_INTERFACE_(IDirect3DRMViewportArray,IDirect3DRMArray)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 
DECLARE_INTERFACE_(IDirect3DRMVisualArray,IDirect3DRMArray)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 
DECLARE_INTERFACE_(IDirect3DRMPickedArray,IDirect3DRMArray)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 
DECLARE_INTERFACE_(IDirect3DRMLightArray,IDirect3DRMArray)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 
DECLARE_INTERFACE_(IDirect3DRMFaceArray,IDirect3DRMArray)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