Tony Wasserka : d3dx9: Implement D3DXLoadSurfaceFromFile.

Alexandre Julliard julliard at winehq.org
Fri Jun 26 09:47:13 CDT 2009


Module: wine
Branch: master
Commit: 2a9c43fb355c30a3f8a57e318eab45e45794f023
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=2a9c43fb355c30a3f8a57e318eab45e45794f023

Author: Tony Wasserka <tony.wasserka at freenet.de>
Date:   Mon Jun 22 17:33:48 2009 +0200

d3dx9: Implement D3DXLoadSurfaceFromFile.

---

 dlls/d3dx9_36/d3dx9_36.spec |    4 +-
 dlls/d3dx9_36/surface.c     |   54 +++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 56 insertions(+), 2 deletions(-)

diff --git a/dlls/d3dx9_36/d3dx9_36.spec b/dlls/d3dx9_36/d3dx9_36.spec
index dd9f74a..663483a 100644
--- a/dlls/d3dx9_36/d3dx9_36.spec
+++ b/dlls/d3dx9_36/d3dx9_36.spec
@@ -182,9 +182,9 @@
 @ stub D3DXLoadPRTCompBufferFromFileA
 @ stub D3DXLoadPRTCompBufferFromFileW
 @ stub D3DXLoadSkinMeshFromXof
-@ stub D3DXLoadSurfaceFromFileA
+@ stdcall D3DXLoadSurfaceFromFileA(ptr ptr ptr str ptr long long ptr)
 @ stdcall D3DXLoadSurfaceFromFileInMemory(ptr ptr ptr ptr long ptr long long ptr)
-@ stub D3DXLoadSurfaceFromFileW
+@ stdcall D3DXLoadSurfaceFromFileW(ptr ptr ptr wstr ptr long long ptr)
 @ stub D3DXLoadSurfaceFromMemory
 @ stub D3DXLoadSurfaceFromResourceA
 @ stub D3DXLoadSurfaceFromResourceW
diff --git a/dlls/d3dx9_36/surface.c b/dlls/d3dx9_36/surface.c
index a4a8910..ac619c6 100644
--- a/dlls/d3dx9_36/surface.c
+++ b/dlls/d3dx9_36/surface.c
@@ -197,3 +197,57 @@ HRESULT WINAPI D3DXLoadSurfaceFromFileInMemory(LPDIRECT3DSURFACE9 pDestSurface,
     if( !pDestSurface || !pSrcData | !SrcDataSize ) return D3DERR_INVALIDCALL;
     return E_NOTIMPL;
 }
+
+/************************************************************
+ * D3DXLoadSurfaceFromFile
+ */
+HRESULT WINAPI D3DXLoadSurfaceFromFileA(LPDIRECT3DSURFACE9 pDestSurface,
+                                        CONST PALETTEENTRY *pDestPalette,
+                                        CONST RECT *pDestRect,
+                                        LPCSTR pSrcFile,
+                                        CONST RECT *pSrcRect,
+                                        DWORD dwFilter,
+                                        D3DCOLOR Colorkey,
+                                        D3DXIMAGE_INFO *pSrcInfo)
+{
+    LPWSTR pWidename;
+    HRESULT hr;
+    int strlength;
+    TRACE("(void): relay\n");
+
+    if( !pSrcFile || !pDestSurface ) return D3DERR_INVALIDCALL;
+
+    strlength = MultiByteToWideChar(CP_ACP, 0, pSrcFile, -1, NULL, 0);
+    pWidename = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, strlength * sizeof(WCHAR));
+    MultiByteToWideChar(CP_ACP, 0, pSrcFile, -1, pWidename, strlength);
+
+    hr = D3DXLoadSurfaceFromFileW(pDestSurface, pDestPalette, pDestRect, pWidename, pSrcRect, dwFilter, Colorkey, pSrcInfo);
+    HeapFree(GetProcessHeap(), 0, pWidename);
+
+    return hr;
+}
+
+HRESULT WINAPI D3DXLoadSurfaceFromFileW(LPDIRECT3DSURFACE9 pDestSurface,
+                                        CONST PALETTEENTRY *pDestPalette,
+                                        CONST RECT *pDestRect,
+                                        LPCWSTR pSrcFile,
+                                        CONST RECT *pSrcRect,
+                                        DWORD Filter,
+                                        D3DCOLOR Colorkey,
+                                        D3DXIMAGE_INFO *pSrcInfo)
+{
+    HRESULT hr;
+    DWORD dwSize;
+    LPVOID pBuffer;
+    TRACE("(void): relay\n");
+
+    if( !pSrcFile || !pDestSurface ) return D3DERR_INVALIDCALL;
+
+    hr = map_view_of_file(pSrcFile, &pBuffer, &dwSize);
+    if(FAILED(hr)) return D3DXERR_INVALIDDATA;
+
+    hr = D3DXLoadSurfaceFromFileInMemory(pDestSurface, pDestPalette, pDestRect, pBuffer, dwSize, pSrcRect, Filter, Colorkey, pSrcInfo);
+    UnmapViewOfFile(pBuffer);
+
+    return hr;
+}




More information about the wine-cvs mailing list