Owen Rudge : d3dx9: Implement D3DXCreateTextureFromResource*.

Alexandre Julliard julliard at winehq.org
Thu Sep 9 13:56:49 CDT 2010


Module: wine
Branch: master
Commit: 78bd619c7cd6c819d19b33be456193b21d7630c1
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=78bd619c7cd6c819d19b33be456193b21d7630c1

Author: Owen Rudge <orudge at codeweavers.com>
Date:   Wed Sep  8 13:40:11 2010 -0500

d3dx9: Implement D3DXCreateTextureFromResource*.

---

 dlls/d3dx9_36/d3dx9_36.spec |    8 +-
 dlls/d3dx9_36/texture.c     |  131 +++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 135 insertions(+), 4 deletions(-)

diff --git a/dlls/d3dx9_36/d3dx9_36.spec b/dlls/d3dx9_36/d3dx9_36.spec
index 9c84dbf..e75011a 100644
--- a/dlls/d3dx9_36/d3dx9_36.spec
+++ b/dlls/d3dx9_36/d3dx9_36.spec
@@ -99,10 +99,10 @@
 @ stdcall D3DXCreateTextureFromFileInMemory(ptr ptr long ptr)
 @ stdcall D3DXCreateTextureFromFileInMemoryEx(ptr ptr long long long long long long long long long long ptr ptr ptr)
 @ stdcall D3DXCreateTextureFromFileW(ptr wstr ptr)
-@ stub D3DXCreateTextureFromResourceA
-@ stub D3DXCreateTextureFromResourceExA
-@ stub D3DXCreateTextureFromResourceExW
-@ stub D3DXCreateTextureFromResourceW
+@ stdcall D3DXCreateTextureFromResourceA(ptr ptr str ptr)
+@ stdcall D3DXCreateTextureFromResourceExA(ptr ptr str long long long long long long long long long ptr ptr ptr)
+@ stdcall D3DXCreateTextureFromResourceExW(ptr ptr wstr long long long long long long long long long ptr ptr ptr)
+@ stdcall D3DXCreateTextureFromResourceW(ptr ptr wstr ptr)
 @ stub D3DXCreateTextureGutterHelper
 @ stub D3DXCreateTextureShader
 @ stub D3DXCreateTorus
diff --git a/dlls/d3dx9_36/texture.c b/dlls/d3dx9_36/texture.c
index 36843e4..2ebc85a 100644
--- a/dlls/d3dx9_36/texture.c
+++ b/dlls/d3dx9_36/texture.c
@@ -533,3 +533,134 @@ HRESULT WINAPI D3DXCreateTextureFromFileW(LPDIRECT3DDEVICE9 device,
     return D3DXCreateTextureFromFileExW(device, srcfile, D3DX_DEFAULT, D3DX_DEFAULT, D3DX_DEFAULT, 0, D3DFMT_UNKNOWN,
                                         D3DPOOL_MANAGED, D3DX_DEFAULT, D3DX_DEFAULT, 0, NULL, NULL, texture);
 }
+
+
+HRESULT WINAPI D3DXCreateTextureFromResourceA(LPDIRECT3DDEVICE9 device,
+                                              HMODULE srcmodule,
+                                              LPCSTR resource,
+                                              LPDIRECT3DTEXTURE9 *texture)
+{
+    TRACE("(%p, %s): relay\n", srcmodule, debugstr_a(resource));
+
+    return D3DXCreateTextureFromResourceExA(device, srcmodule, resource, D3DX_DEFAULT, D3DX_DEFAULT, D3DX_DEFAULT, 0, D3DFMT_UNKNOWN,
+                                            D3DPOOL_MANAGED, D3DX_DEFAULT, D3DX_DEFAULT, 0, NULL, NULL, texture);
+}
+
+HRESULT WINAPI D3DXCreateTextureFromResourceW(LPDIRECT3DDEVICE9 device,
+                                              HMODULE srcmodule,
+                                              LPCWSTR resource,
+                                              LPDIRECT3DTEXTURE9 *texture)
+{
+    TRACE("(%p, %s): relay\n", srcmodule, debugstr_w(resource));
+
+    return D3DXCreateTextureFromResourceExW(device, srcmodule, resource, D3DX_DEFAULT, D3DX_DEFAULT, D3DX_DEFAULT, 0, D3DFMT_UNKNOWN,
+                                            D3DPOOL_MANAGED, D3DX_DEFAULT, D3DX_DEFAULT, 0, NULL, NULL, texture);
+}
+
+HRESULT WINAPI D3DXCreateTextureFromResourceExA(LPDIRECT3DDEVICE9 device,
+                                                HMODULE srcmodule,
+                                                LPCSTR resource,
+                                                UINT width,
+                                                UINT height,
+                                                UINT miplevels,
+                                                DWORD usage,
+                                                D3DFORMAT format,
+                                                D3DPOOL pool,
+                                                DWORD filter,
+                                                DWORD mipfilter,
+                                                D3DCOLOR colorkey,
+                                                D3DXIMAGE_INFO *srcinfo,
+                                                PALETTEENTRY *palette,
+                                                LPDIRECT3DTEXTURE9 *texture)
+{
+    HRSRC resinfo;
+
+    TRACE("(%p, %s): relay\n", srcmodule, debugstr_a(resource));
+
+    if (!device || !texture)
+        return D3DERR_INVALIDCALL;
+
+    resinfo = FindResourceA(srcmodule, resource, (LPCSTR) RT_RCDATA);
+
+    if (resinfo)
+    {
+        LPVOID buffer;
+        HRESULT hr;
+        DWORD size;
+
+        hr = load_resource_into_memory(srcmodule, resinfo, &buffer, &size);
+
+        if (FAILED(hr))
+            return D3DXERR_INVALIDDATA;
+
+        return D3DXCreateTextureFromFileInMemoryEx(device, buffer, size, width,
+                                                   height, miplevels, usage, format,
+                                                   pool, filter, mipfilter, colorkey,
+                                                   srcinfo, palette, texture);
+    }
+
+    /* Try loading the resource as bitmap data */
+    resinfo = FindResourceA(srcmodule, resource, (LPCSTR) RT_BITMAP);
+
+    if (resinfo)
+    {
+        FIXME("Implement loading bitmaps from resource type RT_BITMAP\n");
+        return E_NOTIMPL;
+    }
+
+    return D3DXERR_INVALIDDATA;
+}
+
+HRESULT WINAPI D3DXCreateTextureFromResourceExW(LPDIRECT3DDEVICE9 device,
+                                                HMODULE srcmodule,
+                                                LPCWSTR resource,
+                                                UINT width,
+                                                UINT height,
+                                                UINT miplevels,
+                                                DWORD usage,
+                                                D3DFORMAT format,
+                                                D3DPOOL pool,
+                                                DWORD filter,
+                                                DWORD mipfilter,
+                                                D3DCOLOR colorkey,
+                                                D3DXIMAGE_INFO *srcinfo,
+                                                PALETTEENTRY *palette,
+                                                LPDIRECT3DTEXTURE9 *texture)
+{
+    HRSRC resinfo;
+
+    TRACE("(%p, %s): relay\n", srcmodule, debugstr_w(resource));
+
+    if (!device || !texture)
+        return D3DERR_INVALIDCALL;
+
+    resinfo = FindResourceW(srcmodule, resource, (LPCWSTR) RT_RCDATA);
+
+    if (resinfo)
+    {
+        LPVOID buffer;
+        HRESULT hr;
+        DWORD size;
+
+        hr = load_resource_into_memory(srcmodule, resinfo, &buffer, &size);
+
+        if (FAILED(hr))
+            return D3DXERR_INVALIDDATA;
+
+        return D3DXCreateTextureFromFileInMemoryEx(device, buffer, size, width,
+                                                   height, miplevels, usage, format,
+                                                   pool, filter, mipfilter, colorkey,
+                                                   srcinfo, palette, texture);
+    }
+
+    /* Try loading the resource as bitmap data */
+    resinfo = FindResourceW(srcmodule, resource, (LPCWSTR) RT_BITMAP);
+
+    if (resinfo)
+    {
+        FIXME("Implement loading bitmaps from resource type RT_BITMAP\n");
+        return E_NOTIMPL;
+    }
+
+    return D3DXERR_INVALIDDATA;
+}




More information about the wine-cvs mailing list