Owen Rudge : d3dx9: Implement CreateEffectFromFile/Resource functions.
Alexandre Julliard
julliard at winehq.org
Tue May 18 12:32:55 CDT 2010
Module: wine
Branch: master
Commit: 00eb092e4dec30680b94e722574034c5971857af
URL: http://source.winehq.org/git/wine.git/?a=commit;h=00eb092e4dec30680b94e722574034c5971857af
Author: Owen Rudge <orudge at 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)
{
More information about the wine-cvs
mailing list