Module: wine Branch: master Commit: 88cea6c1cdcf944702cd92c7be12ffbeb03d8b2e URL: http://source.winehq.org/git/wine.git/?a=commit;h=88cea6c1cdcf944702cd92c7be...
Author: Tony Wasserka tony.wasserka@freenet.de Date: Mon Jun 22 17:38:15 2009 +0200
d3dx9: Implement D3DXLoadSurfaceFromResource.
---
dlls/d3dx9_36/d3dx9_36.spec | 4 +- dlls/d3dx9_36/surface.c | 71 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+), 2 deletions(-)
diff --git a/dlls/d3dx9_36/d3dx9_36.spec b/dlls/d3dx9_36/d3dx9_36.spec index 663483a..9b22ba0 100644 --- a/dlls/d3dx9_36/d3dx9_36.spec +++ b/dlls/d3dx9_36/d3dx9_36.spec @@ -186,8 +186,8 @@ @ stdcall D3DXLoadSurfaceFromFileInMemory(ptr ptr ptr ptr long ptr long long ptr) @ stdcall D3DXLoadSurfaceFromFileW(ptr ptr ptr wstr ptr long long ptr) @ stub D3DXLoadSurfaceFromMemory -@ stub D3DXLoadSurfaceFromResourceA -@ stub D3DXLoadSurfaceFromResourceW +@ stdcall D3DXLoadSurfaceFromResourceA(ptr ptr ptr ptr str ptr long long ptr) +@ stdcall D3DXLoadSurfaceFromResourceW(ptr ptr ptr ptr wstr ptr long long ptr) @ stub D3DXLoadSurfaceFromSurface @ stub D3DXLoadVolumeFromFileA @ stub D3DXLoadVolumeFromFileInMemory diff --git a/dlls/d3dx9_36/surface.c b/dlls/d3dx9_36/surface.c index ac619c6..bd627ba 100644 --- a/dlls/d3dx9_36/surface.c +++ b/dlls/d3dx9_36/surface.c @@ -251,3 +251,74 @@ HRESULT WINAPI D3DXLoadSurfaceFromFileW(LPDIRECT3DSURFACE9 pDestSurface,
return hr; } + +/************************************************************ + * D3DXLoadSurfaceFromResource + */ +HRESULT WINAPI D3DXLoadSurfaceFromResourceA(LPDIRECT3DSURFACE9 pDestSurface, + CONST PALETTEENTRY *pDestPalette, + CONST RECT *pDestRect, + HMODULE hSrcModule, + LPCSTR pResource, + CONST RECT *pSrcRect, + DWORD dwFilter, + D3DCOLOR Colorkey, + D3DXIMAGE_INFO *pSrcInfo) +{ + HRSRC hResInfo; + TRACE("(void): relay\n"); + + if( !pDestSurface ) return D3DERR_INVALIDCALL; + + hResInfo = FindResourceA(hSrcModule, pResource, (LPCSTR)RT_RCDATA); + if(hResInfo) { + LPVOID pBuffer; + HRESULT hr; + DWORD dwSize; + + hr = load_resource_into_memory(hSrcModule, hResInfo, &pBuffer, &dwSize); + if(FAILED(hr)) return D3DXERR_INVALIDDATA; + return D3DXLoadSurfaceFromFileInMemory(pDestSurface, pDestPalette, pDestRect, pBuffer, dwSize, pSrcRect, dwFilter, Colorkey, pSrcInfo); + } + + hResInfo = FindResourceA(hSrcModule, pResource, (LPCSTR)RT_BITMAP); + if(hResInfo) { + FIXME("Implement loading bitmaps from resource type RT_BITMAP\n"); + return E_NOTIMPL; + } + return D3DXERR_INVALIDDATA; +} + +HRESULT WINAPI D3DXLoadSurfaceFromResourceW(LPDIRECT3DSURFACE9 pDestSurface, + CONST PALETTEENTRY *pDestPalette, + CONST RECT *pDestRect, + HMODULE hSrcModule, + LPCWSTR pResource, + CONST RECT *pSrcRect, + DWORD dwFilter, + D3DCOLOR Colorkey, + D3DXIMAGE_INFO *pSrcInfo) +{ + HRSRC hResInfo; + TRACE("(void): relay\n"); + + if( !pDestSurface ) return D3DERR_INVALIDCALL; + + hResInfo = FindResourceW(hSrcModule, pResource, (LPCWSTR)RT_RCDATA); + if(hResInfo) { + LPVOID pBuffer; + HRESULT hr; + DWORD dwSize; + + hr = load_resource_into_memory(hSrcModule, hResInfo, &pBuffer, &dwSize); + if(FAILED(hr)) return D3DXERR_INVALIDDATA; + return D3DXLoadSurfaceFromFileInMemory(pDestSurface, pDestPalette, pDestRect, pBuffer, dwSize, pSrcRect, dwFilter, Colorkey, pSrcInfo); + } + + hResInfo = FindResourceW(hSrcModule, pResource, (LPCWSTR)RT_BITMAP); + if(hResInfo) { + FIXME("Implement loading bitmaps from resource type RT_BITMAP\n"); + return E_NOTIMPL; + } + return D3DXERR_INVALIDDATA; +}