Module: wine Branch: master Commit: 00eb092e4dec30680b94e722574034c5971857af URL: http://source.winehq.org/git/wine.git/?a=commit;h=00eb092e4dec30680b94e72257...
Author: Owen Rudge orudge@codeweavers.com Date: Mon May 17 10:50:41 2010 -0500
d3dx9: Implement CreateEffectFromFile/Resource functions.
---
dlls/d3dx9_36/d3dx9_36.spec | 18 +++--- dlls/d3dx9_36/effect.c | 139 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 148 insertions(+), 9 deletions(-)
diff --git a/dlls/d3dx9_36/d3dx9_36.spec b/dlls/d3dx9_36/d3dx9_36.spec index e6ad559..19406e7 100644 --- a/dlls/d3dx9_36/d3dx9_36.spec +++ b/dlls/d3dx9_36/d3dx9_36.spec @@ -52,15 +52,15 @@ @ stdcall D3DXCreateEffectCompilerFromFileW(wstr ptr ptr long ptr ptr) @ stdcall D3DXCreateEffectCompilerFromResourceA(long str ptr ptr long ptr ptr) @ stdcall D3DXCreateEffectCompilerFromResourceW(long wstr ptr ptr long ptr ptr) -@ stdcall D3DXCreateEffectEx(ptr ptr long ptr ptr ptr long ptr ptr ptr) -@ stub D3DXCreateEffectFromFileA -@ stub D3DXCreateEffectFromFileExA -@ stub D3DXCreateEffectFromFileExW -@ stub D3DXCreateEffectFromFileW -@ stub D3DXCreateEffectFromResourceA -@ stub D3DXCreateEffectFromResourceExA -@ stub D3DXCreateEffectFromResourceExW -@ stub D3DXCreateEffectFromResourceW +@ stdcall D3DXCreateEffectEx(ptr ptr long ptr ptr str long ptr ptr ptr) +@ stdcall D3DXCreateEffectFromFileA(ptr str ptr ptr long ptr ptr ptr) +@ stdcall D3DXCreateEffectFromFileExA(ptr str ptr ptr str long ptr ptr ptr) +@ stdcall D3DXCreateEffectFromFileExW(ptr str ptr ptr str long ptr ptr ptr) +@ stdcall D3DXCreateEffectFromFileW(ptr wstr ptr ptr long ptr ptr ptr) +@ stdcall D3DXCreateEffectFromResourceA(ptr long str ptr ptr long ptr ptr ptr) +@ stdcall D3DXCreateEffectFromResourceExA(ptr long str ptr ptr str long ptr ptr ptr) +@ stdcall D3DXCreateEffectFromResourceExW(ptr long str ptr ptr str long ptr ptr ptr) +@ stdcall D3DXCreateEffectFromResourceW(ptr long wstr ptr ptr long ptr ptr ptr) @ stdcall D3DXCreateEffectPool(ptr) @ stdcall D3DXCreateFontA(ptr long long long long long long long long long str ptr) @ stdcall D3DXCreateFontIndirectA(ptr ptr ptr) diff --git a/dlls/d3dx9_36/effect.c b/dlls/d3dx9_36/effect.c index fd761b4..e4c9007 100644 --- a/dlls/d3dx9_36/effect.c +++ b/dlls/d3dx9_36/effect.c @@ -999,6 +999,145 @@ HRESULT WINAPI D3DXCreateEffectPool(LPD3DXEFFECTPOOL* pool) return S_OK; }
+HRESULT WINAPI D3DXCreateEffectFromFileExW(LPDIRECT3DDEVICE9 device, LPCWSTR srcfile, + const D3DXMACRO *defines, LPD3DXINCLUDE include, LPCSTR skipconstants, DWORD flags, + LPD3DXEFFECTPOOL pool, LPD3DXEFFECT *effect, LPD3DXBUFFER *compilationerrors) +{ + LPVOID buffer; + HRESULT ret; + DWORD size; + + TRACE("(%s): relay\n", debugstr_w(srcfile)); + + if (!device || !srcfile || !defines) + return D3DERR_INVALIDCALL; + + ret = map_view_of_file(srcfile, &buffer, &size); + + if (FAILED(ret)) + return D3DXERR_INVALIDDATA; + + ret = D3DXCreateEffectEx(device, buffer, size, defines, include, skipconstants, flags, pool, effect, compilationerrors); + UnmapViewOfFile(buffer); + + return ret; +} + +HRESULT WINAPI D3DXCreateEffectFromFileExA(LPDIRECT3DDEVICE9 device, LPCSTR srcfile, + const D3DXMACRO *defines, LPD3DXINCLUDE include, LPCSTR skipconstants, DWORD flags, + LPD3DXEFFECTPOOL pool, LPD3DXEFFECT *effect, LPD3DXBUFFER *compilationerrors) +{ + LPWSTR srcfileW; + HRESULT ret; + DWORD len; + + TRACE("(void): relay\n"); + + if (!srcfile || !defines) + return D3DERR_INVALIDCALL; + + len = MultiByteToWideChar(CP_ACP, 0, srcfile, -1, NULL, 0); + srcfileW = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len * sizeof(WCHAR)); + MultiByteToWideChar(CP_ACP, 0, srcfile, -1, srcfileW, len); + + ret = D3DXCreateEffectFromFileExW(device, srcfileW, defines, include, skipconstants, flags, pool, effect, compilationerrors); + HeapFree(GetProcessHeap(), 0, srcfileW); + + return ret; +} + +HRESULT WINAPI D3DXCreateEffectFromFileW(LPDIRECT3DDEVICE9 device, LPCWSTR srcfile, + const D3DXMACRO *defines, LPD3DXINCLUDE include, DWORD flags, LPD3DXEFFECTPOOL pool, + LPD3DXEFFECT *effect, LPD3DXBUFFER *compilationerrors) +{ + TRACE("(void): relay\n"); + return D3DXCreateEffectFromFileExW(device, srcfile, defines, include, NULL, flags, pool, effect, compilationerrors); +} + +HRESULT WINAPI D3DXCreateEffectFromFileA(LPDIRECT3DDEVICE9 device, LPCSTR srcfile, + const D3DXMACRO *defines, LPD3DXINCLUDE include, DWORD flags, LPD3DXEFFECTPOOL pool, + LPD3DXEFFECT *effect, LPD3DXBUFFER *compilationerrors) +{ + TRACE("(void): relay\n"); + return D3DXCreateEffectFromFileExA(device, srcfile, defines, include, NULL, flags, pool, effect, compilationerrors); +} + +HRESULT WINAPI D3DXCreateEffectFromResourceExW(LPDIRECT3DDEVICE9 device, HMODULE srcmodule, LPCWSTR srcresource, + const D3DXMACRO *defines, LPD3DXINCLUDE include, LPCSTR skipconstants, DWORD flags, + LPD3DXEFFECTPOOL pool, LPD3DXEFFECT *effect, LPD3DXBUFFER *compilationerrors) +{ + HRSRC resinfo; + + TRACE("(%p, %s): relay\n", srcmodule, debugstr_w(srcresource)); + + if (!device || !defines) + return D3DERR_INVALIDCALL; + + resinfo = FindResourceW(srcmodule, srcresource, (LPCWSTR) RT_RCDATA); + + if (resinfo) + { + LPVOID buffer; + HRESULT ret; + DWORD size; + + ret = load_resource_into_memory(srcmodule, resinfo, &buffer, &size); + + if (FAILED(ret)) + return D3DXERR_INVALIDDATA; + + return D3DXCreateEffectEx(device, buffer, size, defines, include, skipconstants, flags, pool, effect, compilationerrors); + } + + return D3DXERR_INVALIDDATA; +} + +HRESULT WINAPI D3DXCreateEffectFromResourceExA(LPDIRECT3DDEVICE9 device, HMODULE srcmodule, LPCSTR srcresource, + const D3DXMACRO *defines, LPD3DXINCLUDE include, LPCSTR skipconstants, DWORD flags, + LPD3DXEFFECTPOOL pool, LPD3DXEFFECT *effect, LPD3DXBUFFER *compilationerrors) +{ + HRSRC resinfo; + + TRACE("(%p, %s): relay\n", srcmodule, debugstr_a(srcresource)); + + if (!device || !defines) + return D3DERR_INVALIDCALL; + + resinfo = FindResourceA(srcmodule, srcresource, (LPCSTR) RT_RCDATA); + + if (resinfo) + { + LPVOID buffer; + HRESULT ret; + DWORD size; + + ret = load_resource_into_memory(srcmodule, resinfo, &buffer, &size); + + if (FAILED(ret)) + return D3DXERR_INVALIDDATA; + + return D3DXCreateEffectEx(device, buffer, size, defines, include, skipconstants, flags, pool, effect, compilationerrors); + } + + return D3DXERR_INVALIDDATA; +} + +HRESULT WINAPI D3DXCreateEffectFromResourceW(LPDIRECT3DDEVICE9 device, HMODULE srcmodule, LPCWSTR srcresource, + const D3DXMACRO *defines, LPD3DXINCLUDE include, DWORD flags, LPD3DXEFFECTPOOL pool, + LPD3DXEFFECT *effect, LPD3DXBUFFER *compilationerrors) +{ + TRACE("(void): relay\n"); + return D3DXCreateEffectFromResourceExW(device, srcmodule, srcresource, defines, include, NULL, flags, pool, effect, compilationerrors); +} + +HRESULT WINAPI D3DXCreateEffectFromResourceA(LPDIRECT3DDEVICE9 device, HMODULE srcmodule, LPCSTR srcresource, + const D3DXMACRO *defines, LPD3DXINCLUDE include, DWORD flags, LPD3DXEFFECTPOOL pool, + LPD3DXEFFECT *effect, LPD3DXBUFFER *compilationerrors) +{ + TRACE("(void): relay\n"); + return D3DXCreateEffectFromResourceExA(device, srcmodule, srcresource, defines, include, NULL, flags, pool, effect, compilationerrors); +} + HRESULT WINAPI D3DXCreateEffectCompilerFromFileW(LPCWSTR srcfile, const D3DXMACRO *defines, LPD3DXINCLUDE include, DWORD flags, LPD3DXEFFECTCOMPILER *effectcompiler, LPD3DXBUFFER *parseerrors) {