comctl32/imagelist: Add support for 25% and 50% blending when using an alpha channel.
[wine/multimedia.git] / dlls / d3drm / d3drm.c
blob30d2a4a989298d5848dd6f75b10402a36451fa71
1 /*
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"
23 #define COBJMACROS
25 #include "winbase.h"
26 #include "wingdi.h"
28 #include "d3drm_private.h"
30 WINE_DEFAULT_DEBUG_CHANNEL(d3drm);
32 typedef struct {
33 const IDirect3DRMVtbl *lpVtbl;
34 LONG ref;
35 } IDirect3DRMImpl;
37 static const struct IDirect3DRMVtbl Direct3DRM_Vtbl;
39 HRESULT Direct3DRM_create(LPDIRECT3DRM* ppDirect3DRM)
41 IDirect3DRMImpl* object;
43 TRACE("(%p)\n", ppDirect3DRM);
45 object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirect3DRMImpl));
46 if (!object)
48 ERR("Out of memory\n");
49 return E_OUTOFMEMORY;
52 object->lpVtbl = &Direct3DRM_Vtbl;
53 object->ref = 1;
55 *ppDirect3DRM = (IDirect3DRM*)object;
57 return S_OK;
60 /*** IUnknown methods ***/
61 static HRESULT WINAPI IDirect3DRMImpl_QueryInterface(IDirect3DRM* iface, REFIID riid, void** ppvObject)
63 IDirect3DRMImpl *This = (IDirect3DRMImpl *)iface;
65 TRACE("(%p/%p)->(%s,%p)\n", iface, This, debugstr_guid(riid), ppvObject);
67 if (IsEqualGUID(riid, &IID_IUnknown) ||
68 IsEqualGUID(riid, &IID_IDirect3DRM))
70 IUnknown_AddRef(iface);
71 *ppvObject = This;
72 return S_OK;
75 ERR("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppvObject);
76 return E_NOINTERFACE;
79 static ULONG WINAPI IDirect3DRMImpl_AddRef(IDirect3DRM* iface)
81 IDirect3DRMImpl *This = (IDirect3DRMImpl *)iface;
83 TRACE("(%p/%p)\n", iface, This);
85 return InterlockedIncrement(&This->ref);
88 static ULONG WINAPI IDirect3DRMImpl_Release(IDirect3DRM* iface)
90 IDirect3DRMImpl *This = (IDirect3DRMImpl *)iface;
91 ULONG ref = InterlockedDecrement(&This->ref);
93 TRACE("(%p/%p)\n", iface, This);
95 if (!ref)
96 HeapFree(GetProcessHeap(), 0, This);
98 return ref;
101 /*** IDirect3DRM methods ***/
102 static HRESULT WINAPI IDirect3DRMImpl_CreateObject(IDirect3DRM* iface, REFCLSID rclsid, LPUNKNOWN pUnkOuter, REFIID riid, LPVOID *ppvObj)
104 IDirect3DRMImpl *This = (IDirect3DRMImpl *)iface;
106 FIXME("(%p/%p)->(%s,%p,%s,%p): stub\n", iface, This, debugstr_guid(rclsid), pUnkOuter, debugstr_guid(riid), ppvObj);
108 return E_NOTIMPL;
111 static HRESULT WINAPI IDirect3DRMImpl_CreateFrame(IDirect3DRM* iface, LPDIRECT3DRMFRAME pFrameParent, LPDIRECT3DRMFRAME * ppFrame)
113 IDirect3DRMImpl *This = (IDirect3DRMImpl *)iface;
115 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, pFrameParent, ppFrame);
117 return E_NOTIMPL;
120 static HRESULT WINAPI IDirect3DRMImpl_CreateMesh(IDirect3DRM* iface, LPDIRECT3DRMMESH * ppMesh)
122 IDirect3DRMImpl *This = (IDirect3DRMImpl *)iface;
124 FIXME("(%p/%p)->(%p): stub\n", iface, This, ppMesh);
126 return E_NOTIMPL;
129 static HRESULT WINAPI IDirect3DRMImpl_CreateMeshBuilder(IDirect3DRM* iface, LPDIRECT3DRMMESHBUILDER * ppMeshBuilder)
131 IDirect3DRMImpl *This = (IDirect3DRMImpl *)iface;
133 TRACE("(%p/%p)->(%p)\n", iface, This, ppMeshBuilder);
135 return Direct3DRMMeshBuilder_create(ppMeshBuilder);
138 static HRESULT WINAPI IDirect3DRMImpl_CreateFace(IDirect3DRM* iface, LPDIRECT3DRMFACE * ppFace)
140 IDirect3DRMImpl *This = (IDirect3DRMImpl *)iface;
142 FIXME("(%p/%p)->(%p): stub\n", iface, This, ppFace);
144 return E_NOTIMPL;
147 static HRESULT WINAPI IDirect3DRMImpl_CreateAnimation(IDirect3DRM* iface, LPDIRECT3DRMANIMATION * ppAnimation)
149 IDirect3DRMImpl *This = (IDirect3DRMImpl *)iface;
151 FIXME("(%p/%p)->(%p): stub\n", iface, This, ppAnimation);
153 return E_NOTIMPL;
156 static HRESULT WINAPI IDirect3DRMImpl_CreateAnimationSet(IDirect3DRM* iface, LPDIRECT3DRMANIMATIONSET * ppAnimationSet)
158 IDirect3DRMImpl *This = (IDirect3DRMImpl *)iface;
160 FIXME("(%p/%p)->(%p): stub\n", iface, This, ppAnimationSet);
162 return E_NOTIMPL;
165 static HRESULT WINAPI IDirect3DRMImpl_CreateTexture(IDirect3DRM* iface, LPD3DRMIMAGE pImage, LPDIRECT3DRMTEXTURE * ppTexture)
167 IDirect3DRMImpl *This = (IDirect3DRMImpl *)iface;
169 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, pImage, ppTexture);
171 return E_NOTIMPL;
174 static HRESULT WINAPI IDirect3DRMImpl_CreateLight(IDirect3DRM* iface, D3DRMLIGHTTYPE type, D3DCOLOR color, LPDIRECT3DRMLIGHT * ppLight)
176 IDirect3DRMImpl *This = (IDirect3DRMImpl *)iface;
178 FIXME("(%p/%p)->(%d,%d,%p): stub\n", iface, This, type, color, ppLight);
180 return E_NOTIMPL;
183 static HRESULT WINAPI IDirect3DRMImpl_CreateLightRGB(IDirect3DRM* iface, D3DRMLIGHTTYPE type, D3DVALUE red, D3DVALUE green, D3DVALUE blue, LPDIRECT3DRMLIGHT * ppLight)
185 IDirect3DRMImpl *This = (IDirect3DRMImpl *)iface;
187 FIXME("(%p/%p)->(%d,%f,%f,%f,%p): stub\n", iface, This, type, red, green, blue, ppLight);
189 return E_NOTIMPL;
192 static HRESULT WINAPI IDirect3DRMImpl_Material(IDirect3DRM* iface, D3DVALUE m, LPDIRECT3DRMMATERIAL * ppMaterial)
194 IDirect3DRMImpl *This = (IDirect3DRMImpl *)iface;
196 FIXME("(%p/%p)->(%f,%p): stub\n", iface, This, m, ppMaterial);
198 return E_NOTIMPL;
201 static HRESULT WINAPI IDirect3DRMImpl_CreateDevice(IDirect3DRM* iface, DWORD width, DWORD height, LPDIRECT3DRMDEVICE * ppDevice)
203 IDirect3DRMImpl *This = (IDirect3DRMImpl *)iface;
205 FIXME("(%p/%p)->(%d,%d,%p): stub\n", iface, This, width, height, ppDevice);
207 return E_NOTIMPL;
210 static HRESULT WINAPI IDirect3DRMImpl_CreateDeviceFromSurface(IDirect3DRM* iface, LPGUID pGUID, LPDIRECTDRAW pDD, LPDIRECTDRAWSURFACE pDDSBack, LPDIRECT3DRMDEVICE * ppDevice)
212 IDirect3DRMImpl *This = (IDirect3DRMImpl *)iface;
214 FIXME("(%p/%p)->(%s,%p,%p,%p): stub\n", iface, This, debugstr_guid(pGUID), pDD, pDDSBack, ppDevice);
216 return E_NOTIMPL;
219 static HRESULT WINAPI IDirect3DRMImpl_CreateDeviceFromD3D(IDirect3DRM* iface, LPDIRECT3D pD3D, LPDIRECT3DDEVICE pD3DDev, LPDIRECT3DRMDEVICE * ppDevice)
221 IDirect3DRMImpl *This = (IDirect3DRMImpl *)iface;
223 FIXME("(%p/%p)->(%p,%p,%p): stub\n", iface, This, pD3D, pD3DDev, ppDevice);
225 return E_NOTIMPL;
228 static HRESULT WINAPI IDirect3DRMImpl_CreateDeviceFromClipper(IDirect3DRM* iface, LPDIRECTDRAWCLIPPER pDDClipper, LPGUID pGUID, int width, int height, LPDIRECT3DRMDEVICE * ppDevice)
230 IDirect3DRMImpl *This = (IDirect3DRMImpl *)iface;
232 FIXME("(%p/%p)->(%p,%s,%d,%d,%p): stub\n", iface, This, pDDClipper, debugstr_guid(pGUID), width, height, ppDevice);
234 return E_NOTIMPL;
237 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)
239 IDirect3DRMImpl *This = (IDirect3DRMImpl *)iface;
241 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);
243 return E_NOTIMPL;
246 static HRESULT WINAPI IDirect3DRMImpl_CreateTextureFromSurface(IDirect3DRM* iface, LPDIRECTDRAWSURFACE pDDS, LPDIRECT3DRMTEXTURE * ppTexture)
248 IDirect3DRMImpl *This = (IDirect3DRMImpl *)iface;
250 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, pDDS, ppTexture);
252 return E_NOTIMPL;
255 static HRESULT WINAPI IDirect3DRMImpl_CreateViewport(IDirect3DRM* iface, LPDIRECT3DRMDEVICE pDevice, LPDIRECT3DRMFRAME pFrame, DWORD xpos, DWORD ypos, DWORD width, DWORD height, LPDIRECT3DRMVIEWPORT * ppViewport)
257 IDirect3DRMImpl *This = (IDirect3DRMImpl *)iface;
259 FIXME("(%p/%p)->(%p,%p,%d,%d,%d,%d,%p): stub\n", iface, This, pDevice, pFrame, xpos, ypos, width, height, ppViewport);
261 return E_NOTIMPL;
264 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)
266 IDirect3DRMImpl *This = (IDirect3DRMImpl *)iface;
268 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);
270 return E_NOTIMPL;
273 static HRESULT WINAPI IDirect3DRMImpl_CreateUserVisual(IDirect3DRM* iface, D3DRMUSERVISUALCALLBACK cb, LPVOID pArg, LPDIRECT3DRMUSERVISUAL * ppUserVisual)
275 IDirect3DRMImpl *This = (IDirect3DRMImpl *)iface;
277 FIXME("(%p/%p)->(%p,%p,%p): stub\n", iface, This, cb, pArg, ppUserVisual);
279 return E_NOTIMPL;
282 static HRESULT WINAPI IDirect3DRMImpl_LoadTexture(IDirect3DRM* iface, const char * filename, LPDIRECT3DRMTEXTURE * ppTexture)
284 IDirect3DRMImpl *This = (IDirect3DRMImpl *)iface;
286 FIXME("(%p/%p)->(%s,%p): stub\n", iface, This, filename, ppTexture);
288 return E_NOTIMPL;
291 static HRESULT WINAPI IDirect3DRMImpl_LoadTextureFromResource(IDirect3DRM* iface, HRSRC rs, LPDIRECT3DRMTEXTURE * ppTexture)
293 IDirect3DRMImpl *This = (IDirect3DRMImpl *)iface;
295 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, rs, ppTexture);
297 return E_NOTIMPL;
300 static HRESULT WINAPI IDirect3DRMImpl_SetSearchPath(IDirect3DRM* iface, LPCSTR path)
302 IDirect3DRMImpl *This = (IDirect3DRMImpl *)iface;
304 FIXME("(%p/%p)->(%s): stub\n", iface, This, path);
306 return E_NOTIMPL;
309 static HRESULT WINAPI IDirect3DRMImpl_AddSearchPath(IDirect3DRM* iface, LPCSTR path)
311 IDirect3DRMImpl *This = (IDirect3DRMImpl *)iface;
313 FIXME("(%p/%p)->(%s): stub\n", iface, This, path);
315 return E_NOTIMPL;
318 static HRESULT WINAPI IDirect3DRMImpl_GetSearchPath(IDirect3DRM* iface, DWORD *size_return, LPSTR path_return)
320 IDirect3DRMImpl *This = (IDirect3DRMImpl *)iface;
322 FIXME("(%p/%p)->(%p,%s): stub\n", iface, This, size_return, path_return);
324 return E_NOTIMPL;
327 static HRESULT WINAPI IDirect3DRMImpl_SetDefaultTextureColors(IDirect3DRM* iface, DWORD nb_colors)
329 IDirect3DRMImpl *This = (IDirect3DRMImpl *)iface;
331 FIXME("(%p/%p)->(%d): stub\n", iface, This, nb_colors);
333 return E_NOTIMPL;
336 static HRESULT WINAPI IDirect3DRMImpl_SetDefaultTextureShades(IDirect3DRM* iface, DWORD nb_shades)
338 IDirect3DRMImpl *This = (IDirect3DRMImpl *)iface;
340 FIXME("(%p/%p)->(%d): stub\n", iface, This, nb_shades);
342 return E_NOTIMPL;
345 static HRESULT WINAPI IDirect3DRMImpl_GetDevices(IDirect3DRM* iface, LPDIRECT3DRMDEVICEARRAY * ppDeviceArray)
347 IDirect3DRMImpl *This = (IDirect3DRMImpl *)iface;
349 FIXME("(%p/%p)->(%p): stub\n", iface, This, ppDeviceArray);
351 return E_NOTIMPL;
354 static HRESULT WINAPI IDirect3DRMImpl_GetNamedObject(IDirect3DRM* iface, const char * pName, LPDIRECT3DRMOBJECT * ppObject)
356 IDirect3DRMImpl *This = (IDirect3DRMImpl *)iface;
358 FIXME("(%p/%p)->(%s,%p): stub\n", iface, This, pName, ppObject);
360 return E_NOTIMPL;
363 static HRESULT WINAPI IDirect3DRMImpl_EnumerateObjects(IDirect3DRM* iface, D3DRMOBJECTCALLBACK cb, LPVOID pArg)
365 IDirect3DRMImpl *This = (IDirect3DRMImpl *)iface;
367 FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, cb, pArg);
369 return E_NOTIMPL;
372 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)
374 IDirect3DRMImpl *This = (IDirect3DRMImpl *)iface;
376 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);
378 return E_NOTIMPL;
381 static HRESULT WINAPI IDirect3DRMImpl_Tick(IDirect3DRM* iface, D3DVALUE tick)
383 IDirect3DRMImpl *This = (IDirect3DRMImpl *)iface;
385 FIXME("(%p/%p)->(%f): stub\n", iface, This, tick);
387 return E_NOTIMPL;
390 static const struct IDirect3DRMVtbl Direct3DRM_Vtbl =
392 IDirect3DRMImpl_QueryInterface,
393 IDirect3DRMImpl_AddRef,
394 IDirect3DRMImpl_Release,
395 IDirect3DRMImpl_CreateObject,
396 IDirect3DRMImpl_CreateFrame,
397 IDirect3DRMImpl_CreateMesh,
398 IDirect3DRMImpl_CreateMeshBuilder,
399 IDirect3DRMImpl_CreateFace,
400 IDirect3DRMImpl_CreateAnimation,
401 IDirect3DRMImpl_CreateAnimationSet,
402 IDirect3DRMImpl_CreateTexture,
403 IDirect3DRMImpl_CreateLight,
404 IDirect3DRMImpl_CreateLightRGB,
405 IDirect3DRMImpl_Material,
406 IDirect3DRMImpl_CreateDevice,
407 IDirect3DRMImpl_CreateDeviceFromSurface,
408 IDirect3DRMImpl_CreateDeviceFromD3D,
409 IDirect3DRMImpl_CreateDeviceFromClipper,
410 IDirect3DRMImpl_CreateShadow,
411 IDirect3DRMImpl_CreateTextureFromSurface,
412 IDirect3DRMImpl_CreateViewport,
413 IDirect3DRMImpl_CreateWrap,
414 IDirect3DRMImpl_CreateUserVisual,
415 IDirect3DRMImpl_LoadTexture,
416 IDirect3DRMImpl_LoadTextureFromResource,
417 IDirect3DRMImpl_SetSearchPath,
418 IDirect3DRMImpl_AddSearchPath,
419 IDirect3DRMImpl_GetSearchPath,
420 IDirect3DRMImpl_SetDefaultTextureColors,
421 IDirect3DRMImpl_SetDefaultTextureShades,
422 IDirect3DRMImpl_GetDevices,
423 IDirect3DRMImpl_GetNamedObject,
424 IDirect3DRMImpl_EnumerateObjects,
425 IDirect3DRMImpl_Load,
426 IDirect3DRMImpl_Tick