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