[PATCH] d3dx9: Redirect D3DXGetImageInfo functions to the FromFileInMemory variant
Tony Wasserka
tony.wasserka at freenet.de
Sat May 23 06:03:11 CDT 2009
---
dlls/d3dx9_36/Makefile.in | 2 +-
dlls/d3dx9_36/surface.c | 69 +++++++++++++++++++++++++++++++++++++++-----
2 files changed, 62 insertions(+), 9 deletions(-)
diff --git a/dlls/d3dx9_36/Makefile.in b/dlls/d3dx9_36/Makefile.in
index c094071..1c6195b 100644
--- a/dlls/d3dx9_36/Makefile.in
+++ b/dlls/d3dx9_36/Makefile.in
@@ -4,7 +4,7 @@ SRCDIR = @srcdir@
VPATH = @srcdir@
MODULE = d3dx9_36.dll
IMPORTLIB = d3dx9
-IMPORTS = d3d9 d3dx8 kernel32
+IMPORTS = d3d9 d3dx8 gdi32 user32 kernel32
C_SRCS = \
d3dx9_36_main.c \
diff --git a/dlls/d3dx9_36/surface.c b/dlls/d3dx9_36/surface.c
index 968e3ef..5bd5bef 100644
--- a/dlls/d3dx9_36/surface.c
+++ b/dlls/d3dx9_36/surface.c
@@ -18,6 +18,7 @@
*/
#include "wine/debug.h"
+#include "wine/unicode.h"
#include "d3dx9_36_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(d3dx);
@@ -46,24 +47,76 @@ HRESULT WINAPI D3DXGetImageInfoFromFileInMemory(LPCVOID data, UINT datasize, D3D
HRESULT WINAPI D3DXGetImageInfoFromFileA(LPCSTR file, D3DXIMAGE_INFO *info)
{
- FIXME("stub\n");
- return E_NOTIMPL;
+ LPWSTR widename;
+ HRESULT hr;
+ int strlength;
+ TRACE("(void): relay\n");
+
+ if( !file || !info ) return D3DERR_INVALIDCALL;
+
+ strlength = MultiByteToWideChar(CP_ACP, 0, file, -1, NULL, 0);
+ widename = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, strlength * sizeof(WCHAR));
+ MultiByteToWideChar(CP_ACP, 0, file, -1, widename, strlength);
+
+ hr = D3DXGetImageInfoFromFileW(widename, info);
+ HeapFree(GetProcessHeap(), 0, widename);
+
+ return hr;
}
HRESULT WINAPI D3DXGetImageInfoFromFileW(LPCWSTR file, D3DXIMAGE_INFO *info)
{
- FIXME("stub\n");
- return E_NOTIMPL;
+ HRESULT hr;
+ DWORD size;
+ LPVOID buffer;
+ TRACE("(void): relay\n");
+
+ if( !file || !info ) return D3DERR_INVALIDCALL;
+
+ hr = UTMapViewOfFile(file, &buffer, &size);
+ if(FAILED(hr)) return hr;
+ hr = D3DXGetImageInfoFromFileInMemory(buffer, size, info);
+ UnmapViewOfFile(buffer);
+
+ return hr;
}
HRESULT WINAPI D3DXGetImageInfoFromResourceA(HMODULE module, LPCSTR resource, D3DXIMAGE_INFO *info)
{
- FIXME("stub\n");
- return E_NOTIMPL;
+ LPWSTR widename;
+ HRESULT hr;
+ int strlength;
+ TRACE("(void): relay\n");
+
+ if( !module || !resource || !info ) return D3DERR_INVALIDCALL;
+
+ strlength = MultiByteToWideChar(CP_ACP, 0, resource, -1, NULL, 0);
+ widename = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, strlength * sizeof(WCHAR));
+ MultiByteToWideChar(CP_ACP, 0, resource, -1, widename, strlength);
+
+ hr = D3DXGetImageInfoFromResourceW(module, widename, info);
+ HeapFree(GetProcessHeap(), 0, widename);
+
+ return hr;
}
HRESULT WINAPI D3DXGetImageInfoFromResourceW(HMODULE module, LPCWSTR resource, D3DXIMAGE_INFO *info)
{
- FIXME("stub\n");
- return E_NOTIMPL;
+ HBITMAP bitmap;
+ TRACE("(void): relay\n");
+
+ bitmap = LoadBitmapW(module, resource);
+ if(bitmap != NULL) {
+ FIXME("Implement loading bitmaps from resource type RT_BITMAP\n");
+ DeleteObject(bitmap);
+ return E_NOTIMPL;
+ } else {
+ HRESULT hr;
+ LPVOID buffer;
+ DWORD size;
+
+ hr = UTLoadResourceIntoMemory(module, resource, &buffer, &size);
+ if(FAILED(hr)) return hr;
+ return D3DXGetImageInfoFromFileInMemory(buffer, size, info);
+ }
}
--
1.6.0.2
--------------010906020009060101080602--
More information about the wine-patches
mailing list