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"
31 #include "d3drm_private.h"
33 WINE_DEFAULT_DEBUG_CHANNEL(d3drm
);
36 IDirect3DRMDevice2 IDirect3DRMDevice2_iface
;
38 } IDirect3DRMDeviceImpl
;
40 static const struct IDirect3DRMDevice2Vtbl Direct3DRMDevice2_Vtbl
;
42 static inline IDirect3DRMDeviceImpl
*impl_from_IDirect3DRMDevice2(IDirect3DRMDevice2
*iface
)
44 return CONTAINING_RECORD(iface
, IDirect3DRMDeviceImpl
, IDirect3DRMDevice2_iface
);
47 HRESULT
Direct3DRMDevice_create(IUnknown
** ppObj
)
49 IDirect3DRMDeviceImpl
* object
;
51 TRACE("(%p)\n", ppObj
);
53 object
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(IDirect3DRMDeviceImpl
));
56 ERR("Out of memory\n");
60 object
->IDirect3DRMDevice2_iface
.lpVtbl
= &Direct3DRMDevice2_Vtbl
;
63 *ppObj
= (IUnknown
*)object
;
68 /*** IUnknown methods ***/
69 static HRESULT WINAPI
IDirect3DRMDevice2Impl_QueryInterface(IDirect3DRMDevice2
* iface
,
70 REFIID riid
, void** object
)
72 IDirect3DRMDeviceImpl
*This
= impl_from_IDirect3DRMDevice2(iface
);
74 TRACE("(%p/%p)->(%s, %p)\n", iface
, This
, debugstr_guid(riid
), object
);
76 if (IsEqualGUID(riid
, &IID_IUnknown
) ||
77 IsEqualGUID(riid
, &IID_IDirect3DRMDevice
) ||
78 IsEqualGUID(riid
, &IID_IDirect3DRMDevice2
))
80 IClassFactory_AddRef(iface
);
85 ERR("(%p/%p)->(%s, %p),not found\n", iface
, This
, debugstr_guid(riid
), object
);
89 static ULONG WINAPI
IDirect3DRMDevice2Impl_AddRef(IDirect3DRMDevice2
* iface
)
91 IDirect3DRMDeviceImpl
*This
= impl_from_IDirect3DRMDevice2(iface
);
93 TRACE("(%p)\n", This
);
95 return InterlockedIncrement(&This
->ref
);
98 static ULONG WINAPI
IDirect3DRMDevice2Impl_Release(IDirect3DRMDevice2
* iface
)
100 IDirect3DRMDeviceImpl
*This
= impl_from_IDirect3DRMDevice2(iface
);
101 ULONG ref
= InterlockedDecrement(&This
->ref
);
103 TRACE("(%p)\n", This
);
106 HeapFree(GetProcessHeap(), 0, This
);
111 /*** IDirect3DRMObject methods ***/
112 static HRESULT WINAPI
IDirect3DRMDevice2Impl_Clone(IDirect3DRMDevice2
* iface
,
113 LPUNKNOWN unkwn
, REFIID riid
,
116 IDirect3DRMDeviceImpl
*This
= impl_from_IDirect3DRMDevice2(iface
);
118 FIXME("(%p/%p)->(%p, %s, %p): stub\n", iface
, This
, unkwn
, debugstr_guid(riid
), object
);
123 static HRESULT WINAPI
IDirect3DRMDevice2Impl_AddDestroyCallback(IDirect3DRMDevice2
* iface
,
124 D3DRMOBJECTCALLBACK cb
,
127 IDirect3DRMDeviceImpl
*This
= impl_from_IDirect3DRMDevice2(iface
);
129 FIXME("(%p/%p)->(%p, %p): stub\n", iface
, This
, cb
, argument
);
134 static HRESULT WINAPI
IDirect3DRMDevice2Impl_DeleteDestroyCallback(IDirect3DRMDevice2
* iface
,
135 D3DRMOBJECTCALLBACK cb
,
138 IDirect3DRMDeviceImpl
*This
= impl_from_IDirect3DRMDevice2(iface
);
140 FIXME("(%p/%p)->(%p, %p): stub\n", iface
, This
, cb
, argument
);
145 static HRESULT WINAPI
IDirect3DRMDevice2Impl_SetAppData(IDirect3DRMDevice2
* iface
,
148 IDirect3DRMDeviceImpl
*This
= impl_from_IDirect3DRMDevice2(iface
);
150 FIXME("(%p/%p)->(%u): stub\n", iface
, This
, data
);
155 static DWORD WINAPI
IDirect3DRMDevice2Impl_GetAppData(IDirect3DRMDevice2
* iface
)
157 IDirect3DRMDeviceImpl
*This
= impl_from_IDirect3DRMDevice2(iface
);
159 FIXME("(%p/%p)->(): stub\n", iface
, This
);
164 static HRESULT WINAPI
IDirect3DRMDevice2Impl_SetName(IDirect3DRMDevice2
* iface
, LPCSTR name
)
166 IDirect3DRMDeviceImpl
*This
= impl_from_IDirect3DRMDevice2(iface
);
168 FIXME("(%p/%p)->(%s): stub\n", iface
, This
, name
);
173 static HRESULT WINAPI
IDirect3DRMDevice2Impl_GetName(IDirect3DRMDevice2
* iface
,
174 LPDWORD size
, LPSTR name
)
176 IDirect3DRMDeviceImpl
*This
= impl_from_IDirect3DRMDevice2(iface
);
178 FIXME("(%p/%p)->(%p, %p): stub\n", iface
, This
, size
, name
);
183 static HRESULT WINAPI
IDirect3DRMDevice2Impl_GetClassName(IDirect3DRMDevice2
* iface
,
184 LPDWORD size
, LPSTR name
)
186 IDirect3DRMDeviceImpl
*This
= impl_from_IDirect3DRMDevice2(iface
);
188 FIXME("(%p/%p)->(%p, %p): stub\n", iface
, This
, size
, name
);
193 /*** IDirect3DRMDevice methods ***/
194 static HRESULT WINAPI
IDirect3DRMDevice2Impl_Init(IDirect3DRMDevice2
* iface
, ULONG width
,
197 IDirect3DRMDeviceImpl
*This
= impl_from_IDirect3DRMDevice2(iface
);
199 FIXME("(%p/%p)->(%u, %u): stub\n", iface
, This
, width
, height
);
204 static HRESULT WINAPI
IDirect3DRMDevice2Impl_InitFromD3D(IDirect3DRMDevice2
* iface
,
206 LPDIRECT3DDEVICE lpD3DDev
)
208 IDirect3DRMDeviceImpl
*This
= impl_from_IDirect3DRMDevice2(iface
);
210 FIXME("(%p/%p)->(%p, %p): stub\n", iface
, This
, lpD3D
, lpD3DDev
);
215 static HRESULT WINAPI
IDirect3DRMDevice2Impl_InitFromClipper(IDirect3DRMDevice2
* iface
,
216 LPDIRECTDRAWCLIPPER lpDDClipper
,
217 LPGUID lpGUID
, int width
, int height
)
219 IDirect3DRMDeviceImpl
*This
= impl_from_IDirect3DRMDevice2(iface
);
221 FIXME("(%p/%p)->(%p, %p, %u, %u): stub\n", iface
, This
, lpDDClipper
, lpGUID
, width
, height
);
226 static HRESULT WINAPI
IDirect3DRMDevice2Impl_Update(IDirect3DRMDevice2
* iface
)
228 IDirect3DRMDeviceImpl
*This
= impl_from_IDirect3DRMDevice2(iface
);
230 FIXME("(%p/%p)->(): stub\n", iface
, This
);
235 static HRESULT WINAPI
IDirect3DRMDevice2Impl_AddUpdateCallback(IDirect3DRMDevice2
* iface
,
236 D3DRMUPDATECALLBACK cb
, LPVOID arg
)
238 IDirect3DRMDeviceImpl
*This
= impl_from_IDirect3DRMDevice2(iface
);
240 FIXME("(%p/%p)->(%p, %p): stub\n", iface
, This
, cb
, arg
);
245 static HRESULT WINAPI
IDirect3DRMDevice2Impl_DeleteUpdateCallback(IDirect3DRMDevice2
* iface
,
246 D3DRMUPDATECALLBACK cb
,
249 IDirect3DRMDeviceImpl
*This
= impl_from_IDirect3DRMDevice2(iface
);
251 FIXME("(%p/%p)->(%p, %p): stub\n", iface
, This
, cb
, arg
);
256 static HRESULT WINAPI
IDirect3DRMDevice2Impl_SetBufferCount(IDirect3DRMDevice2
* iface
, DWORD count
)
258 IDirect3DRMDeviceImpl
*This
= impl_from_IDirect3DRMDevice2(iface
);
260 FIXME("(%p/%p)->(%u): stub\n", iface
, This
, count
);
265 static DWORD WINAPI
IDirect3DRMDevice2Impl_GetBufferCount(IDirect3DRMDevice2
* iface
)
267 IDirect3DRMDeviceImpl
*This
= impl_from_IDirect3DRMDevice2(iface
);
269 FIXME("(%p/%p)->(): stub\n", iface
, This
);
274 static HRESULT WINAPI
IDirect3DRMDevice2Impl_SetDither(IDirect3DRMDevice2
* iface
, BOOL enable
)
276 IDirect3DRMDeviceImpl
*This
= impl_from_IDirect3DRMDevice2(iface
);
278 FIXME("(%p/%p)->(%d): stub\n", iface
, This
, enable
);
283 static HRESULT WINAPI
IDirect3DRMDevice2Impl_SetShades(IDirect3DRMDevice2
* iface
, DWORD count
)
285 IDirect3DRMDeviceImpl
*This
= impl_from_IDirect3DRMDevice2(iface
);
287 FIXME("(%p/%p)->(%u): stub\n", iface
, This
, count
);
292 static HRESULT WINAPI
IDirect3DRMDevice2Impl_SetQuality(IDirect3DRMDevice2
* iface
,
293 D3DRMRENDERQUALITY quality
)
295 IDirect3DRMDeviceImpl
*This
= impl_from_IDirect3DRMDevice2(iface
);
297 FIXME("(%p/%p)->(%u): stub\n", iface
, This
, quality
);
302 static HRESULT WINAPI
IDirect3DRMDevice2Impl_SetTextureQuality(IDirect3DRMDevice2
* iface
,
303 D3DRMTEXTUREQUALITY quality
)
305 IDirect3DRMDeviceImpl
*This
= impl_from_IDirect3DRMDevice2(iface
);
307 FIXME("(%p/%p)->(%u): stub\n", iface
, This
, quality
);
312 static HRESULT WINAPI
IDirect3DRMDevice2Impl_GetViewports(IDirect3DRMDevice2
* iface
,
313 LPDIRECT3DRMVIEWPORTARRAY
*return_views
)
315 IDirect3DRMDeviceImpl
*This
= impl_from_IDirect3DRMDevice2(iface
);
317 FIXME("(%p/%p)->(%p): stub\n", iface
, This
, return_views
);
322 static BOOL WINAPI
IDirect3DRMDevice2Impl_GetDither(IDirect3DRMDevice2
* iface
)
324 IDirect3DRMDeviceImpl
*This
= impl_from_IDirect3DRMDevice2(iface
);
326 FIXME("(%p/%p)->(): stub\n", iface
, This
);
331 static DWORD WINAPI
IDirect3DRMDevice2Impl_GetShades(IDirect3DRMDevice2
* iface
)
333 IDirect3DRMDeviceImpl
*This
= impl_from_IDirect3DRMDevice2(iface
);
335 FIXME("(%p/%p)->(): stub\n", iface
, This
);
340 static DWORD WINAPI
IDirect3DRMDevice2Impl_GetHeight(IDirect3DRMDevice2
* iface
)
342 IDirect3DRMDeviceImpl
*This
= impl_from_IDirect3DRMDevice2(iface
);
344 FIXME("(%p/%p)->(): stub\n", iface
, This
);
349 static DWORD WINAPI
IDirect3DRMDevice2Impl_GetWidth(IDirect3DRMDevice2
* iface
)
351 IDirect3DRMDeviceImpl
*This
= impl_from_IDirect3DRMDevice2(iface
);
353 FIXME("(%p/%p)->(): stub\n", iface
, This
);
358 static DWORD WINAPI
IDirect3DRMDevice2Impl_GetTrianglesDrawn(IDirect3DRMDevice2
* iface
)
360 IDirect3DRMDeviceImpl
*This
= impl_from_IDirect3DRMDevice2(iface
);
362 FIXME("(%p/%p)->(): stub\n", iface
, This
);
367 static DWORD WINAPI
IDirect3DRMDevice2Impl_GetWireframeOptions(IDirect3DRMDevice2
* iface
)
369 IDirect3DRMDeviceImpl
*This
= impl_from_IDirect3DRMDevice2(iface
);
371 FIXME("(%p/%p)->(): stub\n", iface
, This
);
376 static D3DRMRENDERQUALITY WINAPI
IDirect3DRMDevice2Impl_GetQuality(IDirect3DRMDevice2
* iface
)
378 IDirect3DRMDeviceImpl
*This
= impl_from_IDirect3DRMDevice2(iface
);
380 FIXME("(%p/%p)->(): stub\n", iface
, This
);
385 static D3DCOLORMODEL WINAPI
IDirect3DRMDevice2Impl_GetColorModel(IDirect3DRMDevice2
* iface
)
387 IDirect3DRMDeviceImpl
*This
= impl_from_IDirect3DRMDevice2(iface
);
389 FIXME("(%p/%p)->(): stub\n", iface
, This
);
394 static D3DRMTEXTUREQUALITY WINAPI
IDirect3DRMDevice2Impl_GetTextureQuality(IDirect3DRMDevice2
* iface
)
396 IDirect3DRMDeviceImpl
*This
= impl_from_IDirect3DRMDevice2(iface
);
398 FIXME("(%p/%p)->(): stub\n", iface
, This
);
403 static HRESULT WINAPI
IDirect3DRMDevice2Impl_GetDirect3DDevice(IDirect3DRMDevice2
* iface
,
404 LPDIRECT3DDEVICE
* dev
)
406 IDirect3DRMDeviceImpl
*This
= impl_from_IDirect3DRMDevice2(iface
);
408 FIXME("(%p/%p)->(%p): stub\n", iface
, This
, dev
);
413 static HRESULT WINAPI
IDirect3DRMDevice2Impl_InitFromD3D2(IDirect3DRMDevice2
* iface
,
415 LPDIRECT3DDEVICE2 lpD3DDev
)
417 IDirect3DRMDeviceImpl
*This
= impl_from_IDirect3DRMDevice2(iface
);
419 FIXME("(%p/%p)->(%p, %p): stub\n", iface
, This
, lpD3D
, lpD3DDev
);
424 static HRESULT WINAPI
IDirect3DRMDevice2Impl_InitFromSurface(IDirect3DRMDevice2
* iface
,
425 LPGUID lpGUID
, LPDIRECTDRAW lpDD
,
426 LPDIRECTDRAWSURFACE lpDDSBack
)
428 IDirect3DRMDeviceImpl
*This
= impl_from_IDirect3DRMDevice2(iface
);
430 FIXME("(%p/%p)->(%p, %p, %p): stub\n", iface
, This
, lpGUID
, lpDD
, lpDDSBack
);
435 static HRESULT WINAPI
IDirect3DRMDevice2Impl_SetRenderMode(IDirect3DRMDevice2
* iface
, DWORD dwFlags
)
437 IDirect3DRMDeviceImpl
*This
= impl_from_IDirect3DRMDevice2(iface
);
439 FIXME("(%p/%p)->(%u): stub\n", iface
, This
, dwFlags
);
444 static DWORD WINAPI
IDirect3DRMDevice2Impl_GetRenderMode(IDirect3DRMDevice2
* iface
)
446 IDirect3DRMDeviceImpl
*This
= impl_from_IDirect3DRMDevice2(iface
);
448 FIXME("(%p/%p)->(): stub\n", iface
, This
);
453 static HRESULT WINAPI
IDirect3DRMDevice2Impl_GetDirect3DDevice2(IDirect3DRMDevice2
* iface
,
454 LPDIRECT3DDEVICE2
* dev
)
456 IDirect3DRMDeviceImpl
*This
= impl_from_IDirect3DRMDevice2(iface
);
458 FIXME("(%p/%p)->(%p): stub\n", iface
, This
, dev
);
463 static const struct IDirect3DRMDevice2Vtbl Direct3DRMDevice2_Vtbl
=
465 /*** IUnknown methods ***/
466 IDirect3DRMDevice2Impl_QueryInterface
,
467 IDirect3DRMDevice2Impl_AddRef
,
468 IDirect3DRMDevice2Impl_Release
,
469 /*** IDirect3DRMObject methods ***/
470 IDirect3DRMDevice2Impl_Clone
,
471 IDirect3DRMDevice2Impl_AddDestroyCallback
,
472 IDirect3DRMDevice2Impl_DeleteDestroyCallback
,
473 IDirect3DRMDevice2Impl_SetAppData
,
474 IDirect3DRMDevice2Impl_GetAppData
,
475 IDirect3DRMDevice2Impl_SetName
,
476 IDirect3DRMDevice2Impl_GetName
,
477 IDirect3DRMDevice2Impl_GetClassName
,
478 /*** IDirect3DRMDevice methods ***/
479 IDirect3DRMDevice2Impl_Init
,
480 IDirect3DRMDevice2Impl_InitFromD3D
,
481 IDirect3DRMDevice2Impl_InitFromClipper
,
482 IDirect3DRMDevice2Impl_Update
,
483 IDirect3DRMDevice2Impl_AddUpdateCallback
,
484 IDirect3DRMDevice2Impl_DeleteUpdateCallback
,
485 IDirect3DRMDevice2Impl_SetBufferCount
,
486 IDirect3DRMDevice2Impl_GetBufferCount
,
487 IDirect3DRMDevice2Impl_SetDither
,
488 IDirect3DRMDevice2Impl_SetShades
,
489 IDirect3DRMDevice2Impl_SetQuality
,
490 IDirect3DRMDevice2Impl_SetTextureQuality
,
491 IDirect3DRMDevice2Impl_GetViewports
,
492 IDirect3DRMDevice2Impl_GetDither
,
493 IDirect3DRMDevice2Impl_GetShades
,
494 IDirect3DRMDevice2Impl_GetHeight
,
495 IDirect3DRMDevice2Impl_GetWidth
,
496 IDirect3DRMDevice2Impl_GetTrianglesDrawn
,
497 IDirect3DRMDevice2Impl_GetWireframeOptions
,
498 IDirect3DRMDevice2Impl_GetQuality
,
499 IDirect3DRMDevice2Impl_GetColorModel
,
500 IDirect3DRMDevice2Impl_GetTextureQuality
,
501 IDirect3DRMDevice2Impl_GetDirect3DDevice
,
502 /*** IDirect3DRMDevice2 methods ***/
503 IDirect3DRMDevice2Impl_InitFromD3D2
,
504 IDirect3DRMDevice2Impl_InitFromSurface
,
505 IDirect3DRMDevice2Impl_SetRenderMode
,
506 IDirect3DRMDevice2Impl_GetRenderMode
,
507 IDirect3DRMDevice2Impl_GetDirect3DDevice2