advapi32: Return a fake handle from EventRegister.
[wine/multimedia.git] / dlls / d3drm / device.c
blobe6d1036515c6c870bfc4fd6899e1b1db798c7acf
1 /*
2 * Implementation of IDirect3DRMDevice Interface
4 * Copyright 2011, 2012 André Hentschel
6 * This file contains the (internal) driver registration functions,
7 * driver enumeration APIs and DirectDraw creation functions.
9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Lesser General Public
11 * License as published by the Free Software Foundation; either
12 * version 2.1 of the License, or (at your option) any later version.
14 * This library is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * Lesser General Public License for more details.
19 * You should have received a copy of the GNU Lesser General Public
20 * License along with this library; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
24 #include "wine/debug.h"
26 #define COBJMACROS
28 #include "winbase.h"
29 #include "wingdi.h"
31 #include "d3drm_private.h"
32 #include "initguid.h"
33 #include "d3drmwin.h"
35 WINE_DEFAULT_DEBUG_CHANNEL(d3drm);
37 typedef struct {
38 IDirect3DRMDevice2 IDirect3DRMDevice2_iface;
39 IDirect3DRMDevice3 IDirect3DRMDevice3_iface;
40 IDirect3DRMWinDevice IDirect3DRMWinDevice_iface;
41 LONG ref;
42 } IDirect3DRMDeviceImpl;
44 static inline IDirect3DRMDeviceImpl *impl_from_IDirect3DRMDevice2(IDirect3DRMDevice2 *iface)
46 return CONTAINING_RECORD(iface, IDirect3DRMDeviceImpl, IDirect3DRMDevice2_iface);
49 static inline IDirect3DRMDeviceImpl *impl_from_IDirect3DRMDevice3(IDirect3DRMDevice3 *iface)
51 return CONTAINING_RECORD(iface, IDirect3DRMDeviceImpl, IDirect3DRMDevice3_iface);
54 static inline IDirect3DRMDeviceImpl *impl_from_IDirect3DRMWinDevice(IDirect3DRMWinDevice *iface)
56 return CONTAINING_RECORD(iface, IDirect3DRMDeviceImpl, IDirect3DRMWinDevice_iface);
59 /*** IUnknown methods ***/
60 static HRESULT WINAPI IDirect3DRMDevice2Impl_QueryInterface(IDirect3DRMDevice2* iface,
61 REFIID riid, void** object)
63 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
65 TRACE("(%p/%p)->(%s, %p)\n", iface, This, debugstr_guid(riid), object);
67 *object = NULL;
69 if (IsEqualGUID(riid, &IID_IUnknown) ||
70 IsEqualGUID(riid, &IID_IDirect3DRMDevice) ||
71 IsEqualGUID(riid, &IID_IDirect3DRMDevice2))
73 *object = &This->IDirect3DRMDevice2_iface;
75 else if(IsEqualGUID(riid, &IID_IDirect3DRMDevice3))
77 *object = &This->IDirect3DRMDevice3_iface;
79 else if(IsEqualGUID(riid, &IID_IDirect3DRMWinDevice))
81 *object = &This->IDirect3DRMWinDevice_iface;
83 else
85 FIXME("interface %s not implemented\n", debugstr_guid(riid));
86 return E_NOINTERFACE;
89 IDirect3DRMDevice2_AddRef(iface);
90 return S_OK;
93 static ULONG WINAPI IDirect3DRMDevice2Impl_AddRef(IDirect3DRMDevice2* iface)
95 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
96 ULONG ref = InterlockedIncrement(&This->ref);
98 TRACE("(%p)->(): new ref = %d\n", iface, ref);
100 return ref;
103 static ULONG WINAPI IDirect3DRMDevice2Impl_Release(IDirect3DRMDevice2* iface)
105 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
106 ULONG ref = InterlockedDecrement(&This->ref);
108 TRACE("(%p)->(): new ref = %d\n", iface, ref);
110 if (!ref)
111 HeapFree(GetProcessHeap(), 0, This);
113 return ref;
116 /*** IDirect3DRMObject methods ***/
117 static HRESULT WINAPI IDirect3DRMDevice2Impl_Clone(IDirect3DRMDevice2* iface,
118 LPUNKNOWN unkwn, REFIID riid,
119 LPVOID* object)
121 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
123 FIXME("(%p/%p)->(%p, %s, %p): stub\n", iface, This, unkwn, debugstr_guid(riid), object);
125 return E_NOTIMPL;
128 static HRESULT WINAPI IDirect3DRMDevice2Impl_AddDestroyCallback(IDirect3DRMDevice2* iface,
129 D3DRMOBJECTCALLBACK cb,
130 LPVOID argument)
132 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
134 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, cb, argument);
136 return E_NOTIMPL;
139 static HRESULT WINAPI IDirect3DRMDevice2Impl_DeleteDestroyCallback(IDirect3DRMDevice2* iface,
140 D3DRMOBJECTCALLBACK cb,
141 LPVOID argument)
143 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
145 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, cb, argument);
147 return E_NOTIMPL;
150 static HRESULT WINAPI IDirect3DRMDevice2Impl_SetAppData(IDirect3DRMDevice2* iface,
151 DWORD data)
153 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
155 FIXME("(%p/%p)->(%u): stub\n", iface, This, data);
157 return E_NOTIMPL;
160 static DWORD WINAPI IDirect3DRMDevice2Impl_GetAppData(IDirect3DRMDevice2* iface)
162 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
164 FIXME("(%p/%p)->(): stub\n", iface, This);
166 return 0;
169 static HRESULT WINAPI IDirect3DRMDevice2Impl_SetName(IDirect3DRMDevice2* iface, LPCSTR name)
171 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
173 FIXME("(%p/%p)->(%s): stub\n", iface, This, name);
175 return E_NOTIMPL;
178 static HRESULT WINAPI IDirect3DRMDevice2Impl_GetName(IDirect3DRMDevice2* iface,
179 LPDWORD size, LPSTR name)
181 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
183 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, size, name);
185 return E_NOTIMPL;
188 static HRESULT WINAPI IDirect3DRMDevice2Impl_GetClassName(IDirect3DRMDevice2* iface,
189 LPDWORD size, LPSTR name)
191 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
193 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, size, name);
195 return E_NOTIMPL;
198 /*** IDirect3DRMDevice methods ***/
199 static HRESULT WINAPI IDirect3DRMDevice2Impl_Init(IDirect3DRMDevice2* iface, ULONG width,
200 ULONG height)
202 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
204 FIXME("(%p/%p)->(%u, %u): stub\n", iface, This, width, height);
206 return E_NOTIMPL;
209 /*** IDirect3DRMDevice2 methods ***/
210 static HRESULT WINAPI IDirect3DRMDevice2Impl_InitFromD3D(IDirect3DRMDevice2* iface,
211 LPDIRECT3D lpD3D,
212 LPDIRECT3DDEVICE lpD3DDev)
214 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
216 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, lpD3D, lpD3DDev);
218 return E_NOTIMPL;
221 static HRESULT WINAPI IDirect3DRMDevice2Impl_InitFromClipper(IDirect3DRMDevice2* iface,
222 LPDIRECTDRAWCLIPPER lpDDClipper,
223 LPGUID lpGUID, int width, int height)
225 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
227 FIXME("(%p/%p)->(%p, %p, %u, %u): stub\n", iface, This, lpDDClipper, lpGUID, width, height);
229 return E_NOTIMPL;
232 static HRESULT WINAPI IDirect3DRMDevice2Impl_Update(IDirect3DRMDevice2* iface)
234 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
236 FIXME("(%p/%p)->(): stub\n", iface, This);
238 return E_NOTIMPL;
241 static HRESULT WINAPI IDirect3DRMDevice2Impl_AddUpdateCallback(IDirect3DRMDevice2* iface,
242 D3DRMUPDATECALLBACK cb, LPVOID arg)
244 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
246 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, cb, arg);
248 return E_NOTIMPL;
251 static HRESULT WINAPI IDirect3DRMDevice2Impl_DeleteUpdateCallback(IDirect3DRMDevice2* iface,
252 D3DRMUPDATECALLBACK cb,
253 LPVOID arg)
255 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
257 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, cb, arg);
259 return E_NOTIMPL;
262 static HRESULT WINAPI IDirect3DRMDevice2Impl_SetBufferCount(IDirect3DRMDevice2* iface, DWORD count)
264 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
266 FIXME("(%p/%p)->(%u): stub\n", iface, This, count);
268 return E_NOTIMPL;
271 static DWORD WINAPI IDirect3DRMDevice2Impl_GetBufferCount(IDirect3DRMDevice2* iface)
273 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
275 FIXME("(%p/%p)->(): stub\n", iface, This);
277 return E_NOTIMPL;
280 static HRESULT WINAPI IDirect3DRMDevice2Impl_SetDither(IDirect3DRMDevice2* iface, BOOL enable)
282 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
284 FIXME("(%p/%p)->(%d): stub\n", iface, This, enable);
286 return E_NOTIMPL;
289 static HRESULT WINAPI IDirect3DRMDevice2Impl_SetShades(IDirect3DRMDevice2* iface, DWORD count)
291 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
293 FIXME("(%p/%p)->(%u): stub\n", iface, This, count);
295 return E_NOTIMPL;
298 static HRESULT WINAPI IDirect3DRMDevice2Impl_SetQuality(IDirect3DRMDevice2* iface,
299 D3DRMRENDERQUALITY quality)
301 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
303 FIXME("(%p/%p)->(%u): stub\n", iface, This, quality);
305 return E_NOTIMPL;
308 static HRESULT WINAPI IDirect3DRMDevice2Impl_SetTextureQuality(IDirect3DRMDevice2* iface,
309 D3DRMTEXTUREQUALITY quality)
311 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
313 FIXME("(%p/%p)->(%u): stub\n", iface, This, quality);
315 return E_NOTIMPL;
318 static HRESULT WINAPI IDirect3DRMDevice2Impl_GetViewports(IDirect3DRMDevice2* iface,
319 LPDIRECT3DRMVIEWPORTARRAY *return_views)
321 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
323 FIXME("(%p/%p)->(%p): stub\n", iface, This, return_views);
325 return E_NOTIMPL;
328 static BOOL WINAPI IDirect3DRMDevice2Impl_GetDither(IDirect3DRMDevice2* iface)
330 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
332 FIXME("(%p/%p)->(): stub\n", iface, This);
334 return E_NOTIMPL;
337 static DWORD WINAPI IDirect3DRMDevice2Impl_GetShades(IDirect3DRMDevice2* iface)
339 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
341 FIXME("(%p/%p)->(): stub\n", iface, This);
343 return E_NOTIMPL;
346 static DWORD WINAPI IDirect3DRMDevice2Impl_GetHeight(IDirect3DRMDevice2* iface)
348 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
350 FIXME("(%p/%p)->(): stub\n", iface, This);
352 return E_NOTIMPL;
355 static DWORD WINAPI IDirect3DRMDevice2Impl_GetWidth(IDirect3DRMDevice2* iface)
357 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
359 FIXME("(%p/%p)->(): stub\n", iface, This);
361 return E_NOTIMPL;
364 static DWORD WINAPI IDirect3DRMDevice2Impl_GetTrianglesDrawn(IDirect3DRMDevice2* iface)
366 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
368 FIXME("(%p/%p)->(): stub\n", iface, This);
370 return E_NOTIMPL;
373 static DWORD WINAPI IDirect3DRMDevice2Impl_GetWireframeOptions(IDirect3DRMDevice2* iface)
375 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
377 FIXME("(%p/%p)->(): stub\n", iface, This);
379 return E_NOTIMPL;
382 static D3DRMRENDERQUALITY WINAPI IDirect3DRMDevice2Impl_GetQuality(IDirect3DRMDevice2* iface)
384 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
386 FIXME("(%p/%p)->(): stub\n", iface, This);
388 return E_NOTIMPL;
391 static D3DCOLORMODEL WINAPI IDirect3DRMDevice2Impl_GetColorModel(IDirect3DRMDevice2* iface)
393 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
395 FIXME("(%p/%p)->(): stub\n", iface, This);
397 return E_NOTIMPL;
400 static D3DRMTEXTUREQUALITY WINAPI IDirect3DRMDevice2Impl_GetTextureQuality(IDirect3DRMDevice2* iface)
402 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
404 FIXME("(%p/%p)->(): stub\n", iface, This);
406 return E_NOTIMPL;
409 static HRESULT WINAPI IDirect3DRMDevice2Impl_GetDirect3DDevice(IDirect3DRMDevice2* iface,
410 LPDIRECT3DDEVICE * dev)
412 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
414 FIXME("(%p/%p)->(%p): stub\n", iface, This, dev);
416 return E_NOTIMPL;
419 static HRESULT WINAPI IDirect3DRMDevice2Impl_InitFromD3D2(IDirect3DRMDevice2* iface,
420 LPDIRECT3D2 lpD3D,
421 LPDIRECT3DDEVICE2 lpD3DDev)
423 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
425 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, lpD3D, lpD3DDev);
427 return E_NOTIMPL;
430 static HRESULT WINAPI IDirect3DRMDevice2Impl_InitFromSurface(IDirect3DRMDevice2* iface,
431 LPGUID lpGUID, LPDIRECTDRAW lpDD,
432 LPDIRECTDRAWSURFACE lpDDSBack)
434 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
436 FIXME("(%p/%p)->(%p, %p, %p): stub\n", iface, This, lpGUID, lpDD, lpDDSBack);
438 return E_NOTIMPL;
441 static HRESULT WINAPI IDirect3DRMDevice2Impl_SetRenderMode(IDirect3DRMDevice2* iface, DWORD dwFlags)
443 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
445 FIXME("(%p/%p)->(%u): stub\n", iface, This, dwFlags);
447 return E_NOTIMPL;
450 static DWORD WINAPI IDirect3DRMDevice2Impl_GetRenderMode(IDirect3DRMDevice2* iface)
452 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
454 FIXME("(%p/%p)->(): stub\n", iface, This);
456 return E_NOTIMPL;
459 static HRESULT WINAPI IDirect3DRMDevice2Impl_GetDirect3DDevice2(IDirect3DRMDevice2* iface,
460 LPDIRECT3DDEVICE2 * dev)
462 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
464 FIXME("(%p/%p)->(%p): stub\n", iface, This, dev);
466 return E_NOTIMPL;
469 static const struct IDirect3DRMDevice2Vtbl Direct3DRMDevice2_Vtbl =
471 /*** IUnknown methods ***/
472 IDirect3DRMDevice2Impl_QueryInterface,
473 IDirect3DRMDevice2Impl_AddRef,
474 IDirect3DRMDevice2Impl_Release,
475 /*** IDirect3DRMObject methods ***/
476 IDirect3DRMDevice2Impl_Clone,
477 IDirect3DRMDevice2Impl_AddDestroyCallback,
478 IDirect3DRMDevice2Impl_DeleteDestroyCallback,
479 IDirect3DRMDevice2Impl_SetAppData,
480 IDirect3DRMDevice2Impl_GetAppData,
481 IDirect3DRMDevice2Impl_SetName,
482 IDirect3DRMDevice2Impl_GetName,
483 IDirect3DRMDevice2Impl_GetClassName,
484 /*** IDirect3DRMDevice methods ***/
485 IDirect3DRMDevice2Impl_Init,
486 IDirect3DRMDevice2Impl_InitFromD3D,
487 IDirect3DRMDevice2Impl_InitFromClipper,
488 IDirect3DRMDevice2Impl_Update,
489 IDirect3DRMDevice2Impl_AddUpdateCallback,
490 IDirect3DRMDevice2Impl_DeleteUpdateCallback,
491 IDirect3DRMDevice2Impl_SetBufferCount,
492 IDirect3DRMDevice2Impl_GetBufferCount,
493 IDirect3DRMDevice2Impl_SetDither,
494 IDirect3DRMDevice2Impl_SetShades,
495 IDirect3DRMDevice2Impl_SetQuality,
496 IDirect3DRMDevice2Impl_SetTextureQuality,
497 IDirect3DRMDevice2Impl_GetViewports,
498 IDirect3DRMDevice2Impl_GetDither,
499 IDirect3DRMDevice2Impl_GetShades,
500 IDirect3DRMDevice2Impl_GetHeight,
501 IDirect3DRMDevice2Impl_GetWidth,
502 IDirect3DRMDevice2Impl_GetTrianglesDrawn,
503 IDirect3DRMDevice2Impl_GetWireframeOptions,
504 IDirect3DRMDevice2Impl_GetQuality,
505 IDirect3DRMDevice2Impl_GetColorModel,
506 IDirect3DRMDevice2Impl_GetTextureQuality,
507 IDirect3DRMDevice2Impl_GetDirect3DDevice,
508 /*** IDirect3DRMDevice2 methods ***/
509 IDirect3DRMDevice2Impl_InitFromD3D2,
510 IDirect3DRMDevice2Impl_InitFromSurface,
511 IDirect3DRMDevice2Impl_SetRenderMode,
512 IDirect3DRMDevice2Impl_GetRenderMode,
513 IDirect3DRMDevice2Impl_GetDirect3DDevice2
517 /*** IUnknown methods ***/
518 static HRESULT WINAPI IDirect3DRMDevice3Impl_QueryInterface(IDirect3DRMDevice3* iface,
519 REFIID riid, void** object)
521 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice3(iface);
522 return IDirect3DRMDevice2_QueryInterface(&This->IDirect3DRMDevice2_iface, riid, object);
525 static ULONG WINAPI IDirect3DRMDevice3Impl_AddRef(IDirect3DRMDevice3* iface)
527 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice3(iface);
528 return IDirect3DRMDevice2_AddRef(&This->IDirect3DRMDevice2_iface);
531 static ULONG WINAPI IDirect3DRMDevice3Impl_Release(IDirect3DRMDevice3* iface)
533 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice3(iface);
534 return IDirect3DRMDevice2_Release(&This->IDirect3DRMDevice2_iface);
537 /*** IDirect3DRMObject methods ***/
538 static HRESULT WINAPI IDirect3DRMDevice3Impl_Clone(IDirect3DRMDevice3* iface,
539 LPUNKNOWN unkwn, REFIID riid,
540 LPVOID* object)
542 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice3(iface);
544 FIXME("(%p/%p)->(%p, %s, %p): stub\n", iface, This, unkwn, debugstr_guid(riid), object);
546 return E_NOTIMPL;
549 static HRESULT WINAPI IDirect3DRMDevice3Impl_AddDestroyCallback(IDirect3DRMDevice3* iface,
550 D3DRMOBJECTCALLBACK cb,
551 LPVOID argument)
553 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice3(iface);
555 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, cb, argument);
557 return E_NOTIMPL;
560 static HRESULT WINAPI IDirect3DRMDevice3Impl_DeleteDestroyCallback(IDirect3DRMDevice3* iface,
561 D3DRMOBJECTCALLBACK cb,
562 LPVOID argument)
564 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice3(iface);
566 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, cb, argument);
568 return E_NOTIMPL;
571 static HRESULT WINAPI IDirect3DRMDevice3Impl_SetAppData(IDirect3DRMDevice3* iface,
572 DWORD data)
574 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice3(iface);
576 FIXME("(%p/%p)->(%u): stub\n", iface, This, data);
578 return E_NOTIMPL;
581 static DWORD WINAPI IDirect3DRMDevice3Impl_GetAppData(IDirect3DRMDevice3* iface)
583 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice3(iface);
585 FIXME("(%p/%p)->(): stub\n", iface, This);
587 return 0;
590 static HRESULT WINAPI IDirect3DRMDevice3Impl_SetName(IDirect3DRMDevice3* iface, LPCSTR name)
592 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice3(iface);
594 FIXME("(%p/%p)->(%s): stub\n", iface, This, name);
596 return E_NOTIMPL;
599 static HRESULT WINAPI IDirect3DRMDevice3Impl_GetName(IDirect3DRMDevice3* iface,
600 LPDWORD size, LPSTR name)
602 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice3(iface);
604 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, size, name);
606 return E_NOTIMPL;
609 static HRESULT WINAPI IDirect3DRMDevice3Impl_GetClassName(IDirect3DRMDevice3* iface,
610 LPDWORD size, LPSTR name)
612 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice3(iface);
614 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, size, name);
616 return E_NOTIMPL;
619 /*** IDirect3DRMDevice methods ***/
620 static HRESULT WINAPI IDirect3DRMDevice3Impl_Init(IDirect3DRMDevice3* iface, ULONG width,
621 ULONG height)
623 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice3(iface);
625 FIXME("(%p/%p)->(%u, %u): stub\n", iface, This, width, height);
627 return E_NOTIMPL;
630 static HRESULT WINAPI IDirect3DRMDevice3Impl_InitFromD3D(IDirect3DRMDevice3* iface,
631 LPDIRECT3D lpD3D,
632 LPDIRECT3DDEVICE lpD3DDev)
634 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice3(iface);
636 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, lpD3D, lpD3DDev);
638 return E_NOTIMPL;
641 static HRESULT WINAPI IDirect3DRMDevice3Impl_InitFromClipper(IDirect3DRMDevice3* iface,
642 LPDIRECTDRAWCLIPPER lpDDClipper,
643 LPGUID lpGUID, int width, int height)
645 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice3(iface);
647 FIXME("(%p/%p)->(%p, %p, %u, %u): stub\n", iface, This, lpDDClipper, lpGUID, width, height);
649 return E_NOTIMPL;
652 static HRESULT WINAPI IDirect3DRMDevice3Impl_Update(IDirect3DRMDevice3* iface)
654 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice3(iface);
656 FIXME("(%p/%p)->(): stub\n", iface, This);
658 return E_NOTIMPL;
661 static HRESULT WINAPI IDirect3DRMDevice3Impl_AddUpdateCallback(IDirect3DRMDevice3* iface,
662 D3DRMUPDATECALLBACK cb, LPVOID arg)
664 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice3(iface);
666 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, cb, arg);
668 return E_NOTIMPL;
671 static HRESULT WINAPI IDirect3DRMDevice3Impl_DeleteUpdateCallback(IDirect3DRMDevice3* iface,
672 D3DRMUPDATECALLBACK cb,
673 LPVOID arg)
675 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice3(iface);
677 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, cb, arg);
679 return E_NOTIMPL;
682 static HRESULT WINAPI IDirect3DRMDevice3Impl_SetBufferCount(IDirect3DRMDevice3* iface, DWORD count)
684 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice3(iface);
686 FIXME("(%p/%p)->(%u): stub\n", iface, This, count);
688 return E_NOTIMPL;
691 static DWORD WINAPI IDirect3DRMDevice3Impl_GetBufferCount(IDirect3DRMDevice3* iface)
693 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice3(iface);
695 FIXME("(%p/%p)->(): stub\n", iface, This);
697 return E_NOTIMPL;
700 static HRESULT WINAPI IDirect3DRMDevice3Impl_SetDither(IDirect3DRMDevice3* iface, BOOL enable)
702 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice3(iface);
704 FIXME("(%p/%p)->(%d): stub\n", iface, This, enable);
706 return E_NOTIMPL;
709 static HRESULT WINAPI IDirect3DRMDevice3Impl_SetShades(IDirect3DRMDevice3* iface, DWORD count)
711 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice3(iface);
713 FIXME("(%p/%p)->(%u): stub\n", iface, This, count);
715 return E_NOTIMPL;
718 static HRESULT WINAPI IDirect3DRMDevice3Impl_SetQuality(IDirect3DRMDevice3* iface,
719 D3DRMRENDERQUALITY quality)
721 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice3(iface);
723 FIXME("(%p/%p)->(%u): stub\n", iface, This, quality);
725 return E_NOTIMPL;
728 static HRESULT WINAPI IDirect3DRMDevice3Impl_SetTextureQuality(IDirect3DRMDevice3* iface,
729 D3DRMTEXTUREQUALITY quality)
731 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice3(iface);
733 FIXME("(%p/%p)->(%u): stub\n", iface, This, quality);
735 return E_NOTIMPL;
738 static HRESULT WINAPI IDirect3DRMDevice3Impl_GetViewports(IDirect3DRMDevice3* iface,
739 LPDIRECT3DRMVIEWPORTARRAY *return_views)
741 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice3(iface);
743 FIXME("(%p/%p)->(%p): stub\n", iface, This, return_views);
745 return E_NOTIMPL;
748 static BOOL WINAPI IDirect3DRMDevice3Impl_GetDither(IDirect3DRMDevice3* iface)
750 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice3(iface);
752 FIXME("(%p/%p)->(): stub\n", iface, This);
754 return E_NOTIMPL;
757 static DWORD WINAPI IDirect3DRMDevice3Impl_GetShades(IDirect3DRMDevice3* iface)
759 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice3(iface);
761 FIXME("(%p/%p)->(): stub\n", iface, This);
763 return E_NOTIMPL;
766 static DWORD WINAPI IDirect3DRMDevice3Impl_GetHeight(IDirect3DRMDevice3* iface)
768 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice3(iface);
770 FIXME("(%p/%p)->(): stub\n", iface, This);
772 return E_NOTIMPL;
775 static DWORD WINAPI IDirect3DRMDevice3Impl_GetWidth(IDirect3DRMDevice3* iface)
777 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice3(iface);
779 FIXME("(%p/%p)->(): stub\n", iface, This);
781 return E_NOTIMPL;
784 static DWORD WINAPI IDirect3DRMDevice3Impl_GetTrianglesDrawn(IDirect3DRMDevice3* iface)
786 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice3(iface);
788 FIXME("(%p/%p)->(): stub\n", iface, This);
790 return E_NOTIMPL;
793 static DWORD WINAPI IDirect3DRMDevice3Impl_GetWireframeOptions(IDirect3DRMDevice3* iface)
795 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice3(iface);
797 FIXME("(%p/%p)->(): stub\n", iface, This);
799 return E_NOTIMPL;
802 static D3DRMRENDERQUALITY WINAPI IDirect3DRMDevice3Impl_GetQuality(IDirect3DRMDevice3* iface)
804 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice3(iface);
806 FIXME("(%p/%p)->(): stub\n", iface, This);
808 return E_NOTIMPL;
811 static D3DCOLORMODEL WINAPI IDirect3DRMDevice3Impl_GetColorModel(IDirect3DRMDevice3* iface)
813 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice3(iface);
815 FIXME("(%p/%p)->(): stub\n", iface, This);
817 return E_NOTIMPL;
820 static D3DRMTEXTUREQUALITY WINAPI IDirect3DRMDevice3Impl_GetTextureQuality(IDirect3DRMDevice3* iface)
822 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice3(iface);
824 FIXME("(%p/%p)->(): stub\n", iface, This);
826 return E_NOTIMPL;
829 static HRESULT WINAPI IDirect3DRMDevice3Impl_GetDirect3DDevice(IDirect3DRMDevice3* iface,
830 LPDIRECT3DDEVICE * dev)
832 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice3(iface);
834 FIXME("(%p/%p)->(%p): stub\n", iface, This, dev);
836 return E_NOTIMPL;
839 /*** IDirect3DRMDevice2 methods ***/
840 static HRESULT WINAPI IDirect3DRMDevice3Impl_InitFromD3D2(IDirect3DRMDevice3* iface,
841 LPDIRECT3D2 lpD3D,
842 LPDIRECT3DDEVICE2 lpD3DDev)
844 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice3(iface);
846 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, lpD3D, lpD3DDev);
848 return E_NOTIMPL;
851 static HRESULT WINAPI IDirect3DRMDevice3Impl_InitFromSurface(IDirect3DRMDevice3* iface,
852 LPGUID lpGUID, LPDIRECTDRAW lpDD,
853 LPDIRECTDRAWSURFACE lpDDSBack)
855 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice3(iface);
857 FIXME("(%p/%p)->(%p, %p, %p): stub\n", iface, This, lpGUID, lpDD, lpDDSBack);
859 return E_NOTIMPL;
862 static HRESULT WINAPI IDirect3DRMDevice3Impl_SetRenderMode(IDirect3DRMDevice3* iface, DWORD dwFlags)
864 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice3(iface);
866 FIXME("(%p/%p)->(%u): stub\n", iface, This, dwFlags);
868 return E_NOTIMPL;
871 static DWORD WINAPI IDirect3DRMDevice3Impl_GetRenderMode(IDirect3DRMDevice3* iface)
873 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice3(iface);
875 FIXME("(%p/%p)->(): stub\n", iface, This);
877 return E_NOTIMPL;
880 static HRESULT WINAPI IDirect3DRMDevice3Impl_GetDirect3DDevice2(IDirect3DRMDevice3* iface,
881 LPDIRECT3DDEVICE2 * dev)
883 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice3(iface);
885 FIXME("(%p/%p)->(%p): stub\n", iface, This, dev);
887 return E_NOTIMPL;
890 /*** IDirect3DRMDevice3 methods ***/
891 static HRESULT WINAPI IDirect3DRMDevice3Impl_FindPreferredTextureFormat(IDirect3DRMDevice3* iface,
892 DWORD bitdepths,
893 DWORD flags,
894 LPDDPIXELFORMAT lpDDPF)
896 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice3(iface);
898 FIXME("(%p/%p)->(%u, %u, %p): stub\n", iface, This, bitdepths, flags, lpDDPF);
900 return E_NOTIMPL;
903 static HRESULT WINAPI IDirect3DRMDevice3Impl_RenderStateChange(IDirect3DRMDevice3* iface,
904 D3DRENDERSTATETYPE type, DWORD val,
905 DWORD flags)
907 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice3(iface);
909 FIXME("(%p/%p)->(%u, %u, %u): stub\n", iface, This, type, val, flags);
911 return E_NOTIMPL;
914 static HRESULT WINAPI IDirect3DRMDevice3Impl_LightStateChange(IDirect3DRMDevice3* iface,
915 D3DLIGHTSTATETYPE type, DWORD val,
916 DWORD flags)
918 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice3(iface);
920 FIXME("(%p/%p)->(%u, %u, %u): stub\n", iface, This, type, val, flags);
922 return E_NOTIMPL;
925 static HRESULT WINAPI IDirect3DRMDevice3Impl_GetStateChangeOptions(IDirect3DRMDevice3* iface,
926 DWORD stateclass, DWORD statenum,
927 LPDWORD flags)
929 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice3(iface);
931 FIXME("(%p/%p)->(%u, %u, %p): stub\n", iface, This, stateclass, statenum, flags);
933 return E_NOTIMPL;
936 static HRESULT WINAPI IDirect3DRMDevice3Impl_SetStateChangeOptions(IDirect3DRMDevice3* iface,
937 DWORD stateclass, DWORD statenum,
938 DWORD flags)
940 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice3(iface);
942 FIXME("(%p/%p)->(%u, %u, %u): stub\n", iface, This, stateclass, statenum, flags);
944 return E_NOTIMPL;
947 static const struct IDirect3DRMDevice3Vtbl Direct3DRMDevice3_Vtbl =
949 /*** IUnknown methods ***/
950 IDirect3DRMDevice3Impl_QueryInterface,
951 IDirect3DRMDevice3Impl_AddRef,
952 IDirect3DRMDevice3Impl_Release,
953 /*** IDirect3DRMObject methods ***/
954 IDirect3DRMDevice3Impl_Clone,
955 IDirect3DRMDevice3Impl_AddDestroyCallback,
956 IDirect3DRMDevice3Impl_DeleteDestroyCallback,
957 IDirect3DRMDevice3Impl_SetAppData,
958 IDirect3DRMDevice3Impl_GetAppData,
959 IDirect3DRMDevice3Impl_SetName,
960 IDirect3DRMDevice3Impl_GetName,
961 IDirect3DRMDevice3Impl_GetClassName,
962 /*** IDirect3DRMDevice methods ***/
963 IDirect3DRMDevice3Impl_Init,
964 IDirect3DRMDevice3Impl_InitFromD3D,
965 IDirect3DRMDevice3Impl_InitFromClipper,
966 IDirect3DRMDevice3Impl_Update,
967 IDirect3DRMDevice3Impl_AddUpdateCallback,
968 IDirect3DRMDevice3Impl_DeleteUpdateCallback,
969 IDirect3DRMDevice3Impl_SetBufferCount,
970 IDirect3DRMDevice3Impl_GetBufferCount,
971 IDirect3DRMDevice3Impl_SetDither,
972 IDirect3DRMDevice3Impl_SetShades,
973 IDirect3DRMDevice3Impl_SetQuality,
974 IDirect3DRMDevice3Impl_SetTextureQuality,
975 IDirect3DRMDevice3Impl_GetViewports,
976 IDirect3DRMDevice3Impl_GetDither,
977 IDirect3DRMDevice3Impl_GetShades,
978 IDirect3DRMDevice3Impl_GetHeight,
979 IDirect3DRMDevice3Impl_GetWidth,
980 IDirect3DRMDevice3Impl_GetTrianglesDrawn,
981 IDirect3DRMDevice3Impl_GetWireframeOptions,
982 IDirect3DRMDevice3Impl_GetQuality,
983 IDirect3DRMDevice3Impl_GetColorModel,
984 IDirect3DRMDevice3Impl_GetTextureQuality,
985 IDirect3DRMDevice3Impl_GetDirect3DDevice,
986 /*** IDirect3DRMDevice2 methods ***/
987 IDirect3DRMDevice3Impl_InitFromD3D2,
988 IDirect3DRMDevice3Impl_InitFromSurface,
989 IDirect3DRMDevice3Impl_SetRenderMode,
990 IDirect3DRMDevice3Impl_GetRenderMode,
991 IDirect3DRMDevice3Impl_GetDirect3DDevice2,
992 /*** IDirect3DRMDevice3 methods ***/
993 IDirect3DRMDevice3Impl_FindPreferredTextureFormat,
994 IDirect3DRMDevice3Impl_RenderStateChange,
995 IDirect3DRMDevice3Impl_LightStateChange,
996 IDirect3DRMDevice3Impl_GetStateChangeOptions,
997 IDirect3DRMDevice3Impl_SetStateChangeOptions
1001 /*** IUnknown methods ***/
1002 static HRESULT WINAPI IDirect3DRMWinDeviceImpl_QueryInterface(IDirect3DRMWinDevice* iface,
1003 REFIID riid, void** object)
1005 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMWinDevice(iface);
1006 return IDirect3DRMDevice2_QueryInterface(&This->IDirect3DRMDevice2_iface, riid, object);
1009 static ULONG WINAPI IDirect3DRMWinDeviceImpl_AddRef(IDirect3DRMWinDevice* iface)
1011 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMWinDevice(iface);
1012 return IDirect3DRMDevice2_AddRef(&This->IDirect3DRMDevice2_iface);
1015 static ULONG WINAPI IDirect3DRMWinDeviceImpl_Release(IDirect3DRMWinDevice* iface)
1017 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMWinDevice(iface);
1018 return IDirect3DRMDevice2_Release(&This->IDirect3DRMDevice2_iface);
1021 /*** IDirect3DRMObject methods ***/
1022 static HRESULT WINAPI IDirect3DRMWinDeviceImpl_Clone(IDirect3DRMWinDevice* iface,
1023 LPUNKNOWN unkwn, REFIID riid,
1024 LPVOID* object)
1026 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMWinDevice(iface);
1028 FIXME("(%p/%p)->(%p, %s, %p): stub\n", iface, This, unkwn, debugstr_guid(riid), object);
1030 return E_NOTIMPL;
1033 static HRESULT WINAPI IDirect3DRMWinDeviceImpl_AddDestroyCallback(IDirect3DRMWinDevice* iface,
1034 D3DRMOBJECTCALLBACK cb,
1035 LPVOID argument)
1037 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMWinDevice(iface);
1039 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, cb, argument);
1041 return E_NOTIMPL;
1044 static HRESULT WINAPI IDirect3DRMWinDeviceImpl_DeleteDestroyCallback(IDirect3DRMWinDevice* iface,
1045 D3DRMOBJECTCALLBACK cb,
1046 LPVOID argument)
1048 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMWinDevice(iface);
1050 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, cb, argument);
1052 return E_NOTIMPL;
1055 static HRESULT WINAPI IDirect3DRMWinDeviceImpl_SetAppData(IDirect3DRMWinDevice* iface,
1056 DWORD data)
1058 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMWinDevice(iface);
1060 FIXME("(%p/%p)->(%u): stub\n", iface, This, data);
1062 return E_NOTIMPL;
1065 static DWORD WINAPI IDirect3DRMWinDeviceImpl_GetAppData(IDirect3DRMWinDevice* iface)
1067 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMWinDevice(iface);
1069 FIXME("(%p/%p)->(): stub\n", iface, This);
1071 return 0;
1074 static HRESULT WINAPI IDirect3DRMWinDeviceImpl_SetName(IDirect3DRMWinDevice* iface, LPCSTR name)
1076 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMWinDevice(iface);
1078 FIXME("(%p/%p)->(%s): stub\n", iface, This, name);
1080 return E_NOTIMPL;
1083 static HRESULT WINAPI IDirect3DRMWinDeviceImpl_GetName(IDirect3DRMWinDevice* iface,
1084 LPDWORD size, LPSTR name)
1086 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMWinDevice(iface);
1088 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, size, name);
1090 return E_NOTIMPL;
1093 static HRESULT WINAPI IDirect3DRMWinDeviceImpl_GetClassName(IDirect3DRMWinDevice* iface,
1094 LPDWORD size, LPSTR name)
1096 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMWinDevice(iface);
1098 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, size, name);
1100 return E_NOTIMPL;
1103 /*** IDirect3DRMWinDevice methods ***/
1104 static HRESULT WINAPI IDirect3DRMWinDeviceImpl_HandlePaint(IDirect3DRMWinDevice* iface, HDC hdc)
1106 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMWinDevice(iface);
1108 FIXME("(%p/%p)->(%p): stub\n", iface, This, hdc);
1110 return E_NOTIMPL;
1113 static HRESULT WINAPI IDirect3DRMWinDeviceImpl_HandleActivate(IDirect3DRMWinDevice* iface, WORD wparam)
1115 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMWinDevice(iface);
1117 FIXME("(%p/%p)->(%u): stub\n", iface, This, wparam);
1119 return E_NOTIMPL;
1122 static const struct IDirect3DRMWinDeviceVtbl Direct3DRMWinDevice_Vtbl =
1124 /*** IUnknown methods ***/
1125 IDirect3DRMWinDeviceImpl_QueryInterface,
1126 IDirect3DRMWinDeviceImpl_AddRef,
1127 IDirect3DRMWinDeviceImpl_Release,
1128 /*** IDirect3DRMObject methods ***/
1129 IDirect3DRMWinDeviceImpl_Clone,
1130 IDirect3DRMWinDeviceImpl_AddDestroyCallback,
1131 IDirect3DRMWinDeviceImpl_DeleteDestroyCallback,
1132 IDirect3DRMWinDeviceImpl_SetAppData,
1133 IDirect3DRMWinDeviceImpl_GetAppData,
1134 IDirect3DRMWinDeviceImpl_SetName,
1135 IDirect3DRMWinDeviceImpl_GetName,
1136 IDirect3DRMWinDeviceImpl_GetClassName,
1137 /*** IDirect3DRMWinDevice methods ***/
1138 IDirect3DRMWinDeviceImpl_HandlePaint,
1139 IDirect3DRMWinDeviceImpl_HandleActivate
1142 HRESULT Direct3DRMDevice_create(REFIID riid, IUnknown** ppObj)
1144 IDirect3DRMDeviceImpl* object;
1146 TRACE("(%p)\n", ppObj);
1148 object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirect3DRMDeviceImpl));
1149 if (!object)
1151 ERR("Out of memory\n");
1152 return E_OUTOFMEMORY;
1155 object->IDirect3DRMDevice2_iface.lpVtbl = &Direct3DRMDevice2_Vtbl;
1156 object->IDirect3DRMDevice3_iface.lpVtbl = &Direct3DRMDevice3_Vtbl;
1157 object->IDirect3DRMWinDevice_iface.lpVtbl = &Direct3DRMWinDevice_Vtbl;
1158 object->ref = 1;
1160 if (IsEqualGUID(riid, &IID_IDirect3DRMFrame3))
1161 *ppObj = (IUnknown*)&object->IDirect3DRMDevice3_iface;
1162 else
1163 *ppObj = (IUnknown*)&object->IDirect3DRMDevice2_iface;
1165 return S_OK;