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