From 792e2ee248bcf0cf361a2115255033ac6d837781 Mon Sep 17 00:00:00 2001 From: Christian Costa Date: Mon, 22 Apr 2013 23:08:09 +0200 Subject: [PATCH] d3dx9_36: Add DIB file support to D3DXLoadSurfaceFromFileInMemory. --- dlls/d3dx9_36/surface.c | 6 ++++++ dlls/d3dx9_36/tests/surface.c | 6 ++---- dlls/d3dx9_36/tests/texture.c | 9 ++++----- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/dlls/d3dx9_36/surface.c b/dlls/d3dx9_36/surface.c index af7b89ed956..fd1acc646cd 100644 --- a/dlls/d3dx9_36/surface.c +++ b/dlls/d3dx9_36/surface.c @@ -1073,6 +1073,9 @@ HRESULT WINAPI D3DXLoadSurfaceFromFileInMemory(IDirect3DSurface9 *pDestSurface, return hr; } + if (imginfo.ImageFileFormat == D3DXIFF_DIB) + convert_dib_to_bmp((void**)&pSrcData, &SrcDataSize); + CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); if (FAILED(CoCreateInstance(&CLSID_WICImagingFactory, NULL, CLSCTX_INPROC_SERVER, &IID_IWICImagingFactory, (void**)&factory))) @@ -1135,6 +1138,9 @@ cleanup_bmp: cleanup_err: CoUninitialize(); + if (imginfo.ImageFileFormat == D3DXIFF_DIB) + HeapFree(GetProcessHeap(), 0, (void*)pSrcData); + if (FAILED(hr)) return D3DXERR_INVALIDDATA; diff --git a/dlls/d3dx9_36/tests/surface.c b/dlls/d3dx9_36/tests/surface.c index 759f9e1aff9..b46f33b21d8 100644 --- a/dlls/d3dx9_36/tests/surface.c +++ b/dlls/d3dx9_36/tests/surface.c @@ -623,10 +623,8 @@ static void test_D3DXLoadSurface(IDirect3DDevice9 *device) /* D3DXLoadSurfaceFromResource */ - todo_wine { - hr = D3DXLoadSurfaceFromResourceA(surf, NULL, NULL, NULL, MAKEINTRESOURCE(IDB_BITMAP_1x1), NULL, D3DX_DEFAULT, 0, NULL); - ok(hr == D3D_OK, "D3DXLoadSurfaceFromResource returned %#x, expected %#x\n", hr, D3D_OK); - } + hr = D3DXLoadSurfaceFromResourceA(surf, NULL, NULL, NULL, MAKEINTRESOURCE(IDB_BITMAP_1x1), NULL, D3DX_DEFAULT, 0, NULL); + ok(hr == D3D_OK, "D3DXLoadSurfaceFromResource returned %#x, expected %#x\n", hr, D3D_OK); hr = D3DXLoadSurfaceFromResourceA(surf, NULL, NULL, NULL, MAKEINTRESOURCE(IDD_BITMAPDATA_1x1), NULL, D3DX_DEFAULT, 0, NULL); ok(hr == D3D_OK, "D3DXLoadSurfaceFromResource returned %#x, expected %#x\n", hr, D3D_OK); diff --git a/dlls/d3dx9_36/tests/texture.c b/dlls/d3dx9_36/tests/texture.c index 5f51db1acef..782864c5d4e 100644 --- a/dlls/d3dx9_36/tests/texture.c +++ b/dlls/d3dx9_36/tests/texture.c @@ -728,11 +728,10 @@ static void test_D3DXCreateTexture(IDirect3DDevice9 *device) } /* D3DXCreateTextureFromResource */ - todo_wine { - hr = D3DXCreateTextureFromResourceA(device, NULL, MAKEINTRESOURCEA(IDB_BITMAP_1x1), &texture); - ok(hr == D3D_OK, "D3DXCreateTextureFromResource returned %#x, expected %#x\n", hr, D3D_OK); - if (SUCCEEDED(hr)) IDirect3DTexture9_Release(texture); - } + hr = D3DXCreateTextureFromResourceA(device, NULL, MAKEINTRESOURCEA(IDB_BITMAP_1x1), &texture); + ok(hr == D3D_OK, "D3DXCreateTextureFromResource returned %#x, expected %#x\n", hr, D3D_OK); + if (SUCCEEDED(hr)) IDirect3DTexture9_Release(texture); + hr = D3DXCreateTextureFromResourceA(device, NULL, MAKEINTRESOURCEA(IDD_BITMAPDATA_1x1), &texture); ok(hr == D3D_OK, "D3DXCreateTextureFromResource returned %#x, expected %#x\n", hr, D3D_OK); if (SUCCEEDED(hr)) IDirect3DTexture9_Release(texture);