d3drm: Add IDirect3DRMDevice2 interface.
[wine.git] / dlls / d3drm / device.c
blob579edef70482d21e83988666ba4e65c7cddf48b7
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"
33 WINE_DEFAULT_DEBUG_CHANNEL(d3drm);
35 typedef struct {
36 IDirect3DRMDevice2 IDirect3DRMDevice2_iface;
37 LONG ref;
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));
54 if (!object)
56 ERR("Out of memory\n");
57 return E_OUTOFMEMORY;
60 object->IDirect3DRMDevice2_iface.lpVtbl = &Direct3DRMDevice2_Vtbl;
61 object->ref = 1;
63 *ppObj = (IUnknown*)object;
65 return S_OK;
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);
81 *object = This;
82 return S_OK;
85 ERR("(%p/%p)->(%s, %p),not found\n", iface, This, debugstr_guid(riid), object);
86 return E_NOINTERFACE;
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);
105 if (!ref)
106 HeapFree(GetProcessHeap(), 0, This);
108 return ref;
111 /*** IDirect3DRMObject methods ***/
112 static HRESULT WINAPI IDirect3DRMDevice2Impl_Clone(IDirect3DRMDevice2* iface,
113 LPUNKNOWN unkwn, REFIID riid,
114 LPVOID* object)
116 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
118 FIXME("(%p/%p)->(%p, %s, %p): stub\n", iface, This, unkwn, debugstr_guid(riid), object);
120 return E_NOTIMPL;
123 static HRESULT WINAPI IDirect3DRMDevice2Impl_AddDestroyCallback(IDirect3DRMDevice2* iface,
124 D3DRMOBJECTCALLBACK cb,
125 LPVOID argument)
127 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
129 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, cb, argument);
131 return E_NOTIMPL;
134 static HRESULT WINAPI IDirect3DRMDevice2Impl_DeleteDestroyCallback(IDirect3DRMDevice2* iface,
135 D3DRMOBJECTCALLBACK cb,
136 LPVOID argument)
138 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
140 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, cb, argument);
142 return E_NOTIMPL;
145 static HRESULT WINAPI IDirect3DRMDevice2Impl_SetAppData(IDirect3DRMDevice2* iface,
146 DWORD data)
148 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
150 FIXME("(%p/%p)->(%u): stub\n", iface, This, data);
152 return E_NOTIMPL;
155 static DWORD WINAPI IDirect3DRMDevice2Impl_GetAppData(IDirect3DRMDevice2* iface)
157 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
159 FIXME("(%p/%p)->(): stub\n", iface, This);
161 return 0;
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);
170 return E_NOTIMPL;
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);
180 return E_NOTIMPL;
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);
190 return E_NOTIMPL;
193 /*** IDirect3DRMDevice methods ***/
194 static HRESULT WINAPI IDirect3DRMDevice2Impl_Init(IDirect3DRMDevice2* iface, ULONG width,
195 ULONG height)
197 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
199 FIXME("(%p/%p)->(%u, %u): stub\n", iface, This, width, height);
201 return E_NOTIMPL;
204 static HRESULT WINAPI IDirect3DRMDevice2Impl_InitFromD3D(IDirect3DRMDevice2* iface,
205 LPDIRECT3D lpD3D,
206 LPDIRECT3DDEVICE lpD3DDev)
208 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
210 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, lpD3D, lpD3DDev);
212 return E_NOTIMPL;
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);
223 return E_NOTIMPL;
226 static HRESULT WINAPI IDirect3DRMDevice2Impl_Update(IDirect3DRMDevice2* iface)
228 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
230 FIXME("(%p/%p)->(): stub\n", iface, This);
232 return E_NOTIMPL;
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);
242 return E_NOTIMPL;
245 static HRESULT WINAPI IDirect3DRMDevice2Impl_DeleteUpdateCallback(IDirect3DRMDevice2* iface,
246 D3DRMUPDATECALLBACK cb,
247 LPVOID arg)
249 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
251 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, cb, arg);
253 return E_NOTIMPL;
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);
262 return E_NOTIMPL;
265 static DWORD WINAPI IDirect3DRMDevice2Impl_GetBufferCount(IDirect3DRMDevice2* iface)
267 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
269 FIXME("(%p/%p)->(): stub\n", iface, This);
271 return E_NOTIMPL;
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);
280 return S_OK;
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);
289 return E_NOTIMPL;
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);
299 return S_OK;
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);
309 return E_NOTIMPL;
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);
319 return E_NOTIMPL;
322 static BOOL WINAPI IDirect3DRMDevice2Impl_GetDither(IDirect3DRMDevice2* iface)
324 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
326 FIXME("(%p/%p)->(): stub\n", iface, This);
328 return E_NOTIMPL;
331 static DWORD WINAPI IDirect3DRMDevice2Impl_GetShades(IDirect3DRMDevice2* iface)
333 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
335 FIXME("(%p/%p)->(): stub\n", iface, This);
337 return E_NOTIMPL;
340 static DWORD WINAPI IDirect3DRMDevice2Impl_GetHeight(IDirect3DRMDevice2* iface)
342 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
344 FIXME("(%p/%p)->(): stub\n", iface, This);
346 return E_NOTIMPL;
349 static DWORD WINAPI IDirect3DRMDevice2Impl_GetWidth(IDirect3DRMDevice2* iface)
351 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
353 FIXME("(%p/%p)->(): stub\n", iface, This);
355 return E_NOTIMPL;
358 static DWORD WINAPI IDirect3DRMDevice2Impl_GetTrianglesDrawn(IDirect3DRMDevice2* iface)
360 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
362 FIXME("(%p/%p)->(): stub\n", iface, This);
364 return E_NOTIMPL;
367 static DWORD WINAPI IDirect3DRMDevice2Impl_GetWireframeOptions(IDirect3DRMDevice2* iface)
369 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
371 FIXME("(%p/%p)->(): stub\n", iface, This);
373 return E_NOTIMPL;
376 static D3DRMRENDERQUALITY WINAPI IDirect3DRMDevice2Impl_GetQuality(IDirect3DRMDevice2* iface)
378 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
380 FIXME("(%p/%p)->(): stub\n", iface, This);
382 return E_NOTIMPL;
385 static D3DCOLORMODEL WINAPI IDirect3DRMDevice2Impl_GetColorModel(IDirect3DRMDevice2* iface)
387 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
389 FIXME("(%p/%p)->(): stub\n", iface, This);
391 return E_NOTIMPL;
394 static D3DRMTEXTUREQUALITY WINAPI IDirect3DRMDevice2Impl_GetTextureQuality(IDirect3DRMDevice2* iface)
396 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
398 FIXME("(%p/%p)->(): stub\n", iface, This);
400 return E_NOTIMPL;
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);
410 return E_NOTIMPL;
413 static HRESULT WINAPI IDirect3DRMDevice2Impl_InitFromD3D2(IDirect3DRMDevice2* iface,
414 LPDIRECT3D2 lpD3D,
415 LPDIRECT3DDEVICE2 lpD3DDev)
417 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
419 FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, lpD3D, lpD3DDev);
421 return E_NOTIMPL;
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);
432 return E_NOTIMPL;
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);
441 return S_OK;
444 static DWORD WINAPI IDirect3DRMDevice2Impl_GetRenderMode(IDirect3DRMDevice2* iface)
446 IDirect3DRMDeviceImpl *This = impl_from_IDirect3DRMDevice2(iface);
448 FIXME("(%p/%p)->(): stub\n", iface, This);
450 return E_NOTIMPL;
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);
460 return E_NOTIMPL;
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