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