Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/effects11/effects11.cpp b/effects11/effects11.cpp
- new file mode 100644
- index 0000000..858cea6
- --- /dev/null
- +++ b/effects11/effects11.cpp
- @@ -0,0 +1,47 @@
- +#include "d3dx11effect.h"
- +
- +static HRESULT(__stdcall *pD3DReflect)(LPCVOID, SIZE_T, REFIID, void **) = NULL;
- +static HRESULT(__stdcall *pD3DGetInputSignatureBlob)(LPCVOID, SIZE_T, ID3DBlob **) = NULL;
- +
- +extern "C" __declspec(dllexport) HRESULT __cdecl
- +CreateEffectFromMemory(CONST void *p, SIZE_T size, UINT flags, ID3D11Device *pD, ID3DX11Effect **ppE)
- +{
- + return D3DX11CreateEffectFromMemory(p, size, flags, pD, ppE);
- +}
- +
- +static HRESULT LoadD3DCompiler()
- +{
- + LPCSTR libraries[] = {"d3dcompiler_43.dll", "d3dcompiler_42.dll", "d3dcompiler_41.dll", "d3dcompiler_40.dll", NULL};
- +
- + int i = 0;
- + while (LPCSTR l = libraries[i++]) {
- + HMODULE d3dcompiler = LoadLibrary(l);
- + if (d3dcompiler) {
- + pD3DReflect = (HRESULT(__stdcall *)(LPCVOID, SIZE_T, REFIID, void**)) GetProcAddress(d3dcompiler, "D3DReflect");
- + pD3DGetInputSignatureBlob = (HRESULT(__stdcall *)(LPCVOID, SIZE_T, ID3DBlob **))GetProcAddress(d3dcompiler, "D3DGetInputSignatureBlob");
- + if (pD3DReflect && pD3DGetInputSignatureBlob)
- + break;
- + }
- + }
- + if (!pD3DReflect || !pD3DGetInputSignatureBlob)
- + return -1;
- + return 0;
- +}
- +
- +extern "C" HRESULT __stdcall D3DReflect(LPCVOID p, SIZE_T s, REFIID r, void **pp)
- +{
- + if (!pD3DReflect) {
- + HRESULT hr = LoadD3DCompiler();
- + if (hr) return -1;
- + }
- + return pD3DReflect(p, s, r, pp);
- +}
- +
- +extern "C" HRESULT __stdcall D3DGetInputSignatureBlob(LPCVOID p, SIZE_T s, ID3DBlob **pp)
- +{
- + if (!pD3DGetInputSignatureBlob) {
- + HRESULT hr = LoadD3DCompiler();
- + if (hr) return -1;
- + }
- + return pD3DGetInputSignatureBlob(p, s, pp);
- +}
- diff --git a/effects11/effects11.pro b/effects11/effects11.pro
- new file mode 100644
- index 0000000..bcccb56
- --- /dev/null
- +++ b/effects11/effects11.pro
- @@ -0,0 +1,33 @@
- +include (../compiler.pri)
- +
- +TEMPLATE = lib
- +CONFIG *= dll debug_and_release warn_on
- +CONFIG -= embed_manifest_dll
- +TARGET = effects11
- +SOURCES = effects11.cpp
- +
- +DEFINES -= UNICODE
- +
- +QMAKE_CXXFLAGS_RELEASE -= -MD
- +QMAKE_CXXFLAGS_DEBUG -= -MDd
- +
- +QMAKE_CXXFLAGS_RELEASE *= -MT
- +QMAKE_CXXFLAGS_DEBUG *= -MTd
- +
- +INCLUDEPATH *= "$$(DXSDK_DIR)Include"
- +
- +EFFECTS11DIR = $$(DXSDK_DIR)Samples/C++/Effects11/
- +EFFECTS11PATH = . Inc Binary
- +EFFECTS11SOURCES = EffectAPI.cpp EffectLoad.cpp EffectNonRuntime.cpp EffectReflection.cpp EffectRuntime.cpp d3dx11dbg.cpp d3dxGlobal.cpp
- +
- +SOURCES *= $$join(EFFECTS11SOURCES," $$EFFECTS11DIR","$$EFFECTS11DIR")
- +INCLUDEPATH *= $$join(EFFECTS11PATH," $$EFFECTS11DIR","$$EFFECTS11DIR")
- +
- +CONFIG(release, debug|release) {
- + DESTDIR = ../release
- +}
- +
- +CONFIG(debug, debug|release) {
- + DESTDIR = ../release
- + DEFINES *= DEBUG
- +}
- diff --git a/main.pro b/main.pro
- index f2b3ce9..2674796 100644
- --- a/main.pro
- +++ b/main.pro
- @@ -27,6 +27,7 @@ CONFIG *= ordered debug_and_release
- win32 {
- SUBDIRS *= overlay
- + SUBDIRS *= effects11
- }
- unix:!macx:!CONFIG(no-overlay) {
- diff --git a/overlay/d3d11.cpp b/overlay/d3d11.cpp
- index ec45122..0e1c8ca 100644
- --- a/overlay/d3d11.cpp
- +++ b/overlay/d3d11.cpp
- @@ -49,6 +49,7 @@ typedef HRESULT(__stdcall *PresentType)(IDXGISwapChain *, UINT, UINT);
- typedef HRESULT(__stdcall *ResizeBuffersType)(IDXGISwapChain *, UINT, UINT, UINT, DXGI_FORMAT, UINT);
- typedef ULONG(__stdcall *AddRefType)(ID3D11Device *);
- typedef ULONG(__stdcall *ReleaseType)(ID3D11Device *);
- +typedef HRESULT(__cdecl *CreateEffectFromMemoryType)(CONST void *, SIZE_T, UINT, ID3D11Device *, ID3DX11Effect **);
- #define HMODREF(mod, func) func##Type p##func = (func##Type) GetProcAddress(mod, #func)
- @@ -251,6 +252,38 @@ void D11State::newTexture(unsigned int w, unsigned int h) {
- }
- }
- +static CreateEffectFromMemoryType GetCreateEffectFromMemory(void)
- +{
- + HMODULE o = GetModuleHandle("mumble_ol.dll");
- + if (!o) {
- + ods("failed to find mumble_ol.dll");
- + return NULL;
- + }
- +
- + TCHAR path[2048];
- + GetModuleFileName(o, path, sizeof(path));
- + path[2047]='\0';
- + char *p=strrchr(path,'\\');
- + if (!p) {
- + ods("bad path %s", path);
- + return NULL;
- + }
- +
- + *p='\0';
- + strcat_s(path, sizeof(path), "\\effects11.dll");
- + HMODULE effects11 = LoadLibrary(path);
- + if (!effects11) {
- + ods("failed to load %s", path);
- + return NULL;
- + }
- +
- + CreateEffectFromMemoryType pCEFM =
- + (HRESULT(__cdecl *)(CONST void *, SIZE_T, UINT, ID3D11Device *, ID3DX11Effect **))
- + GetProcAddress(effects11, "CreateEffectFromMemory");
- +
- + return pCEFM;
- +}
- +
- void D11State::init() {
- HRESULT hr;
- @@ -305,7 +338,8 @@ void D11State::init() {
- float bf[4];
- pDeviceContext->OMSetBlendState(pBlendState, bf, 0xffffffff);
- - hr = D3DX11CreateEffectFromMemory((void *) g_main11, sizeof(g_main11), 0, pDevice, &pEffect);
- + CreateEffectFromMemoryType pCreateEffectFromMemory = GetCreateEffectFromMemory();
- + hr = pCreateEffectFromMemory((void *) g_main11, sizeof(g_main11), 0, pDevice, &pEffect);
- pTechnique = pEffect->GetTechniqueByName("Render");
- pDiffuseTexture = pEffect->GetVariableByName("txDiffuse")->AsShaderResource();
- diff --git a/overlay/overlay.pro b/overlay/overlay.pro
- index 360fda1..c084672 100644
- --- a/overlay/overlay.pro
- +++ b/overlay/overlay.pro
- @@ -6,7 +6,7 @@ CONFIG *= dll shared debug_and_release warn_on
- CONFIG -= embed_manifest_dll
- TARGET = mumble_ol
- SOURCES = lib.cpp d3d9.cpp d3d10.cpp d3d11.cpp ods.cpp opengl.cpp HardHook.cpp D11StateBlock.cpp
- -HEADERS = lib.h ods.h HardHook.h overlay_blacklist.h
- +HEADERS = lib.h ods.h HardHook.h D11StateBlock.h overlay_blacklist.h
- EFFECTS = overlay.fx
- DIST = overlay.h overlay.fx HardHook.h
- @@ -19,16 +19,9 @@ QMAKE_CXXFLAGS_RELEASE *= -MT
- QMAKE_CXXFLAGS_DEBUG *= -MTd
- INCLUDEPATH *= "$$(DXSDK_DIR)Include"
- +INCLUDEPATH *= "$$(DXSDK_DIR)Samples/C++/Effects11/Inc"
- LIBS *= -l"$$(DXSDK_DIR)Lib/x86/dxguid" -luuid -lole32 -luser32 -ladvapi32
- -LIBS *= -l"$$(DXSDK_DIR)Lib/x86/d3dcompiler"
- -
- -EFFECTS11DIR = $$(DXSDK_DIR)Samples/C++/Effects11/
- -EFFECTS11PATH = Inc Binary
- -EFFECTS11SOURCES = EffectAPI.cpp EffectLoad.cpp EffectNonRuntime.cpp EffectReflection.cpp EffectRuntime.cpp d3dx11dbg.cpp d3dxGlobal.cpp
- -
- -SOURCES *= $$join(EFFECTS11SOURCES," $$EFFECTS11DIR","$$EFFECTS11DIR")
- -INCLUDEPATH *= $$join(EFFECTS11PATH," $$EFFECTS11DIR","$$EFFECTS11DIR")
- CONFIG(release, debug|release) {
- DESTDIR = ../release
Add Comment
Please, Sign In to add comment