From be8f7c439b2f12c4397b30d81b05dc8ec6c81051 Mon Sep 17 00:00:00 2001 From: gho tik Date: Tue, 5 Jan 2016 11:45:50 -0500 Subject: [PATCH] v2_03_66_src Former-commit-id: 85c5e03a28b8f21052b683221c8fe9361852ae6d --- Include/dxwnd.h | 2 +- build/dxwnd.dll | 4 +- build/dxwnd.exe | 2 +- build/dxwnd.ini | 97 ------------- build/exports/Microsoft Golf 2001.dxw | 30 ++++ build/readme-relnotes.txt | 6 +- dll/ddblit.cpp | 26 ++-- dll/ddraw.cpp | 125 ++++++++++------ dll/ddshot.cpp | 10 +- dll/ddtexture.cpp | 30 ++-- dll/dxemublt.cpp | 200 +++++++++++++------------- dll/dxhook.cpp | 24 ++-- dll/dxwnd.cpp | 2 +- dll/dxwnd.vs2008.suo | Bin 540672 -> 599040 bytes dll/gdi32.cpp | 4 +- dll/gdiblt.cpp | 2 +- dll/hd3d.cpp | 6 +- dll/ole32.cpp | 1 - dll/shareddc.cpp | 135 +++++++++-------- dll/shareddc.hpp | 2 +- dll/toggle_fs.cpp | 2 +- dll/winproc.cpp | 4 +- host/TabDirectX.cpp | 1 + host/TargetDlg.cpp | 1 + host/TargetDlg.h | 1 + host/dxwnd.ini | 5 + host/dxwndhost.aps | Bin 167432 -> 167276 bytes host/dxwndhost.rc | Bin 113446 -> 113660 bytes host/dxwndhost.vs2008.suo | Bin 183296 -> 184320 bytes host/dxwndhostView.cpp | 7 +- host/resource | Bin 40028 -> 40120 bytes 31 files changed, 358 insertions(+), 371 deletions(-) delete mode 100644 build/dxwnd.ini create mode 100644 build/exports/Microsoft Golf 2001.dxw create mode 100644 host/dxwnd.ini diff --git a/Include/dxwnd.h b/Include/dxwnd.h index b7db443..311f6fc 100644 --- a/Include/dxwnd.h +++ b/Include/dxwnd.h @@ -55,7 +55,7 @@ #define INIT16BPP 0x00000080 // simulate a 16BPP initial desktop setting (in GetDeviceCaps API) #define KEEPCURSORFIXED 0x00000100 // inhibit SetCursorPos operation #define DISABLEGAMMARAMP 0x00000200 // let the application retrieve the desktop DC (for capability queries) -//#define DIFFERENTIALMOUSE 0x00000400 // emulates the 360-degrees-free-running mouse style.... +#define INDEPENDENTREFRESH 0x00000400 // Makes automatic primary surface refresh but independently from the message loop processing #define FIXNCHITTEST 0x00000800 // fixes WM_NCHITTEST message X,Y coordinates #define LIMITFPS 0x00001000 // delays primary blit operations to limit FPS #define SKIPFPS 0x00002000 // skips primary blit operations up to limit diff --git a/build/dxwnd.dll b/build/dxwnd.dll index 9e197c5..1cf05d4 100644 --- a/build/dxwnd.dll +++ b/build/dxwnd.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0911330dda18c4e1fb5f3caa8c1b951a333f79a64f3fe23b3eaf9d65225391b7 -size 647680 +oid sha256:3bd601d4523889f0cf019a183f5bc5476c5c03662c5f5a93a98686354056a73c +size 648704 diff --git a/build/dxwnd.exe b/build/dxwnd.exe index 0b632d7..8af816f 100644 --- a/build/dxwnd.exe +++ b/build/dxwnd.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6a8148495ebac5bf9b0f2298eaaab28a3572c88cc967ecebbef876b60cf8eb95 +oid sha256:740b5c2156b6965fee001072a8910fe5a3ae4523be53ac3e041723fa50361df1 size 567296 diff --git a/build/dxwnd.ini b/build/dxwnd.ini deleted file mode 100644 index ba6f1a0..0000000 --- a/build/dxwnd.ini +++ /dev/null @@ -1,97 +0,0 @@ -[window] -posx=950 -posy=64 -sizx=320 -sizy=200 -exportpath=D:\DxWnd\exports.ok\ -exepath=D:\Games\Restricted Area\ -[keymapping] -corner=0x78 -fullscreen=0x0D -workarea=0x7A -desktop=0x7B -[target] -title0=Betrayal in Antara -path0=D:\Games\Betrayal in Antara\ANTARAR.EXE -launchpath0= -module0= -opengllib0= -notes0= -registry0= -ver0=0 -coord0=0 -flag0=681574434 -flagg0=1207959552 -flagh0=20 -flagi0=-2011168764 -flagj0=4224 -flagk0=65536 -flagl0=0 -flagm0=0 -dflag0=0 -posx0=50 -posy0=50 -sizx0=800 -sizy0=600 -maxfps0=0 -initts0=0 -winver0=0 -maxres0=-1 -swapeffect0=0 -maxddinterface0=7 -title1=Silver -path1=D:\Games\Silver\silver.exe -launchpath1= -module1= -opengllib1= -notes1= -registry1= -ver1=0 -coord1=0 -flag1=136314998 -flagg1=1208483856 -flagh1=20 -flagi1=138412036 -flagj1=4224 -flagk1=268500992 -flagl1=0 -flagm1=0 -dflag1=0 -posx1=-1250 -posy1=50 -sizx1=800 -sizy1=600 -maxfps1=0 -initts1=0 -winver1=0 -maxres1=-1 -swapeffect1=0 -maxddinterface1=7 -title2=Restricted Area -path2=D:\Games\Restricted Area\Ra.exe -launchpath2= -module2= -opengllib2= -notes2= -registry2= -ver2=0 -coord2=0 -flag2=681574434 -flagg2=1744830464 -flagh2=20 -flagi2=138412038 -flagj2=4224 -flagk2=327680 -flagl2=0 -flagm2=0 -dflag2=0 -posx2=50 -posy2=50 -sizx2=800 -sizy2=600 -maxfps2=0 -initts2=0 -winver2=0 -maxres2=-1 -swapeffect2=0 -maxddinterface2=7 diff --git a/build/exports/Microsoft Golf 2001.dxw b/build/exports/Microsoft Golf 2001.dxw new file mode 100644 index 0000000..0c9607d --- /dev/null +++ b/build/exports/Microsoft Golf 2001.dxw @@ -0,0 +1,30 @@ +[target] +title0=Microsoft Golf 2001 +path0=D:\Games\msgolf2001\golf2001.exe +launchpath0= +module0= +opengllib0= +notes0= +registry0= +ver0=0 +coord0=0 +flag0=-2011148254 +flagg0=1207960576 +flagh0=20 +flagi0=138412036 +flagj0=69210240 +flagk0=327680 +flagl0=0 +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 diff --git a/build/readme-relnotes.txt b/build/readme-relnotes.txt index 706e874..77d514e 100644 --- a/build/readme-relnotes.txt +++ b/build/readme-relnotes.txt @@ -1097,4 +1097,8 @@ fix: updated RedrawWindow, now allows better handling of "Galapagos" pause scree v2.03.65 fix: handling of fullscreen switching on closest monitor (in multimonitor systems) -fix: X,Y starting win position can now be negative integer (in multimonitor systems) \ No newline at end of file +fix: X,Y starting win position can now be negative integer (in multimonitor systems) + +v2.03.66 +fix: terminated the separation between ddraw method interfaces +fix: force clipper now builds a clipper for the real primary surface (useful when desktop composition is disabled) \ No newline at end of file diff --git a/dll/ddblit.cpp b/dll/ddblit.cpp index d250848..d1da846 100644 --- a/dll/ddblit.cpp +++ b/dll/ddblit.cpp @@ -13,13 +13,13 @@ extern LPDIRECTDRAWSURFACE lpDDSEmu_Prim; extern LPDIRECTDRAW lpPrimaryDD; extern Blt_Type pBlt; -extern ReleaseS_Type pReleaseSMethod(); +extern ReleaseS_Type pReleaseSMethod(int); extern CreateSurface1_Type pCreateSurface1; extern CreateSurface1_Type pCreateSurface2; extern CreateSurface1_Type pCreateSurface3; extern CreateSurface2_Type pCreateSurface4; extern CreateSurface2_Type pCreateSurface7; -extern Unlock4_Type pUnlockMethod(); +extern Unlock4_Type pUnlockMethod(int); extern HDC hFlippedDC; extern BOOL bFlippedDC; extern ReleaseDC_Type pReleaseDC1; @@ -31,7 +31,7 @@ extern ReleaseDC_Type pReleaseDC7; extern void BlitError(HRESULT, LPRECT, LPRECT, int); extern void BlitTrace(char *, LPRECT, LPRECT, int); extern void DescribeSurface(LPDIRECTDRAWSURFACE, int, char *, int); -extern void TextureHandling(LPDIRECTDRAWSURFACE); +extern void TextureHandling(LPDIRECTDRAWSURFACE, int); extern GetSurfaceDesc2_Type pGetSurfaceDescMethod(); extern int GetSurfaceDescSize(); extern GetSurfaceDesc2_Type GetSurfaceDescMethod(); @@ -97,8 +97,8 @@ static HRESULT sBltNoPrimary(int dxversion, Blt_Type pBlt, char *api, LPDIRECTDR // } // break; case DDERR_SURFACEBUSY: - (*pUnlockMethod())(lpdds, NULL); - if (lpddssrc) (*pUnlockMethod())(lpddssrc, NULL); + (*pUnlockMethod(dxversion))(lpdds, NULL); + if (lpddssrc) (*pUnlockMethod(dxversion))(lpddssrc, NULL); if (IsDebug) BlitTrace("BUSY", lpsrcrect ? &srcrect : NULL, lpdestrect, __LINE__); res=(*pBlt)(lpdds, lpdestrect, lpddssrc, lpsrcrect ? &srcrect : NULL, dwflags|DDBLT_WAIT, lpddbltfx); break; @@ -113,7 +113,7 @@ static HRESULT sBltNoPrimary(int dxversion, Blt_Type pBlt, char *api, LPDIRECTDR if(dxw.dwFlags1 & SUPPRESSDXERRORS) res=0; if(dxw.dwFlags5 & TEXTUREMASK) { // Texture Handling on Blt - TextureHandling(lpdds); + TextureHandling(lpdds, dxversion); } return res; } @@ -202,8 +202,8 @@ static HRESULT sBltToPrimary(int dxversion, Blt_Type pBlt, char *api, LPDIRECTDR } // Try to handle HDC lock concurrency.... if(res==DDERR_SURFACEBUSY){ - (*pUnlockMethod())(lpdds, NULL); - if(lpddssrc) (*pUnlockMethod())(lpdds, NULL); + (*pUnlockMethod(dxversion))(lpdds, NULL); + if(lpddssrc) (*pUnlockMethod(dxversion))(lpdds, NULL); if (IsDebug) BlitTrace("BUSY", lpsrcrect, &destrect, __LINE__); res= (*pBlt)(lpdds, &destrect, lpddssrc, lpsrcrect, dwflags, lpddbltfx); if (res) BlitError(res, lpsrcrect, &destrect, __LINE__); @@ -213,12 +213,12 @@ static HRESULT sBltToPrimary(int dxversion, Blt_Type pBlt, char *api, LPDIRECTDR // to do: handle possible situations with surface 2 / 4 / 7 types DDSURFACEDESC2 ddsd; LPDIRECTDRAWSURFACE2 lpddsTmp; - extern CreateSurface2_Type pCreateSurfaceMethod(); + extern CreateSurface2_Type pCreateSurfaceMethod(int); if (IsDebug) BlitTrace("KEYSRC", lpsrcrect, &destrect, __LINE__); memset(&ddsd, 0, sizeof(ddsd)); ddsd.dwSize = GetSurfaceDescSize(); (*pGetSurfaceDescMethod())((LPDIRECTDRAWSURFACE2)lpddssrc, &ddsd); - res=(*pCreateSurfaceMethod())(lpPrimaryDD, &ddsd, (LPDIRECTDRAWSURFACE *)&lpddsTmp, NULL); + res=(*pCreateSurfaceMethod(dxversion))(lpPrimaryDD, &ddsd, (LPDIRECTDRAWSURFACE *)&lpddsTmp, NULL); if(res) OutTraceE("CreateSurface: ERROR %x(%s) at %d", res, ExplainDDError(res), __LINE__); // copy background res= (*pBlt)((LPDIRECTDRAWSURFACE)lpddsTmp, lpsrcrect, lpdds, &destrect, DDBLT_WAIT, NULL); @@ -230,7 +230,7 @@ static HRESULT sBltToPrimary(int dxversion, Blt_Type pBlt, char *api, LPDIRECTDR res= (*pBlt)(lpdds, &destrect, (LPDIRECTDRAWSURFACE)lpddsTmp, lpsrcrect, DDBLT_WAIT, lpddbltfx); if(res) OutTraceE("Blt: ERROR %x(%s) at %d", res, ExplainDDError(res), __LINE__); if (res) BlitError(res, lpsrcrect, &destrect, __LINE__); - (*pReleaseSMethod())((LPDIRECTDRAWSURFACE)lpddsTmp); + (*pReleaseSMethod(dxversion))((LPDIRECTDRAWSURFACE)lpddsTmp); } if(dxw.dwFlags1 & SUPPRESSDXERRORS) res=DD_OK; } @@ -309,10 +309,10 @@ static HRESULT sBltToPrimary(int dxversion, Blt_Type pBlt, char *api, LPDIRECTDR // v2.03.49: resumed because if fixes locked surfaces on "Red Alert 1" on WinXP as reported by cloudstr if(lpddssrc) { // lpddssrc could be NULL!!! - res=(*pUnlockMethod())(lpddssrc, NULL); + res=(*pUnlockMethod(dxversion))(lpddssrc, NULL); if(res && (res!=DDERR_NOTLOCKED)) OutTraceE("Unlock ERROR: lpdds=%x err=%x(%s)\n", lpddssrc, res, ExplainDDError(res)); } - res=(*pUnlockMethod())(lpdds, NULL); // v2.03.24 reintroduced because of "Virtua Cop" + res=(*pUnlockMethod(dxversion))(lpdds, NULL); // v2.03.24 reintroduced because of "Virtua Cop" if(res && (res!=DDERR_NOTLOCKED)) OutTraceE("Unlock ERROR: lpdds=%x err=%x(%s)\n", lpdds, res, ExplainDDError(res)); if (IsDebug) BlitTrace("BUSY", &emurect, &destrect, __LINE__); diff --git a/dll/ddraw.cpp b/dll/ddraw.cpp index efab376..8b4dfd6 100644 --- a/dll/ddraw.cpp +++ b/dll/ddraw.cpp @@ -17,7 +17,7 @@ extern BOOL IsChangeDisplaySettingsHotPatched; DWORD dwBackBufferCaps; -extern void TextureHandling(LPDIRECTDRAWSURFACE); +extern void TextureHandling(LPDIRECTDRAWSURFACE, int); extern void SetMinimalCaps(LPDDCAPS, LPDDCAPS); ColorConversion_Type pColorConversion = NULL; @@ -368,6 +368,7 @@ LPDIRECTDRAWSURFACE lpDDZBuffer=NULL; LPDIRECTDRAW lpPrimaryDD=NULL; int iBakBufferVersion; LPDIRECTDRAWPALETTE lpDDP=NULL; +LPDIRECTDRAWCLIPPER lpddC=NULL; int iDDPExtraRefCounter=0; // v2.02.37: globals to store requested main surface capabilities DDSURFACEDESC2 DDSD_Prim; @@ -602,6 +603,7 @@ void InitDSScreenParameters(int dxversion, LPDIRECTDRAWSURFACE lpdds) case 4: pGetPixelFormat=pGetPixelFormat4; break; case 7: pGetPixelFormat=pGetPixelFormat7; break; } + //OutTrace("dxversion=%d pGetPixelFormat=%x\n", dxversion, pGetPixelFormat); p.dwSize=sizeof(DDPIXELFORMAT); if(res=(*pGetPixelFormat)(lpdds, &p)){ OutTraceE("GetPixelFormat: ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); @@ -838,10 +840,10 @@ SetPalette_Type pSetPaletteMethod(int dxversion) return pSetPalette; } -ReleaseS_Type pReleaseSMethod() +ReleaseS_Type pReleaseSMethod(int dxversion) { ReleaseS_Type pReleaseS; - switch(iBakBufferVersion){ + switch(dxversion){ case 1: pReleaseS=pReleaseS1; break; case 2: pReleaseS=pReleaseS2; break; case 3: pReleaseS=pReleaseS3; break; @@ -864,6 +866,19 @@ ReleaseDC_Type pReleaseDCMethod() return pReleaseDC; } +SetClipper_Type pSetClipperMethod(int dxversion) +{ + SetClipper_Type pSetClipper; + switch(dxversion){ + case 1: pSetClipper=pSetClipper1; break; + case 2: pSetClipper=pSetClipper2; break; + case 3: pSetClipper=pSetClipper3; break; + case 4: pSetClipper=pSetClipper4; break; + case 7: pSetClipper=pSetClipper7; break; + } + return pSetClipper; +} + Blt_Type pBltMethod() { Blt_Type pBlt; @@ -890,10 +905,10 @@ GetDC_Type pGetDCMethod() return pGetDC; } -Unlock4_Type pUnlockMethod() +Unlock4_Type pUnlockMethod(int dxversion) { Unlock4_Type pUnlock; - switch(iBakBufferVersion){ + switch(dxversion){ case 1: pUnlock=(Unlock4_Type)pUnlock1; break; case 2: pUnlock=(Unlock4_Type)pUnlock2; break; case 3: pUnlock=(Unlock4_Type)pUnlock3; break; @@ -903,10 +918,10 @@ Unlock4_Type pUnlockMethod() return pUnlock; } -Lock_Type pLockMethod() +Lock_Type pLockMethod(int dxversion) { Lock_Type pLock; - switch(iBakBufferVersion){ + switch(dxversion){ case 1: pLock=pLock1; break; case 2: pLock=pLock2; break; case 3: pLock=pLock3; break; @@ -916,10 +931,10 @@ Lock_Type pLockMethod() return pLock; } -CreateSurface2_Type pCreateSurfaceMethod() +CreateSurface2_Type pCreateSurfaceMethod(int dxversion) { CreateSurface2_Type pCreateSurface; - switch(iBakBufferVersion){ + switch(dxversion){ case 1: pCreateSurface=(CreateSurface2_Type)pCreateSurface1; break; case 2: pCreateSurface=(CreateSurface2_Type)pCreateSurface2; break; case 3: pCreateSurface=(CreateSurface2_Type)pCreateSurface3; break; @@ -943,6 +958,19 @@ GetSurfaceDesc2_Type pGetSurfaceDescMethod() return pGetSurfaceDesc; } +GetGDISurface_Type pGetGDISurfaceMethod(int dxversion) +{ + GetGDISurface_Type pGetGDISurface; + switch(dxversion){ + default: + case 1: pGetGDISurface = pGetGDISurface1; break; + case 2: pGetGDISurface = pGetGDISurface2; break; + case 4: pGetGDISurface = pGetGDISurface4; break; + case 7: pGetGDISurface = pGetGDISurface7; break; + } + return pGetGDISurface; +} + int lpddsHookedVersion() { return iBakBufferVersion; @@ -1210,7 +1238,7 @@ static void HookDDSurface(LPDIRECTDRAWSURFACE *lplpdds, int dxversion, BOOL isPr SetHook((void *)(**(DWORD **)lplpdds + 8), extReleaseS2, (void **)&pReleaseS2, "Release(S2)"); SetHook((void *)(**(DWORD **)lplpdds + 12), extAddAttachedSurface2, (void **)&pAddAttachedSurface2, "AddAttachedSurface(S2)"); SetHook((void *)(**(DWORD **)lplpdds + 28), extBltFast2, (void **)&pBltFast2, "BltFast(S2)"); - SetHook((void *)(**(DWORD **)lplpdds + 20), extBlt2, (void **)&pBlt2, "Blt(S1)"); + SetHook((void *)(**(DWORD **)lplpdds + 20), extBlt2, (void **)&pBlt2, "Blt(S2)"); SetHook((void *)(**(DWORD **)lplpdds + 32), extDeleteAttachedSurface2, (void **)&pDeleteAttachedSurface2, "DeleteAttachedSurface(S2)"); SetHook((void *)(**(DWORD **)lplpdds + 36), extEnumAttachedSurfaces2, (void **)&pEnumAttachedSurfaces2, "EnumAttachedSurfaces(S2)"); SetHook((void *)(**(DWORD **)lplpdds + 44), extFlip2, (void **)&pFlip2, "Flip(S2)"); @@ -1905,7 +1933,7 @@ static HRESULT WINAPI extQueryInterfaceS(QueryInterface_Type pQueryInterfaceS, v if(dwLocalTexVersion) { // Texture Handling on QueryInterface - if(dxw.dwFlags5 & TEXTUREMASK) TextureHandling((LPDIRECTDRAWSURFACE)lpdds); + if(dxw.dwFlags5 & TEXTUREMASK) TextureHandling((LPDIRECTDRAWSURFACE)lpdds, dwLocalTexVersion); HookTexture(obp, dwLocalTexVersion); } @@ -2278,23 +2306,15 @@ static void BuildRealSurfaces(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurfa OutTraceDW("CreateSurface: %s\n", LogSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[EmuPrim]", __LINE__)); res=(*pCreateSurface)(lpdd, &ddsd, &lpDDSEmu_Prim, 0); if(res==DDERR_PRIMARYSURFACEALREADYEXISTS){ - GetGDISurface_Type pGetGDISurface; - switch(dxversion){ - default: - case 1: pGetGDISurface = pGetGDISurface1; break; - case 2: pGetGDISurface = pGetGDISurface2; break; - case 4: pGetGDISurface = pGetGDISurface4; break; - case 7: pGetGDISurface = pGetGDISurface7; break; - } OutTraceDW("CreateSurface: ASSERT DDSEmu_Prim already exists\n"); if(dxw.Windowize){ // in Windowize mode, the desktop properties are untouched, then the current primary surface can be recycled - res=(*pGetGDISurface)(lpdd, &lpDDSEmu_Prim); + res=(*pGetGDISurfaceMethod(dxversion))(lpdd, &lpDDSEmu_Prim); } else { // in non-Windowized mode, the primary surface must be released and rebuilt with the proper properties - res=(*pGetGDISurface)(lpdd, &lpDDSEmu_Prim); - if (lpDDSEmu_Prim) while((*pReleaseSMethod())(lpDDSEmu_Prim)); + res=(*pGetGDISurfaceMethod(dxversion))(lpdd, &lpDDSEmu_Prim); + if (lpDDSEmu_Prim) while((*pReleaseSMethod(dxversion))(lpDDSEmu_Prim)); res=(*pCreateSurface)(lpdd, &ddsd, &lpDDSEmu_Prim, 0); } } @@ -2307,6 +2327,17 @@ static void BuildRealSurfaces(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurfa if(IsDebug) DescribeSurface(lpDDSEmu_Prim, dxversion, "DDSEmu_Prim", __LINE__); InitDSScreenParameters(dxversion, lpDDSEmu_Prim); dxwss.PopSurface(lpDDSEmu_Prim); + + if (dxw.dwFlags3 & FORCECLIPPER){ + OutTraceDW("CreateSurface: FORCE SetClipper on primary hwnd=%x lpdds=%x\n", + dxw.GethWnd(), lpDDSEmu_Prim); + res=lpdd->CreateClipper(0, &lpddC, NULL); + if (res) OutTraceE("CreateSurface: CreateClipper ERROR res=%x(%s)\n", res, ExplainDDError(res)); + res=lpddC->SetHWnd(0, dxw.GethWnd()); + if (res) OutTraceE("CreateSurface: SetHWnd ERROR res=%x(%s)\n", res, ExplainDDError(res)); + res=lpDDSEmu_Prim->SetClipper(lpddC); + if (res) OutTraceE("CreateSurface: SetClipper ERROR res=%x(%s)\n", res, ExplainDDError(res)); + } // can't hook lpDDSEmu_Prim as generic, since the Flip method is unimplemented for a PRIMARY surface! // better avoid it or hook just useful methods. //if (dxw.dwTFlags & OUTPROXYTRACE) HookDDSurfaceGeneric(&lpDDSEmu_Prim, dxw.dwDDVersion); @@ -2544,7 +2575,7 @@ static HRESULT BuildPrimaryDir(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurf } OutTraceE("CreateSurface: CreateSurface DDERR_PRIMARYSURFACEALREADYEXISTS workaround\n"); (*pGetGDISurface)(lpPrimaryDD, &lpPrim); - while ((*pReleaseSMethod())(lpPrim)); + while ((*pReleaseSMethod(dxversion))(lpPrim)); res = (*pCreateSurface)(lpdd, &ddsd, lplpdds, 0); } /* fall through */ @@ -2770,7 +2801,7 @@ static HRESULT BuildBackBufferDir(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateS memset(&prim, 0, sizeof(DDSURFACEDESC2)); prim.dwSize = (dxversion >= 4) ? sizeof(DDSURFACEDESC2) : sizeof(DDSURFACEDESC); res=lpPrim->GetSurfaceDesc((DDSURFACEDESC *)&prim); - (*pReleaseSMethod())(lpPrim); + (*pReleaseSMethod(dxversion))(lpPrim); ddsd.dwWidth = prim.dwWidth; ddsd.dwHeight = prim.dwHeight; OutTraceDW("BMX FIX: res=%x(%s) wxh=(%dx%d)\n", res, ExplainDDError(res),ddsd.dwWidth, ddsd.dwHeight); @@ -3371,7 +3402,7 @@ HRESULT WINAPI PrimaryStretchBlt(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFA if(res) OutTraceE("PrimaryStretchBlt: BltFast ERROR %x(%s) at %d\n", res, ExplainDDError(res), __LINE__); } } - (*pReleaseSMethod())(lpddsTmp); + (*pReleaseSMethod(dxversion))(lpddsTmp); return res; } @@ -3420,7 +3451,7 @@ HRESULT WINAPI PrimaryBilinearBlt(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURF BltFast_Type pBltFast; int dwSize; - switch(iBakBufferVersion){ + switch(dxversion){ default: case 1: pBltFast=pBltFast1; pCreateSurface=pCreateSurface1; dwSize = sizeof(DDSURFACEDESC); break; case 2: pBltFast=pBltFast2; pCreateSurface=(CreateSurface1_Type)pCreateSurface2; dwSize = sizeof(DDSURFACEDESC); break; @@ -3464,7 +3495,7 @@ HRESULT WINAPI PrimaryBilinearBlt(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURF memset(&ddsd,0,dwSize); ddsd.dwSize = dwSize; ddsd.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; - res=(*pLockMethod())(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY, 0); + res=(*pLockMethod(dxversion))(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY, 0); if(res) { OutTraceE("PrimaryBilinearBlt: Lock ERROR %x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return DD_OK; @@ -3474,7 +3505,7 @@ HRESULT WINAPI PrimaryBilinearBlt(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURF memset(&ddsd,0,dwSize); ddsd.dwSize = dwSize; ddsd.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; - res=(*pLockMethod())(lpddsTmp, 0, (LPDDSURFACEDESC)&ddsd, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0); + res=(*pLockMethod(dxversion))(lpddsTmp, 0, (LPDDSURFACEDESC)&ddsd, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0); if(res) { OutTraceE("PrimaryBilinearBlt: Lock ERROR %x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return DD_OK; @@ -3520,8 +3551,8 @@ HRESULT WINAPI PrimaryBilinearBlt(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURF (*pResize_HQ)(bSourceBuf, lpsrcrect, SrcPitch, bDestBuf, lpdestrect, DestPitch); // fast-blit to primary - (*pUnlockMethod())(lpddssrc, NULL); - (*pUnlockMethod())(lpddsTmp, NULL); + (*pUnlockMethod(dxversion))(lpddssrc, NULL); + (*pUnlockMethod(dxversion))(lpddsTmp, NULL); if(dxw.dwFlags3 & FORCECLIPPER) { res= (*pBlt)(lpdds, lpdestrect, lpddsTmp, &TmpRect, DDBLT_WAIT, 0); if(res) OutTraceE("PrimaryBilinearBlt: Blt ERROR %x(%s) at %d\n", res, ExplainDDError(res), __LINE__); @@ -3530,8 +3561,8 @@ HRESULT WINAPI PrimaryBilinearBlt(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURF res= (*pBltFast)(lpdds, lpdestrect->left, lpdestrect->top, lpddsTmp, &TmpRect, DDBLTFAST_WAIT); if(res) OutTraceE("PrimaryBilinearBlt: BltFast ERROR %x(%s) at %d\n", res, ExplainDDError(res), __LINE__); } - (*pReleaseSMethod())(lpddsTmp); - if(lpddsCopy) (*pReleaseSMethod())(lpddsCopy); + (*pReleaseSMethod(dxversion))(lpddsTmp); + if(lpddsCopy) (*pReleaseSMethod(dxversion))(lpddsCopy); return res; } @@ -3555,8 +3586,8 @@ HRESULT WINAPI ColorConversionEmulated(int dxversion, LPDIRECTDRAWSURFACE lpdds, } res=(*pEmuBlt)(dxversion, pBlt, lpDDSEmu_Back, &emurect, lpdds, &emurect, DDBLT_WAIT, 0); if(res==DDERR_SURFACEBUSY){ - (*pUnlockMethod())(lpdds, NULL); - (*pUnlockMethod())(lpDDSEmu_Back, NULL); + (*pUnlockMethod(dxversion))(lpdds, NULL); + (*pUnlockMethod(dxversion))(lpDDSEmu_Back, NULL); res=(*pEmuBlt)(dxversion, pBlt, lpDDSEmu_Back, &emurect, lpdds, &emurect, DDBLT_WAIT, 0); } if(res) { @@ -3684,7 +3715,7 @@ HRESULT WINAPI extFlip(int dxversion, Flip_Type pFlip, LPDIRECTDRAWSURFACE lpdds ddsd.dwHeight = dxw.GetScreenHeight(); ddsd.dwWidth = dxw.GetScreenWidth(); } - res2=(*pCreateSurfaceMethod())(lpPrimaryDD, &ddsd, &lpddsTmp, NULL); + res2=(*pCreateSurfaceMethod(dxversion))(lpPrimaryDD, &ddsd, &lpddsTmp, NULL); if(res2) { OutTraceE("CreateSurface: ERROR %x(%s) at %d\n", res2, ExplainDDError(res2), __LINE__); OutTraceE("Size=%d lpPrimaryDD=%x lpDDSBack=%x %s\n", @@ -3738,7 +3769,7 @@ HRESULT WINAPI extFlip(int dxversion, Flip_Type pFlip, LPDIRECTDRAWSURFACE lpdds // restore flipped backbuffer and delete temporary surface res2= (*pBlt)(lpddssrc, NULL, lpddsTmp, NULL, DDBLT_WAIT, NULL); if(res2) OutTraceE("Blt: ERROR %x(%s) at %d\n", res2, ExplainDDError(res2), __LINE__); - (*pReleaseSMethod())(lpddsTmp); + (*pReleaseSMethod(dxversion))(lpddsTmp); } if(res) OutTraceE("Flip: Blt ERROR %x(%s)\n", res, ExplainDDError(res)); @@ -4094,7 +4125,7 @@ HRESULT WINAPI extSetClipper7(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWCLIPPER lpd DDSURFACEDESC SaveSurfaceDesc; LPDIRECTDRAWSURFACE SaveSurface = NULL; -static HRESULT WINAPI extLock(Lock_Type pLock, LPDIRECTDRAWSURFACE lpdds, LPRECT lprect, LPDDSURFACEDESC lpDDSurfaceDesc, DWORD flags, HANDLE hEvent) +static HRESULT WINAPI extLock(int dxversion, Lock_Type pLock, LPDIRECTDRAWSURFACE lpdds, LPRECT lprect, LPDDSURFACEDESC lpDDSurfaceDesc, DWORD flags, HANDLE hEvent) { HRESULT res; @@ -4111,7 +4142,7 @@ static HRESULT WINAPI extLock(Lock_Type pLock, LPDIRECTDRAWSURFACE lpdds, LPRECT res=(*pLock)(lpdds, lprect, lpDDSurfaceDesc, flags, hEvent); if(res==DDERR_SURFACEBUSY){ // v70: fix for "Ancient Evil" - (*pUnlockMethod())(lpdds, NULL); + (*pUnlockMethod(dxversion))(lpdds, NULL); res = (*pLock)(lpdds, lprect, lpDDSurfaceDesc, flags, hEvent); OutTraceDW("Lock RETRY: ret=%x(%s)\n", res, ExplainDDError(res)); } @@ -4139,15 +4170,15 @@ static HRESULT WINAPI extLock(Lock_Type pLock, LPDIRECTDRAWSURFACE lpdds, LPRECT } HRESULT WINAPI extLock1(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect, LPDDSURFACEDESC lpDDSurfaceDesc, DWORD flags, HANDLE hEvent) -{ return extLock(pLock1, lpdds, lprect, lpDDSurfaceDesc, flags, hEvent); } +{ return extLock(1, pLock1, lpdds, lprect, lpDDSurfaceDesc, flags, hEvent); } HRESULT WINAPI extLock2(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect, LPDDSURFACEDESC lpDDSurfaceDesc, DWORD flags, HANDLE hEvent) -{ return extLock(pLock2, lpdds, lprect, lpDDSurfaceDesc, flags, hEvent); } +{ return extLock(2, pLock2, lpdds, lprect, lpDDSurfaceDesc, flags, hEvent); } HRESULT WINAPI extLock3(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect, LPDDSURFACEDESC lpDDSurfaceDesc, DWORD flags, HANDLE hEvent) -{ return extLock(pLock3, lpdds, lprect, lpDDSurfaceDesc, flags, hEvent); } +{ return extLock(3, pLock3, lpdds, lprect, lpDDSurfaceDesc, flags, hEvent); } HRESULT WINAPI extLock4(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect, LPDDSURFACEDESC lpDDSurfaceDesc, DWORD flags, HANDLE hEvent) -{ return extLock(pLock4, lpdds, lprect, lpDDSurfaceDesc, flags, hEvent); } +{ return extLock(4, pLock4, lpdds, lprect, lpDDSurfaceDesc, flags, hEvent); } HRESULT WINAPI extLock7(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect, LPDDSURFACEDESC lpDDSurfaceDesc, DWORD flags, HANDLE hEvent) -{ return extLock(pLock7, lpdds, lprect, lpDDSurfaceDesc, flags, hEvent); } +{ return extLock(7, pLock7, lpdds, lprect, lpDDSurfaceDesc, flags, hEvent); } LPDIRECTDRAWSURFACE2 lpDDSBuffer = NULL; @@ -4187,7 +4218,7 @@ static HRESULT WINAPI extLockDir(int dxversion, Lock_Type pLock, LPDIRECTDRAWSUR if(res2) OutTraceE("Lock: GetGDISurface ERROR res=%x(%s) at %d\n", res2, ExplainDDError(res2), __LINE__); else - (*pReleaseSMethod())(lpDDSPrim); + (*pReleaseSMethod(dxversion))(lpDDSPrim); if(lpdds==lpDDSPrim){ if(dxw.dwFlags1 & LOCKEDSURFACE){ DDSURFACEDESC2 ddsd; @@ -4359,7 +4390,7 @@ static HRESULT WINAPI extUnlock(int dxversion, Unlock4_Type pUnlock, LPDIRECTDRA if((dxw.dwFlags5 & TEXTUREMASK) && (!IsPrim)) { // Texture Handling on Unlock - TextureHandling(lpdds); + TextureHandling(lpdds, dxversion); } return res; } @@ -4427,10 +4458,10 @@ static HRESULT WINAPI extUnlockDir(int dxversion, Unlock4_Type pUnlock, LPDIRECT OffsetRect(lprect, upleft.x, upleft.y); res=(*pUnlock)((LPDIRECTDRAWSURFACE)lpDDSBuffer, lprect); (*pBlt)(lpdds, lprect, (LPDIRECTDRAWSURFACE)lpDDSBuffer, NULL, DDBLT_WAIT, 0); - (*pReleaseSMethod())((LPDIRECTDRAWSURFACE)lpDDSBuffer); + (*pReleaseSMethod(dxversion))((LPDIRECTDRAWSURFACE)lpDDSBuffer); lpDDSBuffer = NULL; } - (*pReleaseSMethod())(lpDDSPrim); // to leave a correct refcount + (*pReleaseSMethod(dxversion))(lpDDSPrim); // to leave a correct refcount } res=(*pUnlock)(lpdds, lprect); diff --git a/dll/ddshot.cpp b/dll/ddshot.cpp index 0f80801..1134dbb 100644 --- a/dll/ddshot.cpp +++ b/dll/ddshot.cpp @@ -12,11 +12,11 @@ typedef HRESULT (WINAPI *Lock_Type)(LPDIRECTDRAWSURFACE, LPRECT, LPDDSURFACEDESC typedef HRESULT (WINAPI *Unlock4_Type)(LPDIRECTDRAWSURFACE, LPRECT); typedef HRESULT (WINAPI *Unlock1_Type)(LPDIRECTDRAWSURFACE, LPVOID); -extern Lock_Type pLockMethod(); -extern Unlock4_Type pUnlockMethod(); +extern Lock_Type pLockMethod(int); +extern Unlock4_Type pUnlockMethod(int); extern int Set_dwSize_From_Surface(); -void DDrawScreenShot() +void DDrawScreenShot(int dxversion) { LPDIRECTDRAWSURFACE s; DDSURFACEDESC2 ddsd; @@ -49,7 +49,7 @@ void DDrawScreenShot() memset(&ddsd,0,sizeof(DDSURFACEDESC2)); ddsd.dwSize = Set_dwSize_From_Surface(); ddsd.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; - if(res=(*pLockMethod())(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("ScreenShot: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return; } @@ -126,6 +126,6 @@ void DDrawScreenShot() fclose(hf); break; } - res=(*pUnlockMethod())(s, NULL); + res=(*pUnlockMethod(dxversion))(s, NULL); if (res) OutTraceE("ScreenShot: Unlock ERROR lpdds=%x res=%x(%s) at %d\n", s, res, ExplainDDError(res), __LINE__); } diff --git a/dll/ddtexture.cpp b/dll/ddtexture.cpp index d42e674..c85ca98 100644 --- a/dll/ddtexture.cpp +++ b/dll/ddtexture.cpp @@ -15,8 +15,8 @@ typedef HRESULT (WINAPI *Lock_Type)(LPDIRECTDRAWSURFACE, LPRECT, LPDDSURFACEDESC typedef HRESULT (WINAPI *Unlock4_Type)(LPDIRECTDRAWSURFACE, LPRECT); typedef HRESULT (WINAPI *Unlock1_Type)(LPDIRECTDRAWSURFACE, LPVOID); -extern Lock_Type pLockMethod(); -extern Unlock4_Type pUnlockMethod(); +extern Lock_Type pLockMethod(int); +extern Unlock4_Type pUnlockMethod(int); extern int Set_dwSize_From_Surface(); #define GRIDSIZE 16 @@ -103,7 +103,7 @@ static char *SurfaceType(DDPIXELFORMAT ddpfPixelFormat) return sSurfaceType; } -void TextureHighlight(LPDIRECTDRAWSURFACE s) +void TextureHighlight(LPDIRECTDRAWSURFACE s, int dxversion) { DDSURFACEDESC2 ddsd; int x, y, w, h; @@ -111,7 +111,7 @@ void TextureHighlight(LPDIRECTDRAWSURFACE s) memset(&ddsd,0,sizeof(DDSURFACEDESC2)); ddsd.dwSize = Set_dwSize_From_Surface(); ddsd.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; - if(res=(*pLockMethod())(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__); return; } @@ -171,11 +171,11 @@ void TextureHighlight(LPDIRECTDRAWSURFACE s) break; } } - res=(*pUnlockMethod())(s, NULL); + res=(*pUnlockMethod(dxversion))(s, NULL); if (res) OutTraceE("TextureHigh: Unlock ERROR lpdds=%x res=%x(%s) at %d\n", s, res, ExplainDDError(res), __LINE__); } -static void TextureDump(LPDIRECTDRAWSURFACE s) +static void TextureDump(LPDIRECTDRAWSURFACE s, int dxversion) { DDSURFACEDESC2 ddsd; int w, h, iSurfaceSize, iScanLineSize; @@ -200,7 +200,7 @@ static void TextureDump(LPDIRECTDRAWSURFACE s) memset(&ddsd,0,sizeof(DDSURFACEDESC2)); ddsd.dwSize = Set_dwSize_From_Surface(); ddsd.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; - if(res=(*pLockMethod())(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("TextureDump: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return; } @@ -294,11 +294,11 @@ static void TextureDump(LPDIRECTDRAWSURFACE s) fclose(hf); break; } - res=(*pUnlockMethod())(s, NULL); + res=(*pUnlockMethod(dxversion))(s, NULL); if (res) OutTraceE("TextureDump: Unlock ERROR lpdds=%x res=%x(%s) at %d\n", s, res, ExplainDDError(res), __LINE__); } -static void TextureHack(LPDIRECTDRAWSURFACE s) +static void TextureHack(LPDIRECTDRAWSURFACE s, int dxversion) { DDSURFACEDESC2 ddsd; int w, h, iSurfaceSize, iScanLineSize; @@ -307,7 +307,7 @@ static void TextureHack(LPDIRECTDRAWSURFACE s) memset(&ddsd,0,sizeof(DDSURFACEDESC2)); ddsd.dwSize = Set_dwSize_From_Surface(); ddsd.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; - if(res=(*pLockMethod())(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("TextureHack: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return; } @@ -382,23 +382,23 @@ static void TextureHack(LPDIRECTDRAWSURFACE s) fclose(hf); break; } - res=(*pUnlockMethod())(s, NULL); + res=(*pUnlockMethod(dxversion))(s, NULL); if (res) OutTraceE("TextureHack: Unlock ERROR lpdds=%x res=%x(%s) at %d\n", s, res, ExplainDDError(res), __LINE__); } -void TextureHandling(LPDIRECTDRAWSURFACE s) +void TextureHandling(LPDIRECTDRAWSURFACE s, int dxversion) { //OutTrace("TextureHandling(1-7): dxw.dwFlags5 = %x\n", dxw.dwFlags5 & (TEXTUREHIGHLIGHT|TEXTUREDUMP|TEXTUREHACK)); switch(dxw.dwFlags5 & TEXTUREMASK){ default: case TEXTUREHIGHLIGHT: - TextureHighlight(s); + TextureHighlight(s, dxversion); break; case TEXTUREDUMP: - TextureDump(s); + TextureDump(s, dxversion); break; case TEXTUREHACK: - TextureHack(s); + TextureHack(s, dxversion); break; case TEXTURETRANSP: //TextureTransp(s); diff --git a/dll/dxemublt.cpp b/dll/dxemublt.cpp index 3c61be2..6baebc3 100644 --- a/dll/dxemublt.cpp +++ b/dll/dxemublt.cpp @@ -11,8 +11,8 @@ typedef HRESULT (WINAPI *Lock_Type)(LPDIRECTDRAWSURFACE, LPRECT, LPDDSURFACEDESC typedef HRESULT (WINAPI *Unlock4_Type)(LPDIRECTDRAWSURFACE, LPRECT); typedef HRESULT (WINAPI *Unlock1_Type)(LPDIRECTDRAWSURFACE, LPVOID); -extern Lock_Type pLockMethod(); -extern Unlock4_Type pUnlockMethod(); +extern Lock_Type pLockMethod(int); +extern Unlock4_Type pUnlockMethod(int); extern DWORD PaletteEntries[256]; extern DWORD *Palette16BPP; @@ -150,7 +150,7 @@ static HRESULT WINAPI EmuBlt_8_to_32(int dxversion, Blt_Type pBlt, LPDIRECTDRAWS memset(&ddsd_dst,0,sizeof(DDSURFACEDESC2)); ddsd_dst.dwSize = Set_dwSize_From_Surface(); ddsd_dst.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; - if(res=(*pLockMethod())(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){ + if(res=(*pLockMethod(dxversion))(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){ OutTraceE("EmuBlt8_32: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } @@ -161,14 +161,14 @@ static HRESULT WINAPI EmuBlt_8_to_32(int dxversion, Blt_Type pBlt, LPDIRECTDRAWS if (lpsurface) { // already locked, just get info .... if(res=lpddssrc->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd_src)) { OutTraceE("EmuBlt8_32: GetSurfaceDesc ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); - (*pUnlockMethod())(lpddsdst, lpdestrect); - (*pUnlockMethod())(lpddssrc, lpsrcrect); + (*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); + (*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); return 0; } } else { - if(res=(*pLockMethod())(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY, 0)) { - (*pUnlockMethod())(lpddsdst,0); + if(res=(*pLockMethod(dxversion))(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY, 0)) { + (*pUnlockMethod(dxversion))(lpddsdst,0); OutTraceE("EmuBlt8_32: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return 0; } @@ -198,9 +198,9 @@ static HRESULT WINAPI EmuBlt_8_to_32(int dxversion, Blt_Type pBlt, LPDIRECTDRAWS if(dxw.dwFlags3 & MARKBLIT) MarkRect32(dest0, w, h, destpitch); - res=(*pUnlockMethod())(lpddsdst, lpdestrect); + res=(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); if (res) OutTraceE("EmuBlt8_32: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddsdst, res, ExplainDDError(res), __LINE__); - res=(*pUnlockMethod())(lpddssrc, lpsrcrect); + res=(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); if (res) OutTraceE("EmuBlt8_32: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddssrc, res, ExplainDDError(res), __LINE__); return res; } @@ -226,7 +226,7 @@ static HRESULT WINAPI BilinearBlt_8_to_32(int dxversion, Blt_Type pBlt, LPDIRECT memset(&ddsd_dst,0,sizeof(DDSURFACEDESC2)); ddsd_dst.dwSize = Set_dwSize_From_Surface(); ddsd_dst.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; - if(res=(*pLockMethod())(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){ + if(res=(*pLockMethod(dxversion))(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){ OutTraceE("BilBlt8_32: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } @@ -237,14 +237,14 @@ static HRESULT WINAPI BilinearBlt_8_to_32(int dxversion, Blt_Type pBlt, LPDIRECT if (lpsurface) { // already locked, just get info .... if(res=lpddssrc->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd_src)) { OutTraceE("BilBlt8_32: GetSurfaceDesc ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); - (*pUnlockMethod())(lpddsdst, lpdestrect); - (*pUnlockMethod())(lpddssrc, lpsrcrect); + (*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); + (*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); return 0; } } else { - if(res=(*pLockMethod())(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY, 0)) { - (*pUnlockMethod())(lpddsdst,0); + if(res=(*pLockMethod(dxversion))(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY, 0)) { + (*pUnlockMethod(dxversion))(lpddsdst,0); OutTraceE("BilBlt8_32: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return 0; } @@ -297,9 +297,9 @@ static HRESULT WINAPI BilinearBlt_8_to_32(int dxversion, Blt_Type pBlt, LPDIRECT if(dxw.dwFlags3 & MARKBLIT) MarkRect32(dest0, 2*w, 2*h, destpitch); - res=(*pUnlockMethod())(lpddsdst, lpdestrect); + res=(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); if (res) OutTraceE("BilBlt8_32: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddsdst, res, ExplainDDError(res), __LINE__); - res=(*pUnlockMethod())(lpddssrc, lpsrcrect); + res=(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); if (res) OutTraceE("BilBlt8_32: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddssrc, res, ExplainDDError(res), __LINE__); return res; } @@ -320,7 +320,7 @@ static HRESULT WINAPI EmuBlt_16_to_32(int dxversion, Blt_Type pBlt, LPDIRECTDRAW memset(&ddsd_dst,0,sizeof(DDSURFACEDESC2)); ddsd_dst.dwSize = Set_dwSize_From_Surface(); ddsd_dst.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; - if(res=(*pLockMethod())(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){ + if(res=(*pLockMethod(dxversion))(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){ OutTraceE("EmuBlt16_32: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } @@ -331,14 +331,14 @@ static HRESULT WINAPI EmuBlt_16_to_32(int dxversion, Blt_Type pBlt, LPDIRECTDRAW if (lpsurface) { // already locked, just get info .... if(res=lpddssrc->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd_src)) { OutTraceE("EmuBlt16_32: GetSurfaceDesc ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); - (*pUnlockMethod())(lpddsdst, lpdestrect); - (*pUnlockMethod())(lpddssrc, lpsrcrect); + (*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); + (*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); return 0; } } else { - if(res=(*pLockMethod())(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY|DDLOCK_WAIT, 0)) { - (*pUnlockMethod())(lpddsdst,0); + if(res=(*pLockMethod(dxversion))(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY|DDLOCK_WAIT, 0)) { + (*pUnlockMethod(dxversion))(lpddsdst,0); OutTraceE("EmuBlt16_32: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } @@ -371,9 +371,9 @@ static HRESULT WINAPI EmuBlt_16_to_32(int dxversion, Blt_Type pBlt, LPDIRECTDRAW if(dxw.dwFlags3 & MARKBLIT) MarkRect32(dest0, w, h, destpitch); - res=(*pUnlockMethod())(lpddsdst, lpdestrect); + res=(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); if (res) OutTraceE("EmuBlt16_32: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddsdst, res, ExplainDDError(res), __LINE__); - res=(*pUnlockMethod())(lpddssrc, lpsrcrect); + res=(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); if (res) OutTraceE("EmuBlt16_32: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddssrc, res, ExplainDDError(res), __LINE__); return res; } @@ -394,7 +394,7 @@ static HRESULT WINAPI Deinterlace_16_to_32(int dxversion, Blt_Type pBlt, LPDIREC memset(&ddsd_dst,0,sizeof(DDSURFACEDESC2)); ddsd_dst.dwSize = Set_dwSize_From_Surface(); ddsd_dst.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; - if(res=(*pLockMethod())(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){ + if(res=(*pLockMethod(dxversion))(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){ OutTraceE("EmuBlt16_32: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } @@ -405,14 +405,14 @@ static HRESULT WINAPI Deinterlace_16_to_32(int dxversion, Blt_Type pBlt, LPDIREC if (lpsurface) { // already locked, just get info .... if(res=lpddssrc->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd_src)) { OutTraceE("EmuBlt16_32: GetSurfaceDesc ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); - (*pUnlockMethod())(lpddsdst, lpdestrect); - (*pUnlockMethod())(lpddssrc, lpsrcrect); + (*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); + (*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); return 0; } } else { - if(res=(*pLockMethod())(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY|DDLOCK_WAIT, 0)) { - (*pUnlockMethod())(lpddsdst,0); + if(res=(*pLockMethod(dxversion))(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY|DDLOCK_WAIT, 0)) { + (*pUnlockMethod(dxversion))(lpddsdst,0); OutTraceE("EmuBlt16_32: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } @@ -472,9 +472,9 @@ static HRESULT WINAPI Deinterlace_16_to_32(int dxversion, Blt_Type pBlt, LPDIREC if(dxw.dwFlags3 & MARKBLIT) MarkRect32(dest0, w, h, destpitch); - res=(*pUnlockMethod())(lpddsdst, lpdestrect); + res=(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); if (res) OutTraceE("EmuBlt16_32: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddsdst, res, ExplainDDError(res), __LINE__); - res=(*pUnlockMethod())(lpddssrc, lpsrcrect); + res=(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); if (res) OutTraceE("EmuBlt16_32: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddssrc, res, ExplainDDError(res), __LINE__); return res; } @@ -500,7 +500,7 @@ static HRESULT WINAPI BilinearBlt_16_to_32(int dxversion, Blt_Type pBlt, LPDIREC memset(&ddsd_dst,0,sizeof(DDSURFACEDESC2)); ddsd_dst.dwSize = Set_dwSize_From_Surface(); ddsd_dst.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; - if(res=(*pLockMethod())(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){ + if(res=(*pLockMethod(dxversion))(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){ OutTraceE("BilBlt16_32: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } @@ -511,14 +511,14 @@ static HRESULT WINAPI BilinearBlt_16_to_32(int dxversion, Blt_Type pBlt, LPDIREC if (lpsurface) { // already locked, just get info .... if(res=lpddssrc->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd_src)) { OutTraceE("BilBlt16_32: GetSurfaceDesc ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); - (*pUnlockMethod())(lpddsdst, lpdestrect); - (*pUnlockMethod())(lpddssrc, lpsrcrect); + (*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); + (*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); return 0; } } else { - if(res=(*pLockMethod())(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY|DDLOCK_WAIT, 0)) { - (*pUnlockMethod())(lpddsdst,0); + if(res=(*pLockMethod(dxversion))(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY|DDLOCK_WAIT, 0)) { + (*pUnlockMethod(dxversion))(lpddsdst,0); OutTraceE("BilBlt16_32: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } @@ -573,9 +573,9 @@ static HRESULT WINAPI BilinearBlt_16_to_32(int dxversion, Blt_Type pBlt, LPDIREC if(dxw.dwFlags3 & MARKBLIT) MarkRect32(dest0, 2*w, 2*h, destpitch); - res=(*pUnlockMethod())(lpddsdst, lpdestrect); + res=(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); if (res) OutTraceE("BilBlt16_32: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddsdst, res, ExplainDDError(res), __LINE__); - res=(*pUnlockMethod())(lpddssrc, lpsrcrect); + res=(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); if (res) OutTraceE("BilBlt16_32: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddssrc, res, ExplainDDError(res), __LINE__); return res; } @@ -596,7 +596,7 @@ static HRESULT WINAPI EmuBlt_24_to_32(int dxversion, Blt_Type pBlt, LPDIRECTDRAW memset(&ddsd_dst,0,sizeof(DDSURFACEDESC2)); ddsd_dst.dwSize = Set_dwSize_From_Surface(); ddsd_dst.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; - if(res=(*pLockMethod())(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){ + if(res=(*pLockMethod(dxversion))(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){ OutTraceE("EmuBlt24_32: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } @@ -607,14 +607,14 @@ static HRESULT WINAPI EmuBlt_24_to_32(int dxversion, Blt_Type pBlt, LPDIRECTDRAW if (lpsurface) { // already locked, just get info .... if(res=lpddssrc->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd_src)) { OutTraceE("EmuBlt24_32: GetSurfaceDesc ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); - (*pUnlockMethod())(lpddsdst, lpdestrect); - (*pUnlockMethod())(lpddssrc, lpsrcrect); + (*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); + (*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); return 0; } } else { - if(res=(*pLockMethod())(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY, 0)) { - (*pUnlockMethod())(lpddsdst,0); + if(res=(*pLockMethod(dxversion))(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY, 0)) { + (*pUnlockMethod(dxversion))(lpddsdst,0); OutTraceE("EmuBlt24_32: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } @@ -647,9 +647,9 @@ static HRESULT WINAPI EmuBlt_24_to_32(int dxversion, Blt_Type pBlt, LPDIRECTDRAW if(dxw.dwFlags3 & MARKBLIT) MarkRect32(dest0, w, h, destpitch); - res=(*pUnlockMethod())(lpddsdst, lpdestrect); + res=(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); if (res) OutTraceE("EmuBlt24_32: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddsdst, res, ExplainDDError(res), __LINE__); - res=(*pUnlockMethod())(lpddssrc, lpsrcrect); + res=(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); if (res) OutTraceE("EmuBlt24_32: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddssrc, res, ExplainDDError(res), __LINE__); return res; } @@ -673,7 +673,7 @@ static HRESULT WINAPI EmuBlt_32_to_32(int dxversion, Blt_Type pBlt, LPDIRECTDRAW memset(&ddsd_dst,0,sizeof(DDSURFACEDESC2)); ddsd_dst.dwSize = Set_dwSize_From_Surface(); ddsd_dst.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; - if(res=(*pLockMethod())(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){ + if(res=(*pLockMethod(dxversion))(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){ OutTraceE("EmuBlt32_32: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } @@ -684,14 +684,14 @@ static HRESULT WINAPI EmuBlt_32_to_32(int dxversion, Blt_Type pBlt, LPDIRECTDRAW if (lpsurface) { // already locked, just get info .... if(res=lpddssrc->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd_src)) { OutTraceE("EmuBlt32_32: GetSurfaceDesc ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); - (*pUnlockMethod())(lpddsdst, lpdestrect); - (*pUnlockMethod())(lpddssrc, lpsrcrect); + (*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); + (*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); return res; } } else { - if(res=(*pLockMethod())(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY, 0)) { - (*pUnlockMethod())(lpddsdst,0); + if(res=(*pLockMethod(dxversion))(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY, 0)) { + (*pUnlockMethod(dxversion))(lpddsdst,0); OutTraceE("EmuBlt32_32: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } @@ -721,9 +721,9 @@ static HRESULT WINAPI EmuBlt_32_to_32(int dxversion, Blt_Type pBlt, LPDIRECTDRAW if(dxw.dwFlags3 & MARKBLIT) MarkRect32(dest0, w, h, destpitch); - res=(*pUnlockMethod())(lpddsdst,lpdestrect); + res=(*pUnlockMethod(dxversion))(lpddsdst,lpdestrect); if (res) OutTraceE("EmuBlt32_32: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddsdst, res, ExplainDDError(res), __LINE__); - res=(*pUnlockMethod())(lpddssrc, lpsrcrect); + res=(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); if (res) OutTraceE("EmuBlt32_32: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddssrc, res, ExplainDDError(res), __LINE__); return res; } @@ -744,7 +744,7 @@ static HRESULT WINAPI EmuBlt_8_to_16(int dxversion, Blt_Type pBlt, LPDIRECTDRAWS memset(&ddsd_dst,0,sizeof(DDSURFACEDESC2)); ddsd_dst.dwSize = Set_dwSize_From_Surface(); ddsd_dst.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; - if(res=(*pLockMethod())(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){ + if(res=(*pLockMethod(dxversion))(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){ OutTraceE("EmuBlt8_16: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } @@ -755,14 +755,14 @@ static HRESULT WINAPI EmuBlt_8_to_16(int dxversion, Blt_Type pBlt, LPDIRECTDRAWS if (lpsurface) { // already locked, just get info .... if(res=lpddssrc->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd_src)) { OutTraceE("EmuBlt8_16: GetSurfaceDesc ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); - (*pUnlockMethod())(lpddsdst, lpdestrect); - (*pUnlockMethod())(lpddssrc, lpsrcrect); + (*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); + (*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); return 0; } } else { - if(res=(*pLockMethod())(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY, 0)) { - (*pUnlockMethod())(lpddsdst,0); + if(res=(*pLockMethod(dxversion))(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY, 0)) { + (*pUnlockMethod(dxversion))(lpddsdst,0); OutTraceE("EmuBlt8_16: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return 0; } @@ -792,9 +792,9 @@ static HRESULT WINAPI EmuBlt_8_to_16(int dxversion, Blt_Type pBlt, LPDIRECTDRAWS if(dxw.dwFlags3 & MARKBLIT) MarkRect16(dest0, w, h, destpitch); - res=(*pUnlockMethod())(lpddsdst, lpdestrect); + res=(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); if (res) OutTraceE("EmuBlt8_16: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddsdst, res, ExplainDDError(res), __LINE__); - res=(*pUnlockMethod())(lpddssrc, lpsrcrect); + res=(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); if (res) OutTraceE("EmuBlt8_16: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddssrc, res, ExplainDDError(res), __LINE__); return res; } @@ -822,7 +822,7 @@ static HRESULT WINAPI BilinearBlt_8_to_16(int dxversion, Blt_Type pBlt, LPDIRECT memset(&ddsd_dst,0,sizeof(DDSURFACEDESC2)); ddsd_dst.dwSize = Set_dwSize_From_Surface(); ddsd_dst.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; - if(res=(*pLockMethod())(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){ + if(res=(*pLockMethod(dxversion))(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){ OutTraceE("BilBlt8_16: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } @@ -835,14 +835,14 @@ static HRESULT WINAPI BilinearBlt_8_to_16(int dxversion, Blt_Type pBlt, LPDIRECT if (lpsurface) { // already locked, just get info .... if(res=lpddssrc->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd_src)) { OutTraceE("BilBlt8_16: GetSurfaceDesc ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); - (*pUnlockMethod())(lpddsdst, lpdestrect); - (*pUnlockMethod())(lpddssrc, lpsrcrect); + (*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); + (*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); return 0; } } else { - if(res=(*pLockMethod())(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY, 0)) { - (*pUnlockMethod())(lpddsdst,0); + if(res=(*pLockMethod(dxversion))(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY, 0)) { + (*pUnlockMethod(dxversion))(lpddsdst,0); OutTraceE("BilBlt8_16: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return 0; } @@ -894,9 +894,9 @@ static HRESULT WINAPI BilinearBlt_8_to_16(int dxversion, Blt_Type pBlt, LPDIRECT if(dxw.dwFlags3 & MARKBLIT) MarkRect16(dest0, 2*w, 2*h, destpitch); - res=(*pUnlockMethod())(lpddsdst, lpdestrect); + res=(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); if (res) OutTraceE("BilBlt8_16: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddsdst, res, ExplainDDError(res), __LINE__); - res=(*pUnlockMethod())(lpddssrc, lpsrcrect); + res=(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); if (res) OutTraceE("BilBlt8_16: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddssrc, res, ExplainDDError(res), __LINE__); return res; } @@ -921,7 +921,7 @@ static HRESULT WINAPI EmuBlt_16_to_16(int dxversion, Blt_Type pBlt, LPDIRECTDRAW memset(&ddsd_dst,0,sizeof(DDSURFACEDESC2)); ddsd_dst.dwSize = Set_dwSize_From_Surface(); ddsd_dst.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; - if(res=(*pLockMethod())(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){ + if(res=(*pLockMethod(dxversion))(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){ OutTraceE("EmuBlt16_16: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } @@ -932,14 +932,14 @@ static HRESULT WINAPI EmuBlt_16_to_16(int dxversion, Blt_Type pBlt, LPDIRECTDRAW if (lpsurface) { // already locked, just get info .... if(res=lpddssrc->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd_src)) { OutTraceE("EmuBlt16_16: GetSurfaceDesc ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); - (*pUnlockMethod())(lpddsdst, lpdestrect); - (*pUnlockMethod())(lpddssrc, lpsrcrect); + (*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); + (*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); return 0; } } else { - if(res=(*pLockMethod())(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY, 0)) { - (*pUnlockMethod())(lpddsdst,0); + if(res=(*pLockMethod(dxversion))(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY, 0)) { + (*pUnlockMethod(dxversion))(lpddsdst,0); OutTraceE("EmuBlt16_16: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return 0; } @@ -999,9 +999,9 @@ static HRESULT WINAPI EmuBlt_16_to_16(int dxversion, Blt_Type pBlt, LPDIRECTDRAW if(dxw.dwFlags3 & MARKBLIT) MarkRect16(dest0, w, h, destpitch); - res=(*pUnlockMethod())(lpddsdst, lpdestrect); + res=(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); if (res) OutTraceE("EmuBlt16_16: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddsdst, res, ExplainDDError(res), __LINE__); - res=(*pUnlockMethod())(lpddssrc, lpsrcrect); + res=(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); if (res) OutTraceE("EmuBlt16_16: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddssrc, res, ExplainDDError(res), __LINE__); return res; } @@ -1029,7 +1029,7 @@ static HRESULT WINAPI BilinearBlt_16_to_16(int dxversion, Blt_Type pBlt, LPDIREC memset(&ddsd_dst,0,sizeof(DDSURFACEDESC2)); ddsd_dst.dwSize = Set_dwSize_From_Surface(); ddsd_dst.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; - if(res=(*pLockMethod())(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){ + if(res=(*pLockMethod(dxversion))(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){ OutTraceE("BilBlt16_16: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } @@ -1042,14 +1042,14 @@ static HRESULT WINAPI BilinearBlt_16_to_16(int dxversion, Blt_Type pBlt, LPDIREC if (lpsurface) { // already locked, just get info .... if(res=lpddssrc->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd_src)) { OutTraceE("BilBlt16_16: GetSurfaceDesc ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); - (*pUnlockMethod())(lpddsdst, lpdestrect); - (*pUnlockMethod())(lpddssrc, lpsrcrect); + (*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); + (*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); return 0; } } else { - if(res=(*pLockMethod())(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY|DDLOCK_WAIT, 0)) { - (*pUnlockMethod())(lpddsdst,0); + if(res=(*pLockMethod(dxversion))(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY|DDLOCK_WAIT, 0)) { + (*pUnlockMethod(dxversion))(lpddsdst,0); OutTraceE("BilBlt16_16: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } @@ -1102,9 +1102,9 @@ static HRESULT WINAPI BilinearBlt_16_to_16(int dxversion, Blt_Type pBlt, LPDIREC if(dxw.dwFlags3 & MARKBLIT) MarkRect16((SHORT *)dest0, 2*w, 2*h, destpitch); - res=(*pUnlockMethod())(lpddsdst, lpdestrect); + res=(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); if (res) OutTraceE("BilBlt16_16: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddsdst, res, ExplainDDError(res), __LINE__); - res=(*pUnlockMethod())(lpddssrc, lpsrcrect); + res=(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); if (res) OutTraceE("BilBlt16_16: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddssrc, res, ExplainDDError(res), __LINE__); return res; } @@ -1126,7 +1126,7 @@ static HRESULT WINAPI EmuBlt_24_to_16(int dxversion, Blt_Type pBlt, LPDIRECTDRAW memset(&ddsd_dst,0,sizeof(DDSURFACEDESC2)); ddsd_dst.dwSize = Set_dwSize_From_Surface(); ddsd_dst.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; - if(res=(*pLockMethod())(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){ + if(res=(*pLockMethod(dxversion))(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){ OutTraceE("EmuBlt24_16: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } @@ -1137,14 +1137,14 @@ static HRESULT WINAPI EmuBlt_24_to_16(int dxversion, Blt_Type pBlt, LPDIRECTDRAW if (lpsurface) { // already locked, just get info .... if(res=lpddssrc->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd_src)) { OutTraceE("EmuBlt24_16: GetSurfaceDesc ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); - (*pUnlockMethod())(lpddsdst, lpdestrect); - (*pUnlockMethod())(lpddssrc, lpsrcrect); + (*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); + (*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); return 0; } } else { - if(res=(*pLockMethod())(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY, 0)) { - (*pUnlockMethod())(lpddsdst,0); + if(res=(*pLockMethod(dxversion))(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY, 0)) { + (*pUnlockMethod(dxversion))(lpddsdst,0); OutTraceE("EmuBlt24_16: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return 0; } @@ -1174,9 +1174,9 @@ static HRESULT WINAPI EmuBlt_24_to_16(int dxversion, Blt_Type pBlt, LPDIRECTDRAW if(dxw.dwFlags3 & MARKBLIT) MarkRect16(dest0, w, h, destpitch); - res=(*pUnlockMethod())(lpddsdst, lpdestrect); + res=(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); if (res) OutTraceE("EmuBlt24_16: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddsdst, res, ExplainDDError(res), __LINE__); - res=(*pUnlockMethod())(lpddssrc, lpsrcrect); + res=(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); if (res) OutTraceE("EmuBlt24_16: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddssrc, res, ExplainDDError(res), __LINE__); return res; } @@ -1197,7 +1197,7 @@ static HRESULT WINAPI EmuBlt_32_to_16(int dxversion, Blt_Type pBlt, LPDIRECTDRAW memset(&ddsd_dst,0,sizeof(DDSURFACEDESC2)); ddsd_dst.dwSize = Set_dwSize_From_Surface(); ddsd_dst.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; - if(res=(*pLockMethod())(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){ + if(res=(*pLockMethod(dxversion))(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){ OutTraceE("EmuBlt32_16: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } @@ -1208,14 +1208,14 @@ static HRESULT WINAPI EmuBlt_32_to_16(int dxversion, Blt_Type pBlt, LPDIRECTDRAW if (lpsurface) { // already locked, just get info .... if(res=lpddssrc->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd_src)) { OutTraceE("EmuBlt32_16: GetSurfaceDesc ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); - (*pUnlockMethod())(lpddsdst, lpdestrect); - (*pUnlockMethod())(lpddssrc, lpsrcrect); + (*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); + (*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); return 0; } } else { - if(res=(*pLockMethod())(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY, 0)) { - (*pUnlockMethod())(lpddsdst,0); + if(res=(*pLockMethod(dxversion))(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY, 0)) { + (*pUnlockMethod(dxversion))(lpddsdst,0); OutTraceE("EmuBlt32_16: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return 0; } @@ -1245,9 +1245,9 @@ static HRESULT WINAPI EmuBlt_32_to_16(int dxversion, Blt_Type pBlt, LPDIRECTDRAW if(dxw.dwFlags3 & MARKBLIT) MarkRect16(dest0, w, h, destpitch); - res=(*pUnlockMethod())(lpddsdst, lpdestrect); + res=(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); if (res) OutTraceE("EmuBlt32_16: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddsdst, res, ExplainDDError(res), __LINE__); - res=(*pUnlockMethod())(lpddssrc, lpsrcrect); + res=(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); if (res) OutTraceE("EmuBlt32_16: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddssrc, res, ExplainDDError(res), __LINE__); return res; } @@ -1273,7 +1273,7 @@ static HRESULT WINAPI BilinearBlt_32_to_32(int dxversion, Blt_Type pBlt, LPDIREC memset(&ddsd_dst,0,sizeof(DDSURFACEDESC2)); ddsd_dst.dwSize = Set_dwSize_From_Surface(); ddsd_dst.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; - if(res=(*pLockMethod())(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){ + if(res=(*pLockMethod(dxversion))(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){ OutTraceE("BilBlt32_32: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } @@ -1284,14 +1284,14 @@ static HRESULT WINAPI BilinearBlt_32_to_32(int dxversion, Blt_Type pBlt, LPDIREC if (lpsurface) { // already locked, just get info .... if(res=lpddssrc->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd_src)) { OutTraceE("BilBlt32_32: GetSurfaceDesc ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); - (*pUnlockMethod())(lpddsdst, lpdestrect); - (*pUnlockMethod())(lpddssrc, lpsrcrect); + (*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); + (*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); return 0; } } else { - if(res=(*pLockMethod())(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY|DDLOCK_WAIT, 0)) { - (*pUnlockMethod())(lpddsdst,0); + if(res=(*pLockMethod(dxversion))(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY|DDLOCK_WAIT, 0)) { + (*pUnlockMethod(dxversion))(lpddsdst,0); OutTraceE("BilBlt32_32: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } @@ -1347,9 +1347,9 @@ static HRESULT WINAPI BilinearBlt_32_to_32(int dxversion, Blt_Type pBlt, LPDIREC if(dxw.dwFlags3 & MARKBLIT) MarkRect32(dest0, 2*w, 2*h, destpitch); - res=(*pUnlockMethod())(lpddsdst, lpdestrect); + res=(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect); if (res) OutTraceE("BilBlt32_32: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddsdst, res, ExplainDDError(res), __LINE__); - res=(*pUnlockMethod())(lpddssrc, lpsrcrect); + res=(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect); if (res) OutTraceE("BilBlt32_32: Unlock ERROR dds=%x res=%x(%s) at %d\n", lpddssrc, res, ExplainDDError(res), __LINE__); return res; } diff --git a/dll/dxhook.cpp b/dll/dxhook.cpp index baf65a9..ecdcf31 100644 --- a/dll/dxhook.cpp +++ b/dll/dxhook.cpp @@ -445,22 +445,24 @@ void DumpImportTable(HMODULE module) void SetHook(void *target, void *hookproc, void **hookedproc, char *hookname) { void *tmp; - char msg[81]; + char msg[201]; DWORD dwTmp, oldprot; - static DWORD MinHook=0xFFFFFFFF; - static DWORD MaxHook=0; OutTraceH("SetHook: DEBUG target=%x, proc=%x name=%s\n", target, hookproc, hookname); // keep track of hooked call range to avoid re-hooking of hooked addresses !!! - if ((DWORD)hookproc < MinHook) MinHook=(DWORD)hookproc; - if ((DWORD)hookproc > MaxHook) MaxHook=(DWORD)hookproc; dwTmp = *(DWORD *)target; - if(dwTmp == (DWORD)hookproc) return; // already hooked - if((dwTmp <= MaxHook) && (dwTmp >= MinHook)) return; // already hooked + if(dwTmp == (DWORD)hookproc) { + OutTraceH("target already hooked\n"); + return; // already hooked + } + if(*(DWORD *)hookedproc == (DWORD)hookproc) { + OutTraceH("hook already hooked\n"); + return; // already hooked + } if(dwTmp == 0){ sprintf(msg,"SetHook ERROR: NULL target for %s\n", hookname); OutTraceDW(msg); - MessageBox(0, msg, "SetHook", MB_OK | MB_ICONEXCLAMATION); + if (IsAssertEnabled) MessageBox(0, msg, "SetHook", MB_OK | MB_ICONEXCLAMATION); return; // error condition } if(!VirtualProtect(target, 4, PAGE_READWRITE, &oldprot)) { @@ -487,6 +489,7 @@ void SetHook(void *target, void *hookproc, void **hookedproc, char *hookname) tmp = *hookedproc; } *hookedproc = tmp; + OutTraceH("SetHook: DEBUG2 *hookedproc=%x, name=%s\n", tmp, hookname); } // v2.02.53: thorough scan - the IAT is scanned considering the possibility to have each dll module @@ -1150,7 +1153,10 @@ DWORD WINAPI MessagePoller(LPVOID lpParameter) #define DXWREFRESHINTERVAL 20 while(TRUE){ Sleep(DXWREFRESHINTERVAL); - SendMessage(dxw.GethWnd(), WM_NCHITTEST, 0, 0); + if(dxw.dwFlags2 & INDEPENDENTREFRESH) + dxw.ScreenRefresh(); + else + SendMessage(dxw.GethWnd(), WM_NCHITTEST, 0, 0); } return 0; } diff --git a/dll/dxwnd.cpp b/dll/dxwnd.cpp index 7288362..eb689be 100644 --- a/dll/dxwnd.cpp +++ b/dll/dxwnd.cpp @@ -27,7 +27,7 @@ along with this program. If not, see . #include "TlHelp32.h" -#define VERSION "2.03.65" +#define VERSION "2.03.66" #define DDTHREADLOCK 1 //#define LOCKTHREADS diff --git a/dll/dxwnd.vs2008.suo b/dll/dxwnd.vs2008.suo index 12942a421d41d66e5edd2f857e1865efe6795986..798b88b0caa6c59f28babad506c89947536bd2ee 100644 GIT binary patch delta 32525 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 lkNw)bjjv4C9 delta 5774 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.GetScreenHeight(); GetHookInfo()->Width=(short)dxw.GetScreenWidth(); GetHookInfo()->ColorDepth=(short)dxw.VirtualPixelFormat.dwRGBBitCount; - - return 0; + return DD_OK; } HRESULT WINAPI extCreateDevice8(void *lpd3d, UINT adapter, D3DDEVTYPE dt, HWND hfw, DWORD bf, D3DPRESENT_PARAMETERS *ppp, void **ppd3dd) @@ -1248,7 +1246,7 @@ HRESULT WINAPI extCreateDeviceEx(void *lpd3d, UINT adapter, D3DDEVTYPE devicetyp GetHookInfo()->Width=(short)dxw.GetScreenWidth(); GetHookInfo()->ColorDepth=(short)dxw.VirtualPixelFormat.dwRGBBitCount; - return 0; + return DD_OK; } extern char *ExplainRenderstateValue(DWORD Value); diff --git a/dll/ole32.cpp b/dll/ole32.cpp index 11ff6d5..d28c39b 100644 --- a/dll/ole32.cpp +++ b/dll/ole32.cpp @@ -107,7 +107,6 @@ HRESULT STDAPICALLTYPE extCoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, case 0xD7B70EE0: // CLSID_DirectDraw: // v2.03.18: fixed OutTraceDW("CoCreateInstance: CLSID_DirectDraw object\n"); - HookDDSession((LPDIRECTDRAW *)ppv, 1); switch (*(DWORD *)&riid){ LPDIRECTDRAW lpOldDDraw; case 0x6C14DB80: diff --git a/dll/shareddc.cpp b/dll/shareddc.cpp index 606a3cd..fe33831 100644 --- a/dll/shareddc.cpp +++ b/dll/shareddc.cpp @@ -21,6 +21,7 @@ extern HandleDDThreadLock_Type pReleaseDDThreadLock; extern GetDC_Type pGetDCMethod(); extern ReleaseDC_Type pReleaseDCMethod(); +//void setClippingRegion(HDC, HDC, HWND, bool, const POINT&); /*---------------------------------------------------------------------------------+ | | @@ -191,8 +192,8 @@ HDC dxwSDC::GetPrimaryDC(HDC hdc) origin.y -= mainwin.y; OutTraceB("dxwSDC::GetPrimaryDC: origin=(%d,%d)\n", origin.x, origin.y); - copyDcAttributes(VirtualHDC, hdc, origin); - setClippingRegion(VirtualHDC, hdc, origin); + copyDcAttributes(VirtualHDC, hdc, origin); + setClippingRegion(VirtualHDC, hdc, dxw.GethWnd(), FALSE, origin); // no good return VirtualHDC; } @@ -314,11 +315,36 @@ void dxwSDC::copyDcAttributes(HDC destDC, HDC origDc, POINT origin) origFont = SelectObject(destDC, GetCurrentObject(origDc, OBJ_FONT)); origBrush = SelectObject(destDC, GetCurrentObject(origDc, OBJ_BRUSH)); origPen = SelectObject(destDC, GetCurrentObject(origDc, OBJ_PEN)); + + if (GM_ADVANCED == GetGraphicsMode(origDc)){ + SetGraphicsMode(destDC, GM_ADVANCED); + XFORM transform = {}; + GetWorldTransform(origDc, &transform); + SetWorldTransform(destDC, &transform); + } + + SetMapMode(destDC, GetMapMode(origDc)); + + POINT viewportOrg = {}; + GetViewportOrgEx(origDc, &viewportOrg); + SetViewportOrgEx(destDC, viewportOrg.x + origin.x, viewportOrg.y + origin.y, NULL); + SIZE viewportExt = {}; + GetViewportExtEx(origDc, &viewportExt); + SetViewportExtEx(destDC, viewportExt.cx, viewportExt.cy, NULL); + + POINT windowOrg = {}; + GetWindowOrgEx(origDc, &windowOrg); + SetWindowOrgEx(destDC, windowOrg.x, windowOrg.y, NULL); + SIZE windowExt = {}; + GetWindowExtEx(origDc, &windowExt); + SetWindowExtEx(destDC, windowExt.cx, windowExt.cy, NULL); + SetArcDirection(destDC, GetArcDirection(origDc)); SetBkColor(destDC, GetBkColor(origDc)); SetBkMode(destDC, GetBkMode(origDc)); SetDCBrushColor(destDC, GetDCBrushColor(origDc)); SetDCPenColor(destDC, GetDCPenColor(origDc)); + SetLayout(destDC, GetLayout(origDc)); SetPolyFillMode(destDC, GetPolyFillMode(origDc)); SetROP2(destDC, GetROP2(origDc)); SetStretchBltMode(destDC, GetStretchBltMode(origDc)); @@ -335,8 +361,7 @@ void dxwSDC::copyDcAttributes(HDC destDC, HDC origDc, POINT origin) SetBrushOrgEx(destDC, brushOrg.x, brushOrg.y, NULL); POINT currentPos = {}; - (*pMoveToEx)(origDc, 0, 0, ¤tPos); - (*pMoveToEx)(origDc, currentPos.x, currentPos.y, NULL); + (*pGetCurrentPositionEx)(origDc, ¤tPos); dxw.MapClient(¤tPos); (*pMoveToEx)(destDC, currentPos.x, currentPos.y, NULL); } @@ -344,76 +369,60 @@ void dxwSDC::copyDcAttributes(HDC destDC, HDC origDc, POINT origin) typedef struct { HDC compatDc; - POINT origin; HWND rootWnd; } ExcludeClipRectsData_Type; -static BOOL CALLBACK excludeClipRectsForOverlappingWindows(HWND hwnd, LPARAM lParam) +static BOOL CALLBACK excludeClipRectForOverlappingWindow(HWND hwnd, LPARAM lParam) { ExcludeClipRectsData_Type *excludeClipRectsData = (ExcludeClipRectsData_Type *)lParam; - if (!IsWindowVisible(hwnd)) return TRUE; // go ahead - if (hwnd == excludeClipRectsData->rootWnd) return FALSE; // stop - if(dxw.IsDesktop(hwnd)) return FALSE; + if (hwnd == excludeClipRectsData->rootWnd) return FALSE; + if (!IsWindowVisible(hwnd)) return TRUE; + + RECT windowRect = {}; + GetWindowRect(hwnd, &windowRect); + + HRGN windowRgn = (*pCreateRectRgnIndirect)(&windowRect); + ExtSelectClipRgn(excludeClipRectsData->compatDc, windowRgn, RGN_DIFF); + DeleteObject(windowRgn); + OutTraceB("dxwSDC::excludeClipRect: hwnd=%x rect=(%d,%d)-(%d,%d)\n", hwnd, windowRect.left, windowRect.top, windowRect.right, windowRect.bottom); - RECT rect = {}; - (*pGetClientRect)(hwnd, &rect); - OffsetRect(&rect, -excludeClipRectsData->origin.x, -excludeClipRectsData->origin.y); - ExcludeClipRect(excludeClipRectsData->compatDc, rect.left, rect.top, rect.right, rect.bottom); - OutTraceB("dxwSDC::excludeClipRects: hwnd=%x rect=(%d,%d)-(%d,%d)\n", hwnd, rect.left, rect.top, rect.right, rect.bottom); return TRUE; } -void dxwSDC::setClippingRegion(HDC compatDc, HDC origDc, POINT& origin) +static void excludeClipRectsForOverlappingWindows(HWND hwnd, BOOL isMenuWindow, HDC compatDc) { - OutTraceB("dxwSDC::setClippingRegion: compdc=%x origdc=%x origin=(%d,%d)\n", compatDc, origDc, origin.x, origin.y); - HRGN clipRgn = CreateRectRgn(0, 0, 0, 0); - const bool isEmptyClipRgn = (1 != GetRandomRgn(origDc, clipRgn, SYSRGN)); - OutTraceB("dxwSDC::setClippingRegion: isEmptyClipRgn=%x\n", isEmptyClipRgn); - // scale clip region - POINT upleft={0, 0}; - //(*pClientToScreen)(dxw.GethWnd(), &upleft); - (*pClientToScreen)(CurrenthWnd, &upleft); - if(IsDebug){ - OutTraceB("dxwSDC::setClippingRegion: upleft=(%d,%d)\n", upleft.x, upleft.y); + ExcludeClipRectsData_Type excludeClipRectsData = { compatDc, GetAncestor(hwnd, GA_ROOT) }; + if (!isMenuWindow){ + EnumWindows(&excludeClipRectForOverlappingWindow, (LPARAM)(&excludeClipRectsData)); } - OffsetRgn(clipRgn, -upleft.x, -upleft.y); - if(IsDebug){ - RECT RgnBox; - GetRgnBox(clipRgn, &RgnBox); - OutTraceB("dxwSDC::setClippingRegion: RgnBox=(%d,%d)-(%d,%d) size=(%dx%d)\n", - RgnBox.left, RgnBox.top, RgnBox.right, RgnBox.bottom, RgnBox.right-RgnBox.left, RgnBox.bottom-RgnBox.top); - } - // end of scaling - SelectClipRgn(compatDc, isEmptyClipRgn ? NULL : clipRgn); - DeleteObject(clipRgn); - HRGN origClipRgn = (*pCreateRectRgn)(0, 0, 0, 0); - if (1 == GetClipRgn(origDc, origClipRgn)) - { - OutTraceB("dxwSDC::setClippingRegion: GetClipRgn==1\n"); - OffsetRgn(origClipRgn, origin.x, origin.y); - ExtSelectClipRgn(compatDc, origClipRgn, RGN_AND); - if(IsDebug){ - RECT RgnBox; - GetRgnBox(origClipRgn, &RgnBox); // for logging only - OutTraceB("dxwSDC::setClippingRegion: OrigRgnBox=(%d,%d)-(%d,%d)\n", RgnBox.left, RgnBox.top, RgnBox.right, RgnBox.bottom); - } - } - DeleteObject(origClipRgn); - - if(dxw.dwFlags7 & FIXCLIPPERAREA){ - // to finish ..... - // on Win10 this part seems unnecessary and giving troubles ..... - if (!isEmptyClipRgn){ - OutTraceB("dxwSDC::setClippingRegion: isEmptyClipRgn FALSE\n"); - HWND hwnd = WindowFromDC(origDc); - if (hwnd && (!dxw.IsDesktop(hwnd))){ - ExcludeClipRectsData_Type excludeClipRectsData = { compatDc, origin, dxw.GethWnd() }; - //ExcludeClipRectsData_Type excludeClipRectsData = { compatDc, origin, GetAncestor(hwnd, GA_ROOT) }; - OutTraceB("dxwSDC::setClippingRegion: compatdc=%x origin=(%d,%d) ancestor=%x\n", - compatDc, origin.x, origin.y, dxw.GethWnd()); - EnumWindows(&excludeClipRectsForOverlappingWindows,(LPARAM)(&excludeClipRectsData)); - } - } + HWND menuWindow = FindWindow((LPCSTR)(0x8000), NULL); + while (menuWindow && menuWindow != hwnd){ + excludeClipRectForOverlappingWindow(menuWindow, (LPARAM)(&excludeClipRectsData)); + menuWindow = FindWindowEx(NULL, menuWindow, (LPCSTR)(0x8000), NULL); } } + +void dxwSDC::setClippingRegion(HDC compatDc, HDC origDc, HWND hwnd, bool isMenuWindow, const POINT& origin) +{ + HRGN clipRgn = (*pCreateRectRgn)(0, 0, 0, 0); + if (1 == GetClipRgn(origDc, clipRgn)){ + OffsetRgn(clipRgn, origin.x, origin.y); + SelectClipRgn(compatDc, clipRgn); + } + + if ((hwnd) && (dxw.dwFlags7 & FIXCLIPPERAREA)){ + if (isMenuWindow || 1 != GetRandomRgn(origDc, clipRgn, SYSRGN)){ + RECT rect = {}; + (*pGetWindowRect)(hwnd, &rect); + (*pSetRectRgn)(clipRgn, rect.left, rect.top, rect.right, rect.bottom); + } + + excludeClipRectsForOverlappingWindows(hwnd, isMenuWindow, compatDc); + ExtSelectClipRgn(compatDc, clipRgn, RGN_AND); + } + + DeleteObject(clipRgn); + SetMetaRgn(compatDc); +} + diff --git a/dll/shareddc.hpp b/dll/shareddc.hpp index 303ca48..e2ca42e 100644 --- a/dll/shareddc.hpp +++ b/dll/shareddc.hpp @@ -26,7 +26,7 @@ public: // methods private: void copyDcAttributes(HDC, HDC, POINT); - void setClippingRegion(HDC, HDC, POINT&); + void setClippingRegion(HDC, HDC, HWND, bool, const POINT &); HDC PrimaryDC; HDC VirtualHDC; diff --git a/dll/toggle_fs.cpp b/dll/toggle_fs.cpp index 8f89eb8..e7525cc 100644 --- a/dll/toggle_fs.cpp +++ b/dll/toggle_fs.cpp @@ -109,7 +109,7 @@ void dx_FullScreenToggle(HWND hwnd) } (*pUpdateWindow)(hwnd); RestoreDDrawSurfaces(); - RestoreD3DSurfaces(bFullScreen); + //RestoreD3DSurfaces(bFullScreen); bFullScreen = !bFullScreen; // switch toggle } diff --git a/dll/winproc.cpp b/dll/winproc.cpp index 2b8e155..b8f803a 100644 --- a/dll/winproc.cpp +++ b/dll/winproc.cpp @@ -210,7 +210,7 @@ LRESULT CALLBACK extWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lp static int LastTimeShift; static int SaveTimeShift; static BOOL TimeShiftToggle=TRUE; - extern void DDrawScreenShot(); + extern void DDrawScreenShot(int); if(DoOnce){ DoOnce=FALSE; @@ -558,7 +558,7 @@ LRESULT CALLBACK extWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lp } break; case DXVK_PRINTSCREEN: - DDrawScreenShot(); + DDrawScreenShot(dxw.dwDDVersion); break; case DXVK_CORNERIZE: dx_Cornerize(hwnd); diff --git a/host/TabDirectX.cpp b/host/TabDirectX.cpp index 63781ac..f090e32 100644 --- a/host/TabDirectX.cpp +++ b/host/TabDirectX.cpp @@ -33,6 +33,7 @@ void CTabDirectX::DoDataExchange(CDataExchange* pDX) DDX_Check(pDX, IDC_FORCECLIPPER, cTarget->m_ForceClipper); DDX_Check(pDX, IDC_BLITFROMBACKBUFFER, cTarget->m_BlitFromBackBuffer); DDX_Check(pDX, IDC_AUTOREFRESH, cTarget->m_AutoRefresh); + DDX_Check(pDX, IDC_INDEPENDENTREFRESH, cTarget->m_IndependentRefresh); DDX_Check(pDX, IDC_TEXTUREFORMAT, cTarget->m_TextureFormat); DDX_Check(pDX, IDC_SUPPRESSRELEASE, cTarget->m_SuppressRelease); DDX_Check(pDX, IDC_VIDEOTOSYSTEMMEM, cTarget->m_VideoToSystemMem); diff --git a/host/TargetDlg.cpp b/host/TargetDlg.cpp index e04a79b..5298550 100644 --- a/host/TargetDlg.cpp +++ b/host/TargetDlg.cpp @@ -136,6 +136,7 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/) m_ForceClipper = FALSE; m_DisableGammaRamp = FALSE; m_AutoRefresh = FALSE; + m_IndependentRefresh = FALSE; m_TextureFormat = FALSE; m_FixWinFrame = FALSE; m_EnableClipping = FALSE; diff --git a/host/TargetDlg.h b/host/TargetDlg.h index 3fcd66e..c4dc7ed 100644 --- a/host/TargetDlg.h +++ b/host/TargetDlg.h @@ -92,6 +92,7 @@ public: BOOL m_ForceClipper; BOOL m_DisableGammaRamp; BOOL m_AutoRefresh; + BOOL m_IndependentRefresh; BOOL m_TextureFormat; BOOL m_FixWinFrame; BOOL m_EnableClipping; diff --git a/host/dxwnd.ini b/host/dxwnd.ini new file mode 100644 index 0000000..7f729a0 --- /dev/null +++ b/host/dxwnd.ini @@ -0,0 +1,5 @@ +[window] +posx=50 +posy=50 +sizx=320 +sizy=200 diff --git a/host/dxwndhost.aps b/host/dxwndhost.aps index 3ca5037b9215c8f3f7fd6205f2593511b757de48..8fe7e2c1de36a95fa8d9a1522f6a332e1497ed07 100644 GIT binary patch delta 3428 zcma)8YfMx}6rMA?pi(s`NV+^$7EwR}cM*{KYPAbWV^>sEk`fU`1(D^cVnwSwMCIWw zgFQqMG-~P(MCn!6Sbwz9#F{EqYnrq+R$HUQTBE6HYNDlQZY4@f)47|w-<Z4o zaaOCXtLU>xo)o9WL}@d;LOqcl&oMu+PwT1 zTtT=-D|Lo|f^diM6kb=*9T6vr9w_L}i7$%pE9kC^uS+r%bhm_~bgF{xo;XqZrGoC6 z)?OB(vV#`w=k=)&{{Lq(8ASWWQCeR4MXsP;1p-RU+WJj(Dkj`op&Kl_zAq2(DMr zZ4q1QlNFw%?czbbT|w6<7BxIp*vErh%qtxwDjUZtG(9f58&ec?JH^!9;}vwfME&jv z1znx^Ua4QRnBa==AL!)~!7h`ia)l^N_OZC=8mFK`;qO-2v=*_p_eZtj2z?}p zpNB!%%k&aGjnBithYCG|$H1o`2j{|JsT^SNIB1f1VjNV1KPE)Lc~5jC7>zImZP73h zBBY;WP9Bd&!*Xt&ghONCcb;lTV=Tn+^jVk`3p31&rryeuSpi!|yOm8lmq+{Nl&fXN zRBVogTYO$RmQ932&Qq~tBBZ>mNg?H0(ywGCG;-2@%d2Ds`dZ<1V5(gY>1z;UX+_My zPO&pI7x}qug&BU1IemEpgS4&GBO7ftNEkMYn&wekdF6UG*kBL99nY{yupekKo{o6v z01VE6!4qWR9V)cb{&C~q3rQjKC2R$m%AxZqpeTpN%(E~NF3p6)7*Yq2sB=#-Teb+N zCA@NRNKd8r;|}Xwbw4g%cXkrHWQ)7~Qj_(Rzt`(+lXTABk9$k!$`C$;Up&5>;4;*9 zRDh?Wg5UOrL~N+y5pV!cRq-*@u%#L~0RPzotRP)h%tsiz)b2GgiS16=M_E*Wa2H@}-V&gHUhQjg?bWmsrH3J?u zgUMUIXBDB?NF**+bP?+7@ZQI zFUCfRJz3aE2;q1|%6ba$k)*4gIJ}laGx^tPOAINiJS$*iw=@|O%2lg#j(bNtA_O@k!&habmH{@gTM22aD~ z@?`^;l(T;}c%0CecMq6spI2Zvq2b&%j&E0T F(_dr^LvR29 delta 3948 zcma)-drZ_<7RT?oKNv?~S*@TBATr2HkZY$Q1)QZtJpS`%%uya*7L@c2<=YH)NFBGE1|wN}qe7?%85{ zb!}a0W&Pf|^2+L}^15or8++eQ;;U`?^5uFykIWRe_iRdh7+YM{)L2z!lyE%HqV&xb zKXOI5Lf>7r1Qg*8aiRK#B70sOJdq&&RWqu{zauX0`&^N|DRf7XB6~-q)~-`zKNrs0 zF-7)!y|HeI>Xc*kk%q01q;`I5KvXw}>ua0dgkyP-KsbDd(i(MLNetT5Y(9=!#EPyQ`OY9P@ZY$=OAsrE7(vqGRF% zWwui+KAxDOCdR2rG3nhEaf(7tir0@PDzc}+hD^jsouZVL0La}}-R^?VL)+dI4saQ(4Mf{{(?6g?l9iR5Fna%#yI%6DO#wwe* zv)`(?^Yi*d_fQZFi01xBAxpf|zi3eK)9(}UoD@j z|8+P!YT@>+k8asmu=S~obe5j6+Qv9AU~|Rov3!yHenjBv491uq{ckJirSJc^gPZ4I zNerYyEWS|#>u@XvR&d7fK@2=5*E}n1m+J{Dl+0mt3y-iO%#Vcy7!nIX)1Ifj9vgWi zyFM0TX&u=W3ztED2#bRfz}NC%As(|p2oB_d347yVucXZh&mSha3!irOA zKI@ZI$eHh;EcVHGEs}t}M|sE3^t^Y-pA*+wgrf%eUI_nK8W?7KE<} zoLPOX5whdc&G2Pg;eHq?+|LKhkb_f4cp?nC4=**@Xy=#gqRSo~7@5gf06u$^FEtHN zV!>(A(jRSlkM>|55IJX}18-I^_5lBLlrMvOI7OT_EDUJ80ra#Q8?ntZ7UT6by@xTq zl`n;>_#`dXf<=;+2U6xo$5F>m&`p>Y6Af6p1T29$q-_kZxAMr%X8Ib%S$*l~m;M>4 zd?Lvg_n!AmG3Fq~3X=h!SqYZ-N9HotM5FX-$ufpC6TWSh%J;oY%7@WSiO%IkJP|bMZQX~%yCjmay4K@ z6#>%t2;Btax7PTYde3{N-aWMWE&F`&HGcb%XLAdusLZmadWp@W$DoXxXo#d&58a(z zO@J>o!Un8q;{kke3pTXzXl>Uiz`vY?hyZFdgm1Nx;K_4<>&}4%CncDC9>0;`gUf)q zm#4iN8wGs)8d>w&c|h>kglw(JsiUWjhikX)0xrEf9o8o914iEW!Q&dAhRp^XJQn72 z%=KoE#&i62JogsY{*lcwID6U(zPi~5hZrzi!5tlRn%`nQEx}i>NhP85bl|}bQsN>d zAAd@{Cpt)I-+f=$iGQbXaE~EI@?C~QI}yh5&I0NtdCf&iK8~BVf}Pp2w}jo^>~=$p zbaZ>OTZ=e;xYL(?sGQ>mc4-}>T5po&k=CTNY6mFGG0dX$iT53ftiPCqAJY`z~BL^omr=R0XmKVUj7)+mRMUg$^v zo{HYWeS~R+wH#k@aLb${!>zjS$F8Gx@P5;t*4*23j Qe(_MMR&>M{zvvhLA2qloQUCw| diff --git a/host/dxwndhost.rc b/host/dxwndhost.rc index 08655db1dcf251359e8fc84f999e61ec0be50c8c..85a699b8ed5e131748d1dd1bffc71b5f8b9df1b9 100644 GIT binary patch delta 134 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 WoMw;|bXeFb!4Ge->z6OH^nU~7m0flags7 = 0; t->flags8 = 0; t->tflags = 0; + t->dflags = 0; if(dlg->m_UnNotify) t->flags |= UNNOTIFY; if(dlg->m_Windowize) t->flags2 |= WINDOWIZE; if(dlg->m_HookDLLs) t->flags3 |= HOOKDLLS; @@ -289,7 +290,6 @@ void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg) if(dlg->m_OutDWTrace) t->tflags |= OUTDXWINTRACE; if(dlg->m_OutDDRAWTrace) t->tflags |= OUTDDRAWTRACE; if(dlg->m_OutD3DTrace) t->tflags |= OUTD3DTRACE; - //if(dlg->m_DXProxed) t->tflags |= DXPROXED; if(dlg->m_AssertDialog) t->tflags |= ASSERTDIALOG; if(dlg->m_ImportTable) t->tflags |= OUTIMPORTTABLE; if(dlg->m_RegistryOp) t->tflags |= OUTREGISTRY; @@ -356,6 +356,7 @@ void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg) if(dlg->m_ForceClipper) t->flags3 |= FORCECLIPPER; if(dlg->m_DisableGammaRamp) t->flags2 |= DISABLEGAMMARAMP; if(dlg->m_AutoRefresh) t->flags |= AUTOREFRESH; + if(dlg->m_IndependentRefresh) t->flags2 |= INDEPENDENTREFRESH; if(dlg->m_TextureFormat) t->flags5 |= TEXTUREFORMAT; if(dlg->m_FixWinFrame) t->flags |= FIXWINFRAME; if(dlg->m_EnableClipping) t->flags |= ENABLECLIPPING; @@ -544,12 +545,10 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg) dlg->m_OutDWTrace = t->tflags & OUTDXWINTRACE ? 1 : 0; dlg->m_OutD3DTrace = t->tflags & OUTD3DTRACE ? 1 : 0; dlg->m_OutDDRAWTrace = t->tflags & OUTDDRAWTRACE ? 1 : 0; - //dlg->m_DXProxed = t->tflags & DXPROXED ? 1 : 0; dlg->m_AssertDialog = t->tflags & ASSERTDIALOG ? 1 : 0; dlg->m_ImportTable = t->tflags & OUTIMPORTTABLE ? 1 : 0; dlg->m_RegistryOp = t->tflags & OUTREGISTRY ? 1 : 0; dlg->m_TraceHooks = t->tflags & TRACEHOOKS ? 1 : 0; - //dlg->m_HandleDC = t->flags & HANDLEDC ? 1 : 0; dlg->m_HandleExceptions = t->flags & HANDLEEXCEPTIONS ? 1 : 0; dlg->m_SuppressIME = t->flags2 & SUPPRESSIME ? 1 : 0; dlg->m_SuppressD3DExt = t->flags3 & SUPPRESSD3DEXT ? 1 : 0; @@ -612,6 +611,7 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg) dlg->m_ForceClipper = t->flags3 & FORCECLIPPER ? 1 : 0; dlg->m_DisableGammaRamp = t->flags2 & DISABLEGAMMARAMP ? 1 : 0; dlg->m_AutoRefresh = t->flags & AUTOREFRESH ? 1 : 0; + dlg->m_IndependentRefresh = t->flags2 & INDEPENDENTREFRESH ? 1 : 0; dlg->m_TextureFormat = t->flags5 & TEXTUREFORMAT ? 1 : 0; dlg->m_FixWinFrame = t->flags & FIXWINFRAME ? 1 : 0; dlg->m_EnableClipping = t->flags & ENABLECLIPPING ? 1 : 0; @@ -767,6 +767,7 @@ static void SaveConfigItem(TARGETMAP *TargetMap, PRIVATEMAP *PrivateMap, int i, WritePrivateProfileString("target", key, val, InitPath); sprintf_s(key, sizeof(key), "tflag%i", i); sprintf_s(val, sizeof(val), "%i", TargetMap->tflags); + WritePrivateProfileString("target", key, val, InitPath); sprintf_s(key, sizeof(key), "dflag%i", i); sprintf_s(val, sizeof(val), "%i", TargetMap->dflags); WritePrivateProfileString("target", key, val, InitPath); diff --git a/host/resource b/host/resource index b224b14daa831abf7816e8d11b17d3682a8df878..5fdf578d4cb221b607996588a3ae7329b6b3ae79 100644 GIT binary patch delta 52 zcmcb!gK5W3rVVDYqMi(X3@!|=3;{q4VfitHO!kyip8QXmZL$!%)Z_+Umd$3eYV`nl Ckqxf^ delta 14 Wcmdn7lj+V5rVVDYn