]> icculus.org git repositories - taylor/freespace2.git/blob - include/vd3drmobj.h
Initial revision
[taylor/freespace2.git] / include / vd3drmobj.h
1 /*==========================================================================;
2  *
3  *  Copyright (C) 1995-1997 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 "vd3drmdef.h"
17 #include "vd3d.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(IDirect3DRMDevice2, DIRECT3DRMDEVICE2);
51 WIN_TYPES(IDirect3DRMViewport, DIRECT3DRMVIEWPORT);
52 WIN_TYPES(IDirect3DRMFrame, DIRECT3DRMFRAME);
53 WIN_TYPES(IDirect3DRMFrame2, DIRECT3DRMFRAME2);
54 WIN_TYPES(IDirect3DRMVisual, DIRECT3DRMVISUAL);
55 WIN_TYPES(IDirect3DRMMesh, DIRECT3DRMMESH);
56 WIN_TYPES(IDirect3DRMMeshBuilder, DIRECT3DRMMESHBUILDER);
57 WIN_TYPES(IDirect3DRMMeshBuilder2, DIRECT3DRMMESHBUILDER2);
58 WIN_TYPES(IDirect3DRMFace, DIRECT3DRMFACE);
59 WIN_TYPES(IDirect3DRMLight, DIRECT3DRMLIGHT);
60 WIN_TYPES(IDirect3DRMTexture, DIRECT3DRMTEXTURE);
61 WIN_TYPES(IDirect3DRMTexture2, DIRECT3DRMTEXTURE2);
62 WIN_TYPES(IDirect3DRMWrap, DIRECT3DRMWRAP);
63 WIN_TYPES(IDirect3DRMMaterial, DIRECT3DRMMATERIAL);
64 WIN_TYPES(IDirect3DRMInterpolator, DIRECT3DRMINTERPOLATOR);
65 WIN_TYPES(IDirect3DRMAnimation, DIRECT3DRMANIMATION);
66 WIN_TYPES(IDirect3DRMAnimationSet, DIRECT3DRMANIMATIONSET);
67 WIN_TYPES(IDirect3DRMUserVisual, DIRECT3DRMUSERVISUAL);
68 WIN_TYPES(IDirect3DRMShadow, DIRECT3DRMSHADOW);
69 WIN_TYPES(IDirect3DRMArray, DIRECT3DRMARRAY);
70 WIN_TYPES(IDirect3DRMObjectArray, DIRECT3DRMOBJECTARRAY);
71 WIN_TYPES(IDirect3DRMDeviceArray, DIRECT3DRMDEVICEARRAY);
72 WIN_TYPES(IDirect3DRMFaceArray, DIRECT3DRMFACEARRAY);
73 WIN_TYPES(IDirect3DRMViewportArray, DIRECT3DRMVIEWPORTARRAY);
74 WIN_TYPES(IDirect3DRMFrameArray, DIRECT3DRMFRAMEARRAY);
75 WIN_TYPES(IDirect3DRMVisualArray, DIRECT3DRMVISUALARRAY);
76 WIN_TYPES(IDirect3DRMPickedArray, DIRECT3DRMPICKEDARRAY);
77 WIN_TYPES(IDirect3DRMPicked2Array, DIRECT3DRMPICKED2ARRAY);
78 WIN_TYPES(IDirect3DRMLightArray, DIRECT3DRMLIGHTARRAY);
79 WIN_TYPES(IDirect3DRMProgressiveMesh, DIRECT3DRMPROGRESSIVEMESH);
80
81 /*
82  * Direct3DRM Object classes
83  */
84 DEFINE_GUID(CLSID_CDirect3DRMDevice,        0x4fa3568e, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
85 DEFINE_GUID(CLSID_CDirect3DRMViewport,      0x4fa3568f, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
86 DEFINE_GUID(CLSID_CDirect3DRMFrame,         0x4fa35690, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
87 DEFINE_GUID(CLSID_CDirect3DRMMesh,          0x4fa35691, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
88 DEFINE_GUID(CLSID_CDirect3DRMMeshBuilder,   0x4fa35692, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
89 DEFINE_GUID(CLSID_CDirect3DRMFace,          0x4fa35693, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
90 DEFINE_GUID(CLSID_CDirect3DRMLight,         0x4fa35694, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
91 DEFINE_GUID(CLSID_CDirect3DRMTexture,       0x4fa35695, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
92 DEFINE_GUID(CLSID_CDirect3DRMWrap,          0x4fa35696, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
93 DEFINE_GUID(CLSID_CDirect3DRMMaterial,      0x4fa35697, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
94 DEFINE_GUID(CLSID_CDirect3DRMAnimation,     0x4fa35698, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
95 DEFINE_GUID(CLSID_CDirect3DRMAnimationSet,  0x4fa35699, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
96 DEFINE_GUID(CLSID_CDirect3DRMUserVisual,    0x4fa3569a, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
97 DEFINE_GUID(CLSID_CDirect3DRMShadow,        0x4fa3569b, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
98 DEFINE_GUID(CLSID_CDirect3DRMViewportInterpolator, 
99 0xde9eaa1, 0x3b84, 0x11d0, 0x9b, 0x6d, 0x0, 0x0, 0xc0, 0x78, 0x1b, 0xc3);
100 DEFINE_GUID(CLSID_CDirect3DRMFrameInterpolator, 
101 0xde9eaa2, 0x3b84, 0x11d0, 0x9b, 0x6d, 0x0, 0x0, 0xc0, 0x78, 0x1b, 0xc3);
102 DEFINE_GUID(CLSID_CDirect3DRMMeshInterpolator, 
103 0xde9eaa3, 0x3b84, 0x11d0, 0x9b, 0x6d, 0x0, 0x0, 0xc0, 0x78, 0x1b, 0xc3);
104 DEFINE_GUID(CLSID_CDirect3DRMLightInterpolator, 
105 0xde9eaa6, 0x3b84, 0x11d0, 0x9b, 0x6d, 0x0, 0x0, 0xc0, 0x78, 0x1b, 0xc3);
106 DEFINE_GUID(CLSID_CDirect3DRMMaterialInterpolator, 
107 0xde9eaa7, 0x3b84, 0x11d0, 0x9b, 0x6d, 0x0, 0x0, 0xc0, 0x78, 0x1b, 0xc3);
108 DEFINE_GUID(CLSID_CDirect3DRMTextureInterpolator, 
109 0xde9eaa8, 0x3b84, 0x11d0, 0x9b, 0x6d, 0x0, 0x0, 0xc0, 0x78, 0x1b, 0xc3);
110 DEFINE_GUID(CLSID_CDirect3DRMProgressiveMesh, 0x4516ec40, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3);
111
112
113 /*
114  * Direct3DRM Object interfaces
115  */
116 DEFINE_GUID(IID_IDirect3DRMObject,          0xeb16cb00, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
117 DEFINE_GUID(IID_IDirect3DRMDevice,          0xe9e19280, 0x6e05, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
118 DEFINE_GUID(IID_IDirect3DRMDevice2,         0x4516ec78, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3);
119 DEFINE_GUID(IID_IDirect3DRMViewport,        0xeb16cb02, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
120 DEFINE_GUID(IID_IDirect3DRMFrame,           0xeb16cb03, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
121 DEFINE_GUID(IID_IDirect3DRMFrame2,          0xc3dfbd60, 0x3988, 0x11d0, 0x9e, 0xc2, 0x0, 0x0, 0xc0, 0x29, 0x1a, 0xc3);
122 DEFINE_GUID(IID_IDirect3DRMVisual,          0xeb16cb04, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
123 DEFINE_GUID(IID_IDirect3DRMMesh,            0xa3a80d01, 0x6e12, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
124 DEFINE_GUID(IID_IDirect3DRMMeshBuilder,     0xa3a80d02, 0x6e12, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
125 DEFINE_GUID(IID_IDirect3DRMMeshBuilder2,    0x4516ec77, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x0, 0x0, 0xc0, 0x78, 0x1b, 0xc3);
126 DEFINE_GUID(IID_IDirect3DRMFace,            0xeb16cb07, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
127 DEFINE_GUID(IID_IDirect3DRMLight,           0xeb16cb08, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
128 DEFINE_GUID(IID_IDirect3DRMTexture,         0xeb16cb09, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
129 DEFINE_GUID(IID_IDirect3DRMTexture2,        0x120f30c0, 0x1629, 0x11d0, 0x94, 0x1c, 0x0, 0x80, 0xc8, 0xc, 0xfa, 0x7b);
130 DEFINE_GUID(IID_IDirect3DRMWrap,            0xeb16cb0a, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
131 DEFINE_GUID(IID_IDirect3DRMMaterial,        0xeb16cb0b, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
132 DEFINE_GUID(IID_IDirect3DRMAnimation,       0xeb16cb0d, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
133 DEFINE_GUID(IID_IDirect3DRMAnimationSet,    0xeb16cb0e, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
134 DEFINE_GUID(IID_IDirect3DRMObjectArray,     0x242f6bc2, 0x3849, 0x11d0, 0x9b, 0x6d, 0x0, 0x0, 0xc0, 0x78, 0x1b, 0xc3);
135 DEFINE_GUID(IID_IDirect3DRMDeviceArray,     0xeb16cb10, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
136 DEFINE_GUID(IID_IDirect3DRMViewportArray,   0xeb16cb11, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
137 DEFINE_GUID(IID_IDirect3DRMFrameArray,      0xeb16cb12, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
138 DEFINE_GUID(IID_IDirect3DRMVisualArray,     0xeb16cb13, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
139 DEFINE_GUID(IID_IDirect3DRMLightArray,      0xeb16cb14, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
140 DEFINE_GUID(IID_IDirect3DRMPickedArray,     0xeb16cb16, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
141 DEFINE_GUID(IID_IDirect3DRMFaceArray,       0xeb16cb17, 0xd271, 0x11ce, 0xac, 0x48, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
142 DEFINE_GUID(IID_IDirect3DRMUserVisual,      0x59163de0, 0x6d43, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
143 DEFINE_GUID(IID_IDirect3DRMShadow,          0xaf359780, 0x6ba3, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
144 DEFINE_GUID(IID_IDirect3DRMInterpolator,    0x242f6bc1, 0x3849, 0x11d0, 0x9b, 0x6d, 0x0, 0x0, 0xc0, 0x78, 0x1b, 0xc3);
145 DEFINE_GUID(IID_IDirect3DRMProgressiveMesh, 0x4516ec79, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3);
146 DEFINE_GUID(IID_IDirect3DRMPicked2Array,    0x4516ec7b, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3);
147
148
149 typedef void (CDECL *D3DRMOBJECTCALLBACK)(LPDIRECT3DRMOBJECT obj, LPVOID arg);
150 typedef void (CDECL *D3DRMFRAMEMOVECALLBACK)(LPDIRECT3DRMFRAME obj, LPVOID arg, D3DVALUE delta);
151 typedef void (CDECL *D3DRMUPDATECALLBACK)(LPDIRECT3DRMDEVICE obj, LPVOID arg, int, LPD3DRECT);
152 typedef int (CDECL *D3DRMUSERVISUALCALLBACK)
153     (   LPDIRECT3DRMUSERVISUAL obj, LPVOID arg, D3DRMUSERVISUALREASON reason,
154         LPDIRECT3DRMDEVICE dev, LPDIRECT3DRMVIEWPORT view
155     );
156 typedef HRESULT (CDECL *D3DRMLOADTEXTURECALLBACK)
157     (char *tex_name, void *arg, LPDIRECT3DRMTEXTURE *);
158 typedef void (CDECL *D3DRMLOADCALLBACK)
159     (LPDIRECT3DRMOBJECT object, REFIID objectguid, LPVOID arg);
160
161
162 typedef struct _D3DRMPICKDESC
163 {
164     ULONG       ulFaceIdx;
165     LONG        lGroupIdx;
166     D3DVECTOR   vPosition;
167
168 } D3DRMPICKDESC, *LPD3DRMPICKDESC;
169
170 typedef struct _D3DRMPICKDESC2
171 {
172     ULONG       ulFaceIdx;
173     LONG        lGroupIdx;
174     D3DVECTOR   dvPosition;
175     D3DVALUE    tu;
176     D3DVALUE    tv;
177     D3DVECTOR   dvNormal;
178     D3DCOLOR    dcColor;
179
180 } D3DRMPICKDESC2, *LPD3DRMPICKDESC2;
181
182 #undef INTERFACE
183 #define INTERFACE IDirect3DRMObject
184
185 /*
186  * Base class
187  */
188 DECLARE_INTERFACE_(IDirect3DRMObject, IUnknown)
189 {
190     IUNKNOWN_METHODS(PURE);
191     IDIRECT3DRMOBJECT_METHODS(PURE);
192 };
193
194 #undef INTERFACE
195 #define INTERFACE IDirect3DRMVisual
196
197 DECLARE_INTERFACE_(IDirect3DRMVisual, IDirect3DRMObject)
198 {
199     IUNKNOWN_METHODS(PURE);
200     IDIRECT3DRMOBJECT_METHODS(PURE);
201 };
202
203 #undef INTERFACE
204 #define INTERFACE IDirect3DRMDevice
205
206 DECLARE_INTERFACE_(IDirect3DRMDevice, IDirect3DRMObject)
207 {
208     IUNKNOWN_METHODS(PURE);
209     IDIRECT3DRMOBJECT_METHODS(PURE);
210
211     /*
212      * IDirect3DRMDevice methods
213      */
214     STDMETHOD(Init)(THIS_ ULONG width, ULONG height) PURE;
215     STDMETHOD(InitFromD3D)(THIS_ LPDIRECT3D lpD3D, LPDIRECT3DDEVICE lpD3DDev) PURE;
216     STDMETHOD(InitFromClipper)(THIS_ LPDIRECTDRAWCLIPPER lpDDClipper, LPGUID lpGUID, int width, int height) PURE;
217
218     STDMETHOD(Update)(THIS) PURE;
219     STDMETHOD(AddUpdateCallback)(THIS_ D3DRMUPDATECALLBACK, LPVOID arg) PURE;
220     STDMETHOD(DeleteUpdateCallback)(THIS_ D3DRMUPDATECALLBACK, LPVOID arg) PURE;
221     STDMETHOD(SetBufferCount)(THIS_ DWORD) PURE;
222     STDMETHOD_(DWORD, GetBufferCount)(THIS) PURE;
223
224     STDMETHOD(SetDither)(THIS_ BOOL) PURE;
225     STDMETHOD(SetShades)(THIS_ DWORD) PURE;
226     STDMETHOD(SetQuality)(THIS_ D3DRMRENDERQUALITY) PURE;
227     STDMETHOD(SetTextureQuality)(THIS_ D3DRMTEXTUREQUALITY) PURE;
228
229     STDMETHOD(GetViewports)(THIS_ LPDIRECT3DRMVIEWPORTARRAY *return_views) PURE;
230
231     STDMETHOD_(BOOL, GetDither)(THIS) PURE;
232     STDMETHOD_(DWORD, GetShades)(THIS) PURE;
233     STDMETHOD_(DWORD, GetHeight)(THIS) PURE;
234     STDMETHOD_(DWORD, GetWidth)(THIS) PURE;
235     STDMETHOD_(DWORD, GetTrianglesDrawn)(THIS) PURE;
236     STDMETHOD_(DWORD, GetWireframeOptions)(THIS) PURE;
237     STDMETHOD_(D3DRMRENDERQUALITY, GetQuality)(THIS) PURE;
238     STDMETHOD_(D3DCOLORMODEL, GetColorModel)(THIS) PURE;
239     STDMETHOD_(D3DRMTEXTUREQUALITY, GetTextureQuality)(THIS) PURE;
240     STDMETHOD(GetDirect3DDevice)(THIS_ LPDIRECT3DDEVICE *) PURE;
241 };
242
243 #undef INTERFACE
244 #define INTERFACE IDirect3DRMDevice2
245
246 DECLARE_INTERFACE_(IDirect3DRMDevice2, IDirect3DRMDevice)
247 {
248     IUNKNOWN_METHODS(PURE);
249     IDIRECT3DRMOBJECT_METHODS(PURE);
250
251     /*
252      * IDirect3DRMDevice methods
253      */
254     STDMETHOD(Init)(THIS_ ULONG width, ULONG height) PURE;
255     STDMETHOD(InitFromD3D)(THIS_ LPDIRECT3D lpD3D, LPDIRECT3DDEVICE lpD3DDev) PURE;
256     STDMETHOD(InitFromClipper)(THIS_ LPDIRECTDRAWCLIPPER lpDDClipper, LPGUID lpGUID, int width, int height) PURE;
257
258     STDMETHOD(Update)(THIS) PURE;
259     STDMETHOD(AddUpdateCallback)(THIS_ D3DRMUPDATECALLBACK, LPVOID arg) PURE;
260     STDMETHOD(DeleteUpdateCallback)(THIS_ D3DRMUPDATECALLBACK, LPVOID arg) PURE;
261     STDMETHOD(SetBufferCount)(THIS_ DWORD) PURE;
262     STDMETHOD_(DWORD, GetBufferCount)(THIS) PURE;
263
264     STDMETHOD(SetDither)(THIS_ BOOL) PURE;
265     STDMETHOD(SetShades)(THIS_ DWORD) PURE;
266     STDMETHOD(SetQuality)(THIS_ D3DRMRENDERQUALITY) PURE;
267     STDMETHOD(SetTextureQuality)(THIS_ D3DRMTEXTUREQUALITY) PURE;
268
269     STDMETHOD(GetViewports)(THIS_ LPDIRECT3DRMVIEWPORTARRAY *return_views) PURE;
270
271     STDMETHOD_(BOOL, GetDither)(THIS) PURE;
272     STDMETHOD_(DWORD, GetShades)(THIS) PURE;
273     STDMETHOD_(DWORD, GetHeight)(THIS) PURE;
274     STDMETHOD_(DWORD, GetWidth)(THIS) PURE;
275     STDMETHOD_(DWORD, GetTrianglesDrawn)(THIS) PURE;
276     STDMETHOD_(DWORD, GetWireframeOptions)(THIS) PURE;
277     STDMETHOD_(D3DRMRENDERQUALITY, GetQuality)(THIS) PURE;
278     STDMETHOD_(D3DCOLORMODEL, GetColorModel)(THIS) PURE;
279     STDMETHOD_(D3DRMTEXTUREQUALITY, GetTextureQuality)(THIS) PURE;
280     STDMETHOD(GetDirect3DDevice)(THIS_ LPDIRECT3DDEVICE *) PURE;
281
282     /*
283      * IDirect3DRMDevice2 methods
284      */
285     STDMETHOD(InitFromD3D2)(THIS_ LPDIRECT3D2 lpD3D, LPDIRECT3DDEVICE2 lpD3DDev) PURE;
286     STDMETHOD(InitFromSurface)(THIS_ LPGUID lpGUID, LPDIRECTDRAW lpDD, LPDIRECTDRAWSURFACE lpDDSBack) PURE;
287     STDMETHOD(SetRenderMode)(THIS_ DWORD dwFlags) PURE;
288     STDMETHOD_(DWORD, GetRenderMode)(THIS) PURE;
289     STDMETHOD(GetDirect3DDevice2)(THIS_ LPDIRECT3DDEVICE2 *) PURE;
290 };
291
292 #undef INTERFACE
293 #define INTERFACE IDirect3DRMViewport
294
295 DECLARE_INTERFACE_(IDirect3DRMViewport, IDirect3DRMObject)
296 {
297     IUNKNOWN_METHODS(PURE);
298     IDIRECT3DRMOBJECT_METHODS(PURE);
299
300     /*
301      * IDirect3DRMViewport methods
302      */
303     STDMETHOD(Init)
304     (   THIS_ LPDIRECT3DRMDEVICE dev, LPDIRECT3DRMFRAME camera,
305         DWORD xpos, DWORD ypos, DWORD width, DWORD height
306     ) PURE;
307     STDMETHOD(Clear)(THIS) PURE;
308     STDMETHOD(Render)(THIS_ LPDIRECT3DRMFRAME) PURE;
309
310     STDMETHOD(SetFront)(THIS_ D3DVALUE) PURE;
311     STDMETHOD(SetBack)(THIS_ D3DVALUE) PURE;
312     STDMETHOD(SetField)(THIS_ D3DVALUE) PURE;
313     STDMETHOD(SetUniformScaling)(THIS_ BOOL) PURE;
314     STDMETHOD(SetCamera)(THIS_ LPDIRECT3DRMFRAME) PURE;
315     STDMETHOD(SetProjection)(THIS_ D3DRMPROJECTIONTYPE) PURE;
316     STDMETHOD(Transform)(THIS_ D3DRMVECTOR4D *d, D3DVECTOR *s) PURE;
317     STDMETHOD(InverseTransform)(THIS_ D3DVECTOR *d, D3DRMVECTOR4D *s) PURE;
318     STDMETHOD(Configure)(THIS_ LONG x, LONG y, DWORD width, DWORD height) PURE;
319     STDMETHOD(ForceUpdate)(THIS_ DWORD x1, DWORD y1, DWORD x2, DWORD y2) PURE;
320     STDMETHOD(SetPlane)(THIS_ D3DVALUE left, D3DVALUE right, D3DVALUE bottom, D3DVALUE top) PURE;
321
322     STDMETHOD(GetCamera)(THIS_ LPDIRECT3DRMFRAME *) PURE;
323     STDMETHOD(GetDevice)(THIS_ LPDIRECT3DRMDEVICE *) PURE;
324     STDMETHOD(GetPlane)(THIS_ D3DVALUE *left, D3DVALUE *right, D3DVALUE *bottom, D3DVALUE *top) PURE;
325     STDMETHOD(Pick)(THIS_ LONG x, LONG y, LPDIRECT3DRMPICKEDARRAY *return_visuals) PURE;
326
327     STDMETHOD_(BOOL, GetUniformScaling)(THIS) PURE;
328     STDMETHOD_(LONG, GetX)(THIS) PURE;
329     STDMETHOD_(LONG, GetY)(THIS) PURE;
330     STDMETHOD_(DWORD, GetWidth)(THIS) PURE;
331     STDMETHOD_(DWORD, GetHeight)(THIS) PURE;
332     STDMETHOD_(D3DVALUE, GetField)(THIS) PURE;
333     STDMETHOD_(D3DVALUE, GetBack)(THIS) PURE;
334     STDMETHOD_(D3DVALUE, GetFront)(THIS) PURE;
335     STDMETHOD_(D3DRMPROJECTIONTYPE, GetProjection)(THIS) PURE;
336     STDMETHOD(GetDirect3DViewport)(THIS_ LPDIRECT3DVIEWPORT *) PURE;
337 };
338
339 #undef INTERFACE
340 #define INTERFACE IDirect3DRMFrame
341
342 DECLARE_INTERFACE_(IDirect3DRMFrame, IDirect3DRMVisual)
343 {
344     IUNKNOWN_METHODS(PURE);
345     IDIRECT3DRMOBJECT_METHODS(PURE);
346
347     /*
348      * IDirect3DRMFrame methods
349      */
350     STDMETHOD(AddChild)(THIS_ LPDIRECT3DRMFRAME child) PURE;
351     STDMETHOD(AddLight)(THIS_ LPDIRECT3DRMLIGHT) PURE;
352     STDMETHOD(AddMoveCallback)(THIS_ D3DRMFRAMEMOVECALLBACK, VOID *arg) PURE;
353     STDMETHOD(AddTransform)(THIS_ D3DRMCOMBINETYPE, D3DRMMATRIX4D) PURE;
354     STDMETHOD(AddTranslation)(THIS_ D3DRMCOMBINETYPE, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
355     STDMETHOD(AddScale)(THIS_ D3DRMCOMBINETYPE, D3DVALUE sx, D3DVALUE sy, D3DVALUE sz) PURE;
356     STDMETHOD(AddRotation)(THIS_ D3DRMCOMBINETYPE, D3DVALUE x, D3DVALUE y, D3DVALUE z, D3DVALUE theta) PURE;
357     STDMETHOD(AddVisual)(THIS_ LPDIRECT3DRMVISUAL) PURE;
358     STDMETHOD(GetChildren)(THIS_ LPDIRECT3DRMFRAMEARRAY *children) PURE;
359     STDMETHOD_(D3DCOLOR, GetColor)(THIS) PURE;
360     STDMETHOD(GetLights)(THIS_ LPDIRECT3DRMLIGHTARRAY *lights) PURE;
361     STDMETHOD_(D3DRMMATERIALMODE, GetMaterialMode)(THIS) PURE;
362     STDMETHOD(GetParent)(THIS_ LPDIRECT3DRMFRAME *) PURE;
363     STDMETHOD(GetPosition)(THIS_ LPDIRECT3DRMFRAME reference, LPD3DVECTOR return_position) PURE;
364     STDMETHOD(GetRotation)(THIS_ LPDIRECT3DRMFRAME reference, LPD3DVECTOR axis, LPD3DVALUE return_theta) PURE;
365     STDMETHOD(GetScene)(THIS_ LPDIRECT3DRMFRAME *) PURE;
366     STDMETHOD_(D3DRMSORTMODE, GetSortMode)(THIS) PURE;
367     STDMETHOD(GetTexture)(THIS_ LPDIRECT3DRMTEXTURE *) PURE;
368     STDMETHOD(GetTransform)(THIS_ D3DRMMATRIX4D return_matrix) PURE;
369     STDMETHOD(GetVelocity)(THIS_ LPDIRECT3DRMFRAME reference, LPD3DVECTOR return_velocity, BOOL with_rotation) PURE;
370     STDMETHOD(GetOrientation)(THIS_ LPDIRECT3DRMFRAME reference, LPD3DVECTOR dir, LPD3DVECTOR up) PURE;
371     STDMETHOD(GetVisuals)(THIS_ LPDIRECT3DRMVISUALARRAY *visuals) PURE;
372     STDMETHOD(GetTextureTopology)(THIS_ BOOL *wrap_u, BOOL *wrap_v) PURE;
373     STDMETHOD(InverseTransform)(THIS_ D3DVECTOR *d, D3DVECTOR *s) PURE;
374     STDMETHOD(Load)(THIS_ LPVOID filename, LPVOID name, D3DRMLOADOPTIONS loadflags, D3DRMLOADTEXTURECALLBACK, LPVOID lpArg)PURE;
375     STDMETHOD(LookAt)(THIS_ LPDIRECT3DRMFRAME target, LPDIRECT3DRMFRAME reference, D3DRMFRAMECONSTRAINT) PURE;
376     STDMETHOD(Move)(THIS_ D3DVALUE delta) PURE;
377     STDMETHOD(DeleteChild)(THIS_ LPDIRECT3DRMFRAME) PURE;
378     STDMETHOD(DeleteLight)(THIS_ LPDIRECT3DRMLIGHT) PURE;
379     STDMETHOD(DeleteMoveCallback)(THIS_ D3DRMFRAMEMOVECALLBACK, VOID *arg) PURE;
380     STDMETHOD(DeleteVisual)(THIS_ LPDIRECT3DRMVISUAL) PURE;
381     STDMETHOD_(D3DCOLOR, GetSceneBackground)(THIS) PURE;
382     STDMETHOD(GetSceneBackgroundDepth)(THIS_ LPDIRECTDRAWSURFACE *) PURE;
383     STDMETHOD_(D3DCOLOR, GetSceneFogColor)(THIS) PURE;
384     STDMETHOD_(BOOL, GetSceneFogEnable)(THIS) PURE;
385     STDMETHOD_(D3DRMFOGMODE, GetSceneFogMode)(THIS) PURE;
386     STDMETHOD(GetSceneFogParams)(THIS_ D3DVALUE *return_start, D3DVALUE *return_end, D3DVALUE *return_density) PURE;
387     STDMETHOD(SetSceneBackground)(THIS_ D3DCOLOR) PURE;
388     STDMETHOD(SetSceneBackgroundRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
389     STDMETHOD(SetSceneBackgroundDepth)(THIS_ LPDIRECTDRAWSURFACE) PURE;
390     STDMETHOD(SetSceneBackgroundImage)(THIS_ LPDIRECT3DRMTEXTURE) PURE;
391     STDMETHOD(SetSceneFogEnable)(THIS_ BOOL) PURE;
392     STDMETHOD(SetSceneFogColor)(THIS_ D3DCOLOR) PURE;
393     STDMETHOD(SetSceneFogMode)(THIS_ D3DRMFOGMODE) PURE;
394     STDMETHOD(SetSceneFogParams)(THIS_ D3DVALUE start, D3DVALUE end, D3DVALUE density) PURE;
395     STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE;
396     STDMETHOD(SetColorRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
397     STDMETHOD_(D3DRMZBUFFERMODE, GetZbufferMode)(THIS) PURE;
398     STDMETHOD(SetMaterialMode)(THIS_ D3DRMMATERIALMODE) PURE;
399     STDMETHOD(SetOrientation)
400     (   THIS_ LPDIRECT3DRMFRAME reference,
401         D3DVALUE dx, D3DVALUE dy, D3DVALUE dz,
402         D3DVALUE ux, D3DVALUE uy, D3DVALUE uz
403     ) PURE;
404     STDMETHOD(SetPosition)(THIS_ LPDIRECT3DRMFRAME reference, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
405     STDMETHOD(SetRotation)(THIS_ LPDIRECT3DRMFRAME reference, D3DVALUE x, D3DVALUE y, D3DVALUE z, D3DVALUE theta) PURE;
406     STDMETHOD(SetSortMode)(THIS_ D3DRMSORTMODE) PURE;
407     STDMETHOD(SetTexture)(THIS_ LPDIRECT3DRMTEXTURE) PURE;
408     STDMETHOD(SetTextureTopology)(THIS_ BOOL wrap_u, BOOL wrap_v) PURE;
409     STDMETHOD(SetVelocity)(THIS_ LPDIRECT3DRMFRAME reference, D3DVALUE x, D3DVALUE y, D3DVALUE z, BOOL with_rotation) PURE;
410     STDMETHOD(SetZbufferMode)(THIS_ D3DRMZBUFFERMODE) PURE;
411     STDMETHOD(Transform)(THIS_ D3DVECTOR *d, D3DVECTOR *s) PURE;
412 };
413
414 #undef INTERFACE
415 #define INTERFACE IDirect3DRMFrame2
416
417 DECLARE_INTERFACE_(IDirect3DRMFrame2, IDirect3DRMFrame)
418 {
419     IUNKNOWN_METHODS(PURE);
420     IDIRECT3DRMOBJECT_METHODS(PURE);
421
422     /*
423      * IDirect3DRMFrame methods
424      */
425     STDMETHOD(AddChild)(THIS_ LPDIRECT3DRMFRAME child) PURE;
426     STDMETHOD(AddLight)(THIS_ LPDIRECT3DRMLIGHT) PURE;
427     STDMETHOD(AddMoveCallback)(THIS_ D3DRMFRAMEMOVECALLBACK, VOID *arg) PURE;
428     STDMETHOD(AddTransform)(THIS_ D3DRMCOMBINETYPE, D3DRMMATRIX4D) PURE;
429     STDMETHOD(AddTranslation)(THIS_ D3DRMCOMBINETYPE, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
430     STDMETHOD(AddScale)(THIS_ D3DRMCOMBINETYPE, D3DVALUE sx, D3DVALUE sy, D3DVALUE sz) PURE;
431     STDMETHOD(AddRotation)(THIS_ D3DRMCOMBINETYPE, D3DVALUE x, D3DVALUE y, D3DVALUE z, D3DVALUE theta) PURE;
432     STDMETHOD(AddVisual)(THIS_ LPDIRECT3DRMVISUAL) PURE;
433     STDMETHOD(GetChildren)(THIS_ LPDIRECT3DRMFRAMEARRAY *children) PURE;
434     STDMETHOD_(D3DCOLOR, GetColor)(THIS) PURE;
435     STDMETHOD(GetLights)(THIS_ LPDIRECT3DRMLIGHTARRAY *lights) PURE;
436     STDMETHOD_(D3DRMMATERIALMODE, GetMaterialMode)(THIS) PURE;
437     STDMETHOD(GetParent)(THIS_ LPDIRECT3DRMFRAME *) PURE;
438     STDMETHOD(GetPosition)(THIS_ LPDIRECT3DRMFRAME reference, LPD3DVECTOR return_position) PURE;
439     STDMETHOD(GetRotation)(THIS_ LPDIRECT3DRMFRAME reference, LPD3DVECTOR axis, LPD3DVALUE return_theta) PURE;
440     STDMETHOD(GetScene)(THIS_ LPDIRECT3DRMFRAME *) PURE;
441     STDMETHOD_(D3DRMSORTMODE, GetSortMode)(THIS) PURE;
442     STDMETHOD(GetTexture)(THIS_ LPDIRECT3DRMTEXTURE *) PURE;
443     STDMETHOD(GetTransform)(THIS_ D3DRMMATRIX4D return_matrix) PURE;
444     STDMETHOD(GetVelocity)(THIS_ LPDIRECT3DRMFRAME reference, LPD3DVECTOR return_velocity, BOOL with_rotation) PURE;
445     STDMETHOD(GetOrientation)(THIS_ LPDIRECT3DRMFRAME reference, LPD3DVECTOR dir, LPD3DVECTOR up) PURE;
446     STDMETHOD(GetVisuals)(THIS_ LPDIRECT3DRMVISUALARRAY *visuals) PURE;
447     STDMETHOD(GetTextureTopology)(THIS_ BOOL *wrap_u, BOOL *wrap_v) PURE;
448     STDMETHOD(InverseTransform)(THIS_ D3DVECTOR *d, D3DVECTOR *s) PURE;
449     STDMETHOD(Load)(THIS_ LPVOID filename, LPVOID name, D3DRMLOADOPTIONS loadflags, D3DRMLOADTEXTURECALLBACK, LPVOID lpArg)PURE;
450     STDMETHOD(LookAt)(THIS_ LPDIRECT3DRMFRAME target, LPDIRECT3DRMFRAME reference, D3DRMFRAMECONSTRAINT) PURE;
451     STDMETHOD(Move)(THIS_ D3DVALUE delta) PURE;
452     STDMETHOD(DeleteChild)(THIS_ LPDIRECT3DRMFRAME) PURE;
453     STDMETHOD(DeleteLight)(THIS_ LPDIRECT3DRMLIGHT) PURE;
454     STDMETHOD(DeleteMoveCallback)(THIS_ D3DRMFRAMEMOVECALLBACK, VOID *arg) PURE;
455     STDMETHOD(DeleteVisual)(THIS_ LPDIRECT3DRMVISUAL) PURE;
456     STDMETHOD_(D3DCOLOR, GetSceneBackground)(THIS) PURE;
457     STDMETHOD(GetSceneBackgroundDepth)(THIS_ LPDIRECTDRAWSURFACE *) PURE;
458     STDMETHOD_(D3DCOLOR, GetSceneFogColor)(THIS) PURE;
459     STDMETHOD_(BOOL, GetSceneFogEnable)(THIS) PURE;
460     STDMETHOD_(D3DRMFOGMODE, GetSceneFogMode)(THIS) PURE;
461     STDMETHOD(GetSceneFogParams)(THIS_ D3DVALUE *return_start, D3DVALUE *return_end, D3DVALUE *return_density) PURE;
462     STDMETHOD(SetSceneBackground)(THIS_ D3DCOLOR) PURE;
463     STDMETHOD(SetSceneBackgroundRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
464     STDMETHOD(SetSceneBackgroundDepth)(THIS_ LPDIRECTDRAWSURFACE) PURE;
465     STDMETHOD(SetSceneBackgroundImage)(THIS_ LPDIRECT3DRMTEXTURE) PURE;
466     STDMETHOD(SetSceneFogEnable)(THIS_ BOOL) PURE;
467     STDMETHOD(SetSceneFogColor)(THIS_ D3DCOLOR) PURE;
468     STDMETHOD(SetSceneFogMode)(THIS_ D3DRMFOGMODE) PURE;
469     STDMETHOD(SetSceneFogParams)(THIS_ D3DVALUE start, D3DVALUE end, D3DVALUE density) PURE;
470     STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE;
471     STDMETHOD(SetColorRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
472     STDMETHOD_(D3DRMZBUFFERMODE, GetZbufferMode)(THIS) PURE;
473     STDMETHOD(SetMaterialMode)(THIS_ D3DRMMATERIALMODE) PURE;
474     STDMETHOD(SetOrientation)
475     (   THIS_ LPDIRECT3DRMFRAME reference,
476         D3DVALUE dx, D3DVALUE dy, D3DVALUE dz,
477         D3DVALUE ux, D3DVALUE uy, D3DVALUE uz
478     ) PURE;
479     STDMETHOD(SetPosition)(THIS_ LPDIRECT3DRMFRAME reference, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
480     STDMETHOD(SetRotation)(THIS_ LPDIRECT3DRMFRAME reference, D3DVALUE x, D3DVALUE y, D3DVALUE z, D3DVALUE theta) PURE;
481     STDMETHOD(SetSortMode)(THIS_ D3DRMSORTMODE) PURE;
482     STDMETHOD(SetTexture)(THIS_ LPDIRECT3DRMTEXTURE) PURE;
483     STDMETHOD(SetTextureTopology)(THIS_ BOOL wrap_u, BOOL wrap_v) PURE;
484     STDMETHOD(SetVelocity)(THIS_ LPDIRECT3DRMFRAME reference, D3DVALUE x, D3DVALUE y, D3DVALUE z, BOOL with_rotation) PURE;
485     STDMETHOD(SetZbufferMode)(THIS_ D3DRMZBUFFERMODE) PURE;
486     STDMETHOD(Transform)(THIS_ D3DVECTOR *d, D3DVECTOR *s) PURE;
487
488     /*
489      * IDirect3DRMFrame2 methods
490      */
491     STDMETHOD(AddMoveCallback2)(THIS_ D3DRMFRAMEMOVECALLBACK, VOID *arg, DWORD dwFlags) PURE;
492     STDMETHOD(GetBox)(THIS_ LPD3DRMBOX) PURE;
493     STDMETHOD_(BOOL, GetBoxEnable)(THIS) PURE;
494     STDMETHOD(GetAxes)(THIS_ LPD3DVECTOR dir, LPD3DVECTOR up);
495     STDMETHOD(GetMaterial)(THIS_ LPDIRECT3DRMMATERIAL *) PURE;
496     STDMETHOD_(BOOL, GetInheritAxes)(THIS);
497     STDMETHOD(GetHierarchyBox)(THIS_ LPD3DRMBOX) PURE;
498
499     STDMETHOD(SetBox)(THIS_ LPD3DRMBOX) PURE;
500     STDMETHOD(SetBoxEnable)(THIS_ BOOL) PURE;
501     STDMETHOD(SetAxes)(THIS_ D3DVALUE dx, D3DVALUE dy, D3DVALUE dz,
502                        D3DVALUE ux, D3DVALUE uy, D3DVALUE uz);
503     STDMETHOD(SetInheritAxes)(THIS_ BOOL inherit_from_parent);
504     STDMETHOD(SetMaterial)(THIS_ LPDIRECT3DRMMATERIAL) PURE;
505     STDMETHOD(SetQuaternion)(THIS_ LPDIRECT3DRMFRAME reference, D3DRMQUATERNION *q) PURE;
506
507     STDMETHOD(RayPick)(THIS_ LPDIRECT3DRMFRAME reference, LPD3DRMRAY ray, DWORD dwFlags, LPDIRECT3DRMPICKED2ARRAY *return_visuals) PURE;
508     STDMETHOD(Save)(THIS_ LPCSTR filename, D3DRMXOFFORMAT d3dFormat, 
509                     D3DRMSAVEOPTIONS d3dSaveFlags);
510 };
511
512 #undef INTERFACE
513 #define INTERFACE IDirect3DRMMesh
514
515 DECLARE_INTERFACE_(IDirect3DRMMesh, IDirect3DRMVisual)
516 {
517     IUNKNOWN_METHODS(PURE);
518     IDIRECT3DRMOBJECT_METHODS(PURE);
519
520     /*
521      * IDirect3DRMMesh methods
522      */
523     STDMETHOD(Scale)(THIS_ D3DVALUE sx, D3DVALUE sy, D3DVALUE sz) PURE;
524     STDMETHOD(Translate)(THIS_ D3DVALUE tx, D3DVALUE ty, D3DVALUE tz) PURE;
525     STDMETHOD(GetBox)(THIS_ D3DRMBOX *) PURE;
526     STDMETHOD(AddGroup)(THIS_ unsigned vCount, unsigned fCount, unsigned vPerFace, unsigned *fData, D3DRMGROUPINDEX *returnId) PURE;
527     STDMETHOD(SetVertices)(THIS_ D3DRMGROUPINDEX id, unsigned index, unsigned count, D3DRMVERTEX *values) PURE;
528     STDMETHOD(SetGroupColor)(THIS_ D3DRMGROUPINDEX id, D3DCOLOR value) PURE;
529     STDMETHOD(SetGroupColorRGB)(THIS_ D3DRMGROUPINDEX id, D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
530     STDMETHOD(SetGroupMapping)(THIS_ D3DRMGROUPINDEX id, D3DRMMAPPING value) PURE;
531     STDMETHOD(SetGroupQuality)(THIS_ D3DRMGROUPINDEX id, D3DRMRENDERQUALITY value) PURE;
532     STDMETHOD(SetGroupMaterial)(THIS_ D3DRMGROUPINDEX id, LPDIRECT3DRMMATERIAL value) PURE;
533     STDMETHOD(SetGroupTexture)(THIS_ D3DRMGROUPINDEX id, LPDIRECT3DRMTEXTURE value) PURE;
534
535     STDMETHOD_(unsigned, GetGroupCount)(THIS) PURE;
536     STDMETHOD(GetGroup)(THIS_ D3DRMGROUPINDEX id, unsigned *vCount, unsigned *fCount, unsigned *vPerFace, DWORD *fDataSize, unsigned *fData) PURE;
537     STDMETHOD(GetVertices)(THIS_ D3DRMGROUPINDEX id, DWORD index, DWORD count, D3DRMVERTEX *returnPtr) PURE;
538     STDMETHOD_(D3DCOLOR, GetGroupColor)(THIS_ D3DRMGROUPINDEX id) PURE;
539     STDMETHOD_(D3DRMMAPPING, GetGroupMapping)(THIS_ D3DRMGROUPINDEX id) PURE;
540     STDMETHOD_(D3DRMRENDERQUALITY, GetGroupQuality)(THIS_ D3DRMGROUPINDEX id) PURE;
541     STDMETHOD(GetGroupMaterial)(THIS_ D3DRMGROUPINDEX id, LPDIRECT3DRMMATERIAL *returnPtr) PURE;
542     STDMETHOD(GetGroupTexture)(THIS_ D3DRMGROUPINDEX id, LPDIRECT3DRMTEXTURE *returnPtr) PURE;
543 };
544
545 #undef INTERFACE
546 #define INTERFACE IDirect3DRMProgressiveMesh
547
548 DECLARE_INTERFACE_(IDirect3DRMProgressiveMesh, IDirect3DRMVisual)
549 {
550     IUNKNOWN_METHODS(PURE);
551     IDIRECT3DRMOBJECT_METHODS(PURE);
552
553     /*
554      * IDirect3DRMProgressiveMesh methods
555      */
556     STDMETHOD(Load) (THIS_ LPVOID lpObjLocation, LPVOID lpObjId, 
557                      D3DRMLOADOPTIONS dloLoadflags, D3DRMLOADTEXTURECALLBACK lpCallback,
558                      LPVOID lpArg) PURE;
559     STDMETHOD(GetLoadStatus) (THIS_ LPD3DRMPMESHLOADSTATUS lpStatus) PURE;
560     STDMETHOD(SetMinRenderDetail) (THIS_ D3DVALUE d3dVal) PURE;
561     STDMETHOD(Abort) (THIS_ DWORD dwFlags) PURE;
562     
563     STDMETHOD(GetFaceDetail) (THIS_ LPDWORD lpdwCount) PURE;
564     STDMETHOD(GetVertexDetail) (THIS_ LPDWORD lpdwCount) PURE;
565     STDMETHOD(SetFaceDetail) (THIS_ DWORD dwCount) PURE;
566     STDMETHOD(SetVertexDetail) (THIS_ DWORD dwCount) PURE;
567     STDMETHOD(GetFaceDetailRange) (THIS_ LPDWORD lpdwMin, LPDWORD lpdwMax) PURE;
568     STDMETHOD(GetVertexDetailRange) (THIS_ LPDWORD lpdwMin, LPDWORD lpdwMax) PURE;
569     STDMETHOD(GetDetail) (THIS_ D3DVALUE *lpdvVal) PURE;
570     STDMETHOD(SetDetail) (THIS_ D3DVALUE d3dVal) PURE;
571
572     STDMETHOD(RegisterEvents) (THIS_ HANDLE hEvent, DWORD dwFlags, DWORD dwReserved) PURE;
573     STDMETHOD(CreateMesh) (THIS_ LPDIRECT3DRMMESH *lplpD3DRMMesh) PURE;
574     STDMETHOD(Duplicate) (THIS_ LPDIRECT3DRMPROGRESSIVEMESH *lplpD3DRMPMesh) PURE;
575     STDMETHOD(GetBox) (THIS_ LPD3DRMBOX lpBBox) PURE;
576     STDMETHOD(SetQuality) (THIS_ D3DRMRENDERQUALITY) PURE;
577     STDMETHOD(GetQuality) (THIS_ LPD3DRMRENDERQUALITY lpdwquality) PURE;
578 };
579
580 #undef INTERFACE
581 #define INTERFACE IDirect3DRMShadow
582
583 DECLARE_INTERFACE_(IDirect3DRMShadow, IDirect3DRMVisual)
584 {
585     IUNKNOWN_METHODS(PURE);
586     IDIRECT3DRMOBJECT_METHODS(PURE);
587
588     /*
589      * IDirect3DRMShadow methods
590      */
591     STDMETHOD(Init)
592     (   THIS_ LPDIRECT3DRMVISUAL visual, LPDIRECT3DRMLIGHT light,
593         D3DVALUE px, D3DVALUE py, D3DVALUE pz,
594         D3DVALUE nx, D3DVALUE ny, D3DVALUE nz
595     ) PURE;
596 };
597
598 #undef INTERFACE
599 #define INTERFACE IDirect3DRMFace
600
601 DECLARE_INTERFACE_(IDirect3DRMFace, IDirect3DRMObject)
602 {
603     IUNKNOWN_METHODS(PURE);
604     IDIRECT3DRMOBJECT_METHODS(PURE);
605
606     /*
607      * IDirect3DRMFace methods
608      */
609      STDMETHOD(AddVertex)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
610      STDMETHOD(AddVertexAndNormalIndexed)(THIS_ DWORD vertex, DWORD normal) PURE;
611      STDMETHOD(SetColorRGB)(THIS_ D3DVALUE, D3DVALUE, D3DVALUE) PURE;
612      STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE;
613      STDMETHOD(SetTexture)(THIS_ LPDIRECT3DRMTEXTURE) PURE;
614      STDMETHOD(SetTextureCoordinates)(THIS_ DWORD vertex, D3DVALUE u, D3DVALUE v) PURE;
615      STDMETHOD(SetMaterial)(THIS_ LPDIRECT3DRMMATERIAL) PURE;
616      STDMETHOD(SetTextureTopology)(THIS_ BOOL wrap_u, BOOL wrap_v) PURE;
617
618      STDMETHOD(GetVertex)(THIS_ DWORD index, D3DVECTOR *vertex, D3DVECTOR *normal) PURE;
619      STDMETHOD(GetVertices)(THIS_ DWORD *vertex_count, D3DVECTOR *coords, D3DVECTOR *normals);
620      STDMETHOD(GetTextureCoordinates)(THIS_ DWORD vertex, D3DVALUE *u, D3DVALUE *v) PURE;
621      STDMETHOD(GetTextureTopology)(THIS_ BOOL *wrap_u, BOOL *wrap_v) PURE;
622      STDMETHOD(GetNormal)(THIS_ D3DVECTOR *) PURE;
623      STDMETHOD(GetTexture)(THIS_ LPDIRECT3DRMTEXTURE *) PURE;
624      STDMETHOD(GetMaterial)(THIS_ LPDIRECT3DRMMATERIAL *) PURE;
625
626      STDMETHOD_(int, GetVertexCount)(THIS) PURE;
627      STDMETHOD_(int, GetVertexIndex)(THIS_ DWORD which) PURE;
628      STDMETHOD_(int, GetTextureCoordinateIndex)(THIS_ DWORD which) PURE;
629      STDMETHOD_(D3DCOLOR, GetColor)(THIS) PURE;
630 };
631
632 #undef INTERFACE
633 #define INTERFACE IDirect3DRMMeshBuilder
634
635 DECLARE_INTERFACE_(IDirect3DRMMeshBuilder, IDirect3DRMVisual)
636 {
637     IUNKNOWN_METHODS(PURE);
638     IDIRECT3DRMOBJECT_METHODS(PURE);
639
640     /*
641      * IDirect3DRMMeshBuilder methods
642      */
643     STDMETHOD(Load)(THIS_ LPVOID filename, LPVOID name, D3DRMLOADOPTIONS loadflags, D3DRMLOADTEXTURECALLBACK, LPVOID lpArg) PURE;
644     STDMETHOD(Save)(THIS_ const char *filename, D3DRMXOFFORMAT, D3DRMSAVEOPTIONS save) PURE;
645     STDMETHOD(Scale)(THIS_ D3DVALUE sx, D3DVALUE sy, D3DVALUE sz) PURE;
646     STDMETHOD(Translate)(THIS_ D3DVALUE tx, D3DVALUE ty, D3DVALUE tz) PURE;
647     STDMETHOD(SetColorSource)(THIS_ D3DRMCOLORSOURCE) PURE;
648     STDMETHOD(GetBox)(THIS_ D3DRMBOX *) PURE;
649     STDMETHOD(GenerateNormals)(THIS) PURE;
650     STDMETHOD_(D3DRMCOLORSOURCE, GetColorSource)(THIS) PURE;
651
652     STDMETHOD(AddMesh)(THIS_ LPDIRECT3DRMMESH) PURE;
653     STDMETHOD(AddMeshBuilder)(THIS_ LPDIRECT3DRMMESHBUILDER) PURE;
654     STDMETHOD(AddFrame)(THIS_ LPDIRECT3DRMFRAME) PURE;
655     STDMETHOD(AddFace)(THIS_ LPDIRECT3DRMFACE) PURE;
656     STDMETHOD(AddFaces)
657     (   THIS_ DWORD vcount, D3DVECTOR *vertices, DWORD ncount, D3DVECTOR *normals,
658         DWORD *data, LPDIRECT3DRMFACEARRAY*
659     ) PURE;
660     STDMETHOD(ReserveSpace)(THIS_ DWORD vertex_Count, DWORD normal_count, DWORD face_count) PURE;
661     STDMETHOD(SetColorRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
662     STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE;
663     STDMETHOD(SetTexture)(THIS_ LPDIRECT3DRMTEXTURE) PURE;
664     STDMETHOD(SetMaterial)(THIS_ LPDIRECT3DRMMATERIAL) PURE;
665     STDMETHOD(SetTextureTopology)(THIS_ BOOL wrap_u, BOOL wrap_v) PURE;
666     STDMETHOD(SetQuality)(THIS_ D3DRMRENDERQUALITY) PURE;
667     STDMETHOD(SetPerspective)(THIS_ BOOL) PURE;
668     STDMETHOD(SetVertex)(THIS_ DWORD index, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
669     STDMETHOD(SetNormal)(THIS_ DWORD index, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
670     STDMETHOD(SetTextureCoordinates)(THIS_ DWORD index, D3DVALUE u, D3DVALUE v) PURE;
671     STDMETHOD(SetVertexColor)(THIS_ DWORD index, D3DCOLOR) PURE;
672     STDMETHOD(SetVertexColorRGB)(THIS_ DWORD index, D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
673
674     STDMETHOD(GetFaces)(THIS_ LPDIRECT3DRMFACEARRAY*) PURE;
675     STDMETHOD(GetVertices)
676     (   THIS_ DWORD *vcount, D3DVECTOR *vertices, DWORD *ncount, D3DVECTOR *normals, DWORD *face_data_size, DWORD *face_data
677     ) PURE;
678     STDMETHOD(GetTextureCoordinates)(THIS_ DWORD index, D3DVALUE *u, D3DVALUE *v) PURE;
679
680     STDMETHOD_(int, AddVertex)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
681     STDMETHOD_(int, AddNormal)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
682     STDMETHOD(CreateFace)(THIS_ LPDIRECT3DRMFACE*) PURE;
683     STDMETHOD_(D3DRMRENDERQUALITY, GetQuality)(THIS) PURE;
684     STDMETHOD_(BOOL, GetPerspective)(THIS) PURE;
685     STDMETHOD_(int, GetFaceCount)(THIS) PURE;
686     STDMETHOD_(int, GetVertexCount)(THIS) PURE;
687     STDMETHOD_(D3DCOLOR, GetVertexColor)(THIS_ DWORD index) PURE;
688
689     STDMETHOD(CreateMesh)(THIS_ LPDIRECT3DRMMESH*) PURE;
690 };
691
692 #undef INTERFACE
693 #define INTERFACE IDirect3DRMMeshBuilder2
694
695 DECLARE_INTERFACE_(IDirect3DRMMeshBuilder2, IDirect3DRMMeshBuilder)
696 {
697     IUNKNOWN_METHODS(PURE);
698     IDIRECT3DRMOBJECT_METHODS(PURE);
699
700     /*
701      * IDirect3DRMMeshBuilder methods
702      */
703     STDMETHOD(Load)(THIS_ LPVOID filename, LPVOID name, D3DRMLOADOPTIONS loadflags, D3DRMLOADTEXTURECALLBACK, LPVOID lpArg) PURE;
704     STDMETHOD(Save)(THIS_ const char *filename, D3DRMXOFFORMAT, D3DRMSAVEOPTIONS save) PURE;
705     STDMETHOD(Scale)(THIS_ D3DVALUE sx, D3DVALUE sy, D3DVALUE sz) PURE;
706     STDMETHOD(Translate)(THIS_ D3DVALUE tx, D3DVALUE ty, D3DVALUE tz) PURE;
707     STDMETHOD(SetColorSource)(THIS_ D3DRMCOLORSOURCE) PURE;
708     STDMETHOD(GetBox)(THIS_ D3DRMBOX *) PURE;
709     STDMETHOD(GenerateNormals)(THIS) PURE;
710     STDMETHOD_(D3DRMCOLORSOURCE, GetColorSource)(THIS) PURE;
711
712     STDMETHOD(AddMesh)(THIS_ LPDIRECT3DRMMESH) PURE;
713     STDMETHOD(AddMeshBuilder)(THIS_ LPDIRECT3DRMMESHBUILDER) PURE;
714     STDMETHOD(AddFrame)(THIS_ LPDIRECT3DRMFRAME) PURE;
715     STDMETHOD(AddFace)(THIS_ LPDIRECT3DRMFACE) PURE;
716     STDMETHOD(AddFaces)
717     (   THIS_ DWORD vcount, D3DVECTOR *vertices, DWORD ncount, D3DVECTOR *normals,
718         DWORD *data, LPDIRECT3DRMFACEARRAY*
719     ) PURE;
720     STDMETHOD(ReserveSpace)(THIS_ DWORD vertex_Count, DWORD normal_count, DWORD face_count) PURE;
721     STDMETHOD(SetColorRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
722     STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE;
723     STDMETHOD(SetTexture)(THIS_ LPDIRECT3DRMTEXTURE) PURE;
724     STDMETHOD(SetMaterial)(THIS_ LPDIRECT3DRMMATERIAL) PURE;
725     STDMETHOD(SetTextureTopology)(THIS_ BOOL wrap_u, BOOL wrap_v) PURE;
726     STDMETHOD(SetQuality)(THIS_ D3DRMRENDERQUALITY) PURE;
727     STDMETHOD(SetPerspective)(THIS_ BOOL) PURE;
728     STDMETHOD(SetVertex)(THIS_ DWORD index, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
729     STDMETHOD(SetNormal)(THIS_ DWORD index, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
730     STDMETHOD(SetTextureCoordinates)(THIS_ DWORD index, D3DVALUE u, D3DVALUE v) PURE;
731     STDMETHOD(SetVertexColor)(THIS_ DWORD index, D3DCOLOR) PURE;
732     STDMETHOD(SetVertexColorRGB)(THIS_ DWORD index, D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
733
734     STDMETHOD(GetFaces)(THIS_ LPDIRECT3DRMFACEARRAY*) PURE;
735     STDMETHOD(GetVertices)
736     (   THIS_ DWORD *vcount, D3DVECTOR *vertices, DWORD *ncount, D3DVECTOR *normals, DWORD *face_data_size, DWORD *face_data
737     ) PURE;
738     STDMETHOD(GetTextureCoordinates)(THIS_ DWORD index, D3DVALUE *u, D3DVALUE *v) PURE;
739
740     STDMETHOD_(int, AddVertex)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
741     STDMETHOD_(int, AddNormal)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
742     STDMETHOD(CreateFace)(THIS_ LPDIRECT3DRMFACE*) PURE;
743     STDMETHOD_(D3DRMRENDERQUALITY, GetQuality)(THIS) PURE;
744     STDMETHOD_(BOOL, GetPerspective)(THIS) PURE;
745     STDMETHOD_(int, GetFaceCount)(THIS) PURE;
746     STDMETHOD_(int, GetVertexCount)(THIS) PURE;
747     STDMETHOD_(D3DCOLOR, GetVertexColor)(THIS_ DWORD index) PURE;
748
749     STDMETHOD(CreateMesh)(THIS_ LPDIRECT3DRMMESH*) PURE;
750
751     /*
752      * IDirect3DRMMeshBuilder2 methods
753      */
754     STDMETHOD(GenerateNormals2)(THIS_ D3DVALUE crease, DWORD dwFlags) PURE;
755     STDMETHOD(GetFace)(THIS_ DWORD index, LPDIRECT3DRMFACE*) PURE;
756 };
757
758 #undef INTERFACE
759 #define INTERFACE IDirect3DRMLight
760
761 DECLARE_INTERFACE_(IDirect3DRMLight, IDirect3DRMObject)
762 {
763     IUNKNOWN_METHODS(PURE);
764     IDIRECT3DRMOBJECT_METHODS(PURE);
765
766     /*
767      * IDirect3DRMLight methods
768      */
769     STDMETHOD(SetType)(THIS_ D3DRMLIGHTTYPE) PURE;
770     STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE;
771     STDMETHOD(SetColorRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
772     STDMETHOD(SetRange)(THIS_ D3DVALUE) PURE;
773     STDMETHOD(SetUmbra)(THIS_ D3DVALUE) PURE;
774     STDMETHOD(SetPenumbra)(THIS_ D3DVALUE) PURE;
775     STDMETHOD(SetConstantAttenuation)(THIS_ D3DVALUE) PURE;
776     STDMETHOD(SetLinearAttenuation)(THIS_ D3DVALUE) PURE;
777     STDMETHOD(SetQuadraticAttenuation)(THIS_ D3DVALUE) PURE;
778
779     STDMETHOD_(D3DVALUE, GetRange)(THIS) PURE;
780     STDMETHOD_(D3DVALUE, GetUmbra)(THIS) PURE;
781     STDMETHOD_(D3DVALUE, GetPenumbra)(THIS) PURE;
782     STDMETHOD_(D3DVALUE, GetConstantAttenuation)(THIS) PURE;
783     STDMETHOD_(D3DVALUE, GetLinearAttenuation)(THIS) PURE;
784     STDMETHOD_(D3DVALUE, GetQuadraticAttenuation)(THIS) PURE;
785     STDMETHOD_(D3DCOLOR, GetColor)(THIS) PURE;
786     STDMETHOD_(D3DRMLIGHTTYPE, GetType)(THIS) PURE;
787
788     STDMETHOD(SetEnableFrame)(THIS_ LPDIRECT3DRMFRAME) PURE;
789     STDMETHOD(GetEnableFrame)(THIS_ LPDIRECT3DRMFRAME*) PURE;
790 };
791
792 #undef INTERFACE
793 #define INTERFACE IDirect3DRMTexture
794
795 DECLARE_INTERFACE_(IDirect3DRMTexture, IDirect3DRMVisual)
796 {
797     IUNKNOWN_METHODS(PURE);
798     IDIRECT3DRMOBJECT_METHODS(PURE);
799
800     /*
801      * IDirect3DRMTexture methods
802      */
803     STDMETHOD(InitFromFile)(THIS_ const char *filename) PURE;
804     STDMETHOD(InitFromSurface)(THIS_ LPDIRECTDRAWSURFACE lpDDS) PURE;
805     STDMETHOD(InitFromResource)(THIS_ HRSRC) PURE;
806     STDMETHOD(Changed)(THIS_ BOOL pixels, BOOL palette) PURE;
807
808     STDMETHOD(SetColors)(THIS_ DWORD) PURE;
809     STDMETHOD(SetShades)(THIS_ DWORD) PURE;
810     STDMETHOD(SetDecalSize)(THIS_ D3DVALUE width, D3DVALUE height) PURE;
811     STDMETHOD(SetDecalOrigin)(THIS_ LONG x, LONG y) PURE;
812     STDMETHOD(SetDecalScale)(THIS_ DWORD) PURE;
813     STDMETHOD(SetDecalTransparency)(THIS_ BOOL) PURE;
814     STDMETHOD(SetDecalTransparentColor)(THIS_ D3DCOLOR) PURE;
815
816     STDMETHOD(GetDecalSize)(THIS_ D3DVALUE *width_return, D3DVALUE *height_return) PURE;
817     STDMETHOD(GetDecalOrigin)(THIS_ LONG *x_return, LONG *y_return) PURE;
818
819     STDMETHOD_(D3DRMIMAGE *, GetImage)(THIS) PURE;
820     STDMETHOD_(DWORD, GetShades)(THIS) PURE;
821     STDMETHOD_(DWORD, GetColors)(THIS) PURE;
822     STDMETHOD_(DWORD, GetDecalScale)(THIS) PURE;
823     STDMETHOD_(BOOL, GetDecalTransparency)(THIS) PURE;
824     STDMETHOD_(D3DCOLOR, GetDecalTransparentColor)(THIS) PURE;
825 };
826
827 #undef INTERFACE
828 #define INTERFACE IDirect3DRMTexture2
829
830 DECLARE_INTERFACE_(IDirect3DRMTexture2, IDirect3DRMTexture)
831 {
832     IUNKNOWN_METHODS(PURE);
833     IDIRECT3DRMOBJECT_METHODS(PURE);
834
835     /*
836      * IDirect3DRMTexture methods
837      */
838     STDMETHOD(InitFromFile)(THIS_ const char *filename) PURE;
839     STDMETHOD(InitFromSurface)(THIS_ LPDIRECTDRAWSURFACE lpDDS) PURE;
840     STDMETHOD(InitFromResource)(THIS_ HRSRC) PURE;
841     STDMETHOD(Changed)(THIS_ BOOL pixels, BOOL palette) PURE;
842
843     STDMETHOD(SetColors)(THIS_ DWORD) PURE;
844     STDMETHOD(SetShades)(THIS_ DWORD) PURE;
845     STDMETHOD(SetDecalSize)(THIS_ D3DVALUE width, D3DVALUE height) PURE;
846     STDMETHOD(SetDecalOrigin)(THIS_ LONG x, LONG y) PURE;
847     STDMETHOD(SetDecalScale)(THIS_ DWORD) PURE;
848     STDMETHOD(SetDecalTransparency)(THIS_ BOOL) PURE;
849     STDMETHOD(SetDecalTransparentColor)(THIS_ D3DCOLOR) PURE;
850
851     STDMETHOD(GetDecalSize)(THIS_ D3DVALUE *width_return, D3DVALUE *height_return) PURE;
852     STDMETHOD(GetDecalOrigin)(THIS_ LONG *x_return, LONG *y_return) PURE;
853
854     STDMETHOD_(D3DRMIMAGE *, GetImage)(THIS) PURE;
855     STDMETHOD_(DWORD, GetShades)(THIS) PURE;
856     STDMETHOD_(DWORD, GetColors)(THIS) PURE;
857     STDMETHOD_(DWORD, GetDecalScale)(THIS) PURE;
858     STDMETHOD_(BOOL, GetDecalTransparency)(THIS) PURE;
859     STDMETHOD_(D3DCOLOR, GetDecalTransparentColor)(THIS) PURE;
860
861     /*
862      * IDirect3DRMTexture2 methods
863      */
864     STDMETHOD(InitFromImage)(THIS_ LPD3DRMIMAGE) PURE;
865     STDMETHOD(InitFromResource2)(THIS_ HMODULE hModule, LPCTSTR strName, LPCTSTR strType) PURE;
866     STDMETHOD(GenerateMIPMap)(THIS_ DWORD) PURE;
867 };
868
869 #undef INTERFACE
870 #define INTERFACE IDirect3DRMWrap
871
872 DECLARE_INTERFACE_(IDirect3DRMWrap, IDirect3DRMObject)
873 {
874     IUNKNOWN_METHODS(PURE);
875     IDIRECT3DRMOBJECT_METHODS(PURE);
876
877     /*
878      * IDirect3DRMWrap methods
879      */
880     STDMETHOD(Init)
881     (   THIS_ D3DRMWRAPTYPE, LPDIRECT3DRMFRAME ref,
882         D3DVALUE ox, D3DVALUE oy, D3DVALUE oz,
883         D3DVALUE dx, D3DVALUE dy, D3DVALUE dz,
884         D3DVALUE ux, D3DVALUE uy, D3DVALUE uz,
885         D3DVALUE ou, D3DVALUE ov,
886         D3DVALUE su, D3DVALUE sv
887     ) PURE;
888     STDMETHOD(Apply)(THIS_ LPDIRECT3DRMOBJECT) PURE;
889     STDMETHOD(ApplyRelative)(THIS_ LPDIRECT3DRMFRAME frame, LPDIRECT3DRMOBJECT) PURE;
890 };
891
892 #undef INTERFACE
893 #define INTERFACE IDirect3DRMMaterial
894
895 DECLARE_INTERFACE_(IDirect3DRMMaterial, IDirect3DRMObject)
896 {
897     IUNKNOWN_METHODS(PURE);
898     IDIRECT3DRMOBJECT_METHODS(PURE);
899
900     /*
901      * IDirect3DRMMaterial methods
902      */
903     STDMETHOD(SetPower)(THIS_ D3DVALUE power) PURE;
904     STDMETHOD(SetSpecular)(THIS_ D3DVALUE r, D3DVALUE g, D3DVALUE b) PURE;
905     STDMETHOD(SetEmissive)(THIS_ D3DVALUE r, D3DVALUE g, D3DVALUE b) PURE;
906
907     STDMETHOD_(D3DVALUE, GetPower)(THIS) PURE;
908     STDMETHOD(GetSpecular)(THIS_ D3DVALUE* r, D3DVALUE* g, D3DVALUE* b) PURE;
909     STDMETHOD(GetEmissive)(THIS_ D3DVALUE* r, D3DVALUE* g, D3DVALUE* b) PURE;
910 };
911
912 #undef INTERFACE
913 #define INTERFACE IDirect3DRMAnimation
914
915 DECLARE_INTERFACE_(IDirect3DRMAnimation, IDirect3DRMObject)
916 {
917     IUNKNOWN_METHODS(PURE);
918     IDIRECT3DRMOBJECT_METHODS(PURE);
919
920     /*
921      * IDirect3DRMAnimation methods
922      */
923     STDMETHOD(SetOptions)(THIS_ D3DRMANIMATIONOPTIONS flags) PURE;
924     STDMETHOD(AddRotateKey)(THIS_ D3DVALUE time, D3DRMQUATERNION *q) PURE;
925     STDMETHOD(AddPositionKey)(THIS_ D3DVALUE time, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
926     STDMETHOD(AddScaleKey)(THIS_ D3DVALUE time, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
927     STDMETHOD(DeleteKey)(THIS_ D3DVALUE time) PURE;
928     STDMETHOD(SetFrame)(THIS_ LPDIRECT3DRMFRAME frame) PURE;
929     STDMETHOD(SetTime)(THIS_ D3DVALUE time) PURE;
930
931     STDMETHOD_(D3DRMANIMATIONOPTIONS, GetOptions)(THIS) PURE;
932 };
933
934 #undef INTERFACE
935 #define INTERFACE IDirect3DRMAnimationSet
936
937 DECLARE_INTERFACE_(IDirect3DRMAnimationSet, IDirect3DRMObject)
938 {
939     IUNKNOWN_METHODS(PURE);
940     IDIRECT3DRMOBJECT_METHODS(PURE);
941
942     /*
943      * IDirect3DRMAnimationSet methods
944      */
945     STDMETHOD(AddAnimation)(THIS_ LPDIRECT3DRMANIMATION aid) PURE;
946     STDMETHOD(Load)(THIS_ LPVOID filename, LPVOID name, D3DRMLOADOPTIONS loadflags, D3DRMLOADTEXTURECALLBACK, LPVOID lpArg, LPDIRECT3DRMFRAME parent)PURE;
947     STDMETHOD(DeleteAnimation)(THIS_ LPDIRECT3DRMANIMATION aid) PURE;
948     STDMETHOD(SetTime)(THIS_ D3DVALUE time) PURE;
949 };
950
951 #undef INTERFACE
952 #define INTERFACE IDirect3DRMUserVisual
953
954 DECLARE_INTERFACE_(IDirect3DRMUserVisual, IDirect3DRMVisual)
955 {
956     IUNKNOWN_METHODS(PURE);
957     IDIRECT3DRMOBJECT_METHODS(PURE);
958
959     /*
960      * IDirect3DRMUserVisual methods
961      */
962     STDMETHOD(Init)(THIS_ D3DRMUSERVISUALCALLBACK fn, void *arg) PURE;
963 };
964
965 #undef INTERFACE
966 #define INTERFACE IDirect3DRMArray
967
968 DECLARE_INTERFACE_(IDirect3DRMArray, IUnknown)
969 {
970     IUNKNOWN_METHODS(PURE);
971
972     STDMETHOD_(DWORD, GetSize)(THIS) PURE;
973     /* No GetElement method as it would get overloaded
974      * in derived classes, and overloading is
975      * a no-no in COM
976      */
977 };
978
979 #undef INTERFACE
980 #define INTERFACE IDirect3DRMObjectArray
981
982 DECLARE_INTERFACE_(IDirect3DRMObjectArray, IDirect3DRMArray)
983 {
984     IUNKNOWN_METHODS(PURE);
985
986     STDMETHOD_(DWORD, GetSize)(THIS) PURE;
987     STDMETHOD(GetElement)(THIS_ DWORD index, LPDIRECT3DRMOBJECT *) PURE;
988 };
989
990 #undef INTERFACE
991 #define INTERFACE IDirect3DRMDeviceArray
992
993 DECLARE_INTERFACE_(IDirect3DRMDeviceArray, IDirect3DRMArray)
994 {
995     IUNKNOWN_METHODS(PURE);
996
997     STDMETHOD_(DWORD, GetSize)(THIS) PURE;
998     STDMETHOD(GetElement)(THIS_ DWORD index, LPDIRECT3DRMDEVICE *) PURE;
999 };
1000
1001 #undef INTERFACE
1002 #define INTERFACE IDirect3DRMFrameArray
1003
1004 DECLARE_INTERFACE_(IDirect3DRMFrameArray, IDirect3DRMArray)
1005 {
1006     IUNKNOWN_METHODS(PURE);
1007
1008     STDMETHOD_(DWORD, GetSize)(THIS) PURE;
1009     STDMETHOD(GetElement)(THIS_ DWORD index, LPDIRECT3DRMFRAME *) PURE;
1010 };
1011
1012 #undef INTERFACE
1013 #define INTERFACE IDirect3DRMViewportArray
1014
1015 DECLARE_INTERFACE_(IDirect3DRMViewportArray, IDirect3DRMArray)
1016 {
1017     IUNKNOWN_METHODS(PURE);
1018
1019     STDMETHOD_(DWORD, GetSize)(THIS) PURE;
1020     STDMETHOD(GetElement)(THIS_ DWORD index, LPDIRECT3DRMVIEWPORT *) PURE;
1021 };
1022
1023 #undef INTERFACE
1024 #define INTERFACE IDirect3DRMVisualArray
1025
1026 DECLARE_INTERFACE_(IDirect3DRMVisualArray, IDirect3DRMArray)
1027 {
1028     IUNKNOWN_METHODS(PURE);
1029
1030     STDMETHOD_(DWORD, GetSize)(THIS) PURE;
1031     STDMETHOD(GetElement)(THIS_ DWORD index, LPDIRECT3DRMVISUAL *) PURE;
1032 };
1033
1034 #undef INTERFACE
1035 #define INTERFACE IDirect3DRMPickedArray
1036
1037 DECLARE_INTERFACE_(IDirect3DRMPickedArray, IDirect3DRMArray)
1038 {
1039     IUNKNOWN_METHODS(PURE);
1040
1041     STDMETHOD_(DWORD, GetSize)(THIS) PURE;
1042     STDMETHOD(GetPick)(THIS_ DWORD index, LPDIRECT3DRMVISUAL *, LPDIRECT3DRMFRAMEARRAY *, LPD3DRMPICKDESC) PURE;
1043 };
1044
1045 #undef INTERFACE
1046 #define INTERFACE IDirect3DRMLightArray
1047
1048 DECLARE_INTERFACE_(IDirect3DRMLightArray, IDirect3DRMArray)
1049 {
1050     IUNKNOWN_METHODS(PURE);
1051
1052     STDMETHOD_(DWORD, GetSize)(THIS) PURE;
1053     STDMETHOD(GetElement)(THIS_ DWORD index, LPDIRECT3DRMLIGHT *) PURE;
1054 };
1055
1056 #undef INTERFACE
1057 #define INTERFACE IDirect3DRMFaceArray
1058
1059 DECLARE_INTERFACE_(IDirect3DRMFaceArray, IDirect3DRMArray)
1060 {
1061     IUNKNOWN_METHODS(PURE);
1062
1063     STDMETHOD_(DWORD, GetSize)(THIS) PURE;
1064     STDMETHOD(GetElement)(THIS_ DWORD index, LPDIRECT3DRMFACE *) PURE;
1065 };
1066
1067 #undef INTERFACE
1068 #define INTERFACE IDirect3DRMPicked2Array
1069
1070 DECLARE_INTERFACE_(IDirect3DRMPicked2Array, IDirect3DRMArray)
1071 {
1072     IUNKNOWN_METHODS(PURE);
1073
1074     STDMETHOD_(DWORD, GetSize)(THIS) PURE;
1075     STDMETHOD(GetPick)(THIS_ DWORD index, LPDIRECT3DRMVISUAL *, LPDIRECT3DRMFRAMEARRAY *, LPD3DRMPICKDESC2) PURE;
1076 };
1077
1078 #undef INTERFACE
1079 #define INTERFACE IDirect3DRMInterpolator
1080
1081 DECLARE_INTERFACE_(IDirect3DRMInterpolator, IDirect3DRMObject)
1082 {
1083     IUNKNOWN_METHODS(PURE);
1084     IDIRECT3DRMOBJECT_METHODS(PURE);
1085
1086     /*
1087      * IDirect3DRMInterpolator methods
1088      */
1089     STDMETHOD(AttachObject)(THIS_ LPDIRECT3DRMOBJECT) PURE;
1090     STDMETHOD(GetAttachedObjects)(THIS_ LPDIRECT3DRMOBJECTARRAY *) PURE;
1091     STDMETHOD(DetachObject)(THIS_ LPDIRECT3DRMOBJECT) PURE;
1092     STDMETHOD(SetIndex)(THIS_ D3DVALUE) PURE;
1093     STDMETHOD_(D3DVALUE, GetIndex)(THIS) PURE;
1094     STDMETHOD(Interpolate)(THIS_ D3DVALUE, LPDIRECT3DRMOBJECT, D3DRMINTERPOLATIONOPTIONS) PURE;
1095 };
1096
1097 #ifdef __cplusplus
1098 };
1099 #endif
1100 #endif /* _D3DRMOBJ_H_ */
1101