diff --git a/dlls/d3drm/d3drm.c b/dlls/d3drm/d3drm.c index 101d853bd5..32f07c510f 100644 --- a/dlls/d3drm/d3drm.c +++ b/dlls/d3drm/d3drm.c @@ -2,6 +2,7 @@ * Implementation of IDirect3DRM Interface * * Copyright 2010 Christian Costa + * Copyright 2011 André Hentschel * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -32,11 +33,13 @@ WINE_DEFAULT_DEBUG_CHANNEL(d3drm); typedef struct { IDirect3DRM IDirect3DRM_iface; IDirect3DRM2 IDirect3DRM2_iface; + IDirect3DRM3 IDirect3DRM3_iface; LONG ref; } IDirect3DRMImpl; static const struct IDirect3DRMVtbl Direct3DRM_Vtbl; static const struct IDirect3DRM2Vtbl Direct3DRM2_Vtbl; +static const struct IDirect3DRM3Vtbl Direct3DRM3_Vtbl; static inline IDirect3DRMImpl *impl_from_IDirect3DRM(IDirect3DRM *iface) { @@ -48,6 +51,11 @@ static inline IDirect3DRMImpl *impl_from_IDirect3DRM2(IDirect3DRM2 *iface) return CONTAINING_RECORD(iface, IDirect3DRMImpl, IDirect3DRM2_iface); } +static inline IDirect3DRMImpl *impl_from_IDirect3DRM3(IDirect3DRM3 *iface) +{ + return CONTAINING_RECORD(iface, IDirect3DRMImpl, IDirect3DRM3_iface); +} + HRESULT Direct3DRM_create(IUnknown** ppObj) { IDirect3DRMImpl* object; @@ -63,6 +71,7 @@ HRESULT Direct3DRM_create(IUnknown** ppObj) object->IDirect3DRM_iface.lpVtbl = &Direct3DRM_Vtbl; object->IDirect3DRM2_iface.lpVtbl = &Direct3DRM2_Vtbl; + object->IDirect3DRM3_iface.lpVtbl = &Direct3DRM3_Vtbl; object->ref = 1; *ppObj = (IUnknown*)&object->IDirect3DRM_iface; @@ -88,6 +97,10 @@ static HRESULT WINAPI IDirect3DRMImpl_QueryInterface(IDirect3DRM* iface, REFIID { *ppvObject = &This->IDirect3DRM2_iface; } + else if(IsEqualGUID(riid, &IID_IDirect3DRM3)) + { + *ppvObject = &This->IDirect3DRM3_iface; + } else { FIXME("interface %s not implemented\n", debugstr_guid(riid)); @@ -874,3 +887,481 @@ static const struct IDirect3DRM2Vtbl Direct3DRM2_Vtbl = IDirect3DRM2Impl_Tick, IDirect3DRM2Impl_CreateProgressiveMesh }; + + +/*** IUnknown methods ***/ +static HRESULT WINAPI IDirect3DRM3Impl_QueryInterface(IDirect3DRM3* iface, REFIID riid, + void** ppvObject) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface); + return IDirect3DRM_QueryInterface(&This->IDirect3DRM_iface, riid, ppvObject); +} + +static ULONG WINAPI IDirect3DRM3Impl_AddRef(IDirect3DRM3* iface) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface); + + TRACE("(%p/%p)\n", iface, This); + + return InterlockedIncrement(&This->ref); +} + +static ULONG WINAPI IDirect3DRM3Impl_Release(IDirect3DRM3* iface) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface); + ULONG ref = InterlockedDecrement(&This->ref); + + TRACE("(%p/%p)\n", iface, This); + + if (!ref) + HeapFree(GetProcessHeap(), 0, This); + + return ref; +} + +/*** IDirect3DRM3 methods ***/ +static HRESULT WINAPI IDirect3DRM3Impl_CreateObject(IDirect3DRM3* iface, REFCLSID rclsid, + LPUNKNOWN unkwn, REFIID riid, LPVOID* object) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface); + + FIXME("(%p/%p)->(%s,%p,%s,%p): stub\n", iface, This, debugstr_guid(rclsid), unkwn, + debugstr_guid(riid), object); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM3Impl_CreateFrame(IDirect3DRM3* iface, + LPDIRECT3DRMFRAME3 FrameParent, + LPDIRECT3DRMFRAME3* Frame) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface); + + FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, FrameParent, Frame); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM3Impl_CreateMesh(IDirect3DRM3* iface, LPDIRECT3DRMMESH* Mesh) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface); + + FIXME("(%p/%p)->(%p): stub\n", iface, This, Mesh); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM3Impl_CreateMeshBuilder(IDirect3DRM3* iface, + LPDIRECT3DRMMESHBUILDER3* ppMeshBuilder) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface); + + TRACE("(%p/%p)->(%p)\n", iface, This, ppMeshBuilder); + + return Direct3DRMMeshBuilder_create(&IID_IDirect3DRMMeshBuilder3, (IUnknown**)ppMeshBuilder); +} + +static HRESULT WINAPI IDirect3DRM3Impl_CreateFace(IDirect3DRM3* iface, LPDIRECT3DRMFACE2* Face) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface); + + FIXME("(%p/%p)->(%p): stub\n", iface, This, Face); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM3Impl_CreateAnimation(IDirect3DRM3* iface, + LPDIRECT3DRMANIMATION2* Animation) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface); + + FIXME("(%p/%p)->(%p): stub\n", iface, This, Animation); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM3Impl_CreateAnimationSet(IDirect3DRM3* iface, + LPDIRECT3DRMANIMATIONSET2* AnimationSet) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface); + + FIXME("(%p/%p)->(%p): stub\n", iface, This, AnimationSet); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM3Impl_CreateTexture(IDirect3DRM3* iface, LPD3DRMIMAGE Image, + LPDIRECT3DRMTEXTURE3* Texture) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface); + + FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, Image, Texture); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM3Impl_CreateLight(IDirect3DRM3* iface, D3DRMLIGHTTYPE type, + D3DCOLOR color, LPDIRECT3DRMLIGHT* Light) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface); + + FIXME("(%p/%p)->(%d,%d,%p): stub\n", iface, This, type, color, Light); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM3Impl_CreateLightRGB(IDirect3DRM3* iface, D3DRMLIGHTTYPE type, + D3DVALUE red, D3DVALUE green, D3DVALUE blue, + LPDIRECT3DRMLIGHT* Light) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface); + + FIXME("(%p/%p)->(%d,%f,%f,%f,%p): stub\n", iface, This, type, red, green, blue, Light); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM3Impl_Material(IDirect3DRM3* iface, D3DVALUE m, + LPDIRECT3DRMMATERIAL2* Material) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface); + + FIXME("(%p/%p)->(%f,%p): stub\n", iface, This, m, Material); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM3Impl_CreateDevice(IDirect3DRM3* iface, DWORD width, DWORD height, + LPDIRECT3DRMDEVICE3* device) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface); + + FIXME("(%p/%p)->(%d,%d,%p): stub\n", iface, This, width, height, device); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM3Impl_CreateDeviceFromSurface(IDirect3DRM3* iface, LPGUID pGUID, + LPDIRECTDRAW dd, + LPDIRECTDRAWSURFACE back, + LPDIRECT3DRMDEVICE3* device) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface); + + FIXME("(%p/%p)->(%s,%p,%p,%p): stub\n", iface, This, debugstr_guid(pGUID), dd, back, device); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM3Impl_CreateDeviceFromD3D(IDirect3DRM3* iface, LPDIRECT3D2 d3d, + LPDIRECT3DDEVICE2 d3ddev, + LPDIRECT3DRMDEVICE3* device) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface); + + FIXME("(%p/%p)->(%p,%p,%p): stub\n", iface, This, d3d, d3ddev, device); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM3Impl_CreateDeviceFromClipper(IDirect3DRM3* iface, + LPDIRECTDRAWCLIPPER clipper, + LPGUID GUID, int width, int height, + LPDIRECT3DRMDEVICE3* device) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface); + + FIXME("(%p/%p)->(%p,%s,%d,%d,%p): stub\n", iface, This, clipper, debugstr_guid(GUID), + width, height, device); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM3Impl_CreateShadow(IDirect3DRM3* iface, LPUNKNOWN Visual1, + LPDIRECT3DRMLIGHT Light, D3DVALUE px, + D3DVALUE py, D3DVALUE pz, D3DVALUE nx, + D3DVALUE ny, D3DVALUE nz, + LPDIRECT3DRMSHADOW2* Visual2) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface); + + FIXME("(%p/%p)->(%p,%p,%f,%f,%f,%f,%f,%f,%p): stub\n", iface, This, Visual1, Light, px, py, pz, + nx, ny, nz, Visual2); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM3Impl_CreateTextureFromSurface(IDirect3DRM3* iface, + LPDIRECTDRAWSURFACE surface, + LPDIRECT3DRMTEXTURE3* texture) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface); + + FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, surface, texture); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM3Impl_CreateViewport(IDirect3DRM3* iface, + LPDIRECT3DRMDEVICE3 Device, + LPDIRECT3DRMFRAME3 frame, DWORD xpos, + DWORD ypos, DWORD width, DWORD height, + LPDIRECT3DRMVIEWPORT2* viewport) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface); + + FIXME("(%p/%p)->(%p,%p,%d,%d,%d,%d,%p): stub\n", iface, This, Device, frame, xpos, ypos, width, + height, viewport); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM3Impl_CreateWrap(IDirect3DRM3* iface, D3DRMWRAPTYPE type, + LPDIRECT3DRMFRAME3 frame, + 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* wrap) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface); + + FIXME("(%p/%p)->(%d,%p,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%p): stub\n", iface, This, type, + frame, ox, oy, oz, dx, dy, dz, ux, uy, uz, ou, ov, su, sv, wrap); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM3Impl_CreateUserVisual(IDirect3DRM3* iface, + D3DRMUSERVISUALCALLBACK cb, LPVOID arg, + LPDIRECT3DRMUSERVISUAL* UserVisual) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface); + + FIXME("(%p/%p)->(%p,%p,%p): stub\n", iface, This, cb, arg, UserVisual); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM3Impl_LoadTexture(IDirect3DRM3* iface, const char* filename, + LPDIRECT3DRMTEXTURE3* Texture) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface); + + FIXME("(%p/%p)->(%s,%p): stub\n", iface, This, filename, Texture); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM3Impl_LoadTextureFromResource(IDirect3DRM3* iface, HMODULE mod, + LPCSTR strName, LPCSTR strType, + LPDIRECT3DRMTEXTURE3 * ppTexture) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface); + + FIXME("(%p/%p)->(%p,%p,%p,%p): stub\n", iface, This, mod, strName, strType, ppTexture); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM3Impl_SetSearchPath(IDirect3DRM3* iface, LPCSTR path) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface); + + FIXME("(%p/%p)->(%s): stub\n", iface, This, path); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM3Impl_AddSearchPath(IDirect3DRM3* iface, LPCSTR path) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface); + + FIXME("(%p/%p)->(%s): stub\n", iface, This, path); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM3Impl_GetSearchPath(IDirect3DRM3* iface, DWORD* size_return, + LPSTR path_return) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface); + + FIXME("(%p/%p)->(%p,%s): stub\n", iface, This, size_return, path_return); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM3Impl_SetDefaultTextureColors(IDirect3DRM3* iface, DWORD nb_colors) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface); + + FIXME("(%p/%p)->(%d): stub\n", iface, This, nb_colors); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM3Impl_SetDefaultTextureShades(IDirect3DRM3* iface, DWORD nb_shades) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface); + + FIXME("(%p/%p)->(%d): stub\n", iface, This, nb_shades); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM3Impl_GetDevices(IDirect3DRM3* iface, + LPDIRECT3DRMDEVICEARRAY* DeviceArray) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface); + + FIXME("(%p/%p)->(%p): stub\n", iface, This, DeviceArray); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM3Impl_GetNamedObject(IDirect3DRM3* iface, const char* Name, + LPDIRECT3DRMOBJECT* Object) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface); + + FIXME("(%p/%p)->(%s,%p): stub\n", iface, This, Name, Object); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM3Impl_EnumerateObjects(IDirect3DRM3* iface, D3DRMOBJECTCALLBACK cb, + LPVOID arg) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface); + + FIXME("(%p/%p)->(%p,%p): stub\n", iface, This, cb, arg); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM3Impl_Load(IDirect3DRM3* iface, LPVOID ObjSource, LPVOID ObjID, + LPIID* GUIDs, DWORD nb_GUIDs, D3DRMLOADOPTIONS LOFlags, + D3DRMLOADCALLBACK LoadProc, LPVOID ArgLP, + D3DRMLOADTEXTURECALLBACK LoadTextureProc, LPVOID ArgLTP, + LPDIRECT3DRMFRAME3 ParentFrame) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface); + + FIXME("(%p/%p)->(%p,%p,%p,%d,%d,%p,%p,%p,%p,%p): stub\n", iface, This, ObjSource, ObjID, GUIDs, + nb_GUIDs, LOFlags, LoadProc, ArgLP, LoadTextureProc, ArgLTP, ParentFrame); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM3Impl_Tick(IDirect3DRM3* iface, D3DVALUE tick) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface); + + FIXME("(%p/%p)->(%f): stub\n", iface, This, tick); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM3Impl_CreateProgressiveMesh(IDirect3DRM3* iface, + LPDIRECT3DRMPROGRESSIVEMESH Mesh) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface); + + FIXME("(%p/%p)->(%p): stub\n", iface, This, Mesh); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM3Impl_RegisterClient(IDirect3DRM3* iface, REFGUID rguid, + LPDWORD id) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface); + + FIXME("(%p/%p)->(%s, %p): stub\n", iface, This, debugstr_guid(rguid), id); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM3Impl_UnregisterClient(IDirect3DRM3* iface, REFGUID rguid) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface); + + FIXME("(%p/%p)->(%s): stub\n", iface, This, debugstr_guid(rguid)); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM3Impl_CreateClippedVisual(IDirect3DRM3* iface, + LPDIRECT3DRMVISUAL vis, + LPDIRECT3DRMCLIPPEDVISUAL* clippedvis) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface); + + FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, vis, clippedvis); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM3Impl_SetOptions(IDirect3DRM3* iface, DWORD opt) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface); + + FIXME("(%p/%p)->(%d): stub\n", iface, This, opt); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRM3Impl_GetOptions(IDirect3DRM3* iface, LPDWORD opt) +{ + IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface); + + FIXME("(%p/%p)->(%p): stub\n", iface, This, opt); + + return E_NOTIMPL; +} + +static const struct IDirect3DRM3Vtbl Direct3DRM3_Vtbl = +{ + IDirect3DRM3Impl_QueryInterface, + IDirect3DRM3Impl_AddRef, + IDirect3DRM3Impl_Release, + IDirect3DRM3Impl_CreateObject, + IDirect3DRM3Impl_CreateFrame, + IDirect3DRM3Impl_CreateMesh, + IDirect3DRM3Impl_CreateMeshBuilder, + IDirect3DRM3Impl_CreateFace, + IDirect3DRM3Impl_CreateAnimation, + IDirect3DRM3Impl_CreateAnimationSet, + IDirect3DRM3Impl_CreateTexture, + IDirect3DRM3Impl_CreateLight, + IDirect3DRM3Impl_CreateLightRGB, + IDirect3DRM3Impl_Material, + IDirect3DRM3Impl_CreateDevice, + IDirect3DRM3Impl_CreateDeviceFromSurface, + IDirect3DRM3Impl_CreateDeviceFromD3D, + IDirect3DRM3Impl_CreateDeviceFromClipper, + IDirect3DRM3Impl_CreateTextureFromSurface, + IDirect3DRM3Impl_CreateShadow, + IDirect3DRM3Impl_CreateViewport, + IDirect3DRM3Impl_CreateWrap, + IDirect3DRM3Impl_CreateUserVisual, + IDirect3DRM3Impl_LoadTexture, + IDirect3DRM3Impl_LoadTextureFromResource, + IDirect3DRM3Impl_SetSearchPath, + IDirect3DRM3Impl_AddSearchPath, + IDirect3DRM3Impl_GetSearchPath, + IDirect3DRM3Impl_SetDefaultTextureColors, + IDirect3DRM3Impl_SetDefaultTextureShades, + IDirect3DRM3Impl_GetDevices, + IDirect3DRM3Impl_GetNamedObject, + IDirect3DRM3Impl_EnumerateObjects, + IDirect3DRM3Impl_Load, + IDirect3DRM3Impl_Tick, + IDirect3DRM3Impl_CreateProgressiveMesh, + IDirect3DRM3Impl_RegisterClient, + IDirect3DRM3Impl_UnregisterClient, + IDirect3DRM3Impl_CreateClippedVisual, + IDirect3DRM3Impl_SetOptions, + IDirect3DRM3Impl_GetOptions +};