[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