From 47f3dc326b1162c765b539763847d9949fd3d38e Mon Sep 17 00:00:00 2001 From: gho tik Date: Fri, 21 Oct 2016 12:47:48 -0400 Subject: [PATCH] v2_03_92_src_fx2 Former-commit-id: 98071662a057f21e675d4a50be017788687cd8bc --- Include/dxwnd.h | 1 + build/dxwnd.dll | 4 +- build/dxwnd.exe | 2 +- build/exports/Heavy Gear.dxw | 35 +++++++++++ build/exports/dxwnd.log | 31 +++++++++- build/readme-relnotes.txt | 10 +++- dll/ddblit.cpp | 24 ++++---- dll/ddraw.cpp | 44 +++++++++++++- dll/ddtexture.cpp | 22 ++++--- dll/dwhide.cpp | 5 +- dll/dxhook.cpp | 11 +++- dll/dxwcore.cpp | 5 ++ dll/dxwcore.hpp | 28 +++++---- dll/dxwnd.cpp | 2 +- dll/dxwnd.vs2008.suo | Bin 33280 -> 51712 bytes dll/kernel32.cpp | 22 +++++-- dll/logall.h | 18 +++++- dll/opengl.cpp | 112 +++++++++++++++++++++++++++++++---- host/TabCompat.cpp | 1 + host/TargetDlg.cpp | 1 + host/TargetDlg.h | 1 + host/dxwndhost.rc | Bin 131894 -> 132114 bytes host/dxwndhost.vs2008.suo | Bin 46592 -> 46592 bytes host/dxwndhostView.cpp | 2 + host/resource | Bin 48202 -> 48294 bytes 25 files changed, 322 insertions(+), 59 deletions(-) create mode 100644 build/exports/Heavy Gear.dxw diff --git a/Include/dxwnd.h b/Include/dxwnd.h index 111d80d..9369f4d 100644 --- a/Include/dxwnd.h +++ b/Include/dxwnd.h @@ -242,6 +242,7 @@ #define MAXIMUMRES 0x01000000 // Set maximum screen resolution accorting to sizw x sizh fields #define LOCKCOLORDEPTH 0x02000000 // lock ddraw color depth to current desktop value (used in SetDisplayMode) #define FIXSMACKLOOP 0x04000000 // fix Smack loop by insert processmessage and blit between frames +#define FIXFREELIBRARY 0x08000000 // fix FreeLibrary simulating retcode 0(error) when attempting free of unallocated module // eighth flags DWORD dxw.dwFlags8: diff --git a/build/dxwnd.dll b/build/dxwnd.dll index 7fd1a23..344534c 100644 --- a/build/dxwnd.dll +++ b/build/dxwnd.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:316eb7122e88fb04f315feae566f9dd25795711486906c18921c705267ead3ea -size 688640 +oid sha256:14919d03fd4ec468005183e338af3f4734eeed9ec11ef6aaf2540c1f9bb00872 +size 691712 diff --git a/build/dxwnd.exe b/build/dxwnd.exe index c7a426d..6a033f1 100644 --- a/build/dxwnd.exe +++ b/build/dxwnd.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a8ac20985704c056d733ed339eed0f3da3467d780f238d3717fb855f5d8dec20 +oid sha256:145095298932076ccdb75aec0627b07f05ad61d9559ed3481a57de4d8a58ea21 size 662016 diff --git a/build/exports/Heavy Gear.dxw b/build/exports/Heavy Gear.dxw new file mode 100644 index 0000000..a88d37f --- /dev/null +++ b/build/exports/Heavy Gear.dxw @@ -0,0 +1,35 @@ +[target] +title0=Heavy Gear +path0=D:\Games\Heavy Gear\hg.exe +startfolder0= +launchpath0= +module0= +opengllib0= +notes0=Game needs CD on first CD-Rom drive. \nIf multiple ones are present, need setting "hide empty CD-Rom drivers" \nand unmount others CD.\nGame patched with patch v1.2 requires "fix FreeLibrary" flag\n3DFX & Glide support is still under development +registry0= +ver0=0 +monitorid0=-1 +coord0=0 +flag0=681574434 +flagg0=1207959552 +flagh0=20 +flagi0=-2009071612 +flagj0=4224 +flagk0=65536 +flagl0=134217728 +flagm0=0 +tflag0=0 +dflag0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=-1 +swapeffect0=0 +maxddinterface0=7 +slowratio0=2 +initresw0=800 +initresh0=600 diff --git a/build/exports/dxwnd.log b/build/exports/dxwnd.log index b258931..a286f15 100644 --- a/build/exports/dxwnd.log +++ b/build/exports/dxwnd.log @@ -1,6 +1,31 @@ -OnRun idx=0 prog="G:\Games\Nascar Racing 3\NASCAR Racing 3.exe" +OnRun idx=16 prog="F:\Games\Adrenix\Adrenix.exe" setwindowshook mode -OnRun idx=0 prog="G:\Games\Nascar Racing 3\NASCAR Racing 3.exe" +OnRun idx=17 prog="F:\Games\Adrenix\AdrenixD.exe" setwindowshook mode -OnRun idx=0 prog="G:\Games\Nascar Racing 3\NASCAR Racing 3.exe" +OnRun idx=16 prog="F:\Games\Adrenix\Adrenix.exe" +checksafediscversion +setwindowshook mode +OnRun idx=16 prog="F:\Games\Adrenix\Adrenix.exe" +setwindowshook mode +OnRun idx=16 prog="F:\Games\Adrenix\Adrenix.exe" +setwindowshook mode +OnRun idx=18 prog="V:\ADRENIX.EXE" +setwindowshook mode +OnRun idx=19 prog="V:\ADRENIXD.EXE" +setwindowshook mode +OnRun idx=20 prog="V:\ADRHEAT.EXE" +setwindowshook mode +OnRun idx=21 prog="V:\ADRHEATD.EXE" +setwindowshook mode +OnRun idx=22 prog="V:\ADX_VID.EXE" +setwindowshook mode +OnRun idx=16 prog="F:\Games\Adrenix\Adrenix.exe" +setwindowshook mode +OnRun idx=17 prog="F:\Games\Adrenix\AdrenixD.exe" +setwindowshook mode +OnRun idx=17 prog="F:\Games\Adrenix\AdrenixD.exe" +setwindowshook mode +OnRun idx=16 prog="F:\Games\Adrenix\Adrenix.exe" +setwindowshook mode +OnRun idx=16 prog="F:\Games\Adrenix\Adrenix.exe" setwindowshook mode diff --git a/build/readme-relnotes.txt b/build/readme-relnotes.txt index 5da1d5f..92701ad 100644 --- a/build/readme-relnotes.txt +++ b/build/readme-relnotes.txt @@ -1301,4 +1301,12 @@ fix: USER32 EndPaint DC leakage - fixes "Yu No" leakage fix: window position problems fix: GUI auto hide mode enabled and disabled without need of GUI restart fix: ddraw surface stack policy. Recovers "Warhammer 40K Rites of War" after v2.03.83 fix. -add: /q quiet mode, no message dialogs on screen \ No newline at end of file +add: /q quiet mode, no message dialogs on screen + +v2.03.92.fx1-2: +add: option "Fix FreeLibrary" to emulate the Win9X behaviour returning errorcode upon attempts to free a deallocated module. Fixes "Heavy Gear" patch 1.2 endless loop problem. +fix: added reference to Palette object to allow final Release() without crash - fixes "Heavy Gear" crash at end of mission +fix: fix RECT structure passed to ddraw::Unlock method in case it points to bad coordinates. Fixes FIFA2000 in D3D mode +fix: wrapped all OpenGL GetString methods and inserted proper logging. For diagnostic purposes. +fix: fix ddraw::SetPalette wrapper in case lppd is NULL. Fixes Adrenix sw mode crash. +fix: better way to manage extra modules to be hooked (Glide ddls, SmackW32) \ No newline at end of file diff --git a/dll/ddblit.cpp b/dll/ddblit.cpp index 755c033..a515a73 100644 --- a/dll/ddblit.cpp +++ b/dll/ddblit.cpp @@ -150,6 +150,12 @@ static HRESULT sBltToPrimary(int dxversion, Blt_Type pBlt, char *api, LPDIRECTDR if(dxw.dwFlags3 & NODDRAWBLT) return DD_OK; } + // v2.03.48: on WinXP it may happen (reported by Cloudstr) that alt tabbing produces + // bad blit attempts where the client coordinates get the (-32000,-32000) - (-32000,-32000) + // value. In such cases, it's adviseable to simulate an OK return code without attempting + // any blit operation! + if(lpdestrect && (lpdestrect->left == -32000)) return DD_OK; // no blit on invisible window + #ifdef ONEPIXELFIX if (lpdestrect){ if ((lpdestrect->top == 0) && (lpdestrect->bottom == dxw.GetScreenHeight() -1)) lpdestrect->bottom = dxw.GetScreenHeight(); @@ -162,11 +168,15 @@ static HRESULT sBltToPrimary(int dxversion, Blt_Type pBlt, char *api, LPDIRECTDR #endif #if FIXBIGGERRECT + // seems necessary to "cure" the "FIFA 2000" soccer game in hw accelerated graphics, when the Unlock() method + // receives RECT coordinates with big negative numbers! if(lpdestrect){ - if((DWORD)lpdestrect->top < 0) lpdestrect->top = 0; - if((DWORD)lpdestrect->left < 0) lpdestrect->left = 0; - if((DWORD)lpdestrect->bottom > dxw.GetScreenHeight()) lpdestrect->bottom = dxw.GetScreenHeight(); - if((DWORD)lpdestrect->right > dxw.GetScreenWidth()) lpdestrect->right = dxw.GetScreenWidth(); + if(lpdestrect->top < 0) lpdestrect->top = 0; + if(lpdestrect->left < 0) lpdestrect->left = 0; + if(lpdestrect->bottom > (LONG)dxw.GetScreenHeight()) lpdestrect->bottom = dxw.GetScreenHeight(); + if(lpdestrect->right > (LONG)dxw.GetScreenWidth()) lpdestrect->right = dxw.GetScreenWidth(); + if(lpdestrect->bottom < lpdestrect->top) lpdestrect->bottom = (LONG)dxw.GetScreenHeight(); + if(lpdestrect->right < lpdestrect->left) lpdestrect->right = (LONG)dxw.GetScreenWidth(); } #endif @@ -187,12 +197,6 @@ static HRESULT sBltToPrimary(int dxversion, Blt_Type pBlt, char *api, LPDIRECTDR destrect.left, destrect.top, destrect.right, destrect.bottom, dxw.GetScreenWidth(), dxw.GetScreenHeight()); - // v2.03.48: on WinXP it may happen (reported by Cloudstr) that alt tabbing produces - // bad blit attempts where the client coordinates get the (-32000,-32000) - (-32000,-32000) - // value. In such cases, it's adviseable to simulate an OK return code without attempting - // any blit operation! - if(destrect.left == -32000) return DD_OK; // no blit on invisible window - //if(!(lpddssrc || (dwflags & DDBLT_COLORFILL))) { if((lpddssrc==0) && !(dwflags & DDBLT_COLORFILL)){ lpddssrc = dxwss.GetBackBufferSurface(); diff --git a/dll/ddraw.cpp b/dll/ddraw.cpp index 1c97f9c..70f9f84 100644 --- a/dll/ddraw.cpp +++ b/dll/ddraw.cpp @@ -99,6 +99,11 @@ HRESULT WINAPI extInitialize2(LPDIRECTDRAW, FAR GUID *); HRESULT WINAPI extInitialize3(LPDIRECTDRAW, FAR GUID *); HRESULT WINAPI extInitialize4(LPDIRECTDRAW, FAR GUID *); HRESULT WINAPI extInitialize7(LPDIRECTDRAW, FAR GUID *); +HRESULT WINAPI extRestoreDisplayMode1(LPDIRECTDRAW); +HRESULT WINAPI extRestoreDisplayMode2(LPDIRECTDRAW); +HRESULT WINAPI extRestoreDisplayMode3(LPDIRECTDRAW); +HRESULT WINAPI extRestoreDisplayMode4(LPDIRECTDRAW); +HRESULT WINAPI extRestoreDisplayMode7(LPDIRECTDRAW); HRESULT WINAPI extSetCooperativeLevel1(LPDIRECTDRAW, HWND, DWORD); HRESULT WINAPI extSetCooperativeLevel2(LPDIRECTDRAW, HWND, DWORD); HRESULT WINAPI extSetCooperativeLevel3(LPDIRECTDRAW, HWND, DWORD); @@ -327,6 +332,7 @@ GetAvailableVidMem4_Type pGetAvailableVidMem4, pGetAvailableVidMem7; RestoreAllSurfaces_Type pRestoreAllSurfaces; TestCooperativeLevel_Type pTestCooperativeLevel4, pTestCooperativeLevel7; GetDeviceIdentifier_Type pGetDeviceIdentifier; +RestoreDisplayMode_Type pRestoreDisplayMode1, pRestoreDisplayMode2, pRestoreDisplayMode3, pRestoreDisplayMode4, pRestoreDisplayMode7; /* DirectDrawSurface hook pointers */ QueryInterface_Type pQueryInterfaceS1, pQueryInterfaceS2, pQueryInterfaceS3, pQueryInterfaceS4, pQueryInterfaceS7; @@ -1151,6 +1157,7 @@ void HookDDSession(LPDIRECTDRAW *lplpdd, int dxversion) SetHook((void *)(**(DWORD **)lplpdd + 48), extGetDisplayMode1, (void **)&pGetDisplayMode1, "GetDisplayMode(D1)"); SetHook((void *)(**(DWORD **)lplpdd + 56), extGetGDISurface1, (void **)&pGetGDISurface1, "GetGDISurface(D1)"); SetHook((void *)(**(DWORD **)lplpdd + 72), extInitialize1, (void **)&pInitialize1, "Initialize(D1)"); + SetHook((void *)(**(DWORD **)lplpdd + 76), extRestoreDisplayMode1, (void **)&pRestoreDisplayMode1, "RestoreDisplayMode(D1)"); SetHook((void *)(**(DWORD **)lplpdd + 80), extSetCooperativeLevel1, (void **)&pSetCooperativeLevel1, "SetCooperativeLevel(D1)"); SetHook((void *)(**(DWORD **)lplpdd + 84), extSetDisplayMode1, (void **)&pSetDisplayMode1, "SetDisplayMode(D1)"); SetHook((void *)(**(DWORD **)lplpdd + 88), extWaitForVerticalBlank1, (void **)&pWaitForVerticalBlank1, "WaitForVerticalBlank(D1)"); @@ -1167,6 +1174,7 @@ void HookDDSession(LPDIRECTDRAW *lplpdd, int dxversion) SetHook((void *)(**(DWORD **)lplpdd + 48), extGetDisplayMode2, (void **)&pGetDisplayMode2, "GetDisplayMode(D2)"); SetHook((void *)(**(DWORD **)lplpdd + 56), extGetGDISurface2, (void **)&pGetGDISurface2, "GetGDISurface(D2)"); SetHook((void *)(**(DWORD **)lplpdd + 72), extInitialize2, (void **)&pInitialize2, "Initialize(D2)"); + SetHook((void *)(**(DWORD **)lplpdd + 76), extRestoreDisplayMode2, (void **)&pRestoreDisplayMode2, "RestoreDisplayMode(D2)"); SetHook((void *)(**(DWORD **)lplpdd + 80), extSetCooperativeLevel2, (void **)&pSetCooperativeLevel2, "SetCooperativeLevel(D2)"); SetHook((void *)(**(DWORD **)lplpdd + 84), extSetDisplayMode2, (void **)&pSetDisplayMode2, "SetDisplayMode(D2)"); SetHook((void *)(**(DWORD **)lplpdd + 88), extWaitForVerticalBlank2, (void **)&pWaitForVerticalBlank2, "WaitForVerticalBlank(D2)"); @@ -1185,6 +1193,7 @@ void HookDDSession(LPDIRECTDRAW *lplpdd, int dxversion) SetHook((void *)(**(DWORD **)lplpdd + 48), extGetDisplayMode3, (void **)&pGetDisplayMode3, "GetDisplayMode(D3)"); SetHook((void *)(**(DWORD **)lplpdd + 56), extGetGDISurface3, (void **)&pGetGDISurface3, "GetGDISurface(D3)"); SetHook((void *)(**(DWORD **)lplpdd + 72), extInitialize3, (void **)&pInitialize3, "Initialize(D3)"); + SetHook((void *)(**(DWORD **)lplpdd + 76), extRestoreDisplayMode3, (void **)&pRestoreDisplayMode3, "RestoreDisplayMode(D3)"); SetHook((void *)(**(DWORD **)lplpdd + 80), extSetCooperativeLevel3, (void **)&pSetCooperativeLevel3, "SetCooperativeLevel(D3)"); SetHook((void *)(**(DWORD **)lplpdd + 84), extSetDisplayMode3, (void **)&pSetDisplayMode3, "SetDisplayMode(D3)"); SetHook((void *)(**(DWORD **)lplpdd + 88), extWaitForVerticalBlank3, (void **)&pWaitForVerticalBlank3, "WaitForVerticalBlank(D3)"); @@ -1203,6 +1212,7 @@ void HookDDSession(LPDIRECTDRAW *lplpdd, int dxversion) SetHook((void *)(**(DWORD **)lplpdd + 48), extGetDisplayMode4, (void **)&pGetDisplayMode4, "GetDisplayMode(D4)"); SetHook((void *)(**(DWORD **)lplpdd + 56), extGetGDISurface4, (void **)&pGetGDISurface4, "GetGDISurface(D4)"); SetHook((void *)(**(DWORD **)lplpdd + 72), extInitialize4, (void **)&pInitialize4, "Initialize(D4)"); + SetHook((void *)(**(DWORD **)lplpdd + 76), extRestoreDisplayMode4, (void **)&pRestoreDisplayMode4, "RestoreDisplayMode(D4)"); SetHook((void *)(**(DWORD **)lplpdd + 80), extSetCooperativeLevel4, (void **)&pSetCooperativeLevel4, "SetCooperativeLevel(D4)"); SetHook((void *)(**(DWORD **)lplpdd + 84), extSetDisplayMode4, (void **)&pSetDisplayMode4, "SetDisplayMode(D4)"); SetHook((void *)(**(DWORD **)lplpdd + 88), extWaitForVerticalBlank4, (void **)&pWaitForVerticalBlank4, "WaitForVerticalBlank(D4)"); @@ -1223,6 +1233,7 @@ void HookDDSession(LPDIRECTDRAW *lplpdd, int dxversion) SetHook((void *)(**(DWORD **)lplpdd + 48), extGetDisplayMode7, (void **)&pGetDisplayMode7, "GetDisplayMode(D7)"); SetHook((void *)(**(DWORD **)lplpdd + 56), extGetGDISurface7, (void **)&pGetGDISurface7, "GetGDISurface(D7)"); SetHook((void *)(**(DWORD **)lplpdd + 72), extInitialize7, (void **)&pInitialize7, "Initialize(D7)"); + SetHook((void *)(**(DWORD **)lplpdd + 76), extRestoreDisplayMode7, (void **)&pRestoreDisplayMode7, "RestoreDisplayMode(D7)"); SetHook((void *)(**(DWORD **)lplpdd + 80), extSetCooperativeLevel7, (void **)&pSetCooperativeLevel7, "SetCooperativeLevel(D7)"); SetHook((void *)(**(DWORD **)lplpdd + 84), extSetDisplayMode7, (void **)&pSetDisplayMode7, "SetDisplayMode(D7)"); SetHook((void *)(**(DWORD **)lplpdd + 88), extWaitForVerticalBlank7, (void **)&pWaitForVerticalBlank7, "WaitForVerticalBlank(D7)"); @@ -1823,6 +1834,27 @@ HRESULT WINAPI extInitialize4(LPDIRECTDRAW lpdd, GUID FAR *lpguid) HRESULT WINAPI extInitialize7(LPDIRECTDRAW lpdd, GUID FAR *lpguid) { return extInitialize(pInitialize7, lpdd, lpguid); } +static HRESULT WINAPI extRestoreDisplayMode(int dxversion, RestoreDisplayMode_Type pRestoreDisplayMode, LPDIRECTDRAW lpdd) +{ + OutTraceDW("RestoreDisplayMode(%d): lpdd=%x\n", dxversion, lpdd); + if((dxw.dwFlags1 & (EMULATESURFACE|EMULATEBUFFER))){ + OutTraceDW("RestoreDisplayMode: BYPASS\n"); + return DD_OK; + } + return (*pRestoreDisplayMode)(lpdd); +} + +HRESULT WINAPI extRestoreDisplayMode1(LPDIRECTDRAW lpdd) +{ return extRestoreDisplayMode(1, pRestoreDisplayMode1, lpdd); } +HRESULT WINAPI extRestoreDisplayMode2(LPDIRECTDRAW lpdd) +{ return extRestoreDisplayMode(2, pRestoreDisplayMode2, lpdd); } +HRESULT WINAPI extRestoreDisplayMode3(LPDIRECTDRAW lpdd) +{ return extRestoreDisplayMode(3, pRestoreDisplayMode3, lpdd); } +HRESULT WINAPI extRestoreDisplayMode4(LPDIRECTDRAW lpdd) +{ return extRestoreDisplayMode(4, pRestoreDisplayMode4, lpdd); } +HRESULT WINAPI extRestoreDisplayMode7(LPDIRECTDRAW lpdd) +{ return extRestoreDisplayMode(7, pRestoreDisplayMode7, lpdd); } + static HRESULT WINAPI extQueryInterfaceD(int dxversion, QueryInterface_Type pQueryInterfaceD, void *lpdd, REFIID riid, LPVOID *obp) { HRESULT res; @@ -2081,7 +2113,7 @@ static HRESULT WINAPI extQueryInterfaceS(int dxversion, QueryInterface_Type pQue if(dwLocalTexVersion) { // Texture Handling on QueryInterface - if(dxw.dwFlags5 & TEXTUREMASK) TextureHandling((LPDIRECTDRAWSURFACE)lpdds, dwLocalTexVersion); + if(dxw.dwFlags5 & TEXTUREMASK) TextureHandling((LPDIRECTDRAWSURFACE)lpdds, dxversion); HookTexture(obp, dwLocalTexVersion); } @@ -4227,7 +4259,13 @@ HRESULT WINAPI extSetPalette(int dxversion, SetPalette_Type pSetPalette, LPDIREC OutTraceDDRAW("SetPalette(%d): lpdds=%x%s lpddp=%x\n", dxversion, lpdds, isPrim?"(PRIM)":"", lpddp); res=(*pSetPalette)(lpdds, lpddp); - if(res)OutTraceE("SetPalette: ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); + if(res){ + OutTraceE("SetPalette: ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); + // from MSDN, about lpddp: + // A pointer to the IDirectDrawPalette interface for the palette object to be used with this surface. + // If NULL, the current palette is detached. + if(lpddp) lpddp->AddRef(); // to allow final Release() without crash - fixes "Heavy Gear" crash at end of mission + } else OutTraceDDRAW("SetPalette: OK\n"); res=DD_OK; @@ -4250,7 +4288,7 @@ HRESULT WINAPI extSetPalette(int dxversion, SetPalette_Type pSetPalette, LPDIREC if(res) OutTraceE("SetPalette: ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); } // add a reference to simulate what would happen in reality.... - lpdds->AddRef(); + if(lpddp) lpdds->AddRef(); res=DD_OK; } diff --git a/dll/ddtexture.cpp b/dll/ddtexture.cpp index c85ca98..27cd5e8 100644 --- a/dll/ddtexture.cpp +++ b/dll/ddtexture.cpp @@ -108,16 +108,20 @@ void TextureHighlight(LPDIRECTDRAWSURFACE s, int dxversion) DDSURFACEDESC2 ddsd; int x, y, w, h; HRESULT res; + + OutTraceB("TextureHigh(%d): lpdds=%x\n", dxversion, s); + memset(&ddsd,0,sizeof(DDSURFACEDESC2)); ddsd.dwSize = Set_dwSize_From_Surface(); ddsd.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; +// if(res=(*pLockMethod(lpddsHookedVersion()))(s, 0, (LPDDSURFACEDESC)&ddsd, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){ if(res=(*pLockMethod(dxversion))(s, 0, (LPDDSURFACEDESC)&ddsd, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){ - OutTraceE("TextureHigh: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); + OutTraceE("TextureHigh(%d): Lock ERROR res=%x(%s) at %d\n", dxversion, res, ExplainDDError(res), __LINE__); return; } if((ddsd.ddsCaps.dwCaps & DDSCAPS_TEXTURE) && !dxwss.IsABackBufferSurface(s)) { - OutTrace("TextureHigh: lpdds=%x BitCount=%d size=(%dx%d)\n", - s, ddsd.ddpfPixelFormat.dwRGBBitCount, ddsd.dwWidth, ddsd.dwHeight); + OutTrace("TextureHigh(%d): lpdds=%x BitCount=%d size=(%dx%d)\n", + dxversion, s, ddsd.ddpfPixelFormat.dwRGBBitCount, ddsd.dwWidth, ddsd.dwHeight); w = ddsd.dwWidth; h = ddsd.dwHeight; switch (ddsd.ddpfPixelFormat.dwRGBBitCount){ @@ -184,6 +188,8 @@ static void TextureDump(LPDIRECTDRAWSURFACE s, int dxversion) static BOOL DoOnce = TRUE; char pszFile[MAX_PATH]; + OutTraceB("TextureDump(%d): lpdds=%x\n", dxversion, s); + if(DoOnce){ char sProfilePath[MAX_PATH]; sprintf(sProfilePath, "%s\\dxwnd.ini", GetDxWndPath()); @@ -206,8 +212,8 @@ static void TextureDump(LPDIRECTDRAWSURFACE s, int dxversion) } if((ddsd.ddsCaps.dwCaps & DDSCAPS_TEXTURE) && !dxwss.IsABackBufferSurface(s)) while (TRUE) { - OutTrace("TextureDump: lpdds=%x BitCount=%d size=(%dx%d)\n", - s, ddsd.ddpfPixelFormat.dwRGBBitCount, ddsd.dwWidth, ddsd.dwHeight); + OutTrace("TextureDump(%d): lpdds=%x BitCount=%d size=(%dx%d)\n", + dxversion, s, ddsd.ddpfPixelFormat.dwRGBBitCount, ddsd.dwWidth, ddsd.dwHeight); w = ddsd.dwWidth; h = ddsd.dwHeight; if((MinTexX && (w. #include "TlHelp32.h" -#define VERSION "2.03.91.fx5" +#define VERSION "2.03.92.fx2" #define DDTHREADLOCK 1 //#define LOCKTHREADS diff --git a/dll/dxwnd.vs2008.suo b/dll/dxwnd.vs2008.suo index 9e4ca3d83a71cf49f78b24bc23cce366d0542fa0..cd0afb6999555007366cbe441c72325488f99f24 100644 GIT binary patch literal 51712 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 diff --git a/dll/kernel32.cpp b/dll/kernel32.cpp index 5b6e6a4..4cd2989 100644 --- a/dll/kernel32.cpp +++ b/dll/kernel32.cpp @@ -34,15 +34,27 @@ WinExec_Type pWinExec = NULL; SetPriorityClass_Type pSetPriorityClass = NULL; GlobalUnlock_Type pGlobalUnlock = NULL; -#ifdef NOFREELIBRARY typedef BOOL (WINAPI *FreeLibrary_Type)(HMODULE); FreeLibrary_Type pFreeLibrary = NULL; BOOL WINAPI extFreeLibrary(HMODULE hModule) { - OutTrace("FreeLibrary: hModule=%x SUPPRESS\n", hModule); - return TRUE; + BOOL ret; + static HMODULE hLastModule; + OutTraceB("FreeLibrary: hModule=%x\n", hModule); + ret = (*pFreeLibrary)(hModule); + if(ret){ + OutTrace("FreeLibrary: ret=%x\n", ret); + if((hModule == hLastModule) && (dxw.dwFlags7 & FIXFREELIBRARY)) { + OutTraceDW("FreeLibrary: FIXFREELIBRARY hack ret=0\n"); + ret = 0; + } + hLastModule = hModule; + } + else { + OutTraceE("FreeLibrary ERROR: err=%d\n", GetLastError()); + } + return ret; } -#endif // v2.02.96: the GetSystemInfo API is NOT hot patchable on Win7. This can cause problems because it can't be hooked by simply // enabling hot patch. A solution is making all LoadLibrary* calls hot patchable, so that when loading the module, the call @@ -63,9 +75,7 @@ static HookEntryEx_Type Hooks[]={ //{HOOK_IAT_CANDIDATE, 0, "WinExec", (FARPROC)NULL, (FARPROC *)&pWinExec, (FARPROC)extWinExec}, {HOOK_HOT_CANDIDATE, 0, "SetPriorityClass", (FARPROC)SetPriorityClass, (FARPROC *)&pSetPriorityClass, (FARPROC)extSetPriorityClass}, {HOOK_HOT_CANDIDATE, 0, "GlobalUnlock", (FARPROC)GlobalUnlock, (FARPROC *)&pGlobalUnlock, (FARPROC)extGlobalUnlock}, -#ifdef NOFREELIBRARY {HOOK_HOT_CANDIDATE, 0, "FreeLibrary", (FARPROC)FreeLibrary, (FARPROC *)&pFreeLibrary, (FARPROC)extFreeLibrary}, -#endif {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; diff --git a/dll/logall.h b/dll/logall.h index f1cfc08..1ea6b23 100644 --- a/dll/logall.h +++ b/dll/logall.h @@ -13,4 +13,20 @@ #ifdef OutTraceE #undef OutTraceE #define OutTraceE OutTrace -#endif \ No newline at end of file +#endif +#ifdef IsTraceB +#undef IsTraceB +#define IsTraceB TRUE +#endif +#ifdef IsTraceDW +#undef IsTraceDW +#define IsTraceDW TRUE +#endif +#ifdef IsTraceC +#undef IsTraceC +#define IsTraceC TRUE +#endif +#ifdef IsTraceE +#undef IsTraceE +#define IsTraceE TRUE +#endif diff --git a/dll/opengl.cpp b/dll/opengl.cpp index e97823b..b976e3d 100644 --- a/dll/opengl.cpp +++ b/dll/opengl.cpp @@ -20,6 +20,8 @@ #define COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 #endif +//#include "logall.h" + typedef void (WINAPI *glutFullScreen_Type)(void); glutFullScreen_Type pglutFullScreen; void WINAPI extglutFullScreen(void); @@ -32,6 +34,15 @@ void extglutInitWindowPosition(int, int); typedef void (WINAPI *glutSetWindow_Type)(HWND); glutSetWindow_Type pglutSetWindow; void WINAPI extglutSetWindow(HWND); +typedef const GLubyte* (WINAPI *glGetString_Type)(GLenum); +glGetString_Type pglGetString; +const GLubyte* WINAPI extglGetString(GLenum); +typedef char* (WINAPI *wglGetExtensionsStringEXT_Type)(void); +wglGetExtensionsStringEXT_Type pwglGetExtensionsStringEXT; +char* WINAPI extwglGetExtensionsStringEXT(void); +typedef const GLubyte* (WINAPI *gluGetString_Type)(GLenum); +gluGetString_Type pgluGetString; +const GLubyte* WINAPI extgluGetString(GLenum); //void WINAPI extglDrawPixels(GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); //typedef void (WINAPI *glDrawPixels_Type)(GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); @@ -46,9 +57,6 @@ static HookEntryEx_Type Hooks[]={ {HOOK_IAT_CANDIDATE, 0, "glPolygonMode", NULL, (FARPROC *)&pglPolygonMode, (FARPROC)extglPolygonMode}, {HOOK_IAT_CANDIDATE, 0, "glGetFloatv", NULL, (FARPROC *)&pglGetFloatv, (FARPROC)extglGetFloatv}, {HOOK_IAT_CANDIDATE, 0, "glClear", NULL, (FARPROC *)&pglClear, (FARPROC)extglClear}, - {HOOK_IAT_CANDIDATE, 0, "wglCreateContext", NULL, (FARPROC *)&pwglCreateContext, (FARPROC)extwglCreateContext}, - {HOOK_IAT_CANDIDATE, 0, "wglMakeCurrent", NULL, (FARPROC *)&pwglMakeCurrent, (FARPROC)extwglMakeCurrent}, - {HOOK_IAT_CANDIDATE, 0, "wglGetProcAddress", NULL, (FARPROC *)&pwglGetProcAddress, (FARPROC)extwglGetProcAddress}, {HOOK_IAT_CANDIDATE, 0, "glTexImage2D", NULL, (FARPROC *)&pglTexImage2D, (FARPROC)extglTexImage2D}, //{HOOK_IAT_CANDIDATE, 0, "glDrawPixels", NULL, (FARPROC *)&pglDrawPixels, (FARPROC)extglDrawPixels}, {HOOK_IAT_CANDIDATE, 0, "glPixelZoom", NULL, (FARPROC *)&pglPixelZoom, (FARPROC)extglPixelZoom}, @@ -56,6 +64,11 @@ static HookEntryEx_Type Hooks[]={ {HOOK_IAT_CANDIDATE, 0, "glBindTexture", NULL, (FARPROC *)&pglBindTexture, (FARPROC)extglBindTexture}, //{HOOK_IAT_CANDIDATE, 0, "glCopyTexImage2D", NULL, (FARPROC *)&pglCopyTexImage2D, (FARPROC)extglCopyTexImage2D}, //{HOOK_IAT_CANDIDATE, 0, "glPixelStorei", NULL, (FARPROC *)&pglPixelStorei, (FARPROC)extglPixelStorei}, + {HOOK_IAT_CANDIDATE, 0, "glGetString", NULL, (FARPROC *)&pglGetString, (FARPROC)extglGetString}, + {HOOK_IAT_CANDIDATE, 0, "wglCreateContext", NULL, (FARPROC *)&pwglCreateContext, (FARPROC)extwglCreateContext}, + {HOOK_IAT_CANDIDATE, 0, "wglMakeCurrent", NULL, (FARPROC *)&pwglMakeCurrent, (FARPROC)extwglMakeCurrent}, + {HOOK_IAT_CANDIDATE, 0, "wglGetProcAddress", NULL, (FARPROC *)&pwglGetProcAddress, (FARPROC)extwglGetProcAddress}, + {HOOK_IAT_CANDIDATE, 0, "wglGetExtensionsStringEXT", NULL, (FARPROC *)&pwglGetExtensionsStringEXT, (FARPROC)extwglGetExtensionsStringEXT}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; @@ -70,6 +83,7 @@ static HookEntryEx_Type GlutHooks[]={ {HOOK_IAT_CANDIDATE, 0, "glutInitWindowSize", NULL, (FARPROC *)&pglutInitWindowSize, (FARPROC)extglutInitWindowSize}, {HOOK_IAT_CANDIDATE, 0, "glutInitWindowPosition", NULL, (FARPROC *)&pglutInitWindowPosition, (FARPROC)extglutInitWindowPosition}, {HOOK_IAT_CANDIDATE, 0, "glutSetWindow", NULL, (FARPROC *)&pglutSetWindow, (FARPROC)extglutSetWindow}, + {HOOK_IAT_CANDIDATE, 0, "gluGetString", NULL, (FARPROC *)&pgluGetString, (FARPROC)extgluGetString}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; @@ -608,11 +622,11 @@ char *ExplainDrawPixelsFormat(DWORD c) void WINAPI extglDrawPixels(GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *data) { GLenum glerr; - OutTrace("glDrawPixels: size=(%dx%d) format=%x(%s) type=%d data=%x\n", + OutTraceDW("glDrawPixels: size=(%dx%d) format=%x(%s) type=%d data=%x\n", width, height, format, ExplainDrawPixelsFormat(format), type, data); (*pglDrawPixels)(width, height, format, type, data); - if ((glerr=extglGetError())!= GL_NO_ERROR) OutTrace("GLERR %d ad %d\n", glerr, __LINE__); + if ((glerr=extglGetError())!= GL_NO_ERROR) OutTraceE("GLERR %d ad %d\n", glerr, __LINE__); return; } #endif @@ -630,7 +644,7 @@ void WINAPI extglPixelZoom(GLfloat xfactor, GLfloat yfactor) OutTraceDW("glPixelZoom: FIXED x,y factor=(%f,%f)\n", xfactor, yfactor); } (*pglPixelZoom)(xfactor, yfactor); - if ((glerr=extglGetError())!= GL_NO_ERROR) OutTrace("GLERR %d ad %d\n", glerr, __LINE__); + if ((glerr=extglGetError())!= GL_NO_ERROR) OutTraceE("GLERR %d ad %d\n", glerr, __LINE__); return; } @@ -674,7 +688,7 @@ void WINAPI extglPixelStorei(GLenum pname, GLint param) void WINAPI extglutFullScreen(void) { if(!dxw.Windowize) return (*pglutFullScreen)(); - OutTrace("glutFullScreen BYPASS\n"); + OutTraceDW("glutFullScreen BYPASS\n"); dxw.SetFullScreen(TRUE); } @@ -684,9 +698,9 @@ void extglutInitWindowSize(int width, int height) if(dxw.Windowize){ dummy1=0; dummy2=0; - OutTrace("glutInitWindowSize: width=%d height=%d\n", width, height); + OutTraceDW("glutInitWindowSize: width=%d height=%d\n", width, height); dxw.MapWindow(&dummy1, &dummy2, &width, &height); - OutTrace("glutInitWindowSize: FIXED width=%d height=%d\n", width, height); + OutTraceDW("glutInitWindowSize: FIXED width=%d height=%d\n", width, height); } (*pglutInitWindowSize)(width, height); } @@ -697,17 +711,91 @@ void extglutInitWindowPosition(int x, int y) if(dxw.Windowize){ dummy1=0; dummy2=0; - OutTrace("glutInitWindowPosition: x=%d y=%d\n", x, y); + OutTraceDW("glutInitWindowPosition: x=%d y=%d\n", x, y); dxw.MapWindow(&x, &y, &dummy1, &dummy2); - OutTrace("glutInitWindowPosition: FIXED x=%d y=%d\n", x, y); + OutTraceDW("glutInitWindowPosition: FIXED x=%d y=%d\n", x, y); } (*pglutInitWindowPosition)(x, y); } void WINAPI extglutSetWindow(HWND win) { - OutTrace("glutSetWindow: win=%x\n", win); + OutTraceDW("glutSetWindow: win=%x\n", win); if(dxw.Windowize && dxw.IsRealDesktop(win)) win=dxw.GethWnd(); (*pglutSetWindow)(win); } +static char *glStringName(GLenum name) +{ + char *ret; + switch(name){ + case GL_VENDOR: ret="GL_VENDOR"; break; + case GL_RENDERER: ret="GL_RENDERER"; break; + case GL_VERSION: ret="GL_VERSION"; break; + case GL_SHADING_LANGUAGE_VERSION: ret="GL_SHADING_LANGUAGE_VERSION"; break; + case GL_EXTENSIONS: ret="GL_EXTENSIONS"; break; + default: ret="unknown"; break; + } + return ret; +} + +const GLubyte* WINAPI extglGetString(GLenum name) +{ + const GLubyte* ret; + ret = (*pglGetString)(name); + if(IsTraceDW){ + if(strlen((const char *)ret)<80) + OutTrace("glGetString: name=%x(%s) ret=\"%.80s\"\n", name, glStringName(name), ret); + else{ + const GLubyte *p = ret; + OutTrace("glGetString: name=%x(%s) ret=(%d)\n", name, glStringName(name), strlen((const char *)ret)); + while(strlen((const char *)p)>80){ + OutTrace("glGetString: \"%.80s\" +\n", p); + p += 80; + } + OutTrace("glGetString: \"%.80s\"\n", p); + } + } + return ret; +} + +char* WINAPI extwglGetExtensionsStringEXT(void) +{ + char *ret; + ret = (*pwglGetExtensionsStringEXT)(); + if(IsTraceDW){ + if(strlen((const char *)ret)<80) + OutTrace("wglGetExtensionsStringEXT: ret=\"%.80s\"\n", ret); + else{ + const char *p = ret; + OutTrace("wglGetExtensionsStringEXT: ret=(%d)\n", strlen((const char *)ret)); + while(strlen((const char *)p)>80){ + OutTrace("wglGetExtensionsStringEXT: \"%.80s\" +\n", p); + p += 80; + } + OutTrace("wglGetExtensionsStringEXT: \"%.80s\"\n", p); + } + } + return ret; +} + +const GLubyte* WINAPI extgluGetString(GLenum name) +{ + const GLubyte* ret; + ret = (*pgluGetString)(name); + if(IsTraceDW){ + if(strlen((const char *)ret)<80) + OutTrace("gluGetString: name=%x(%s) ret=\"%.80s\"\n", name, glStringName(name), ret); + else{ + const GLubyte *p = ret; + OutTrace("gluGetString: name=%x(%s) ret=(%d)\n", name, glStringName(name), strlen((const char *)ret)); + while(strlen((const char *)p)>80){ + OutTrace("gluGetString: \"%.80s\" +\n", p); + p += 80; + } + OutTrace("gluGetString: \"%.80s\"\n", p); + } + } + return ret; +} + \ No newline at end of file diff --git a/host/TabCompat.cpp b/host/TabCompat.cpp index ac25926..679194c 100644 --- a/host/TabCompat.cpp +++ b/host/TabCompat.cpp @@ -49,6 +49,7 @@ void CTabCompat::DoDataExchange(CDataExchange* pDX) DDX_Check(pDX, IDC_BLOCKPRIORITYCLASS, cTarget->m_BlockPriorityClass); DDX_Check(pDX, IDC_COLORFIX, cTarget->m_ColorFix); DDX_Check(pDX, IDC_FIXGLOBALUNLOCK, cTarget->m_FixGlobalUnlock); + DDX_Check(pDX, IDC_FIXFREELIBRARY, cTarget->m_FixFreeLibrary); // Registry management DDX_Check(pDX, IDC_EMULATEREGISTRY, cTarget->m_EmulateRegistry); diff --git a/host/TargetDlg.cpp b/host/TargetDlg.cpp index 767273d..6f994d4 100644 --- a/host/TargetDlg.cpp +++ b/host/TargetDlg.cpp @@ -77,6 +77,7 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/) m_ForcesSwapEffect = FALSE; m_ColorFix = FALSE; m_FixGlobalUnlock = FALSE; + m_FixFreeLibrary = FALSE; m_NoPixelFormat = FALSE; m_NoAlphaChannel = FALSE; m_FixRefCounter = TRUE; // default true !! diff --git a/host/TargetDlg.h b/host/TargetDlg.h index 9caf6a6..164f87d 100644 --- a/host/TargetDlg.h +++ b/host/TargetDlg.h @@ -233,6 +233,7 @@ public: BOOL m_ForcesSwapEffect; BOOL m_ColorFix; BOOL m_FixGlobalUnlock; + BOOL m_FixFreeLibrary; BOOL m_NoPixelFormat; BOOL m_NoAlphaChannel; BOOL m_FixRefCounter; diff --git a/host/dxwndhost.rc b/host/dxwndhost.rc index 1cf6e56074e31e1c494a08b88560e456bb3aaec0..b02a57ef28116b888f1271578449ee4d5999b281 100644 GIT binary patch delta 96 zcmdni#xbdbqhSl_i~0WKd$zVen*dVQ^-M rXK(|uB7kHNgDVjF0C`RfLDT!27~`j35?~aWo}kSrw|$QYW7RtVAh#K> delta 27 jcmbQ#!LhB4qhSl%ZC@tJnDY(*in|HN diff --git a/host/dxwndhost.vs2008.suo b/host/dxwndhost.vs2008.suo index 156ead84414207098b67d9f9e5262f7fcd171e98..a7d3c4bf82cc52b41627b2729ae07fc7a68d049f 100644 GIT binary patch delta 147 zcmZp8!_@GGX+sVRn?YakvSRJcMJ#>H0uPRrR77p~;lA*6<}3ViISnQ|aC9)b zOx~cc&uPRE&ydDY!CjpH*C_{T*7~e1zFK#Mo!VmXRLKL9}wZ- NW8#7+`l7@$833d!D$oD` diff --git a/host/dxwndhostView.cpp b/host/dxwndhostView.cpp index 48d6ad9..bcc85a2 100644 --- a/host/dxwndhostView.cpp +++ b/host/dxwndhostView.cpp @@ -366,6 +366,7 @@ void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg) if(dlg->m_ForcesSwapEffect) t->flags6 |= FORCESWAPEFFECT; if(dlg->m_ColorFix) t->flags3 |= COLORFIX; if(dlg->m_FixGlobalUnlock) t->flags7 |= FIXGLOBALUNLOCK; + if(dlg->m_FixFreeLibrary) t->flags7 |= FIXFREELIBRARY; if(dlg->m_NoPixelFormat) t->flags3 |= NOPIXELFORMAT; if(dlg->m_NoAlphaChannel) t->flags4 |= NOALPHACHANNEL; if(dlg->m_FixRefCounter) t->flags4 |= FIXREFCOUNTER; @@ -632,6 +633,7 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg) dlg->m_ForcesSwapEffect = t->flags6 & FORCESWAPEFFECT ? 1 : 0; dlg->m_ColorFix = t->flags3 & COLORFIX ? 1 : 0; dlg->m_FixGlobalUnlock = t->flags7 & FIXGLOBALUNLOCK ? 1 : 0; + dlg->m_FixFreeLibrary = t->flags7 & FIXFREELIBRARY ? 1 : 0; dlg->m_NoPixelFormat = t->flags3 & NOPIXELFORMAT ? 1 : 0; dlg->m_NoAlphaChannel = t->flags4 & NOALPHACHANNEL ? 1 : 0; dlg->m_FixRefCounter = t->flags4 & FIXREFCOUNTER ? 1 : 0; diff --git a/host/resource b/host/resource index 2bb7df5be8b74abb94fe72e7cd1f1ad1c75999bf..0ec0d9412453cc740b45d803358ff56f2209c786 100644 GIT binary patch delta 51 zcmX^0gK61MrVZC7Ob!rWnfy+UP0)=Yh`|*IeHc6$oPcb{i4PSg8!)p>Uc@c4`PzgM FZ2;h^5heft delta 14 WcmZ4Xlj+nCrVZC7Y&M!$q748(76*|4