[PATCH] d3dx9: Redirect D3DXGetImageInfo functions to the FromFileInMemory variant

Tony Wasserka tony.wasserka at freenet.de
Mon May 18 10:02:04 CDT 2009


---
 dlls/d3dx9_36/Makefile.in |    2 +-
 dlls/d3dx9_36/surface.c   |   66 +++++++++++++++++++++++++++++++++++++++-----
 2 files changed, 59 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 2983ae8..3aa0e4c 100644
--- a/dlls/d3dx9_36/surface.c
+++ b/dlls/d3dx9_36/surface.c
@@ -27,14 +27,32 @@ WINE_DEFAULT_DEBUG_CHANNEL(d3dx);
  ****************************/
 HRESULT WINAPI D3DXGetImageInfoFromFileA(LPCSTR file, D3DXIMAGE_INFO *info)
 {
-    FIXME("stub\n");
-    return E_NOTIMPL;
+    HRESULT hr;
+    DWORD size;
+    LPVOID buffer;
+    TRACE("(void): relay\n");
+
+    hr = LoadFileIntoMemoryA(file, &buffer, &size);
+    if(FAILED(hr)) return hr;
+    hr = D3DXGetImageInfoFromFileInMemory(buffer, size, info);
+    HeapFree(GetProcessHeap(), 0, buffer);
+
+    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");
+
+    hr = LoadFileIntoMemoryW(file, &buffer, &size);
+    if(FAILED(hr)) return hr;
+    hr = D3DXGetImageInfoFromFileInMemory(buffer, size, info);
+    HeapFree(GetProcessHeap(), 0, buffer);
+
+    return hr;
 }
 
 /*******************************
@@ -42,14 +60,46 @@ HRESULT WINAPI D3DXGetImageInfoFromFileW(LPCWSTR file, D3DXIMAGE_INFO *info)
  *******************************/
 HRESULT WINAPI D3DXGetImageInfoFromResourceA(HMODULE module, LPCSTR resource, D3DXIMAGE_INFO *info)
 {
-    FIXME("stub\n");
-    return E_NOTIMPL;
+    HBITMAP bitmap;
+    TRACE("(void): relay\n");
+
+    bitmap = LoadBitmapA(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 = LoadResourceIntoMemoryA(module, resource, &buffer, &size);
+        if(FAILED(hr)) return hr;
+        hr = D3DXGetImageInfoFromFileInMemory(buffer, size, info);
+        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 = LoadResourceIntoMemoryW(module, resource, &buffer, &size);
+        if(FAILED(hr)) return hr;
+        hr = D3DXGetImageInfoFromFileInMemory(buffer, size, info);
+        return hr;
+    }
 }
 
 /************************************
-- 
1.6.0.2


--------------060204060500020906060504--



More information about the wine-patches mailing list