Module: wine Branch: master Commit: 78bd619c7cd6c819d19b33be456193b21d7630c1 URL: http://source.winehq.org/git/wine.git/?a=commit;h=78bd619c7cd6c819d19b33be45...
Author: Owen Rudge orudge@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; +}