diff options
author | Thorvald Natvig <slicer@users.sourceforge.net> | 2010-01-25 00:18:56 +0300 |
---|---|---|
committer | Thorvald Natvig <slicer@users.sourceforge.net> | 2010-01-25 00:19:11 +0300 |
commit | 036c6c33103f3c1afaf9f9ae7b9981f32dea794d (patch) | |
tree | 8ba64342e646e07ec8803722929a83b2a7efefad /overlay | |
parent | 59b0d54c35f7bef6d0891cf7eceed72549ae525d (diff) |
Remove dependence on sm.sm from Win32 overlay
Diffstat (limited to 'overlay')
-rw-r--r-- | overlay/d3d10.cpp | 5 | ||||
-rw-r--r-- | overlay/d3d9.cpp | 15 | ||||
-rw-r--r-- | overlay/lib.cpp | 74 | ||||
-rw-r--r-- | overlay/lib.h | 6 | ||||
-rw-r--r-- | overlay/opengl.cpp | 2 |
5 files changed, 36 insertions, 66 deletions
diff --git a/overlay/d3d10.cpp b/overlay/d3d10.cpp index 96efbb9d0..d99e43c08 100644 --- a/overlay/d3d10.cpp +++ b/overlay/d3d10.cpp @@ -33,7 +33,7 @@ #include <d3d10.h> #include <d3dx10.h> -DXGIData *dxgi; +DXGIData *dxgi = NULL; static bool bHooked = false; static bool bChaining = false; @@ -561,6 +561,9 @@ void checkDXGIHook(bool preonly) { } extern "C" __declspec(dllexport) void __cdecl PrepareDXGI() { + if (! dxgi) + return; + ods("Preparing static data for DXGI Injection"); HMODULE hD3D10 = LoadLibrary("D3D10.DLL"); diff --git a/overlay/d3d9.cpp b/overlay/d3d9.cpp index 2910f9433..327a14462 100644 --- a/overlay/d3d9.cpp +++ b/overlay/d3d9.cpp @@ -31,7 +31,7 @@ #include "lib.h" #include <d3d9.h> -Direct3D9Data *d3dd; +Direct3D9Data *d3dd = NULL; typedef IDirect3D9*(WINAPI *pDirect3DCreate9)(UINT SDKVersion) ; typedef HRESULT(WINAPI *pDirect3DCreate9Ex)(UINT SDKVersion, IDirect3D9Ex **ppD3D) ; @@ -40,7 +40,7 @@ struct D3DTLVERTEX { float x, y, z, rhw; // Position float tu, tv; // Texture coordinates }; -const DWORD D3DFVF_TLVERTEX = D3DFVF_XYZRHW | D3DFVF_TEX1; +static const DWORD D3DFVF_TLVERTEX = D3DFVF_XYZRHW | D3DFVF_TEX1; class DevState : protected Pipe { public: @@ -265,7 +265,7 @@ static HardHook hhSwapPresent; static void doPresent(IDirect3DDevice9 *idd) { DevState *ds = devMap[idd]; - if (ds && sm->bShow) { + if (ds) { DWORD dwOldThread = ds->dwMyThread; if (dwOldThread) ods("doPresent from other thread"); @@ -278,7 +278,6 @@ static void doPresent(IDirect3DDevice9 *idd) { ods("D3D9: doPresent Back %p RenderT %p",pTarget,pRenderTarget); - IDirect3DStateBlock9* pStateBlock = NULL; idd->CreateStateBlock(D3DSBT_ALL, &pStateBlock); pStateBlock->Capture(); @@ -288,11 +287,6 @@ static void doPresent(IDirect3DDevice9 *idd) { if (pTarget != pRenderTarget) idd->SetRenderTarget(0, pTarget); - if (sm->bReset) { - sm->bReset = false; - ds->releaseData(); - } - idd->BeginScene(); ds->draw(); idd->EndScene(); @@ -620,6 +614,9 @@ void checkD3D9Hook(bool preonly) { } extern "C" __declspec(dllexport) void __cdecl PrepareD3D9() { + if (! d3dd) + return; + ods("Preparing static data for D3D9 Injection"); char buffb[2048]; diff --git a/overlay/lib.cpp b/overlay/lib.cpp index 632f118d5..0e7a0d701 100644 --- a/overlay/lib.cpp +++ b/overlay/lib.cpp @@ -34,8 +34,6 @@ static HANDLE hMapObject = NULL; static HANDLE hHookMutex = NULL; static HHOOK hhookWnd = 0; -SharedMem *sm = NULL; -HANDLE hSharedMutex = NULL; HMODULE hSelf = NULL; static BOOL bMumble = FALSE; static BOOL bDebug = FALSE; @@ -45,6 +43,8 @@ static HardHook hhLoadW; void *HardHook::pCode = NULL; unsigned int HardHook::uiCode = 0; +static SharedData *sd; + HardHook::HardHook() { int i; baseptr = NULL; @@ -372,7 +372,7 @@ void __cdecl fods(const char *format, ...) { void __cdecl ods(const char *format, ...) { #ifndef DEBUG - if (!bDebug && (!sm || ! sm->bDebug)) + if (!bDebug) return; #endif char buf[4096], *p = buf; @@ -649,23 +649,21 @@ static LRESULT CALLBACK CallWndProc(int nCode, WPARAM wParam, LPARAM lParam) { extern "C" __declspec(dllexport) void __cdecl RemoveHooks() { DWORD dwWaitResult = WaitForSingleObject(hHookMutex, 1000L); if (dwWaitResult == WAIT_OBJECT_0) { - if (sm->bHooked) { + if (sd->bHooked) { if (hhookWnd) { UnhookWindowsHookEx(hhookWnd); hhookWnd = NULL; } - sm->bHooked = false; + sd->bHooked = false; } ReleaseMutex(hHookMutex); } } extern "C" __declspec(dllexport) void __cdecl InstallHooks() { - sm->lastAppAlive = GetTickCount(); - DWORD dwWaitResult = WaitForSingleObject(hHookMutex, 1000L); if (dwWaitResult == WAIT_OBJECT_0) { - if (! sm->bHooked) { + if (! sd->bHooked) { GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, (char *) &InstallHooks, &hSelf); if (hSelf == NULL) { ods("Lib: Failed to find myself"); @@ -675,7 +673,7 @@ extern "C" __declspec(dllexport) void __cdecl InstallHooks() { ods("Lib: Failed to insert WNDProc hook"); } - sm->bHooked = true; + sd->bHooked = true; } ReleaseMutex(hHookMutex); } @@ -685,12 +683,7 @@ extern "C" __declspec(dllexport) unsigned int __cdecl GetOverlayMagicVersion() { return OVERLAY_MAGIC_NUMBER; } -extern "C" __declspec(dllexport) SharedMem * __cdecl GetSharedMemory() { - return sm; -} - extern "C" BOOL WINAPI DllMain(HINSTANCE, DWORD fdwReason, LPVOID) { - char procname[1024+64]; GetModuleFileName(NULL, procname, 1024); @@ -731,57 +724,36 @@ extern "C" BOOL WINAPI DllMain(HINSTANCE, DWORD fdwReason, LPVOID) { ods("Lib: ProcAttach: %s", procname); - hSharedMutex = CreateMutex(NULL, false, "MumbleSharedMutex"); hHookMutex = CreateMutex(NULL, false, "MumbleHookMutex"); - if ((hSharedMutex == NULL) || (hHookMutex == NULL)) { + if (hHookMutex == NULL) { ods("Lib: CreateMutex failed"); return TRUE; } - DWORD dwWaitResult = WaitForSingleObject(hSharedMutex, 1000L); - if (dwWaitResult != WAIT_OBJECT_0) { - ods("Lib: WaitForMutex failed"); - return TRUE; - } - - DWORD dwSharedSize = sizeof(SharedMem) + sizeof(Direct3D9Data) + sizeof(DXGIData); + DWORD dwSharedSize = sizeof(SharedData) + sizeof(Direct3D9Data) + sizeof(DXGIData); - hMapObject = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, dwSharedSize, "MumbleSharedMemory"); + hMapObject = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, dwSharedSize, "MumbleOverlayPrivate"); if (hMapObject == NULL) { ods("Lib: CreateFileMapping failed"); - ReleaseMutex(hSharedMutex); return TRUE; } bool bInit = (GetLastError() != ERROR_ALREADY_EXISTS); - sm = (SharedMem *) MapViewOfFile(hMapObject, FILE_MAP_ALL_ACCESS, 0, 0, dwSharedSize); + sd = (SharedData *) MapViewOfFile(hMapObject, FILE_MAP_ALL_ACCESS, 0, 0, dwSharedSize); - if (sm == NULL) { + if (sd == NULL) { ods("MapViewOfFile Failed"); - ReleaseMutex(hSharedMutex); return TRUE; } - unsigned char *raw = (unsigned char *) sm; - d3dd = (Direct3D9Data *)(raw + sizeof(SharedMem)); - dxgi = (DXGIData *)(raw + sizeof(SharedMem) + sizeof(Direct3D9Data)); - - if (bInit) { - memset(sm, 0, sizeof(SharedMem) + sizeof(Direct3D9Data) + sizeof(DXGIData)); - sm->lastAppAlive = 0; - sm->bHooked = false; - sm->bDebug = false; - sm->bShow = true; - sm->bReset = false; - sm->fX = sm->fY = 1.0; - sm->bTop = false; - sm->bBottom = true; - sm->bLeft = true; - sm->bRight = false; - sm->fFontSize = 72; - } - ReleaseMutex(hSharedMutex); + if (bInit) + memset(sd, 0, dwSharedSize); + + unsigned char *raw = (unsigned char *) sd; + d3dd = (Direct3D9Data *)(raw + sizeof(SharedData)); + dxgi = (DXGIData *)(raw + sizeof(SharedData) + sizeof(Direct3D9Data)); + if (! bMumble) { hhLoad.setup(reinterpret_cast<voidFunc>(LoadLibraryA), reinterpret_cast<voidFunc>(MyLoadLibrary)); @@ -801,19 +773,17 @@ extern "C" BOOL WINAPI DllMain(HINSTANCE, DWORD fdwReason, LPVOID) { ods("Lib: ProcDetach: %s", procname); hhLoad.restore(true); hhLoadW.restore(true); - if (sm) - UnmapViewOfFile(sm); + if (sd) + UnmapViewOfFile(sd); if (hMapObject) CloseHandle(hMapObject); - if (hSharedMutex) - CloseHandle(hSharedMutex); if (hHookMutex) CloseHandle(hHookMutex); } break; case DLL_THREAD_ATTACH: { static bool bTriedHook = false; - if (sm && ! bTriedHook && ! bMumble) { + if (sd && ! bTriedHook && ! bMumble) { bTriedHook = true; checkD3D9Hook(); checkDXGIHook(); diff --git a/overlay/lib.h b/overlay/lib.h index 243f32213..5412469d8 100644 --- a/overlay/lib.h +++ b/overlay/lib.h @@ -87,6 +87,10 @@ struct DXGIData { wchar_t wcD3D10FileName[2048]; }; +struct SharedData { + bool bHooked; +}; + struct FakeInterface { typedef ULONG(FakeInterface::* voidMemberFunc)(); void **vtbl; @@ -133,10 +137,8 @@ extern void checkDXGIHook(bool preonly = false); extern void checkD3D9Hook(bool preonly = false); extern void checkOpenGLHook(); -extern SharedMem *sm; extern Direct3D9Data *d3dd; extern DXGIData *dxgi; -extern HANDLE hSharedMutex; extern HMODULE hSelf; extern unsigned int uiAudioCount; extern bool bVideoHooked; diff --git a/overlay/opengl.cpp b/overlay/opengl.cpp index 33e3011f3..053001911 100644 --- a/overlay/opengl.cpp +++ b/overlay/opengl.cpp @@ -236,8 +236,6 @@ void Context::newTexture(unsigned int width, unsigned int height) { } void Context::draw(HDC hdc) { - sm->bHooked = true; - // DEBUG // sm->bDebug = true; |