[PATCH] d3dx9: Implement D3DXLoadSurfaceFromResource
Tony Wasserka
tony.wasserka at freenet.de
Mon Jun 22 10:38:15 CDT 2009
---
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 03b159e..7281d71 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;
+}
--
1.6.0.2
--------------080903050507030108020705--
More information about the wine-patches
mailing list