diff --git a/dlls/d3drm/Makefile.in b/dlls/d3drm/Makefile.in index 9c1d1a5b30c..0802430d332 100644 --- a/dlls/d3drm/Makefile.in +++ b/dlls/d3drm/Makefile.in @@ -11,6 +11,7 @@ C_SRCS = \ material.c \ math.c \ meshbuilder.c \ + texture.c \ viewport.c RC_SRCS = version.rc diff --git a/dlls/d3drm/d3drm_private.h b/dlls/d3drm/d3drm_private.h index ae561246e32..3a8982dc0c3 100644 --- a/dlls/d3drm/d3drm_private.h +++ b/dlls/d3drm/d3drm_private.h @@ -31,6 +31,7 @@ HRESULT Direct3DRMLight_create(IUnknown** ppObj) DECLSPEC_HIDDEN; HRESULT Direct3DRMMeshBuilder_create(REFIID riid, IUnknown** ppObj) DECLSPEC_HIDDEN; HRESULT Direct3DRMViewport_create(REFIID riid, IUnknown** ppObj) DECLSPEC_HIDDEN; HRESULT Direct3DRMMaterial_create(IDirect3DRMMaterial2** ret_iface) DECLSPEC_HIDDEN; +HRESULT Direct3DRMTexture_create(REFIID riid, IUnknown** ret_iface) DECLSPEC_HIDDEN; HRESULT load_mesh_data(IDirect3DRMMeshBuilder3* iface, LPDIRECTXFILEDATA pData) DECLSPEC_HIDDEN; diff --git a/dlls/d3drm/texture.c b/dlls/d3drm/texture.c new file mode 100644 index 00000000000..44a9061b2d7 --- /dev/null +++ b/dlls/d3drm/texture.c @@ -0,0 +1,843 @@ +/* + * Implementation of IDirect3DRMTextureX interfaces + * + * Copyright 2012 Christian Costa + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "wine/debug.h" + +#define COBJMACROS + +#include "winbase.h" +#include "wingdi.h" + +#include "d3drm_private.h" + +WINE_DEFAULT_DEBUG_CHANNEL(d3drm); + +typedef struct { + IDirect3DRMTexture2 IDirect3DRMTexture2_iface; + IDirect3DRMTexture3 IDirect3DRMTexture3_iface; + LONG ref; +} IDirect3DRMTextureImpl; + +static inline IDirect3DRMTextureImpl *impl_from_IDirect3DRMTexture2(IDirect3DRMTexture2 *iface) +{ + return CONTAINING_RECORD(iface, IDirect3DRMTextureImpl, IDirect3DRMTexture2_iface); +} + +static inline IDirect3DRMTextureImpl *impl_from_IDirect3DRMTexture3(IDirect3DRMTexture3 *iface) +{ + return CONTAINING_RECORD(iface, IDirect3DRMTextureImpl, IDirect3DRMTexture3_iface); +} + +/*** IUnknown methods ***/ +static HRESULT WINAPI IDirect3DRMTexture2Impl_QueryInterface(IDirect3DRMTexture2* iface, + REFIID riid, void** object) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture2(iface); + + TRACE("(%p)->(%s, %p)\n", iface, debugstr_guid(riid), object); + + *object = NULL; + + if (IsEqualGUID(riid, &IID_IUnknown) || + IsEqualGUID(riid, &IID_IDirect3DRMTexture) || + IsEqualGUID(riid, &IID_IDirect3DRMTexture2)) + { + *object = &This->IDirect3DRMTexture2_iface; + } + else if IsEqualGUID(riid, &IID_IDirect3DRMTexture3) + { + *object = &This->IDirect3DRMTexture3_iface; + } + else + { + FIXME("Interface %s not implemented\n", debugstr_guid(riid)); + return E_NOINTERFACE; + } + + IDirect3DRMTexture3_AddRef(iface); + + return S_OK; +} + +static ULONG WINAPI IDirect3DRMTexture2Impl_AddRef(IDirect3DRMTexture2* iface) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture2(iface); + ULONG ref = InterlockedIncrement(&This->ref); + + TRACE("(%p)->(): new ref = %d\n", iface, ref); + + return ref; +} + +static ULONG WINAPI IDirect3DRMTexture2Impl_Release(IDirect3DRMTexture2* iface) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture2(iface); + ULONG ref = InterlockedDecrement(&This->ref); + + TRACE("(%p)->(): new ref = %d\n", iface, ref); + + if (!ref) + HeapFree(GetProcessHeap(), 0, This); + + return ref; +} + +/*** IDirect3DRMObject methods ***/ +static HRESULT WINAPI IDirect3DRMTexture2Impl_Clone(IDirect3DRMTexture2* iface, + LPUNKNOWN unknown, REFIID riid, + LPVOID* object) +{ + FIXME("(%p)->(%p, %s, %p): stub\n", iface, unknown, debugstr_guid(riid), object); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRMTexture2Impl_AddDestroyCallback(IDirect3DRMTexture2* iface, + D3DRMOBJECTCALLBACK cb, + LPVOID argument) +{ + FIXME("(%p)->(%p, %p): stub\n", iface, cb, argument); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRMTexture2Impl_DeleteDestroyCallback(IDirect3DRMTexture2* iface, + D3DRMOBJECTCALLBACK cb, + LPVOID argument) +{ + FIXME("(%p)->(%p, %p): stub\n", iface, cb, argument); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRMTexture2Impl_SetAppData(IDirect3DRMTexture2* iface, + DWORD data) +{ + FIXME("(%p)->(%u): stub\n", iface, data); + + return E_NOTIMPL; +} + +static DWORD WINAPI IDirect3DRMTexture2Impl_GetAppData(IDirect3DRMTexture2* iface) +{ + FIXME("(%p)->(): stub\n", iface); + + return 0; +} + +static HRESULT WINAPI IDirect3DRMTexture2Impl_SetName(IDirect3DRMTexture2* iface, LPCSTR name) +{ + FIXME("(%p)->(%s): stub\n", iface, name); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRMTexture2Impl_GetName(IDirect3DRMTexture2* iface, + LPDWORD size, LPSTR name) +{ + FIXME("(%p)->(%p, %p): stub\n", iface, size, name); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRMTexture2Impl_GetClassName(IDirect3DRMTexture2* iface, + LPDWORD size, LPSTR name) +{ + FIXME("(%p)->(%p, %p): stub\n", iface, size, name); + + return E_NOTIMPL; +} + +/*** IDirect3DRMTexture3 methods ***/ +static HRESULT WINAPI IDirect3DRMTexture2Impl_InitFromFile(IDirect3DRMTexture2* iface, const char *filename) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture2(iface); + + FIXME("(%p/%p)->(%s): stub\n", iface, This, debugstr_a(filename)); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRMTexture2Impl_InitFromSurface(IDirect3DRMTexture2* iface, LPDIRECTDRAWSURFACE surface) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture2(iface); + + FIXME("(%p/%p)->(%p): stub\n", iface, This, surface); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRMTexture2Impl_InitFromResource(IDirect3DRMTexture2* iface, HRSRC resource) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture2(iface); + + FIXME("(%p/%p)->(%p): stub\n", iface, This, resource); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRMTexture2Impl_Changed(IDirect3DRMTexture2* iface, BOOL pixels, BOOL palette) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture2(iface); + + FIXME("(%p/%p)->(%u, %u): stub\n", iface, This, pixels, palette); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRMTexture2Impl_SetColors(IDirect3DRMTexture2* iface, DWORD max_colors) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture2(iface); + + FIXME("(%p/%p)->(%u): stub\n", iface, This, max_colors); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRMTexture2Impl_SetShades(IDirect3DRMTexture2* iface, DWORD max_shades) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture2(iface); + + FIXME("(%p/%p)->(%u): stub\n", iface, This, max_shades); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRMTexture2Impl_SetDecalSize(IDirect3DRMTexture2* iface, D3DVALUE width, D3DVALUE height) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture2(iface); + + FIXME("(%p/%p)->(%f, %f): stub\n", iface, This, width, height); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRMTexture2Impl_SetDecalOrigin(IDirect3DRMTexture2* iface, LONG x, LONG y) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture2(iface); + + FIXME("(%p/%p)->(%d, %d): stub\n", iface, This, x, y); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRMTexture2Impl_SetDecalScale(IDirect3DRMTexture2* iface, DWORD scale) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture2(iface); + + FIXME("(%p/%p)->(%u): stub\n", iface, This, scale); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRMTexture2Impl_SetDecalTransparency(IDirect3DRMTexture2* iface, BOOL transparency) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture2(iface); + + FIXME("(%p/%p)->(%u): stub\n", iface, This, transparency); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRMTexture2Impl_SetDecalTransparentColor(IDirect3DRMTexture2* iface, D3DCOLOR color) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture2(iface); + + FIXME("(%p/%p)->(%x): stub\n", iface, This, color); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRMTexture2Impl_GetDecalSize(IDirect3DRMTexture2* iface, D3DVALUE* width, D3DVALUE* height) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture2(iface); + + FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, height, width); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRMTexture2Impl_GetDecalOrigin(IDirect3DRMTexture2* iface, LONG* x, LONG* y) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture2(iface); + + FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, x, y); + + return E_NOTIMPL; +} + +static D3DRMIMAGE* WINAPI IDirect3DRMTexture2Impl_GetImage(IDirect3DRMTexture2* iface) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture2(iface); + + FIXME("(%p/%p)->(): stub\n", iface, This); + + return NULL; +} + +static DWORD WINAPI IDirect3DRMTexture2Impl_GetShades(IDirect3DRMTexture2* iface) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture2(iface); + + FIXME("(%p/%p)->(): stub\n", iface, This); + + return 0; +} + +static DWORD WINAPI IDirect3DRMTexture2Impl_GetColors(IDirect3DRMTexture2* iface) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture2(iface); + + FIXME("(%p/%p)->(): stub\n", iface, This); + + return 0; +} + +static DWORD WINAPI IDirect3DRMTexture2Impl_GetDecalScale(IDirect3DRMTexture2* iface) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture2(iface); + + FIXME("(%p/%p)->(): stub\n", iface, This); + + return 0; +} + +static BOOL WINAPI IDirect3DRMTexture2Impl_GetDecalTransparency(IDirect3DRMTexture2* iface) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture2(iface); + + FIXME("(%p/%p)->(): stub\n", iface, This); + + return FALSE; +} + +static D3DCOLOR WINAPI IDirect3DRMTexture2Impl_GetDecalTransparentColor(IDirect3DRMTexture2* iface) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture2(iface); + + FIXME("(%p/%p)->(): stub\n", iface, This); + + return 0; +} + +/*** IDirect3DRMTexture2 methods ***/ +static HRESULT WINAPI IDirect3DRMTexture2Impl_InitFromImage(IDirect3DRMTexture2* iface, LPD3DRMIMAGE image) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture2(iface); + + FIXME("(%p/%p)->(%p): stub\n", iface, This, image); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRMTexture2Impl_InitFromResource2(IDirect3DRMTexture2* iface, HMODULE module, + LPCSTR /* LPCTSTR */ name, LPCSTR /* LPCTSTR */ type) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture2(iface); + + FIXME("(%p/%p)->(%p, %s, %s): stub\n", iface, This, module, debugstr_a(name), debugstr_a(type)); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRMTexture2Impl_GenerateMIPMap(IDirect3DRMTexture2* iface, DWORD flags) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture2(iface); + + FIXME("(%p/%p)->(%x): stub\n", iface, This, flags); + + return E_NOTIMPL; +} + +static const struct IDirect3DRMTexture2Vtbl Direct3DRMTexture2_Vtbl = +{ + /*** IUnknown methods ***/ + IDirect3DRMTexture2Impl_QueryInterface, + IDirect3DRMTexture2Impl_AddRef, + IDirect3DRMTexture2Impl_Release, + /*** IDirect3DRMObject methods ***/ + IDirect3DRMTexture2Impl_Clone, + IDirect3DRMTexture2Impl_AddDestroyCallback, + IDirect3DRMTexture2Impl_DeleteDestroyCallback, + IDirect3DRMTexture2Impl_SetAppData, + IDirect3DRMTexture2Impl_GetAppData, + IDirect3DRMTexture2Impl_SetName, + IDirect3DRMTexture2Impl_GetName, + IDirect3DRMTexture2Impl_GetClassName, + /*** IDirect3DRMTexture methods ***/ + IDirect3DRMTexture2Impl_InitFromFile, + IDirect3DRMTexture2Impl_InitFromSurface, + IDirect3DRMTexture2Impl_InitFromResource, + IDirect3DRMTexture2Impl_Changed, + IDirect3DRMTexture2Impl_SetColors, + IDirect3DRMTexture2Impl_SetShades, + IDirect3DRMTexture2Impl_SetDecalSize, + IDirect3DRMTexture2Impl_SetDecalOrigin, + IDirect3DRMTexture2Impl_SetDecalScale, + IDirect3DRMTexture2Impl_SetDecalTransparency, + IDirect3DRMTexture2Impl_SetDecalTransparentColor, + IDirect3DRMTexture2Impl_GetDecalSize, + IDirect3DRMTexture2Impl_GetDecalOrigin, + IDirect3DRMTexture2Impl_GetImage, + IDirect3DRMTexture2Impl_GetShades, + IDirect3DRMTexture2Impl_GetColors, + IDirect3DRMTexture2Impl_GetDecalScale, + IDirect3DRMTexture2Impl_GetDecalTransparency, + IDirect3DRMTexture2Impl_GetDecalTransparentColor, + /*** IDirect3DRMTexture2 methods ***/ + IDirect3DRMTexture2Impl_InitFromImage, + IDirect3DRMTexture2Impl_InitFromResource2, + IDirect3DRMTexture2Impl_GenerateMIPMap +}; + +/*** IUnknown methods ***/ +static HRESULT WINAPI IDirect3DRMTexture3Impl_QueryInterface(IDirect3DRMTexture3* iface, + REFIID riid, void** object) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture3(iface); + + TRACE("(%p)->(%s, %p)\n", iface, debugstr_guid(riid), object); + + *object = NULL; + + if (IsEqualGUID(riid, &IID_IUnknown) || + IsEqualGUID(riid, &IID_IDirect3DRMTexture) || + IsEqualGUID(riid, &IID_IDirect3DRMTexture2)) + { + *object = &This->IDirect3DRMTexture2_iface; + } + else if IsEqualGUID(riid, &IID_IDirect3DRMTexture3) + { + *object = &This->IDirect3DRMTexture3_iface; + } + else + { + FIXME("Interface %s not implemented\n", debugstr_guid(riid)); + return E_NOINTERFACE; + } + + IDirect3DRMTexture3_AddRef(iface); + + return S_OK; +} + +static ULONG WINAPI IDirect3DRMTexture3Impl_AddRef(IDirect3DRMTexture3* iface) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture3(iface); + ULONG ref = InterlockedIncrement(&This->ref); + + TRACE("(%p)->(): new ref = %d\n", iface, ref); + + return ref; +} + +static ULONG WINAPI IDirect3DRMTexture3Impl_Release(IDirect3DRMTexture3* iface) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture3(iface); + ULONG ref = InterlockedDecrement(&This->ref); + + TRACE("(%p)->(): new ref = %d\n", iface, ref); + + if (!ref) + HeapFree(GetProcessHeap(), 0, This); + + return ref; +} + +/*** IDirect3DRMObject methods ***/ +static HRESULT WINAPI IDirect3DRMTexture3Impl_Clone(IDirect3DRMTexture3* iface, + LPUNKNOWN unknown, REFIID riid, + LPVOID* object) +{ + FIXME("(%p)->(%p, %s, %p): stub\n", iface, unknown, debugstr_guid(riid), object); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRMTexture3Impl_AddDestroyCallback(IDirect3DRMTexture3* iface, + D3DRMOBJECTCALLBACK cb, + LPVOID argument) +{ + FIXME("(%p)->(%p, %p): stub\n", iface, cb, argument); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRMTexture3Impl_DeleteDestroyCallback(IDirect3DRMTexture3* iface, + D3DRMOBJECTCALLBACK cb, + LPVOID argument) +{ + FIXME("(%p)->(%p, %p): stub\n", iface, cb, argument); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRMTexture3Impl_SetAppData(IDirect3DRMTexture3* iface, + DWORD data) +{ + FIXME("(%p)->(%u): stub\n", iface, data); + + return E_NOTIMPL; +} + +static DWORD WINAPI IDirect3DRMTexture3Impl_GetAppData(IDirect3DRMTexture3* iface) +{ + FIXME("(%p)->(): stub\n", iface); + + return 0; +} + +static HRESULT WINAPI IDirect3DRMTexture3Impl_SetName(IDirect3DRMTexture3* iface, LPCSTR name) +{ + FIXME("(%p)->(%s): stub\n", iface, name); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRMTexture3Impl_GetName(IDirect3DRMTexture3* iface, + LPDWORD size, LPSTR name) +{ + FIXME("(%p)->(%p, %p): stub\n", iface, size, name); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRMTexture3Impl_GetClassName(IDirect3DRMTexture3* iface, + LPDWORD size, LPSTR name) +{ + FIXME("(%p)->(%p, %p): stub\n", iface, size, name); + + return E_NOTIMPL; +} + +/*** IDirect3DRMTexture3 methods ***/ +static HRESULT WINAPI IDirect3DRMTexture3Impl_InitFromFile(IDirect3DRMTexture3* iface, const char *filename) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture3(iface); + + FIXME("(%p/%p)->(%s): stub\n", iface, This, debugstr_a(filename)); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRMTexture3Impl_InitFromSurface(IDirect3DRMTexture3* iface, LPDIRECTDRAWSURFACE surface) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture3(iface); + + FIXME("(%p/%p)->(%p): stub\n", iface, This, surface); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRMTexture3Impl_InitFromResource(IDirect3DRMTexture3* iface, HRSRC resource) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture3(iface); + + FIXME("(%p/%p)->(%p): stub\n", iface, This, resource); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRMTexture3Impl_Changed(IDirect3DRMTexture3* iface, DWORD flags, DWORD nb_rects, LPRECT rects) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture3(iface); + + FIXME("(%p/%p)->(%x, %u, %p): stub\n", iface, This, flags, nb_rects, rects); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRMTexture3Impl_SetColors(IDirect3DRMTexture3* iface, DWORD max_colors) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture3(iface); + + FIXME("(%p/%p)->(%u): stub\n", iface, This, max_colors); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRMTexture3Impl_SetShades(IDirect3DRMTexture3* iface, DWORD max_shades) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture3(iface); + + FIXME("(%p/%p)->(%u): stub\n", iface, This, max_shades); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRMTexture3Impl_SetDecalSize(IDirect3DRMTexture3* iface, D3DVALUE width, D3DVALUE height) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture3(iface); + + FIXME("(%p/%p)->(%f, %f): stub\n", iface, This, width, height); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRMTexture3Impl_SetDecalOrigin(IDirect3DRMTexture3* iface, LONG x, LONG y) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture3(iface); + + FIXME("(%p/%p)->(%d, %d): stub\n", iface, This, x, y); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRMTexture3Impl_SetDecalScale(IDirect3DRMTexture3* iface, DWORD scale) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture3(iface); + + FIXME("(%p/%p)->(%u): stub\n", iface, This, scale); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRMTexture3Impl_SetDecalTransparency(IDirect3DRMTexture3* iface, BOOL transparency) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture3(iface); + + FIXME("(%p/%p)->(%u): stub\n", iface, This, transparency); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRMTexture3Impl_SetDecalTransparentColor(IDirect3DRMTexture3* iface, D3DCOLOR color) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture3(iface); + + FIXME("(%p/%p)->(%x): stub\n", iface, This, color); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRMTexture3Impl_GetDecalSize(IDirect3DRMTexture3* iface, D3DVALUE* width, D3DVALUE* height) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture3(iface); + + FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, height, width); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRMTexture3Impl_GetDecalOrigin(IDirect3DRMTexture3* iface, LONG* x, LONG* y) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture3(iface); + + FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, x, y); + + return E_NOTIMPL; +} + +static D3DRMIMAGE* WINAPI IDirect3DRMTexture3Impl_GetImage(IDirect3DRMTexture3* iface) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture3(iface); + + FIXME("(%p/%p)->(): stub\n", iface, This); + + return NULL; +} + +static DWORD WINAPI IDirect3DRMTexture3Impl_GetShades(IDirect3DRMTexture3* iface) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture3(iface); + + FIXME("(%p/%p)->(): stub\n", iface, This); + + return 0; +} + +static DWORD WINAPI IDirect3DRMTexture3Impl_GetColors(IDirect3DRMTexture3* iface) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture3(iface); + + FIXME("(%p/%p)->(): stub\n", iface, This); + + return 0; +} + +static DWORD WINAPI IDirect3DRMTexture3Impl_GetDecalScale(IDirect3DRMTexture3* iface) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture3(iface); + + FIXME("(%p/%p)->(): stub\n", iface, This); + + return 0; +} + +static BOOL WINAPI IDirect3DRMTexture3Impl_GetDecalTransparency(IDirect3DRMTexture3* iface) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture3(iface); + + FIXME("(%p/%p)->(): stub\n", iface, This); + + return FALSE; +} + +static D3DCOLOR WINAPI IDirect3DRMTexture3Impl_GetDecalTransparentColor(IDirect3DRMTexture3* iface) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture3(iface); + + FIXME("(%p/%p)->(): stub\n", iface, This); + + return 0; +} + +static HRESULT WINAPI IDirect3DRMTexture3Impl_InitFromImage(IDirect3DRMTexture3* iface, LPD3DRMIMAGE image) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture3(iface); + + FIXME("(%p/%p)->(%p): stub\n", iface, This, image); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRMTexture3Impl_InitFromResource2(IDirect3DRMTexture3* iface, HMODULE module, + LPCSTR /* LPCTSTR */ name, LPCSTR /* LPCTSTR */ type) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture3(iface); + + FIXME("(%p/%p)->(%p, %s, %s): stub\n", iface, This, module, debugstr_a(name), debugstr_a(type)); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRMTexture3Impl_GenerateMIPMap(IDirect3DRMTexture3* iface, DWORD flags) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture3(iface); + + FIXME("(%p/%p)->(%x): stub\n", iface, This, flags); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRMTexture3Impl_GetSurface(IDirect3DRMTexture3* iface, DWORD flags, LPDIRECTDRAWSURFACE* surface) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture3(iface); + + FIXME("(%p/%p)->(%x, %p): stub\n", iface, This, flags, surface); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRMTexture3Impl_SetCacheOptions(IDirect3DRMTexture3* iface, LONG importance, DWORD flags) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture3(iface); + + FIXME("(%p/%p)->(%d, %x): stub\n", iface, This, importance, flags); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRMTexture3Impl_GetCacheOptions(IDirect3DRMTexture3* iface, LPLONG importance, LPDWORD flags) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture3(iface); + + FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, importance, flags); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRMTexture3Impl_SetDownsampleCallback(IDirect3DRMTexture3* iface, D3DRMDOWNSAMPLECALLBACK callback, LPVOID arg) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture3(iface); + + FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, callback, arg); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IDirect3DRMTexture3Impl_SetValidationCallback(IDirect3DRMTexture3* iface, D3DRMVALIDATIONCALLBACK callback, LPVOID arg) +{ + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture3(iface); + + FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, callback, arg); + + return E_NOTIMPL; +} + +static const struct IDirect3DRMTexture3Vtbl Direct3DRMTexture3_Vtbl = +{ + /*** IUnknown methods ***/ + IDirect3DRMTexture3Impl_QueryInterface, + IDirect3DRMTexture3Impl_AddRef, + IDirect3DRMTexture3Impl_Release, + /*** IDirect3DRMObject methods ***/ + IDirect3DRMTexture3Impl_Clone, + IDirect3DRMTexture3Impl_AddDestroyCallback, + IDirect3DRMTexture3Impl_DeleteDestroyCallback, + IDirect3DRMTexture3Impl_SetAppData, + IDirect3DRMTexture3Impl_GetAppData, + IDirect3DRMTexture3Impl_SetName, + IDirect3DRMTexture3Impl_GetName, + IDirect3DRMTexture3Impl_GetClassName, + /*** IDirect3DRMTexture3 methods ***/ + IDirect3DRMTexture3Impl_InitFromFile, + IDirect3DRMTexture3Impl_InitFromSurface, + IDirect3DRMTexture3Impl_InitFromResource, + IDirect3DRMTexture3Impl_Changed, + IDirect3DRMTexture3Impl_SetColors, + IDirect3DRMTexture3Impl_SetShades, + IDirect3DRMTexture3Impl_SetDecalSize, + IDirect3DRMTexture3Impl_SetDecalOrigin, + IDirect3DRMTexture3Impl_SetDecalScale, + IDirect3DRMTexture3Impl_SetDecalTransparency, + IDirect3DRMTexture3Impl_SetDecalTransparentColor, + IDirect3DRMTexture3Impl_GetDecalSize, + IDirect3DRMTexture3Impl_GetDecalOrigin, + IDirect3DRMTexture3Impl_GetImage, + IDirect3DRMTexture3Impl_GetShades, + IDirect3DRMTexture3Impl_GetColors, + IDirect3DRMTexture3Impl_GetDecalScale, + IDirect3DRMTexture3Impl_GetDecalTransparency, + IDirect3DRMTexture3Impl_GetDecalTransparentColor, + IDirect3DRMTexture3Impl_InitFromImage, + IDirect3DRMTexture3Impl_InitFromResource2, + IDirect3DRMTexture3Impl_GenerateMIPMap, + IDirect3DRMTexture3Impl_GetSurface, + IDirect3DRMTexture3Impl_SetCacheOptions, + IDirect3DRMTexture3Impl_GetCacheOptions, + IDirect3DRMTexture3Impl_SetDownsampleCallback, + IDirect3DRMTexture3Impl_SetValidationCallback +}; + +HRESULT Direct3DRMTexture_create(REFIID riid, IUnknown** ret_iface) +{ + IDirect3DRMTextureImpl* object; + + TRACE("(%p)\n", ret_iface); + + object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirect3DRMTextureImpl)); + if (!object) + { + ERR("Out of memory\n"); + return E_OUTOFMEMORY; + } + + object->IDirect3DRMTexture2_iface.lpVtbl = &Direct3DRMTexture2_Vtbl; + object->IDirect3DRMTexture3_iface.lpVtbl = &Direct3DRMTexture3_Vtbl; + object->ref = 1; + + if (IsEqualGUID(riid, &IID_IDirect3DRMTexture3)) + *ret_iface = (IUnknown*)&object->IDirect3DRMTexture3_iface; + else + *ret_iface = (IUnknown*)&object->IDirect3DRMTexture2_iface; + + return S_OK; +}