2 * Implementation of IDirect3DRM Interface
4 * Copyright 2010 Christian Costa
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
21 #include "wine/debug.h"
28 #include "d3drm_private.h"
30 WINE_DEFAULT_DEBUG_CHANNEL(d3drm
);
33 IDirect3DRM IDirect3DRM_iface
;
37 static const struct IDirect3DRMVtbl Direct3DRM_Vtbl
;
39 static inline IDirect3DRMImpl
*impl_from_IDirect3DRM(IDirect3DRM
*iface
)
41 return CONTAINING_RECORD(iface
, IDirect3DRMImpl
, IDirect3DRM_iface
);
44 HRESULT
Direct3DRM_create(LPDIRECT3DRM
* ppDirect3DRM
)
46 IDirect3DRMImpl
* object
;
48 TRACE("(%p)\n", ppDirect3DRM
);
50 object
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(IDirect3DRMImpl
));
53 ERR("Out of memory\n");
57 object
->IDirect3DRM_iface
.lpVtbl
= &Direct3DRM_Vtbl
;
60 *ppDirect3DRM
= (IDirect3DRM
*)object
;
65 /*** IUnknown methods ***/
66 static HRESULT WINAPI
IDirect3DRMImpl_QueryInterface(IDirect3DRM
* iface
, REFIID riid
, void** ppvObject
)
68 IDirect3DRMImpl
*This
= impl_from_IDirect3DRM(iface
);
70 TRACE("(%p/%p)->(%s,%p)\n", iface
, This
, debugstr_guid(riid
), ppvObject
);
72 if (IsEqualGUID(riid
, &IID_IUnknown
) ||
73 IsEqualGUID(riid
, &IID_IDirect3DRM
))
75 IUnknown_AddRef(iface
);
80 ERR("(%p)->(%s,%p),not found\n",This
,debugstr_guid(riid
),ppvObject
);
84 static ULONG WINAPI
IDirect3DRMImpl_AddRef(IDirect3DRM
* iface
)
86 IDirect3DRMImpl
*This
= impl_from_IDirect3DRM(iface
);
88 TRACE("(%p/%p)\n", iface
, This
);
90 return InterlockedIncrement(&This
->ref
);
93 static ULONG WINAPI
IDirect3DRMImpl_Release(IDirect3DRM
* iface
)
95 IDirect3DRMImpl
*This
= impl_from_IDirect3DRM(iface
);
96 ULONG ref
= InterlockedDecrement(&This
->ref
);
98 TRACE("(%p/%p)\n", iface
, This
);
101 HeapFree(GetProcessHeap(), 0, This
);
106 /*** IDirect3DRM methods ***/
107 static HRESULT WINAPI
IDirect3DRMImpl_CreateObject(IDirect3DRM
* iface
, REFCLSID rclsid
, LPUNKNOWN pUnkOuter
, REFIID riid
, LPVOID
*ppvObj
)
109 IDirect3DRMImpl
*This
= impl_from_IDirect3DRM(iface
);
111 FIXME("(%p/%p)->(%s,%p,%s,%p): stub\n", iface
, This
, debugstr_guid(rclsid
), pUnkOuter
, debugstr_guid(riid
), ppvObj
);
116 static HRESULT WINAPI
IDirect3DRMImpl_CreateFrame(IDirect3DRM
* iface
, LPDIRECT3DRMFRAME pFrameParent
, LPDIRECT3DRMFRAME
* ppFrame
)
118 IDirect3DRMImpl
*This
= impl_from_IDirect3DRM(iface
);
120 FIXME("(%p/%p)->(%p,%p): stub\n", iface
, This
, pFrameParent
, ppFrame
);
125 static HRESULT WINAPI
IDirect3DRMImpl_CreateMesh(IDirect3DRM
* iface
, LPDIRECT3DRMMESH
* ppMesh
)
127 IDirect3DRMImpl
*This
= impl_from_IDirect3DRM(iface
);
129 FIXME("(%p/%p)->(%p): stub\n", iface
, This
, ppMesh
);
134 static HRESULT WINAPI
IDirect3DRMImpl_CreateMeshBuilder(IDirect3DRM
* iface
, LPDIRECT3DRMMESHBUILDER
* ppMeshBuilder
)
136 IDirect3DRMImpl
*This
= impl_from_IDirect3DRM(iface
);
138 TRACE("(%p/%p)->(%p)\n", iface
, This
, ppMeshBuilder
);
140 return Direct3DRMMeshBuilder_create(ppMeshBuilder
);
143 static HRESULT WINAPI
IDirect3DRMImpl_CreateFace(IDirect3DRM
* iface
, LPDIRECT3DRMFACE
* ppFace
)
145 IDirect3DRMImpl
*This
= impl_from_IDirect3DRM(iface
);
147 FIXME("(%p/%p)->(%p): stub\n", iface
, This
, ppFace
);
152 static HRESULT WINAPI
IDirect3DRMImpl_CreateAnimation(IDirect3DRM
* iface
, LPDIRECT3DRMANIMATION
* ppAnimation
)
154 IDirect3DRMImpl
*This
= impl_from_IDirect3DRM(iface
);
156 FIXME("(%p/%p)->(%p): stub\n", iface
, This
, ppAnimation
);
161 static HRESULT WINAPI
IDirect3DRMImpl_CreateAnimationSet(IDirect3DRM
* iface
, LPDIRECT3DRMANIMATIONSET
* ppAnimationSet
)
163 IDirect3DRMImpl
*This
= impl_from_IDirect3DRM(iface
);
165 FIXME("(%p/%p)->(%p): stub\n", iface
, This
, ppAnimationSet
);
170 static HRESULT WINAPI
IDirect3DRMImpl_CreateTexture(IDirect3DRM
* iface
, LPD3DRMIMAGE pImage
, LPDIRECT3DRMTEXTURE
* ppTexture
)
172 IDirect3DRMImpl
*This
= impl_from_IDirect3DRM(iface
);
174 FIXME("(%p/%p)->(%p,%p): stub\n", iface
, This
, pImage
, ppTexture
);
179 static HRESULT WINAPI
IDirect3DRMImpl_CreateLight(IDirect3DRM
* iface
, D3DRMLIGHTTYPE type
, D3DCOLOR color
, LPDIRECT3DRMLIGHT
* ppLight
)
181 IDirect3DRMImpl
*This
= impl_from_IDirect3DRM(iface
);
183 FIXME("(%p/%p)->(%d,%d,%p): stub\n", iface
, This
, type
, color
, ppLight
);
188 static HRESULT WINAPI
IDirect3DRMImpl_CreateLightRGB(IDirect3DRM
* iface
, D3DRMLIGHTTYPE type
, D3DVALUE red
, D3DVALUE green
, D3DVALUE blue
, LPDIRECT3DRMLIGHT
* ppLight
)
190 IDirect3DRMImpl
*This
= impl_from_IDirect3DRM(iface
);
192 FIXME("(%p/%p)->(%d,%f,%f,%f,%p): stub\n", iface
, This
, type
, red
, green
, blue
, ppLight
);
197 static HRESULT WINAPI
IDirect3DRMImpl_Material(IDirect3DRM
* iface
, D3DVALUE m
, LPDIRECT3DRMMATERIAL
* ppMaterial
)
199 IDirect3DRMImpl
*This
= impl_from_IDirect3DRM(iface
);
201 FIXME("(%p/%p)->(%f,%p): stub\n", iface
, This
, m
, ppMaterial
);
206 static HRESULT WINAPI
IDirect3DRMImpl_CreateDevice(IDirect3DRM
* iface
, DWORD width
, DWORD height
, LPDIRECT3DRMDEVICE
* ppDevice
)
208 IDirect3DRMImpl
*This
= impl_from_IDirect3DRM(iface
);
210 FIXME("(%p/%p)->(%d,%d,%p): stub\n", iface
, This
, width
, height
, ppDevice
);
215 static HRESULT WINAPI
IDirect3DRMImpl_CreateDeviceFromSurface(IDirect3DRM
* iface
, LPGUID pGUID
, LPDIRECTDRAW pDD
, LPDIRECTDRAWSURFACE pDDSBack
, LPDIRECT3DRMDEVICE
* ppDevice
)
217 IDirect3DRMImpl
*This
= impl_from_IDirect3DRM(iface
);
219 FIXME("(%p/%p)->(%s,%p,%p,%p): stub\n", iface
, This
, debugstr_guid(pGUID
), pDD
, pDDSBack
, ppDevice
);
224 static HRESULT WINAPI
IDirect3DRMImpl_CreateDeviceFromD3D(IDirect3DRM
* iface
, LPDIRECT3D pD3D
, LPDIRECT3DDEVICE pD3DDev
, LPDIRECT3DRMDEVICE
* ppDevice
)
226 IDirect3DRMImpl
*This
= impl_from_IDirect3DRM(iface
);
228 FIXME("(%p/%p)->(%p,%p,%p): stub\n", iface
, This
, pD3D
, pD3DDev
, ppDevice
);
233 static HRESULT WINAPI
IDirect3DRMImpl_CreateDeviceFromClipper(IDirect3DRM
* iface
, LPDIRECTDRAWCLIPPER pDDClipper
, LPGUID pGUID
, int width
, int height
, LPDIRECT3DRMDEVICE
* ppDevice
)
235 IDirect3DRMImpl
*This
= impl_from_IDirect3DRM(iface
);
237 FIXME("(%p/%p)->(%p,%s,%d,%d,%p): stub\n", iface
, This
, pDDClipper
, debugstr_guid(pGUID
), width
, height
, ppDevice
);
242 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
)
244 IDirect3DRMImpl
*This
= impl_from_IDirect3DRM(iface
);
246 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
);
251 static HRESULT WINAPI
IDirect3DRMImpl_CreateTextureFromSurface(IDirect3DRM
* iface
, LPDIRECTDRAWSURFACE pDDS
, LPDIRECT3DRMTEXTURE
* ppTexture
)
253 IDirect3DRMImpl
*This
= impl_from_IDirect3DRM(iface
);
255 FIXME("(%p/%p)->(%p,%p): stub\n", iface
, This
, pDDS
, ppTexture
);
260 static HRESULT WINAPI
IDirect3DRMImpl_CreateViewport(IDirect3DRM
* iface
, LPDIRECT3DRMDEVICE pDevice
, LPDIRECT3DRMFRAME pFrame
, DWORD xpos
, DWORD ypos
, DWORD width
, DWORD height
, LPDIRECT3DRMVIEWPORT
* ppViewport
)
262 IDirect3DRMImpl
*This
= impl_from_IDirect3DRM(iface
);
264 FIXME("(%p/%p)->(%p,%p,%d,%d,%d,%d,%p): stub\n", iface
, This
, pDevice
, pFrame
, xpos
, ypos
, width
, height
, ppViewport
);
269 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
)
271 IDirect3DRMImpl
*This
= impl_from_IDirect3DRM(iface
);
273 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
);
278 static HRESULT WINAPI
IDirect3DRMImpl_CreateUserVisual(IDirect3DRM
* iface
, D3DRMUSERVISUALCALLBACK cb
, LPVOID pArg
, LPDIRECT3DRMUSERVISUAL
* ppUserVisual
)
280 IDirect3DRMImpl
*This
= impl_from_IDirect3DRM(iface
);
282 FIXME("(%p/%p)->(%p,%p,%p): stub\n", iface
, This
, cb
, pArg
, ppUserVisual
);
287 static HRESULT WINAPI
IDirect3DRMImpl_LoadTexture(IDirect3DRM
* iface
, const char * filename
, LPDIRECT3DRMTEXTURE
* ppTexture
)
289 IDirect3DRMImpl
*This
= impl_from_IDirect3DRM(iface
);
291 FIXME("(%p/%p)->(%s,%p): stub\n", iface
, This
, filename
, ppTexture
);
296 static HRESULT WINAPI
IDirect3DRMImpl_LoadTextureFromResource(IDirect3DRM
* iface
, HRSRC rs
, LPDIRECT3DRMTEXTURE
* ppTexture
)
298 IDirect3DRMImpl
*This
= impl_from_IDirect3DRM(iface
);
300 FIXME("(%p/%p)->(%p,%p): stub\n", iface
, This
, rs
, ppTexture
);
305 static HRESULT WINAPI
IDirect3DRMImpl_SetSearchPath(IDirect3DRM
* iface
, LPCSTR path
)
307 IDirect3DRMImpl
*This
= impl_from_IDirect3DRM(iface
);
309 FIXME("(%p/%p)->(%s): stub\n", iface
, This
, path
);
314 static HRESULT WINAPI
IDirect3DRMImpl_AddSearchPath(IDirect3DRM
* iface
, LPCSTR path
)
316 IDirect3DRMImpl
*This
= impl_from_IDirect3DRM(iface
);
318 FIXME("(%p/%p)->(%s): stub\n", iface
, This
, path
);
323 static HRESULT WINAPI
IDirect3DRMImpl_GetSearchPath(IDirect3DRM
* iface
, DWORD
*size_return
, LPSTR path_return
)
325 IDirect3DRMImpl
*This
= impl_from_IDirect3DRM(iface
);
327 FIXME("(%p/%p)->(%p,%s): stub\n", iface
, This
, size_return
, path_return
);
332 static HRESULT WINAPI
IDirect3DRMImpl_SetDefaultTextureColors(IDirect3DRM
* iface
, DWORD nb_colors
)
334 IDirect3DRMImpl
*This
= impl_from_IDirect3DRM(iface
);
336 FIXME("(%p/%p)->(%d): stub\n", iface
, This
, nb_colors
);
341 static HRESULT WINAPI
IDirect3DRMImpl_SetDefaultTextureShades(IDirect3DRM
* iface
, DWORD nb_shades
)
343 IDirect3DRMImpl
*This
= impl_from_IDirect3DRM(iface
);
345 FIXME("(%p/%p)->(%d): stub\n", iface
, This
, nb_shades
);
350 static HRESULT WINAPI
IDirect3DRMImpl_GetDevices(IDirect3DRM
* iface
, LPDIRECT3DRMDEVICEARRAY
* ppDeviceArray
)
352 IDirect3DRMImpl
*This
= impl_from_IDirect3DRM(iface
);
354 FIXME("(%p/%p)->(%p): stub\n", iface
, This
, ppDeviceArray
);
359 static HRESULT WINAPI
IDirect3DRMImpl_GetNamedObject(IDirect3DRM
* iface
, const char * pName
, LPDIRECT3DRMOBJECT
* ppObject
)
361 IDirect3DRMImpl
*This
= impl_from_IDirect3DRM(iface
);
363 FIXME("(%p/%p)->(%s,%p): stub\n", iface
, This
, pName
, ppObject
);
368 static HRESULT WINAPI
IDirect3DRMImpl_EnumerateObjects(IDirect3DRM
* iface
, D3DRMOBJECTCALLBACK cb
, LPVOID pArg
)
370 IDirect3DRMImpl
*This
= impl_from_IDirect3DRM(iface
);
372 FIXME("(%p/%p)->(%p,%p): stub\n", iface
, This
, cb
, pArg
);
377 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
)
379 IDirect3DRMImpl
*This
= impl_from_IDirect3DRM(iface
);
381 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
);
386 static HRESULT WINAPI
IDirect3DRMImpl_Tick(IDirect3DRM
* iface
, D3DVALUE tick
)
388 IDirect3DRMImpl
*This
= impl_from_IDirect3DRM(iface
);
390 FIXME("(%p/%p)->(%f): stub\n", iface
, This
, tick
);
395 static const struct IDirect3DRMVtbl Direct3DRM_Vtbl
=
397 IDirect3DRMImpl_QueryInterface
,
398 IDirect3DRMImpl_AddRef
,
399 IDirect3DRMImpl_Release
,
400 IDirect3DRMImpl_CreateObject
,
401 IDirect3DRMImpl_CreateFrame
,
402 IDirect3DRMImpl_CreateMesh
,
403 IDirect3DRMImpl_CreateMeshBuilder
,
404 IDirect3DRMImpl_CreateFace
,
405 IDirect3DRMImpl_CreateAnimation
,
406 IDirect3DRMImpl_CreateAnimationSet
,
407 IDirect3DRMImpl_CreateTexture
,
408 IDirect3DRMImpl_CreateLight
,
409 IDirect3DRMImpl_CreateLightRGB
,
410 IDirect3DRMImpl_Material
,
411 IDirect3DRMImpl_CreateDevice
,
412 IDirect3DRMImpl_CreateDeviceFromSurface
,
413 IDirect3DRMImpl_CreateDeviceFromD3D
,
414 IDirect3DRMImpl_CreateDeviceFromClipper
,
415 IDirect3DRMImpl_CreateShadow
,
416 IDirect3DRMImpl_CreateTextureFromSurface
,
417 IDirect3DRMImpl_CreateViewport
,
418 IDirect3DRMImpl_CreateWrap
,
419 IDirect3DRMImpl_CreateUserVisual
,
420 IDirect3DRMImpl_LoadTexture
,
421 IDirect3DRMImpl_LoadTextureFromResource
,
422 IDirect3DRMImpl_SetSearchPath
,
423 IDirect3DRMImpl_AddSearchPath
,
424 IDirect3DRMImpl_GetSearchPath
,
425 IDirect3DRMImpl_SetDefaultTextureColors
,
426 IDirect3DRMImpl_SetDefaultTextureShades
,
427 IDirect3DRMImpl_GetDevices
,
428 IDirect3DRMImpl_GetNamedObject
,
429 IDirect3DRMImpl_EnumerateObjects
,
430 IDirect3DRMImpl_Load
,