comdlg32: Remove the font sample characters string.
[wine] / dlls / d3drm / d3drm.c
1 /*
2  * Implementation of IDirect3DRM Interface
3  *
4  * Copyright 2010 Christian Costa
5  * Copyright 2011 AndrĂ© Hentschel
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with this library; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20  */
21
22 #include "wine/debug.h"
23
24 #define COBJMACROS
25
26 #include "winbase.h"
27 #include "wingdi.h"
28
29 #include "d3drm_private.h"
30
31 WINE_DEFAULT_DEBUG_CHANNEL(d3drm);
32
33 typedef struct {
34     IDirect3DRM IDirect3DRM_iface;
35     IDirect3DRM2 IDirect3DRM2_iface;
36     IDirect3DRM3 IDirect3DRM3_iface;
37     LONG ref;
38 } IDirect3DRMImpl;
39
40 static const struct IDirect3DRMVtbl Direct3DRM_Vtbl;
41 static const struct IDirect3DRM2Vtbl Direct3DRM2_Vtbl;
42 static const struct IDirect3DRM3Vtbl Direct3DRM3_Vtbl;
43
44 static inline IDirect3DRMImpl *impl_from_IDirect3DRM(IDirect3DRM *iface)
45 {
46     return CONTAINING_RECORD(iface, IDirect3DRMImpl, IDirect3DRM_iface);
47 }
48
49 static inline IDirect3DRMImpl *impl_from_IDirect3DRM2(IDirect3DRM2 *iface)
50 {
51     return CONTAINING_RECORD(iface, IDirect3DRMImpl, IDirect3DRM2_iface);
52 }
53
54 static inline IDirect3DRMImpl *impl_from_IDirect3DRM3(IDirect3DRM3 *iface)
55 {
56     return CONTAINING_RECORD(iface, IDirect3DRMImpl, IDirect3DRM3_iface);
57 }
58
59 HRESULT Direct3DRM_create(IUnknown** ppObj)
60 {
61     IDirect3DRMImpl* object;
62
63     TRACE("(%p)\n", ppObj);
64
65     object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirect3DRMImpl));
66     if (!object)
67     {
68         ERR("Out of memory\n");
69         return E_OUTOFMEMORY;
70     }
71
72     object->IDirect3DRM_iface.lpVtbl = &Direct3DRM_Vtbl;
73     object->IDirect3DRM2_iface.lpVtbl = &Direct3DRM2_Vtbl;
74     object->IDirect3DRM3_iface.lpVtbl = &Direct3DRM3_Vtbl;
75     object->ref = 1;
76
77     *ppObj = (IUnknown*)&object->IDirect3DRM_iface;
78
79     return S_OK;
80 }
81
82 /*** IUnknown methods ***/
83 static HRESULT WINAPI IDirect3DRMImpl_QueryInterface(IDirect3DRM* iface, REFIID riid, void** ppvObject)
84 {
85     IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
86
87     TRACE("(%p/%p)->(%s,%p)\n", iface, This, debugstr_guid(riid), ppvObject);
88
89     *ppvObject = NULL;
90
91     if(IsEqualGUID(riid, &IID_IUnknown) ||
92        IsEqualGUID(riid, &IID_IDirect3DRM))
93     {
94         *ppvObject = &This->IDirect3DRM_iface;
95     }
96     else if(IsEqualGUID(riid, &IID_IDirect3DRM2))
97     {
98         *ppvObject = &This->IDirect3DRM2_iface;
99     }
100     else if(IsEqualGUID(riid, &IID_IDirect3DRM3))
101     {
102         *ppvObject = &This->IDirect3DRM3_iface;
103     }
104     else
105     {
106         FIXME("interface %s not implemented\n", debugstr_guid(riid));
107         return E_NOINTERFACE;
108     }
109
110     IDirect3DRM_AddRef(iface);
111     return S_OK;
112 }
113
114 static ULONG WINAPI IDirect3DRMImpl_AddRef(IDirect3DRM* iface)
115 {
116     IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
117
118     TRACE("(%p/%p)\n", iface, This);
119
120     return InterlockedIncrement(&This->ref);
121 }
122
123 static ULONG WINAPI IDirect3DRMImpl_Release(IDirect3DRM* iface)
124 {
125     IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
126     ULONG ref = InterlockedDecrement(&This->ref);
127
128     TRACE("(%p/%p)\n", iface, This);
129
130     if (!ref)
131         HeapFree(GetProcessHeap(), 0, This);
132
133     return ref;
134 }
135
136 /*** IDirect3DRM methods ***/
137 static HRESULT WINAPI IDirect3DRMImpl_CreateObject(IDirect3DRM* iface, REFCLSID rclsid, LPUNKNOWN pUnkOuter, REFIID riid, LPVOID *ppvObj)
138 {
139     IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
140
141     FIXME("(%p/%p)->(%s,%p,%s,%p): stub\n", iface, This, debugstr_guid(rclsid), pUnkOuter, debugstr_guid(riid), ppvObj);
142
143     return E_NOTIMPL;
144 }
145
146 static HRESULT WINAPI IDirect3DRMImpl_CreateFrame(IDirect3DRM* iface, LPDIRECT3DRMFRAME pFrameParent, LPDIRECT3DRMFRAME * ppFrame)
147 {
148     IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
149
150     TRACE("(%p/%p)->(%p,%p)\n", iface, This, pFrameParent, ppFrame);
151
152     if (pFrameParent)
153         FIXME("(%p/%p): Parent frame not yet supported\n", iface, This);
154
155     return Direct3DRMFrame_create(&IID_IDirect3DRMFrame, (IUnknown**)ppFrame);
156 }
157
158 static HRESULT WINAPI IDirect3DRMImpl_CreateMesh(IDirect3DRM* iface, LPDIRECT3DRMMESH * ppMesh)
159 {
160     IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
161
162     FIXME("(%p/%p)->(%p): stub\n", iface, This, ppMesh);
163
164     return E_NOTIMPL;
165 }
166
167 static HRESULT WINAPI IDirect3DRMImpl_CreateMeshBuilder(IDirect3DRM* iface, LPDIRECT3DRMMESHBUILDER * ppMeshBuilder)
168 {
169     IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
170
171     TRACE("(%p/%p)->(%p)\n", iface, This, ppMeshBuilder);
172
173     return Direct3DRMMeshBuilder_create(&IID_IDirect3DRMMeshBuilder, (IUnknown**)ppMeshBuilder);
174 }
175
176 static HRESULT WINAPI IDirect3DRMImpl_CreateFace(IDirect3DRM* iface, LPDIRECT3DRMFACE * ppFace)
177 {
178     IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
179
180     FIXME("(%p/%p)->(%p): stub\n", iface, This, ppFace);
181
182     return E_NOTIMPL;
183 }
184
185 static HRESULT WINAPI IDirect3DRMImpl_CreateAnimation(IDirect3DRM* iface, LPDIRECT3DRMANIMATION * ppAnimation)
186 {
187     IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
188
189     FIXME("(%p/%p)->(%p): stub\n", iface, This, ppAnimation);
190
191     return E_NOTIMPL;
192 }
193
194 static HRESULT WINAPI IDirect3DRMImpl_CreateAnimationSet(IDirect3DRM* iface, LPDIRECT3DRMANIMATIONSET * ppAnimationSet)
195 {
196     IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
197
198     FIXME("(%p/%p)->(%p): stub\n", iface, This, ppAnimationSet);
199
200     return E_NOTIMPL;
201 }
202
203 static HRESULT WINAPI IDirect3DRMImpl_CreateTexture(IDirect3DRM* iface, LPD3DRMIMAGE pImage, LPDIRECT3DRMTEXTURE * ppTexture)
204 {
205     IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
206
207     FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, pImage, ppTexture);
208
209     return E_NOTIMPL;
210 }
211
212 static HRESULT WINAPI IDirect3DRMImpl_CreateLight(IDirect3DRM* iface, D3DRMLIGHTTYPE type, D3DCOLOR color, LPDIRECT3DRMLIGHT * ppLight)
213 {
214     IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
215
216     FIXME("(%p/%p)->(%d,%d,%p): stub\n", iface, This, type, color, ppLight);
217
218     return E_NOTIMPL;
219 }
220
221 static HRESULT WINAPI IDirect3DRMImpl_CreateLightRGB(IDirect3DRM* iface, D3DRMLIGHTTYPE type,  D3DVALUE red, D3DVALUE green, D3DVALUE blue, LPDIRECT3DRMLIGHT * ppLight)
222 {
223     IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
224
225     FIXME("(%p/%p)->(%d,%f,%f,%f,%p): stub\n", iface, This, type, red, green, blue, ppLight);
226
227     return E_NOTIMPL;
228 }
229
230 static HRESULT WINAPI IDirect3DRMImpl_Material(IDirect3DRM* iface, D3DVALUE m, LPDIRECT3DRMMATERIAL * ppMaterial)
231 {
232     IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
233
234     FIXME("(%p/%p)->(%f,%p): stub\n", iface, This, m, ppMaterial);
235
236     return E_NOTIMPL;
237 }
238
239 static HRESULT WINAPI IDirect3DRMImpl_CreateDevice(IDirect3DRM* iface, DWORD width, DWORD height, LPDIRECT3DRMDEVICE * ppDevice)
240 {
241     IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
242
243     FIXME("(%p/%p)->(%u,%u,%p): partial stub\n", iface, This, width, height, ppDevice);
244
245     return Direct3DRMDevice_create(&IID_IDirect3DRMDevice, (IUnknown**)ppDevice);
246 }
247
248 static HRESULT WINAPI IDirect3DRMImpl_CreateDeviceFromSurface(IDirect3DRM* iface, LPGUID pGUID, LPDIRECTDRAW pDD, LPDIRECTDRAWSURFACE pDDSBack, LPDIRECT3DRMDEVICE * ppDevice)
249 {
250     IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
251
252     FIXME("(%p/%p)->(%s,%p,%p,%p): partial stub\n", iface, This, debugstr_guid(pGUID), pDD,
253           pDDSBack, ppDevice);
254
255     return Direct3DRMDevice_create(&IID_IDirect3DRMDevice, (IUnknown**)ppDevice);
256 }
257
258 static HRESULT WINAPI IDirect3DRMImpl_CreateDeviceFromD3D(IDirect3DRM* iface, LPDIRECT3D pD3D, LPDIRECT3DDEVICE pD3DDev, LPDIRECT3DRMDEVICE * ppDevice)
259 {
260     IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
261
262     FIXME("(%p/%p)->(%p,%p,%p): partial stub\n", iface, This, pD3D, pD3DDev, ppDevice);
263
264     return Direct3DRMDevice_create(&IID_IDirect3DRMDevice, (IUnknown**)ppDevice);
265 }
266
267 static HRESULT WINAPI IDirect3DRMImpl_CreateDeviceFromClipper(IDirect3DRM* iface, LPDIRECTDRAWCLIPPER pDDClipper, LPGUID pGUID, int width, int height, LPDIRECT3DRMDEVICE * ppDevice)
268 {
269     IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
270
271     FIXME("(%p/%p)->(%p,%s,%d,%d,%p): partial stub\n", iface, This, pDDClipper,
272           debugstr_guid(pGUID), width, height, ppDevice);
273
274     return Direct3DRMDevice_create(&IID_IDirect3DRMDevice, (IUnknown**)ppDevice);
275 }
276
277 static HRESULT WINAPI IDirect3DRMImpl_CreateTextureFromSurface(IDirect3DRM* iface, LPDIRECTDRAWSURFACE pDDS, LPDIRECT3DRMTEXTURE * ppTexture)
278 {
279     IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
280
281     FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, pDDS, ppTexture);
282
283     return E_NOTIMPL;
284 }
285
286 static HRESULT WINAPI IDirect3DRMImpl_CreateShadow(IDirect3DRM* iface, LPDIRECT3DRMVISUAL pVisual, LPDIRECT3DRMLIGHT pLight, D3DVALUE px, D3DVALUE py, D3DVALUE pz, D3DVALUE nx, D3DVALUE ny, D3DVALUE nz, LPDIRECT3DRMVISUAL * ppVisual)
287 {
288     IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
289
290     FIXME("(%p/%p)->(%p,%p,%f,%f,%f,%f,%f,%f,%p): stub\n", iface, This, pVisual, pLight, px, py, pz, nx, ny, nz, ppVisual);
291
292     return E_NOTIMPL;
293 }
294
295 static HRESULT WINAPI IDirect3DRMImpl_CreateViewport(IDirect3DRM* iface, LPDIRECT3DRMDEVICE pDevice, LPDIRECT3DRMFRAME pFrame, DWORD xpos, DWORD ypos, DWORD width, DWORD height, LPDIRECT3DRMVIEWPORT * ppViewport)
296 {
297     IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
298
299     FIXME("(%p/%p)->(%p,%p,%d,%d,%d,%d,%p): partial stub\n", iface, This, pDevice, pFrame,
300           xpos, ypos, width, height, ppViewport);
301
302     return Direct3DRMViewport_create(&IID_IDirect3DRMViewport, (IUnknown**)ppViewport);
303 }
304
305 static HRESULT WINAPI IDirect3DRMImpl_CreateWrap(IDirect3DRM* iface, D3DRMWRAPTYPE type, LPDIRECT3DRMFRAME pFrame, D3DVALUE ox, D3DVALUE oy, D3DVALUE oz, D3DVALUE dx, D3DVALUE dy, D3DVALUE dz, D3DVALUE ux, D3DVALUE uy, D3DVALUE uz, D3DVALUE ou, D3DVALUE ov, D3DVALUE su, D3DVALUE sv, LPDIRECT3DRMWRAP * ppWrap)
306 {
307     IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
308
309     FIXME("(%p/%p)->(%d,%p,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%p): stub\n", iface, This, type, pFrame, ox, oy, oz, dx, dy, dz, ux, uy, uz, ou, ov, su, sv, ppWrap);
310
311     return E_NOTIMPL;
312 }
313
314 static HRESULT WINAPI IDirect3DRMImpl_CreateUserVisual(IDirect3DRM* iface, D3DRMUSERVISUALCALLBACK cb, LPVOID pArg, LPDIRECT3DRMUSERVISUAL * ppUserVisual)
315 {
316     IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
317
318     FIXME("(%p/%p)->(%p,%p,%p): stub\n", iface, This, cb, pArg, ppUserVisual);
319
320     return E_NOTIMPL;
321 }
322
323 static HRESULT WINAPI IDirect3DRMImpl_LoadTexture(IDirect3DRM* iface, const char * filename, LPDIRECT3DRMTEXTURE * ppTexture)
324 {
325     IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
326
327     FIXME("(%p/%p)->(%s,%p): stub\n", iface, This, filename, ppTexture);
328
329     return E_NOTIMPL;
330 }
331
332 static HRESULT WINAPI IDirect3DRMImpl_LoadTextureFromResource(IDirect3DRM* iface, HRSRC rs, LPDIRECT3DRMTEXTURE * ppTexture)
333 {
334     IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
335
336     FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, rs, ppTexture);
337
338     return E_NOTIMPL;
339 }
340
341 static HRESULT WINAPI IDirect3DRMImpl_SetSearchPath(IDirect3DRM* iface, LPCSTR path)
342 {
343     IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
344
345     FIXME("(%p/%p)->(%s): stub\n", iface, This, path);
346
347     return E_NOTIMPL;
348 }
349
350 static HRESULT WINAPI IDirect3DRMImpl_AddSearchPath(IDirect3DRM* iface, LPCSTR path)
351 {
352     IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
353
354     FIXME("(%p/%p)->(%s): stub\n", iface, This, path);
355
356     return E_NOTIMPL;
357 }
358
359 static HRESULT WINAPI IDirect3DRMImpl_GetSearchPath(IDirect3DRM* iface, DWORD *size_return, LPSTR path_return)
360 {
361     IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
362
363     FIXME("(%p/%p)->(%p,%s): stub\n", iface, This, size_return, path_return);
364
365     return E_NOTIMPL;
366 }
367
368 static HRESULT WINAPI IDirect3DRMImpl_SetDefaultTextureColors(IDirect3DRM* iface, DWORD nb_colors)
369 {
370     IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
371
372     FIXME("(%p/%p)->(%d): stub\n", iface, This, nb_colors);
373
374     return E_NOTIMPL;
375 }
376
377 static HRESULT WINAPI IDirect3DRMImpl_SetDefaultTextureShades(IDirect3DRM* iface, DWORD nb_shades)
378 {
379     IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
380
381     FIXME("(%p/%p)->(%d): stub\n", iface, This, nb_shades);
382
383     return E_NOTIMPL;
384 }
385
386 static HRESULT WINAPI IDirect3DRMImpl_GetDevices(IDirect3DRM* iface, LPDIRECT3DRMDEVICEARRAY * ppDeviceArray)
387 {
388     IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
389
390     FIXME("(%p/%p)->(%p): stub\n", iface, This, ppDeviceArray);
391
392     return E_NOTIMPL;
393 }
394
395 static HRESULT WINAPI IDirect3DRMImpl_GetNamedObject(IDirect3DRM* iface, const char * pName, LPDIRECT3DRMOBJECT * ppObject)
396 {
397     IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
398
399     FIXME("(%p/%p)->(%s,%p): stub\n", iface, This, pName, ppObject);
400
401     return E_NOTIMPL;
402 }
403
404 static HRESULT WINAPI IDirect3DRMImpl_EnumerateObjects(IDirect3DRM* iface, D3DRMOBJECTCALLBACK cb, LPVOID pArg)
405 {
406     IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
407
408     FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, cb, pArg);
409
410     return E_NOTIMPL;
411 }
412
413 static HRESULT WINAPI IDirect3DRMImpl_Load(IDirect3DRM* iface, LPVOID pObjSource, LPVOID pObjID, LPIID * ppGUIDs, DWORD nb_GUIDs, D3DRMLOADOPTIONS LOFlags, D3DRMLOADCALLBACK LoadProc, LPVOID pArgLP, D3DRMLOADTEXTURECALLBACK LoadTextureProc, LPVOID pArgLTP, LPDIRECT3DRMFRAME pParentFrame)
414 {
415     IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
416
417     FIXME("(%p/%p)->(%p,%p,%p,%d,%d,%p,%p,%p,%p,%p): stub\n", iface, This, pObjSource, pObjID, ppGUIDs, nb_GUIDs, LOFlags, LoadProc, pArgLP, LoadTextureProc, pArgLTP, pParentFrame);
418
419     return E_NOTIMPL;
420 }
421
422 static HRESULT WINAPI IDirect3DRMImpl_Tick(IDirect3DRM* iface, D3DVALUE tick)
423 {
424     IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
425
426     FIXME("(%p/%p)->(%f): stub\n", iface, This, tick);
427
428     return E_NOTIMPL;
429 }
430
431 static const struct IDirect3DRMVtbl Direct3DRM_Vtbl =
432 {
433     IDirect3DRMImpl_QueryInterface,
434     IDirect3DRMImpl_AddRef,
435     IDirect3DRMImpl_Release,
436     IDirect3DRMImpl_CreateObject,
437     IDirect3DRMImpl_CreateFrame,
438     IDirect3DRMImpl_CreateMesh,
439     IDirect3DRMImpl_CreateMeshBuilder,
440     IDirect3DRMImpl_CreateFace,
441     IDirect3DRMImpl_CreateAnimation,
442     IDirect3DRMImpl_CreateAnimationSet,
443     IDirect3DRMImpl_CreateTexture,
444     IDirect3DRMImpl_CreateLight,
445     IDirect3DRMImpl_CreateLightRGB,
446     IDirect3DRMImpl_Material,
447     IDirect3DRMImpl_CreateDevice,
448     IDirect3DRMImpl_CreateDeviceFromSurface,
449     IDirect3DRMImpl_CreateDeviceFromD3D,
450     IDirect3DRMImpl_CreateDeviceFromClipper,
451     IDirect3DRMImpl_CreateTextureFromSurface,
452     IDirect3DRMImpl_CreateShadow,
453     IDirect3DRMImpl_CreateViewport,
454     IDirect3DRMImpl_CreateWrap,
455     IDirect3DRMImpl_CreateUserVisual,
456     IDirect3DRMImpl_LoadTexture,
457     IDirect3DRMImpl_LoadTextureFromResource,
458     IDirect3DRMImpl_SetSearchPath,
459     IDirect3DRMImpl_AddSearchPath,
460     IDirect3DRMImpl_GetSearchPath,
461     IDirect3DRMImpl_SetDefaultTextureColors,
462     IDirect3DRMImpl_SetDefaultTextureShades,
463     IDirect3DRMImpl_GetDevices,
464     IDirect3DRMImpl_GetNamedObject,
465     IDirect3DRMImpl_EnumerateObjects,
466     IDirect3DRMImpl_Load,
467     IDirect3DRMImpl_Tick
468 };
469
470
471 /*** IUnknown methods ***/
472 static HRESULT WINAPI IDirect3DRM2Impl_QueryInterface(IDirect3DRM2* iface, REFIID riid,
473                                                       void** ppvObject)
474 {
475     IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
476     return IDirect3DRM_QueryInterface(&This->IDirect3DRM_iface, riid, ppvObject);
477 }
478
479 static ULONG WINAPI IDirect3DRM2Impl_AddRef(IDirect3DRM2* iface)
480 {
481     IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
482
483     TRACE("(%p/%p)\n", iface, This);
484
485     return InterlockedIncrement(&This->ref);
486 }
487
488 static ULONG WINAPI IDirect3DRM2Impl_Release(IDirect3DRM2* iface)
489 {
490     IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
491     ULONG ref = InterlockedDecrement(&This->ref);
492
493     TRACE("(%p/%p)\n", iface, This);
494
495     if (!ref)
496         HeapFree(GetProcessHeap(), 0, This);
497
498     return ref;
499 }
500
501 /*** IDirect3DRM2 methods ***/
502 static HRESULT WINAPI IDirect3DRM2Impl_CreateObject(IDirect3DRM2* iface, REFCLSID rclsid,
503                                                     LPUNKNOWN pUnkOuter, REFIID riid,
504                                                     LPVOID *ppvObj)
505 {
506     IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
507
508     FIXME("(%p/%p)->(%s,%p,%s,%p): stub\n", iface, This, debugstr_guid(rclsid), pUnkOuter,
509                                             debugstr_guid(riid), ppvObj);
510
511     return E_NOTIMPL;
512 }
513
514 static HRESULT WINAPI IDirect3DRM2Impl_CreateFrame(IDirect3DRM2* iface,
515                                                    LPDIRECT3DRMFRAME pFrameParent,
516                                                    LPDIRECT3DRMFRAME2 * ppFrame)
517 {
518     IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
519
520     TRACE("(%p/%p)->(%p,%p)\n", iface, This, pFrameParent, ppFrame);
521
522     if (pFrameParent)
523         FIXME("(%p/%p): Parent frame not yet supported\n", iface, This);
524
525     return Direct3DRMFrame_create(&IID_IDirect3DRMFrame2, (IUnknown**)ppFrame);
526 }
527
528 static HRESULT WINAPI IDirect3DRM2Impl_CreateMesh(IDirect3DRM2* iface, LPDIRECT3DRMMESH * ppMesh)
529 {
530     IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
531
532     FIXME("(%p/%p)->(%p): stub\n", iface, This, ppMesh);
533
534     return E_NOTIMPL;
535 }
536
537 static HRESULT WINAPI IDirect3DRM2Impl_CreateMeshBuilder(IDirect3DRM2* iface,
538                                                          LPDIRECT3DRMMESHBUILDER2 * ppMeshBuilder)
539 {
540     IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
541
542     TRACE("(%p/%p)->(%p)\n", iface, This, ppMeshBuilder);
543
544     return Direct3DRMMeshBuilder_create(&IID_IDirect3DRMMeshBuilder2, (IUnknown**)ppMeshBuilder);
545 }
546
547 static HRESULT WINAPI IDirect3DRM2Impl_CreateFace(IDirect3DRM2* iface, LPDIRECT3DRMFACE * ppFace)
548 {
549     IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
550
551     FIXME("(%p/%p)->(%p): stub\n", iface, This, ppFace);
552
553     return E_NOTIMPL;
554 }
555
556 static HRESULT WINAPI IDirect3DRM2Impl_CreateAnimation(IDirect3DRM2* iface,
557                                                        LPDIRECT3DRMANIMATION * ppAnimation)
558 {
559     IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
560
561     FIXME("(%p/%p)->(%p): stub\n", iface, This, ppAnimation);
562
563     return E_NOTIMPL;
564 }
565
566 static HRESULT WINAPI IDirect3DRM2Impl_CreateAnimationSet(IDirect3DRM2* iface,
567                                                           LPDIRECT3DRMANIMATIONSET * ppAnimationSet)
568 {
569     IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
570
571     FIXME("(%p/%p)->(%p): stub\n", iface, This, ppAnimationSet);
572
573     return E_NOTIMPL;
574 }
575
576 static HRESULT WINAPI IDirect3DRM2Impl_CreateTexture(IDirect3DRM2* iface, LPD3DRMIMAGE pImage,
577                                                      LPDIRECT3DRMTEXTURE2 * ppTexture)
578 {
579     IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
580
581     FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, pImage, ppTexture);
582
583     return E_NOTIMPL;
584 }
585
586 static HRESULT WINAPI IDirect3DRM2Impl_CreateLight(IDirect3DRM2* iface, D3DRMLIGHTTYPE type,
587                                                    D3DCOLOR color, LPDIRECT3DRMLIGHT * ppLight)
588 {
589     IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
590
591     FIXME("(%p/%p)->(%d,%d,%p): stub\n", iface, This, type, color, ppLight);
592
593     return E_NOTIMPL;
594 }
595
596 static HRESULT WINAPI IDirect3DRM2Impl_CreateLightRGB(IDirect3DRM2* iface, D3DRMLIGHTTYPE type,
597                                                       D3DVALUE red, D3DVALUE green, D3DVALUE blue,
598                                                       LPDIRECT3DRMLIGHT * ppLight)
599 {
600     IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
601
602     FIXME("(%p/%p)->(%d,%f,%f,%f,%p): stub\n", iface, This, type, red, green, blue, ppLight);
603
604     return E_NOTIMPL;
605 }
606
607 static HRESULT WINAPI IDirect3DRM2Impl_Material(IDirect3DRM2* iface, D3DVALUE m,
608                                                 LPDIRECT3DRMMATERIAL * ppMaterial)
609 {
610     IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
611
612     FIXME("(%p/%p)->(%f,%p): stub\n", iface, This, m, ppMaterial);
613
614     return E_NOTIMPL;
615 }
616
617 static HRESULT WINAPI IDirect3DRM2Impl_CreateDevice(IDirect3DRM2* iface, DWORD width, DWORD height,
618                                                     LPDIRECT3DRMDEVICE2 * ppDevice)
619 {
620     IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
621
622     FIXME("(%p/%p)->(%u,%u,%p): partial stub\n", iface, This, width, height, ppDevice);
623
624     return Direct3DRMDevice_create(&IID_IDirect3DRMDevice2, (IUnknown**)ppDevice);
625 }
626
627 static HRESULT WINAPI IDirect3DRM2Impl_CreateDeviceFromSurface(IDirect3DRM2* iface, LPGUID pGUID,
628                                                                LPDIRECTDRAW pDD,
629                                                                LPDIRECTDRAWSURFACE pDDSBack,
630                                                                LPDIRECT3DRMDEVICE2 * ppDevice)
631 {
632     IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
633
634     FIXME("(%p/%p)->(%s,%p,%p,%p): partial stub\n", iface, This, debugstr_guid(pGUID),
635           pDD, pDDSBack, ppDevice);
636
637     return Direct3DRMDevice_create(&IID_IDirect3DRMDevice2, (IUnknown**)ppDevice);
638 }
639
640 static HRESULT WINAPI IDirect3DRM2Impl_CreateDeviceFromD3D(IDirect3DRM2* iface, LPDIRECT3D2 pD3D,
641                                                            LPDIRECT3DDEVICE2 pD3DDev,
642                                                            LPDIRECT3DRMDEVICE2 * ppDevice)
643 {
644     IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
645
646     FIXME("(%p/%p)->(%p,%p,%p): partial stub\n", iface, This, pD3D, pD3DDev, ppDevice);
647
648     return Direct3DRMDevice_create(&IID_IDirect3DRMDevice2, (IUnknown**)ppDevice);
649 }
650
651 static HRESULT WINAPI IDirect3DRM2Impl_CreateDeviceFromClipper(IDirect3DRM2* iface,
652                                                                LPDIRECTDRAWCLIPPER pDDClipper,
653                                                                LPGUID pGUID, int width, int height,
654                                                                LPDIRECT3DRMDEVICE2 * ppDevice)
655 {
656     IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
657
658     FIXME("(%p/%p)->(%p,%s,%d,%d,%p): partial stub\n", iface, This, pDDClipper,
659           debugstr_guid(pGUID), width, height, ppDevice);
660
661     return Direct3DRMDevice_create(&IID_IDirect3DRMDevice2, (IUnknown**)ppDevice);
662 }
663
664 static HRESULT WINAPI IDirect3DRM2Impl_CreateTextureFromSurface(IDirect3DRM2* iface,
665                                                                 LPDIRECTDRAWSURFACE pDDS,
666                                                                 LPDIRECT3DRMTEXTURE2 * ppTexture)
667 {
668     IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
669
670     FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, pDDS, ppTexture);
671
672     return E_NOTIMPL;
673 }
674
675 static HRESULT WINAPI IDirect3DRM2Impl_CreateShadow(IDirect3DRM2* iface, LPDIRECT3DRMVISUAL pVisual,
676                                                     LPDIRECT3DRMLIGHT pLight,
677                                                     D3DVALUE px, D3DVALUE py, D3DVALUE pz,
678                                                     D3DVALUE nx, D3DVALUE ny, D3DVALUE nz,
679                                                     LPDIRECT3DRMVISUAL * ppVisual)
680 {
681     IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
682
683     FIXME("(%p/%p)->(%p,%p,%f,%f,%f,%f,%f,%f,%p): stub\n", iface, This, pVisual, pLight, px, py, pz,
684                                                            nx, ny, nz, ppVisual);
685
686     return E_NOTIMPL;
687 }
688
689 static HRESULT WINAPI IDirect3DRM2Impl_CreateViewport(IDirect3DRM2* iface,
690                                                       LPDIRECT3DRMDEVICE pDevice,
691                                                       LPDIRECT3DRMFRAME pFrame,
692                                                       DWORD xpos, DWORD ypos,
693                                                       DWORD width, DWORD height,
694                                                       LPDIRECT3DRMVIEWPORT * ppViewport)
695 {
696     IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
697
698     FIXME("(%p/%p)->(%p,%p,%d,%d,%d,%d,%p): partial stub\n", iface, This, pDevice, pFrame,
699           xpos, ypos, width, height, ppViewport);
700
701     return Direct3DRMViewport_create(&IID_IDirect3DRMViewport, (IUnknown**)ppViewport);
702 }
703
704 static HRESULT WINAPI IDirect3DRM2Impl_CreateWrap(IDirect3DRM2* iface, D3DRMWRAPTYPE type,
705                                                   LPDIRECT3DRMFRAME pFrame,
706                                                   D3DVALUE ox, D3DVALUE oy, D3DVALUE oz,
707                                                   D3DVALUE dx, D3DVALUE dy, D3DVALUE dz,
708                                                   D3DVALUE ux, D3DVALUE uy, D3DVALUE uz,
709                                                   D3DVALUE ou, D3DVALUE ov, D3DVALUE su,
710                                                   D3DVALUE sv, LPDIRECT3DRMWRAP * ppWrap)
711 {
712     IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
713
714     FIXME("(%p/%p)->(%d,%p,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%p): stub\n", iface, This, type,
715           pFrame, ox, oy, oz, dx, dy, dz, ux, uy, uz, ou, ov, su, sv, ppWrap);
716
717     return E_NOTIMPL;
718 }
719
720 static HRESULT WINAPI IDirect3DRM2Impl_CreateUserVisual(IDirect3DRM2* iface,
721                                                         D3DRMUSERVISUALCALLBACK cb, LPVOID pArg,
722                                                         LPDIRECT3DRMUSERVISUAL * ppUserVisual)
723 {
724     IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
725
726     FIXME("(%p/%p)->(%p,%p,%p): stub\n", iface, This, cb, pArg, ppUserVisual);
727
728     return E_NOTIMPL;
729 }
730
731 static HRESULT WINAPI IDirect3DRM2Impl_LoadTexture(IDirect3DRM2* iface, const char * filename,
732                                                    LPDIRECT3DRMTEXTURE2 * ppTexture)
733 {
734     IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
735
736     FIXME("(%p/%p)->(%s,%p): stub\n", iface, This, filename, ppTexture);
737
738     return E_NOTIMPL;
739 }
740
741 static HRESULT WINAPI IDirect3DRM2Impl_LoadTextureFromResource(IDirect3DRM2* iface, HMODULE hModule,
742                                                                LPCSTR strName, LPCSTR strType,
743                                                                LPDIRECT3DRMTEXTURE2 * ppTexture)
744 {
745     IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
746
747     FIXME("(%p/%p)->(%p,%p,%p,%p): stub\n", iface, This, hModule, strName, strType, ppTexture);
748
749     return E_NOTIMPL;
750 }
751
752 static HRESULT WINAPI IDirect3DRM2Impl_SetSearchPath(IDirect3DRM2* iface, LPCSTR path)
753 {
754     IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
755
756     FIXME("(%p/%p)->(%s): stub\n", iface, This, path);
757
758     return E_NOTIMPL;
759 }
760
761 static HRESULT WINAPI IDirect3DRM2Impl_AddSearchPath(IDirect3DRM2* iface, LPCSTR path)
762 {
763     IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
764
765     FIXME("(%p/%p)->(%s): stub\n", iface, This, path);
766
767     return E_NOTIMPL;
768 }
769
770 static HRESULT WINAPI IDirect3DRM2Impl_GetSearchPath(IDirect3DRM2* iface, DWORD *size_return,
771                                                      LPSTR path_return)
772 {
773     IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
774
775     FIXME("(%p/%p)->(%p,%s): stub\n", iface, This, size_return, path_return);
776
777     return E_NOTIMPL;
778 }
779
780 static HRESULT WINAPI IDirect3DRM2Impl_SetDefaultTextureColors(IDirect3DRM2* iface, DWORD nb_colors)
781 {
782     IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
783
784     FIXME("(%p/%p)->(%d): stub\n", iface, This, nb_colors);
785
786     return E_NOTIMPL;
787 }
788
789 static HRESULT WINAPI IDirect3DRM2Impl_SetDefaultTextureShades(IDirect3DRM2* iface, DWORD nb_shades)
790 {
791     IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
792
793     FIXME("(%p/%p)->(%d): stub\n", iface, This, nb_shades);
794
795     return E_NOTIMPL;
796 }
797
798 static HRESULT WINAPI IDirect3DRM2Impl_GetDevices(IDirect3DRM2* iface,
799                                                   LPDIRECT3DRMDEVICEARRAY * ppDeviceArray)
800 {
801     IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
802
803     FIXME("(%p/%p)->(%p): stub\n", iface, This, ppDeviceArray);
804
805     return E_NOTIMPL;
806 }
807
808 static HRESULT WINAPI IDirect3DRM2Impl_GetNamedObject(IDirect3DRM2* iface, const char * pName,
809                                                       LPDIRECT3DRMOBJECT * ppObject)
810 {
811     IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
812
813     FIXME("(%p/%p)->(%s,%p): stub\n", iface, This, pName, ppObject);
814
815     return E_NOTIMPL;
816 }
817
818 static HRESULT WINAPI IDirect3DRM2Impl_EnumerateObjects(IDirect3DRM2* iface, D3DRMOBJECTCALLBACK cb,
819                                                         LPVOID pArg)
820 {
821     IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
822
823     FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, cb, pArg);
824
825     return E_NOTIMPL;
826 }
827
828 static HRESULT WINAPI IDirect3DRM2Impl_Load(IDirect3DRM2* iface, LPVOID pObjSource, LPVOID pObjID,
829                                             LPIID * ppGUIDs, DWORD nb_GUIDs,
830                                             D3DRMLOADOPTIONS LOFlags, D3DRMLOADCALLBACK LoadProc,
831                                             LPVOID pArgLP, D3DRMLOADTEXTURECALLBACK LoadTextureProc,
832                                             LPVOID pArgLTP, LPDIRECT3DRMFRAME pParentFrame)
833 {
834     IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
835
836     FIXME("(%p/%p)->(%p,%p,%p,%d,%d,%p,%p,%p,%p,%p): stub\n", iface, This, pObjSource, pObjID,
837           ppGUIDs, nb_GUIDs, LOFlags, LoadProc, pArgLP, LoadTextureProc, pArgLTP, pParentFrame);
838
839     return E_NOTIMPL;
840 }
841
842 static HRESULT WINAPI IDirect3DRM2Impl_Tick(IDirect3DRM2* iface, D3DVALUE tick)
843 {
844     IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
845
846     FIXME("(%p/%p)->(%f): stub\n", iface, This, tick);
847
848     return E_NOTIMPL;
849 }
850
851 static HRESULT WINAPI IDirect3DRM2Impl_CreateProgressiveMesh(IDirect3DRM2* iface,
852                                                              LPDIRECT3DRMPROGRESSIVEMESH * ppMesh)
853 {
854     IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
855
856     FIXME("(%p/%p)->(%p): stub\n", iface, This, ppMesh);
857
858     return E_NOTIMPL;
859 }
860
861 static const struct IDirect3DRM2Vtbl Direct3DRM2_Vtbl =
862 {
863     IDirect3DRM2Impl_QueryInterface,
864     IDirect3DRM2Impl_AddRef,
865     IDirect3DRM2Impl_Release,
866     IDirect3DRM2Impl_CreateObject,
867     IDirect3DRM2Impl_CreateFrame,
868     IDirect3DRM2Impl_CreateMesh,
869     IDirect3DRM2Impl_CreateMeshBuilder,
870     IDirect3DRM2Impl_CreateFace,
871     IDirect3DRM2Impl_CreateAnimation,
872     IDirect3DRM2Impl_CreateAnimationSet,
873     IDirect3DRM2Impl_CreateTexture,
874     IDirect3DRM2Impl_CreateLight,
875     IDirect3DRM2Impl_CreateLightRGB,
876     IDirect3DRM2Impl_Material,
877     IDirect3DRM2Impl_CreateDevice,
878     IDirect3DRM2Impl_CreateDeviceFromSurface,
879     IDirect3DRM2Impl_CreateDeviceFromD3D,
880     IDirect3DRM2Impl_CreateDeviceFromClipper,
881     IDirect3DRM2Impl_CreateTextureFromSurface,
882     IDirect3DRM2Impl_CreateShadow,
883     IDirect3DRM2Impl_CreateViewport,
884     IDirect3DRM2Impl_CreateWrap,
885     IDirect3DRM2Impl_CreateUserVisual,
886     IDirect3DRM2Impl_LoadTexture,
887     IDirect3DRM2Impl_LoadTextureFromResource,
888     IDirect3DRM2Impl_SetSearchPath,
889     IDirect3DRM2Impl_AddSearchPath,
890     IDirect3DRM2Impl_GetSearchPath,
891     IDirect3DRM2Impl_SetDefaultTextureColors,
892     IDirect3DRM2Impl_SetDefaultTextureShades,
893     IDirect3DRM2Impl_GetDevices,
894     IDirect3DRM2Impl_GetNamedObject,
895     IDirect3DRM2Impl_EnumerateObjects,
896     IDirect3DRM2Impl_Load,
897     IDirect3DRM2Impl_Tick,
898     IDirect3DRM2Impl_CreateProgressiveMesh
899 };
900
901
902 /*** IUnknown methods ***/
903 static HRESULT WINAPI IDirect3DRM3Impl_QueryInterface(IDirect3DRM3* iface, REFIID riid,
904                                                       void** ppvObject)
905 {
906     IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
907     return IDirect3DRM_QueryInterface(&This->IDirect3DRM_iface, riid, ppvObject);
908 }
909
910 static ULONG WINAPI IDirect3DRM3Impl_AddRef(IDirect3DRM3* iface)
911 {
912     IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
913
914     TRACE("(%p/%p)\n", iface, This);
915
916     return InterlockedIncrement(&This->ref);
917 }
918
919 static ULONG WINAPI IDirect3DRM3Impl_Release(IDirect3DRM3* iface)
920 {
921     IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
922     ULONG ref = InterlockedDecrement(&This->ref);
923
924     TRACE("(%p/%p)\n", iface, This);
925
926     if (!ref)
927         HeapFree(GetProcessHeap(), 0, This);
928
929     return ref;
930 }
931
932 /*** IDirect3DRM3 methods ***/
933 static HRESULT WINAPI IDirect3DRM3Impl_CreateObject(IDirect3DRM3* iface, REFCLSID rclsid,
934                                                     LPUNKNOWN unkwn, REFIID riid, LPVOID* object)
935 {
936     IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
937
938     FIXME("(%p/%p)->(%s,%p,%s,%p): stub\n", iface, This, debugstr_guid(rclsid), unkwn,
939           debugstr_guid(riid), object);
940
941     return E_NOTIMPL;
942 }
943
944 static HRESULT WINAPI IDirect3DRM3Impl_CreateFrame(IDirect3DRM3* iface,
945                                                    LPDIRECT3DRMFRAME3 FrameParent,
946                                                    LPDIRECT3DRMFRAME3* Frame)
947 {
948     IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
949
950     TRACE("(%p/%p)->(%p,%p)\n", iface, This, FrameParent, Frame);
951
952     if (FrameParent)
953         FIXME("(%p/%p): Parent frame not yet supported\n", iface, This);
954
955     return Direct3DRMFrame_create(&IID_IDirect3DRMFrame3, (IUnknown**)Frame);
956 }
957
958 static HRESULT WINAPI IDirect3DRM3Impl_CreateMesh(IDirect3DRM3* iface, LPDIRECT3DRMMESH* Mesh)
959 {
960     IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
961
962     FIXME("(%p/%p)->(%p): stub\n", iface, This, Mesh);
963
964     return E_NOTIMPL;
965 }
966
967 static HRESULT WINAPI IDirect3DRM3Impl_CreateMeshBuilder(IDirect3DRM3* iface,
968                                                          LPDIRECT3DRMMESHBUILDER3* ppMeshBuilder)
969 {
970     IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
971
972     TRACE("(%p/%p)->(%p)\n", iface, This, ppMeshBuilder);
973
974     return Direct3DRMMeshBuilder_create(&IID_IDirect3DRMMeshBuilder3, (IUnknown**)ppMeshBuilder);
975 }
976
977 static HRESULT WINAPI IDirect3DRM3Impl_CreateFace(IDirect3DRM3* iface, LPDIRECT3DRMFACE2* Face)
978 {
979     IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
980
981     FIXME("(%p/%p)->(%p): stub\n", iface, This, Face);
982
983     return E_NOTIMPL;
984 }
985
986 static HRESULT WINAPI IDirect3DRM3Impl_CreateAnimation(IDirect3DRM3* iface,
987                                                        LPDIRECT3DRMANIMATION2* Animation)
988 {
989     IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
990
991     FIXME("(%p/%p)->(%p): stub\n", iface, This, Animation);
992
993     return E_NOTIMPL;
994 }
995
996 static HRESULT WINAPI IDirect3DRM3Impl_CreateAnimationSet(IDirect3DRM3* iface,
997                                                           LPDIRECT3DRMANIMATIONSET2* AnimationSet)
998 {
999     IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1000
1001     FIXME("(%p/%p)->(%p): stub\n", iface, This, AnimationSet);
1002
1003     return E_NOTIMPL;
1004 }
1005
1006 static HRESULT WINAPI IDirect3DRM3Impl_CreateTexture(IDirect3DRM3* iface, LPD3DRMIMAGE Image,
1007                                                      LPDIRECT3DRMTEXTURE3* Texture)
1008 {
1009     IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1010
1011     FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, Image, Texture);
1012
1013     return E_NOTIMPL;
1014 }
1015
1016 static HRESULT WINAPI IDirect3DRM3Impl_CreateLight(IDirect3DRM3* iface, D3DRMLIGHTTYPE type,
1017                                                    D3DCOLOR color, LPDIRECT3DRMLIGHT* Light)
1018 {
1019     IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1020
1021     FIXME("(%p/%p)->(%d,%d,%p): stub\n", iface, This, type, color, Light);
1022
1023     return E_NOTIMPL;
1024 }
1025
1026 static HRESULT WINAPI IDirect3DRM3Impl_CreateLightRGB(IDirect3DRM3* iface, D3DRMLIGHTTYPE type,
1027                                                       D3DVALUE red, D3DVALUE green, D3DVALUE blue,
1028                                                       LPDIRECT3DRMLIGHT* Light)
1029 {
1030     IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1031
1032     FIXME("(%p/%p)->(%d,%f,%f,%f,%p): stub\n", iface, This, type, red, green, blue, Light);
1033
1034     return E_NOTIMPL;
1035 }
1036
1037 static HRESULT WINAPI IDirect3DRM3Impl_Material(IDirect3DRM3* iface, D3DVALUE m,
1038                                                 LPDIRECT3DRMMATERIAL2* Material)
1039 {
1040     IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1041
1042     FIXME("(%p/%p)->(%f,%p): stub\n", iface, This, m, Material);
1043
1044     return E_NOTIMPL;
1045 }
1046
1047 static HRESULT WINAPI IDirect3DRM3Impl_CreateDevice(IDirect3DRM3* iface, DWORD width, DWORD height,
1048                                                     LPDIRECT3DRMDEVICE3* device)
1049 {
1050     IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1051
1052     FIXME("(%p/%p)->(%d,%d,%p): partial stub\n", iface, This, width, height, device);
1053
1054     return Direct3DRMDevice_create(&IID_IDirect3DRMDevice3, (IUnknown**)device);
1055 }
1056
1057 static HRESULT WINAPI IDirect3DRM3Impl_CreateDeviceFromSurface(IDirect3DRM3* iface, LPGUID pGUID,
1058                                                                LPDIRECTDRAW dd,
1059                                                                LPDIRECTDRAWSURFACE back,
1060                                                                LPDIRECT3DRMDEVICE3* device)
1061 {
1062     IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1063
1064     FIXME("(%p/%p)->(%s,%p,%p,%p): partial stub\n", iface, This, debugstr_guid(pGUID), dd, back, device);
1065
1066     return Direct3DRMDevice_create(&IID_IDirect3DRMDevice3, (IUnknown**)device);
1067 }
1068
1069 static HRESULT WINAPI IDirect3DRM3Impl_CreateDeviceFromD3D(IDirect3DRM3* iface, LPDIRECT3D2 d3d,
1070                                                            LPDIRECT3DDEVICE2 d3ddev,
1071                                                            LPDIRECT3DRMDEVICE3* device)
1072 {
1073     IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1074
1075     FIXME("(%p/%p)->(%p,%p,%p): partial stub\n", iface, This, d3d, d3ddev, device);
1076
1077     return Direct3DRMDevice_create(&IID_IDirect3DRMDevice3, (IUnknown**)device);
1078 }
1079
1080 static HRESULT WINAPI IDirect3DRM3Impl_CreateDeviceFromClipper(IDirect3DRM3* iface,
1081                                                                LPDIRECTDRAWCLIPPER clipper,
1082                                                                LPGUID GUID, int width, int height,
1083                                                                LPDIRECT3DRMDEVICE3* device)
1084 {
1085     IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1086
1087     FIXME("(%p/%p)->(%p,%s,%d,%d,%p): partial stub\n", iface, This, clipper, debugstr_guid(GUID),
1088           width, height, device);
1089
1090     return Direct3DRMDevice_create(&IID_IDirect3DRMDevice3, (IUnknown**)device);
1091 }
1092
1093 static HRESULT WINAPI IDirect3DRM3Impl_CreateShadow(IDirect3DRM3* iface, LPUNKNOWN Visual1,
1094                                                     LPDIRECT3DRMLIGHT Light, D3DVALUE px,
1095                                                     D3DVALUE py, D3DVALUE pz, D3DVALUE nx,
1096                                                     D3DVALUE ny, D3DVALUE nz,
1097                                                     LPDIRECT3DRMSHADOW2* Visual2)
1098 {
1099     IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1100
1101     FIXME("(%p/%p)->(%p,%p,%f,%f,%f,%f,%f,%f,%p): stub\n", iface, This, Visual1, Light, px, py, pz,
1102           nx, ny, nz, Visual2);
1103
1104     return E_NOTIMPL;
1105 }
1106
1107 static HRESULT WINAPI IDirect3DRM3Impl_CreateTextureFromSurface(IDirect3DRM3* iface,
1108                                                                 LPDIRECTDRAWSURFACE surface,
1109                                                                 LPDIRECT3DRMTEXTURE3* texture)
1110 {
1111     IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1112
1113     FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, surface, texture);
1114
1115     return E_NOTIMPL;
1116 }
1117
1118 static HRESULT WINAPI IDirect3DRM3Impl_CreateViewport(IDirect3DRM3* iface,
1119                                                       LPDIRECT3DRMDEVICE3 Device,
1120                                                       LPDIRECT3DRMFRAME3 frame, DWORD xpos,
1121                                                       DWORD ypos, DWORD width, DWORD height,
1122                                                       LPDIRECT3DRMVIEWPORT2* viewport)
1123 {
1124     IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1125
1126     FIXME("(%p/%p)->(%p,%p,%d,%d,%d,%d,%p): stub\n", iface, This, Device, frame, xpos, ypos, width,
1127           height, viewport);
1128
1129     return Direct3DRMViewport_create(&IID_IDirect3DRMViewport2, (IUnknown**)viewport);
1130 }
1131
1132 static HRESULT WINAPI IDirect3DRM3Impl_CreateWrap(IDirect3DRM3* iface, D3DRMWRAPTYPE type,
1133                                                   LPDIRECT3DRMFRAME3 frame,
1134                                                   D3DVALUE ox, D3DVALUE oy, D3DVALUE oz,
1135                                                   D3DVALUE dx, D3DVALUE dy, D3DVALUE dz,
1136                                                   D3DVALUE ux, D3DVALUE uy, D3DVALUE uz,
1137                                                   D3DVALUE ou, D3DVALUE ov, D3DVALUE su,
1138                                                   D3DVALUE sv, LPDIRECT3DRMWRAP* wrap)
1139 {
1140     IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1141
1142     FIXME("(%p/%p)->(%d,%p,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%p): stub\n", iface, This, type,
1143           frame, ox, oy, oz, dx, dy, dz, ux, uy, uz, ou, ov, su, sv, wrap);
1144
1145     return E_NOTIMPL;
1146 }
1147
1148 static HRESULT WINAPI IDirect3DRM3Impl_CreateUserVisual(IDirect3DRM3* iface,
1149                                                         D3DRMUSERVISUALCALLBACK cb, LPVOID arg,
1150                                                         LPDIRECT3DRMUSERVISUAL* UserVisual)
1151 {
1152     IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1153
1154     FIXME("(%p/%p)->(%p,%p,%p): stub\n", iface, This, cb, arg, UserVisual);
1155
1156     return E_NOTIMPL;
1157 }
1158
1159 static HRESULT WINAPI IDirect3DRM3Impl_LoadTexture(IDirect3DRM3* iface, const char* filename,
1160                                                    LPDIRECT3DRMTEXTURE3* Texture)
1161 {
1162     IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1163
1164     FIXME("(%p/%p)->(%s,%p): stub\n", iface, This, filename, Texture);
1165
1166     return E_NOTIMPL;
1167 }
1168
1169 static HRESULT WINAPI IDirect3DRM3Impl_LoadTextureFromResource(IDirect3DRM3* iface, HMODULE mod,
1170                                                                LPCSTR strName, LPCSTR strType,
1171                                                                LPDIRECT3DRMTEXTURE3 * ppTexture)
1172 {
1173     IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1174
1175     FIXME("(%p/%p)->(%p,%p,%p,%p): stub\n", iface, This, mod, strName, strType, ppTexture);
1176
1177     return E_NOTIMPL;
1178 }
1179
1180 static HRESULT WINAPI IDirect3DRM3Impl_SetSearchPath(IDirect3DRM3* iface, LPCSTR path)
1181 {
1182     IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1183
1184     FIXME("(%p/%p)->(%s): stub\n", iface, This, path);
1185
1186     return E_NOTIMPL;
1187 }
1188
1189 static HRESULT WINAPI IDirect3DRM3Impl_AddSearchPath(IDirect3DRM3* iface, LPCSTR path)
1190 {
1191     IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1192
1193     FIXME("(%p/%p)->(%s): stub\n", iface, This, path);
1194
1195     return E_NOTIMPL;
1196 }
1197
1198 static HRESULT WINAPI IDirect3DRM3Impl_GetSearchPath(IDirect3DRM3* iface, DWORD* size_return,
1199                                                      LPSTR path_return)
1200 {
1201     IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1202
1203     FIXME("(%p/%p)->(%p,%s): stub\n", iface, This, size_return, path_return);
1204
1205     return E_NOTIMPL;
1206 }
1207
1208 static HRESULT WINAPI IDirect3DRM3Impl_SetDefaultTextureColors(IDirect3DRM3* iface, DWORD nb_colors)
1209 {
1210     IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1211
1212     FIXME("(%p/%p)->(%d): stub\n", iface, This, nb_colors);
1213
1214     return E_NOTIMPL;
1215 }
1216
1217 static HRESULT WINAPI IDirect3DRM3Impl_SetDefaultTextureShades(IDirect3DRM3* iface, DWORD nb_shades)
1218 {
1219     IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1220
1221     FIXME("(%p/%p)->(%d): stub\n", iface, This, nb_shades);
1222
1223     return E_NOTIMPL;
1224 }
1225
1226 static HRESULT WINAPI IDirect3DRM3Impl_GetDevices(IDirect3DRM3* iface,
1227                                                   LPDIRECT3DRMDEVICEARRAY* DeviceArray)
1228 {
1229     IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1230
1231     FIXME("(%p/%p)->(%p): stub\n", iface, This, DeviceArray);
1232
1233     return E_NOTIMPL;
1234 }
1235
1236 static HRESULT WINAPI IDirect3DRM3Impl_GetNamedObject(IDirect3DRM3* iface, const char* Name,
1237                                                       LPDIRECT3DRMOBJECT* Object)
1238 {
1239     IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1240
1241     FIXME("(%p/%p)->(%s,%p): stub\n", iface, This, Name, Object);
1242
1243     return E_NOTIMPL;
1244 }
1245
1246 static HRESULT WINAPI IDirect3DRM3Impl_EnumerateObjects(IDirect3DRM3* iface, D3DRMOBJECTCALLBACK cb,
1247                                                         LPVOID arg)
1248 {
1249     IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1250
1251     FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, cb, arg);
1252
1253     return E_NOTIMPL;
1254 }
1255
1256 static HRESULT WINAPI IDirect3DRM3Impl_Load(IDirect3DRM3* iface, LPVOID ObjSource, LPVOID ObjID,
1257                                             LPIID* GUIDs, DWORD nb_GUIDs, D3DRMLOADOPTIONS LOFlags,
1258                                             D3DRMLOADCALLBACK LoadProc, LPVOID ArgLP,
1259                                             D3DRMLOADTEXTURECALLBACK LoadTextureProc, LPVOID ArgLTP,
1260                                             LPDIRECT3DRMFRAME3 ParentFrame)
1261 {
1262     IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1263
1264     FIXME("(%p/%p)->(%p,%p,%p,%d,%d,%p,%p,%p,%p,%p): stub\n", iface, This, ObjSource, ObjID, GUIDs,
1265           nb_GUIDs, LOFlags, LoadProc, ArgLP, LoadTextureProc, ArgLTP, ParentFrame);
1266
1267     return E_NOTIMPL;
1268 }
1269
1270 static HRESULT WINAPI IDirect3DRM3Impl_Tick(IDirect3DRM3* iface, D3DVALUE tick)
1271 {
1272     IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1273
1274     FIXME("(%p/%p)->(%f): stub\n", iface, This, tick);
1275
1276     return E_NOTIMPL;
1277 }
1278
1279 static HRESULT WINAPI IDirect3DRM3Impl_CreateProgressiveMesh(IDirect3DRM3* iface,
1280                                                              LPDIRECT3DRMPROGRESSIVEMESH Mesh)
1281 {
1282     IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1283
1284     FIXME("(%p/%p)->(%p): stub\n", iface, This, Mesh);
1285
1286     return E_NOTIMPL;
1287 }
1288
1289 static HRESULT WINAPI IDirect3DRM3Impl_RegisterClient(IDirect3DRM3* iface, REFGUID rguid,
1290                                                       LPDWORD id)
1291 {
1292     IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1293
1294     FIXME("(%p/%p)->(%s, %p): stub\n", iface, This, debugstr_guid(rguid), id);
1295
1296     return E_NOTIMPL;
1297 }
1298
1299 static HRESULT WINAPI IDirect3DRM3Impl_UnregisterClient(IDirect3DRM3* iface, REFGUID rguid)
1300 {
1301     IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1302
1303     FIXME("(%p/%p)->(%s): stub\n", iface, This, debugstr_guid(rguid));
1304
1305     return E_NOTIMPL;
1306 }
1307
1308 static HRESULT WINAPI IDirect3DRM3Impl_CreateClippedVisual(IDirect3DRM3* iface,
1309                                                            LPDIRECT3DRMVISUAL vis,
1310                                                            LPDIRECT3DRMCLIPPEDVISUAL* clippedvis)
1311 {
1312     IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1313
1314     FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, vis, clippedvis);
1315
1316     return E_NOTIMPL;
1317 }
1318
1319 static HRESULT WINAPI IDirect3DRM3Impl_SetOptions(IDirect3DRM3* iface, DWORD opt)
1320 {
1321     IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1322
1323     FIXME("(%p/%p)->(%d): stub\n", iface, This, opt);
1324
1325     return E_NOTIMPL;
1326 }
1327
1328 static HRESULT WINAPI IDirect3DRM3Impl_GetOptions(IDirect3DRM3* iface, LPDWORD opt)
1329 {
1330     IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
1331
1332     FIXME("(%p/%p)->(%p): stub\n", iface, This, opt);
1333
1334     return E_NOTIMPL;
1335 }
1336
1337 static const struct IDirect3DRM3Vtbl Direct3DRM3_Vtbl =
1338 {
1339     IDirect3DRM3Impl_QueryInterface,
1340     IDirect3DRM3Impl_AddRef,
1341     IDirect3DRM3Impl_Release,
1342     IDirect3DRM3Impl_CreateObject,
1343     IDirect3DRM3Impl_CreateFrame,
1344     IDirect3DRM3Impl_CreateMesh,
1345     IDirect3DRM3Impl_CreateMeshBuilder,
1346     IDirect3DRM3Impl_CreateFace,
1347     IDirect3DRM3Impl_CreateAnimation,
1348     IDirect3DRM3Impl_CreateAnimationSet,
1349     IDirect3DRM3Impl_CreateTexture,
1350     IDirect3DRM3Impl_CreateLight,
1351     IDirect3DRM3Impl_CreateLightRGB,
1352     IDirect3DRM3Impl_Material,
1353     IDirect3DRM3Impl_CreateDevice,
1354     IDirect3DRM3Impl_CreateDeviceFromSurface,
1355     IDirect3DRM3Impl_CreateDeviceFromD3D,
1356     IDirect3DRM3Impl_CreateDeviceFromClipper,
1357     IDirect3DRM3Impl_CreateTextureFromSurface,
1358     IDirect3DRM3Impl_CreateShadow,
1359     IDirect3DRM3Impl_CreateViewport,
1360     IDirect3DRM3Impl_CreateWrap,
1361     IDirect3DRM3Impl_CreateUserVisual,
1362     IDirect3DRM3Impl_LoadTexture,
1363     IDirect3DRM3Impl_LoadTextureFromResource,
1364     IDirect3DRM3Impl_SetSearchPath,
1365     IDirect3DRM3Impl_AddSearchPath,
1366     IDirect3DRM3Impl_GetSearchPath,
1367     IDirect3DRM3Impl_SetDefaultTextureColors,
1368     IDirect3DRM3Impl_SetDefaultTextureShades,
1369     IDirect3DRM3Impl_GetDevices,
1370     IDirect3DRM3Impl_GetNamedObject,
1371     IDirect3DRM3Impl_EnumerateObjects,
1372     IDirect3DRM3Impl_Load,
1373     IDirect3DRM3Impl_Tick,
1374     IDirect3DRM3Impl_CreateProgressiveMesh,
1375     IDirect3DRM3Impl_RegisterClient,
1376     IDirect3DRM3Impl_UnregisterClient,
1377     IDirect3DRM3Impl_CreateClippedVisual,
1378     IDirect3DRM3Impl_SetOptions,
1379     IDirect3DRM3Impl_GetOptions
1380 };