From 0a986911a524d5d45be9d6267358721d8c35d162 Mon Sep 17 00:00:00 2001 From: gho tik Date: Tue, 9 Jul 2013 12:38:16 -0400 Subject: [PATCH] v2_02_33_src Former-commit-id: 9ae86f43d12e3c2315b64b02ce20088c00ca7d07 --- Include/dxwnd.h | 4 + build/dxwnd.dll | 4 +- build/dxwnd.exe | 4 +- build/readme-relnotes.txt | 25 +++- dll/ddraw.cpp | 153 +++++++++++++++++++++--- dll/dxemublt.cpp | 8 +- dll/dxhelper.cpp | 246 ++++++++++++++++++++++++++++++++++++++ dll/dxhelper.h | 7 ++ dll/dxhook.cpp | 31 +++-- dll/dxwcore.cpp | 23 ++-- dll/dxwcore.hpp | 1 + dll/dxwnd.aps | Bin 37664 -> 37664 bytes dll/dxwnd.cpp | 2 +- dll/dxwnd.vs2008.suo | Bin 186368 -> 207872 bytes dll/gdi32.cpp | 55 +++++++++ dll/hd3d.cpp | 121 +++++++++++++------ dll/ole32.cpp | 10 +- dll/syslibs.h | 25 +++- dll/user32.cpp | 90 ++++++++++++++ host/Resource.h | 4 + host/TabColor.cpp | 2 + host/TabCompat.cpp | 1 + host/TabProgram.cpp | 1 + host/TargetDlg.cpp | 6 +- host/TargetDlg.h | 4 + host/dxwndhost.aps | Bin 140852 -> 163380 bytes host/dxwndhost.rc | 22 ++-- host/dxwndhost.vs2008.suo | Bin 301568 -> 303104 bytes host/dxwndhostView.cpp | 10 +- 29 files changed, 768 insertions(+), 91 deletions(-) diff --git a/Include/dxwnd.h b/Include/dxwnd.h index c5c9c31..08d7196 100644 --- a/Include/dxwnd.h +++ b/Include/dxwnd.h @@ -95,6 +95,10 @@ #define DISABLEHAL 0x00002000 // Disable HAL support (IID_IDirect3DHALDevice) #define LOCKSYSCOLORS 0x00004000 // Lock Sys Colors changes by SetSysColors() call #define EMULATEDC 0x00008000 // ........ +#define FULLSCREENONLY 0x00010000 // assume that the program is always in fullscreen mode +#define FONTBYPASS 0x00020000 // bypass font unsupported API +#define YUV2RGB 0x00040000 // Simulate YUV to RGB color conversion +#define RGB2YUV 0x00080000 // Simulate RGB to YUV color conversion // logging Tflags DWORD: #define OUTTRACE 0x00000001 // enables tracing to dxwnd.log in general diff --git a/build/dxwnd.dll b/build/dxwnd.dll index ecaa169..bbeb1ab 100644 --- a/build/dxwnd.dll +++ b/build/dxwnd.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:47630d9ec2f6d6c9eb9b588acadace0fa49394596c03a977bb3d062a07a60074 -size 385024 +oid sha256:12040e25e1b8e234164832361e51d6470456a3050a15ae43f29a78b3636d0f70 +size 404992 diff --git a/build/dxwnd.exe b/build/dxwnd.exe index 875807d..a5f5acc 100644 --- a/build/dxwnd.exe +++ b/build/dxwnd.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f985fae11aaa4f10de4c9135577527784e1b153c6403a2f5b01666f0996b8a29 -size 524288 +oid sha256:1fbd3ed5ac2b5db41671b9b4f80688c59abc1d894b408912f5c19c06c4a18063 +size 524800 diff --git a/build/readme-relnotes.txt b/build/readme-relnotes.txt index 55f7628..17ea5ca 100644 --- a/build/readme-relnotes.txt +++ b/build/readme-relnotes.txt @@ -222,4 +222,27 @@ fixed handling of DDSCAPS_3DDEVICE surfaces in emulated mode: "Nightmare Ned" is fixed banner handling in case of device context remmapped coordinates fixed memory leakage in SetDIBitsToDevice hooker GUI -added radiobutton group to set the preferred GDI emulation mode \ No newline at end of file +added radiobutton group to set the preferred GDI emulation mode + +v2.02.33 +CORE: +experimental attempt to emulate the ZBUFFER attach to the BACKBUFFER surface +improved log to detail all ddraw object properties +experimental emulation of RGB to YUV conversion to investigate "duckman" problems on Win7 +improved grayscale algorythm +fixed missing DDPF_ALPHAPIXELS property causing several blit incompabilities +fixed surface handling for "Submarine Titans" +fixed mousewheel handling +fixed hooking bug causing several problems (i.e. Age of Empires III) +Added FULLSCREENONLY option: fixes "Submarine Titans" intro movies +Added "Bypass font unsupported api" compatibility flag: makes "Stratego" working +fixed several d3d8/9 hooking problems +GUI +added controls for new core features +defaulted ddraw emulation mode to surface emulation + + + + + + diff --git a/dll/ddraw.cpp b/dll/ddraw.cpp index 8902eb1..ab8e390 100644 --- a/dll/ddraw.cpp +++ b/dll/ddraw.cpp @@ -217,6 +217,7 @@ SetEntries_Type pSetEntries; LPDIRECTDRAWSURFACE lpDDSEmu_Prim=NULL, lpDDSEmu_Back=NULL; LPDIRECTDRAWSURFACE lpDDSBack=NULL; +LPDIRECTDRAWSURFACE lpDDZBuffer=NULL; // v2.1.87: lpPrimaryDD is the DIRECTDRAW object to which the primary surface and all // the service objects (emulated backbuffer, emulater primary, ....) are attached. LPDIRECTDRAW lpPrimaryDD=NULL; @@ -262,6 +263,20 @@ FARPROC Remap_ddraw_ProcAddress(LPCSTR proc, HMODULE hModule) // auxiliary (static) functions /* ------------------------------------------------------------------------------ */ +static char *sFourCC(DWORD fcc) +{ + static char sRet[5]; + char c; + int i; + char *t=&sRet[0]; + for(i=0; i<4; i++){ + c = fcc & (0xFF); + *t++ = isprint(c) ? c : '.'; + c = c >> 8; + } + *t = 0; + return sRet; +} static void LogSurfaceAttributes(LPDDSURFACEDESC lpddsd, char *label, int line) { OutTraceD("SurfaceDesc: %s Flags=%x(%s)", @@ -270,17 +285,29 @@ static void LogSurfaceAttributes(LPDDSURFACEDESC lpddsd, char *label, int line) if (lpddsd->dwFlags & DDSD_BACKBUFFERCOUNT) OutTraceD(" BackBufferCount=%d", lpddsd->dwBackBufferCount); if (lpddsd->dwFlags & DDSD_WIDTH) OutTraceD(" Width=%d", lpddsd->dwWidth); if (lpddsd->dwFlags & DDSD_HEIGHT) OutTraceD(" Height=%d", lpddsd->dwHeight); - if (lpddsd->dwFlags & DDSD_CAPS) OutTraceD(" Caps=%x(%s)", lpddsd->ddsCaps.dwCaps, ExplainDDSCaps(lpddsd->ddsCaps.dwCaps)); + if (lpddsd->dwFlags & DDSD_CAPS) { + OutTraceD(" Caps=%x(%s)", lpddsd->ddsCaps.dwCaps, ExplainDDSCaps(lpddsd->ddsCaps.dwCaps)); + if(lpddsd->dwSize==sizeof(DDSURFACEDESC2)){ + LPDDSURFACEDESC2 lpddsd2=(LPDDSURFACEDESC2)lpddsd; + OutTraceD(" Caps2=%x(%s)", lpddsd2->ddsCaps.dwCaps2, ExplainDDSCaps2(lpddsd2->ddsCaps.dwCaps2)); + OutTraceD(" Caps3=%x(%s)", lpddsd2->ddsCaps.dwCaps3, ExplainDDSCaps3(lpddsd2->ddsCaps.dwCaps3)); + } + } if (lpddsd->dwFlags & DDSD_CKDESTBLT ) OutTraceD(" CKDestBlt=(%x,%x)", lpddsd->ddckCKDestBlt.dwColorSpaceLowValue, lpddsd->ddckCKDestBlt.dwColorSpaceHighValue); if (lpddsd->dwFlags & DDSD_CKDESTOVERLAY ) OutTraceD(" CKDestOverlay=(%x,%x)", lpddsd->ddckCKDestOverlay.dwColorSpaceLowValue, lpddsd->ddckCKDestOverlay.dwColorSpaceHighValue); if (lpddsd->dwFlags & DDSD_CKSRCBLT ) OutTraceD(" CKSrcBlt=(%x,%x)", lpddsd->ddckCKSrcBlt.dwColorSpaceLowValue, lpddsd->ddckCKSrcBlt.dwColorSpaceHighValue); if (lpddsd->dwFlags & DDSD_CKSRCOVERLAY ) OutTraceD(" CKSrcOverlay=(%x,%x)", lpddsd->ddckCKSrcOverlay.dwColorSpaceLowValue, lpddsd->ddckCKSrcOverlay.dwColorSpaceHighValue); - if (lpddsd->dwFlags & DDSD_PIXELFORMAT ) OutTraceD(" PixelFormat BPP=%d RGBA=(%x,%x,%x,%x)", - lpddsd->ddpfPixelFormat.dwRGBBitCount, - lpddsd->ddpfPixelFormat.dwRBitMask, - lpddsd->ddpfPixelFormat.dwGBitMask, - lpddsd->ddpfPixelFormat.dwBBitMask, - lpddsd->ddpfPixelFormat.dwRGBAlphaBitMask); + if (lpddsd->dwFlags & DDSD_PIXELFORMAT ){ + DWORD flags=lpddsd->ddpfPixelFormat.dwFlags; + OutTraceD(" PixelFormat flags=%x(%s)", flags, ExplainPixelFormatFlags(flags)); + if (flags & DDPF_RGB) OutTraceD(" BPP=%d RGBA=(%x,%x,%x,%x)", + lpddsd->ddpfPixelFormat.dwRGBBitCount, + lpddsd->ddpfPixelFormat.dwRBitMask, + lpddsd->ddpfPixelFormat.dwGBitMask, + lpddsd->ddpfPixelFormat.dwBBitMask, + lpddsd->ddpfPixelFormat.dwRGBAlphaBitMask); + if (flags & DDPF_FOURCC) OutTraceD(" FourCC=%x(%s)", lpddsd->ddpfPixelFormat.dwFourCC, sFourCC(lpddsd->ddpfPixelFormat.dwFourCC)); + } if (lpddsd->dwFlags & DDSD_LPSURFACE) OutTraceD(" Surface=%x", lpddsd->lpSurface); OutTraceD("\n"); } @@ -416,10 +443,55 @@ void mySetPalette(int dwstart, int dwcount, LPPALETTEENTRY lpentries) OutTraceD("\n"); } + if (dxw.dwFlags3 & RGB2YUV){ + int idx; + for(idx=0; idx255) Y=255; + if (U<0) U=0; if(U>255) U=255; + if (V<0) V=0; if(V>255) V=255; + lpentries[dwstart+idx].peRed = (BYTE)Y; + lpentries[dwstart+idx].peGreen = (BYTE)U; + lpentries[dwstart+idx].peBlue = (BYTE)V; + } + } + + if (dxw.dwFlags3 & YUV2RGB){ + int idx; + for(idx=0; idx255) Y=255; + if (U<0) U=0; if(U>255) U=255; + if (V<0) V=0; if(V>255) V=255; + lpentries[dwstart+idx].peRed = (BYTE)Y; + lpentries[dwstart+idx].peGreen = (BYTE)U; + lpentries[dwstart+idx].peBlue = (BYTE)V; + } + } + + // actually, it should be like this: R/G/B = (red * 0.30) + (green * 0.59) + (blue * 0.11) + // (http://www.codeproject.com/Articles/66253/Converting-Colors-to-Gray-Shades) + if (dxw.dwFlags3 & BLACKWHITE){ for(i = 0; i < dwcount; i ++){ DWORD grayscale; - grayscale = ((DWORD)lpentries[i].peRed + (DWORD)lpentries[i].peGreen + (DWORD)lpentries[i].peBlue) / 3; + //grayscale = ((DWORD)lpentries[i].peRed + (DWORD)lpentries[i].peGreen + (DWORD)lpentries[i].peBlue) / 3; + grayscale = (((DWORD)lpentries[i].peRed * 30) + ((DWORD)lpentries[i].peGreen * 59) + ((DWORD)lpentries[i].peBlue) * 11) / 100; lpentries[i].peRed = lpentries[i].peGreen = lpentries[i].peBlue = (BYTE)grayscale; } } @@ -543,6 +615,7 @@ void FixPixelFormat(int ColorDepth, DDPIXELFORMAT *pf) pf->dwRGBAlphaBitMask = 0x0000; break; case 16: + pf->dwFlags |= DDPF_ALPHAPIXELS; // v2.02.33 pf->dwRGBBitCount = 16; if (dxw.dwFlags1 & USERGB565){ pf->dwRBitMask = 0xf800; @@ -564,6 +637,7 @@ void FixPixelFormat(int ColorDepth, DDPIXELFORMAT *pf) pf->dwRGBAlphaBitMask = 0x00000000; break; case 32: + pf->dwFlags |= DDPF_ALPHAPIXELS; // v2.02.33 pf->dwRGBBitCount = 32; pf->dwRBitMask = 0x00FF0000; pf->dwGBitMask = 0x0000FF00; @@ -1192,6 +1266,25 @@ static void HookDDSurfaceGeneric(LPDIRECTDRAWSURFACE *lplpdds, int dxversion) // IDirectDrawSurface::ReleaseDC SetHook((void *)(**(DWORD **)lplpdds + 104), extReleaseDC, (void **)&pReleaseDC, "ReleaseDC(S)"); + if (dxw.dwFlags1 & (EMULATESURFACE|EMULATEBUFFER)){ + // IDirectDrawSurface::Lock + SetHook((void *)(**(DWORD **)lplpdds + 100), extLock, (void **)&pLock, "Lock(S)"); + // IDirectDrawSurface::Unlock + if (dxversion < 4) + SetHook((void *)(**(DWORD **)lplpdds + 128), extUnlock1, (void **)&pUnlock1, "Unlock(S1)"); + else + SetHook((void *)(**(DWORD **)lplpdds + 128), extUnlock4, (void **)&pUnlock4, "Unlock(S4)"); + } + else { + // IDirectDrawSurface::Lock + SetHook((void *)(**(DWORD **)lplpdds + 100), extLockDir, (void **)&pLock, "Lock(S)"); + // IDirectDrawSurface::Unlock + if (dxversion < 4) + SetHook((void *)(**(DWORD **)lplpdds + 128), extUnlockDir1, (void **)&pUnlock1, "Unlock(S1)"); + else + SetHook((void *)(**(DWORD **)lplpdds + 128), extUnlockDir4, (void **)&pUnlock4, "Unlock(S4)"); + } + if (!(dxw.dwTFlags & OUTPROXYTRACE)) return; // just proxed .... @@ -1285,10 +1378,18 @@ HRESULT WINAPI extGetCapsD(LPDIRECTDRAW lpdd, LPDDCAPS c1, LPDDCAPS c2) if(res) OutTraceE("GetCaps(D): ERROR res=%x(%s)\n", res, ExplainDDError(res)); else { - OutTraceD("GetCaps(D): "); - if (c1) OutTraceD("hwcaps=%x(%s) ", c1->ddsCaps.dwCaps, ExplainDDSCaps(c1->ddsCaps.dwCaps)); - if (c2) OutTraceD("swcaps=%x(%s) ", c2->ddsCaps.dwCaps, ExplainDDSCaps(c2->ddsCaps.dwCaps)); - OutTraceD("\n"); + if (c1) OutTraceD("GetCaps(D-HW): caps=%x(%s) caps2=%x(%s)fxcaps=%x(%s) fxalphacaps=%x(%s) keycaps=%x(%s)\n", + c1->dwCaps, ExplainDDDCaps(c1->dwCaps), + c1->dwCaps2, ExplainDDDCaps2(c1->dwCaps2), + c1->dwFXCaps, ExplainDDFXCaps(c1->dwFXCaps), + c1->dwFXAlphaCaps, ExplainDDFXALPHACaps(c1->dwFXAlphaCaps), + c1->dwCKeyCaps, ExplainDDCKeyCaps(c1->dwCKeyCaps)); + if (c2) OutTraceD("GetCaps(D-SW): caps=%x(%s) caps2=%x(%s)fxcaps=%x(%s) fxalphacaps=%x(%s) keycaps=%x(%s)\n", + c2->dwCaps, ExplainDDDCaps(c2->dwCaps), + c2->dwCaps2, ExplainDDDCaps2(c2->dwCaps2), + c2->dwFXCaps, ExplainDDFXCaps(c2->dwFXCaps), + c2->dwFXAlphaCaps, ExplainDDFXALPHACaps(c2->dwFXAlphaCaps), + c2->dwCKeyCaps, ExplainDDCKeyCaps(c2->dwCKeyCaps)); } return res; @@ -1342,6 +1443,15 @@ HRESULT WINAPI extDirectDrawCreate(GUID FAR *lpguid, LPDIRECTDRAW FAR *lplpdd, I HookDDSession(lplpdd, dxw.dwDDVersion); + if(IsDebug && (dxw.dwTFlags & OUTPROXYTRACE)){ + DDCAPS DriverCaps, EmulCaps; + memset(&DriverCaps, 0, sizeof(DriverCaps)); + DriverCaps.dwSize=sizeof(DriverCaps); + memset(&EmulCaps, 0, sizeof(EmulCaps)); + EmulCaps.dwSize=sizeof(EmulCaps); + (LPDIRECTDRAW)(*lplpdd)->GetCaps(&DriverCaps, &EmulCaps); + //OutTrace("DirectDrawCreate: drivercaps=%x(%s) emulcaps=%x(%s)\n", DriverCaps.ddsCaps, "???", EmulCaps.ddsCaps, "???"); + } return 0; } @@ -1780,9 +1890,16 @@ static char *FixSurfaceCaps(LPDDSURFACEDESC2 lpddsd) break; case DDSD_CAPS|DDSD_WIDTH|DDSD_HEIGHT|DDSD_PIXELFORMAT: switch (lpddsd->ddsCaps.dwCaps){ + case DDSCAPS_OFFSCREENPLAIN: + // Submarine titans (8BPP) + OutTrace("FixSurfaceCaps: SystemMemory OffScreen PixelFormat (1)\n"); + //lpddsd->ddsCaps.dwCaps &= ~DDSCAPS_VIDEOMEMORY; + lpddsd->ddsCaps.dwCaps = DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN; + return SetPixFmt(lpddsd); + break; case DDSCAPS_OFFSCREENPLAIN|DDSCAPS_SYSTEMMEMORY: // Duckman - OutTrace("FixSurfaceCaps: SystemMemory OffScreen PixelFormat\n"); + OutTrace("FixSurfaceCaps: SystemMemory OffScreen PixelFormat (2)\n"); //lpddsd->ddsCaps.dwCaps &= ~DDSCAPS_VIDEOMEMORY; //lpddsd->ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN; return SetPixFmt(lpddsd); @@ -2406,6 +2523,13 @@ HRESULT WINAPI extGetAttachedSurface(int dxversion, GetAttachedSurface_Type pGet return 0; } + // this is yet to be proven utility..... + if ((lpdds == lpDDSBack) && (lpddsc->dwCaps & DDSCAPS_ZBUFFER) && lpDDZBuffer){ + *lplpddas = lpDDZBuffer; + OutTraceD("GetAttachedSurface(%d): emulating ZBUFFER attach on BACKBUFFER lpddsadd=%x\n", dxversion, *lplpddas); + return 0; + } + if(!IsPrim){ res=(*pGetAttachedSurface)(lpdds, lpddsc, lplpddas); if(res) @@ -3779,7 +3903,8 @@ HRESULT WINAPI extGetCapsS(int dxInterface, GetCapsS_Type pGetCapsS, LPDIRECTDRA // v2.1.83: add FLIP capability (Funtraks a.k.a. Ignition) // v2.2.26: add VIDEOMEMORY|LOCALVIDMEM capability (Alien Cabal 95 - partial fix) if(dxw.dwFlags1 & EMULATESURFACE) { - if ((lpdds == lpDDSBack) || (caps->dwCaps & DDSCAPS_ZBUFFER)) { + //if ((lpdds == lpDDSBack) || (caps->dwCaps & DDSCAPS_ZBUFFER)) { + if (lpdds == lpDDSBack) { //v2.02.32: fix - a ZBUFFER can be in SYSTEMMEMORY !! caps->dwCaps |= DDSCAPS_FLIP|DDSCAPS_VIDEOMEMORY|DDSCAPS_LOCALVIDMEM; caps->dwCaps &= ~DDSCAPS_SYSTEMMEMORY; } diff --git a/dll/dxemublt.cpp b/dll/dxemublt.cpp index 52e086b..2107a5f 100644 --- a/dll/dxemublt.cpp +++ b/dll/dxemublt.cpp @@ -194,16 +194,20 @@ static HRESULT WINAPI EmuBlt_16_to_32(LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdes unsigned int pi; Palette16BPP = (DWORD *)malloc(0x10000 * sizeof(DWORD)); if (dxw.dwFlags3 & BLACKWHITE){ + // actually, it should be like this: R/G/B = (red * 0.30) + (green * 0.59) + (blue * 0.11) + // (http://www.codeproject.com/Articles/66253/Converting-Colors-to-Gray-Shades) DWORD grey; if (dxw.dwFlags1 & USERGB565){ for (pi=0; pi<0x10000; pi++) { - grey = ((((pi & 0x1F)<<3) + ((pi & 0x7E0)>>3) + ((pi & 0xF800)>>8)) / 3) & 0xFF; + //grey = ((((pi & 0x1F)<<3) + ((pi & 0x7E0)>>3) + ((pi & 0xF800)>>8)) / 3) & 0xFF; + grey = (((((pi & 0x1F)<<3) * 30) + (((pi & 0x7E0)>>3) * 59) + (((pi & 0xF800)>>8) * 11)) / 100) & 0xFF; Palette16BPP[pi] = (grey) + (grey<<8) + (grey<<16); } } else { for (pi=0; pi<0x10000; pi++) { - grey = ((((pi & 0x1F)<<3) + ((pi & 0x3E0)>>2) + ((pi & 0x7C00)>>7)) / 3) & 0xFF; + //grey = ((((pi & 0x1F)<<3) + ((pi & 0x3E0)>>2) + ((pi & 0x7C00)>>7)) / 3) & 0xFF; + grey = (((((pi & 0x1F)<<3) * 30) + (((pi & 0x3E0)>>2) * 59) + (((pi & 0x7C00)>>7) * 11)) / 100) & 0xFF; Palette16BPP[pi] = grey + (grey<<8) + (grey<<16); } } diff --git a/dll/dxhelper.cpp b/dll/dxhelper.cpp index f9adc59..e5ebe2d 100644 --- a/dll/dxhelper.cpp +++ b/dll/dxhelper.cpp @@ -1,5 +1,6 @@ #define _CRT_SECURE_NO_DEPRECATE 1 #include +#include #include #include "dxwnd.h" @@ -84,6 +85,248 @@ char *ExplainDDSCaps(DWORD c) return(eb); } +char *ExplainDDSCaps2(DWORD c) +{ + static char eb[256]; + unsigned int l; + strcpy(eb,"DDSCAPS2_"); + if (c & DDSCAPS2_RESERVED4) strcat(eb, "RESERVED4+"); + if (c & DDSCAPS2_HINTDYNAMIC) strcat(eb, "HINTDYNAMIC+"); + if (c & DDSCAPS2_HINTSTATIC) strcat(eb, "HINTSTATIC+"); + if (c & DDSCAPS2_TEXTUREMANAGE) strcat(eb, "TEXTUREMANAGE+"); + if (c & DDSCAPS2_RESERVED1) strcat(eb, "RESERVED1+"); + if (c & DDSCAPS2_RESERVED2) strcat(eb, "RESERVED2+"); + if (c & DDSCAPS2_OPAQUE) strcat(eb, "OPAQUE+"); + if (c & DDSCAPS2_HINTANTIALIASING) strcat(eb, "HINTANTIALIASING+"); + if (c & DDSCAPS2_CUBEMAP) strcat(eb, "CUBEMAP+"); + if (c & DDSCAPS2_CUBEMAP_POSITIVEX) strcat(eb, "CUBEMAP_POSITIVEX+"); + if (c & DDSCAPS2_CUBEMAP_NEGATIVEX) strcat(eb, "CUBEMAP_NEGATIVEX+"); + if (c & DDSCAPS2_CUBEMAP_POSITIVEY) strcat(eb, "CUBEMAP_POSITIVEY+"); + if (c & DDSCAPS2_CUBEMAP_NEGATIVEY) strcat(eb, "CUBEMAP_NEGATIVEY+"); + if (c & DDSCAPS2_CUBEMAP_POSITIVEZ) strcat(eb, "CUBEMAP_POSITIVEZ+"); + if (c & DDSCAPS2_CUBEMAP_NEGATIVEZ) strcat(eb, "CUBEMAP_NEGATIVEZ+"); + if (c & DDSCAPS2_MIPMAPSUBLEVEL) strcat(eb, "MIPMAPSUBLEVEL+"); + if (c & DDSCAPS2_D3DTEXTUREMANAGE) strcat(eb, "D3DTEXTUREMANAGE+"); + if (c & DDSCAPS2_DONOTPERSIST) strcat(eb, "DONOTPERSIST+"); + if (c & DDSCAPS2_STEREOSURFACELEFT) strcat(eb, "STEREOSURFACELEFT+"); + if (c & DDSCAPS2_VOLUME) strcat(eb, "VOLUME+"); + if (c & DDSCAPS2_NOTUSERLOCKABLE) strcat(eb, "NOTUSERLOCKABLE+"); + if (c & DDSCAPS2_POINTS) strcat(eb, "POINTS+"); + if (c & DDSCAPS2_RTPATCHES) strcat(eb, "RTPATCHES+"); + if (c & DDSCAPS2_NPATCHES) strcat(eb, "NPATCHES+"); + if (c & DDSCAPS2_RESERVED3) strcat(eb, "RESERVED3+"); + if (c & DDSCAPS2_DISCARDBACKBUFFER) strcat(eb, "DISCARDBACKBUFFER+"); + if (c & DDSCAPS2_ENABLEALPHACHANNEL) strcat(eb, "ENABLEALPHACHANNEL+"); + if (c & DDSCAPS2_EXTENDEDFORMATPRIMARY) strcat(eb, "EXTENDEDFORMATPRIMARY+"); + if (c & DDSCAPS2_ADDITIONALPRIMARY) strcat(eb, "ADDITIONALPRIMARY+"); + l=strlen(eb); + if (l>strlen("DDCAPS2_")) eb[l-1]=0; // delete last '+' if any + else eb[0]=0; + return(eb); +} + +char *ExplainDDSCaps3(DWORD c) +{ + static char eb[256]; + unsigned int l; + strcpy(eb,"DDSCAPS3_"); + if (c & DDSCAPS3_MULTISAMPLE_MASK) strcat(eb, "DDSCAPS3_MULTISAMPLE_MASK+"); + if (c & DDSCAPS3_RESERVED1) strcat(eb, "DDSCAPS3_RESERVED1+"); + if (c & DDSCAPS3_RESERVED2) strcat(eb, "DDSCAPS3_RESERVED2+"); + if (c & DDSCAPS3_LIGHTWEIGHTMIPMAP) strcat(eb, "DDSCAPS3_LIGHTWEIGHTMIPMAP+"); + if (c & DDSCAPS3_AUTOGENMIPMAP) strcat(eb, "DDSCAPS3_AUTOGENMIPMAP+"); + if (c & DDSCAPS3_DMAP) strcat(eb, "DDSCAPS3_DMAP+"); + if (c & DDSCAPS3_MULTISAMPLE_QUALITY_MASK) { + DWORD dwQuality; + char sQuality[20]; + dwQuality = (c & DDSCAPS3_MULTISAMPLE_QUALITY_MASK) >> DDSCAPS3_MULTISAMPLE_QUALITY_SHIFT; + sprintf(sQuality, "QUALITY(%d)+", dwQuality); + strcat(eb, sQuality); + } + l=strlen(eb); + if (l>strlen("DDCAPS3_")) eb[l-1]=0; // delete last '+' if any + else eb[0]=0; + return(eb); +} + +char *ExplainDDDCaps(DWORD c) +{ + static char eb[512]; + unsigned int l; + strcpy(eb,"DDCAPS_"); + if (c & DDCAPS_3D) strcat(eb, "3D+"); + if (c & DDCAPS_ALIGNBOUNDARYDEST) strcat(eb, "ALIGNBOUNDARYDEST+"); + if (c & DDCAPS_ALIGNSIZEDEST) strcat(eb, "ALIGNSIZEDEST+"); + if (c & DDCAPS_ALIGNBOUNDARYSRC) strcat(eb, "ALIGNBOUNDARYSRC+"); + if (c & DDCAPS_ALIGNSIZESRC) strcat(eb, "ALIGNSIZESRC+"); + if (c & DDCAPS_ALIGNSTRIDE) strcat(eb, "ALIGNSTRIDE+"); + if (c & DDCAPS_BLT) strcat(eb, "BLT+"); + if (c & DDCAPS_BLTQUEUE) strcat(eb, "BLTQUEUE+"); + if (c & DDCAPS_BLTFOURCC) strcat(eb, "BLTFOURCC+"); + if (c & DDCAPS_BLTSTRETCH) strcat(eb, "BLTSTRETCH+"); + if (c & DDCAPS_GDI) strcat(eb, "GDI+"); + if (c & DDCAPS_OVERLAY) strcat(eb, "OVERLAY+"); + if (c & DDCAPS_OVERLAYCANTCLIP) strcat(eb, "OVERLAYCANTCLIP+"); + if (c & DDCAPS_OVERLAYFOURCC) strcat(eb, "OVERLAYFOURCC+"); + if (c & DDCAPS_OVERLAYSTRETCH) strcat(eb, "OVERLAYSTRETCH+"); + if (c & DDCAPS_PALETTE) strcat(eb, "PALETTE+"); + if (c & DDCAPS_PALETTEVSYNC) strcat(eb, "PALETTEVSYNC+"); + if (c & DDCAPS_READSCANLINE) strcat(eb, "READSCANLINE+"); + if (c & DDCAPS_RESERVED1) strcat(eb, "RESERVED1+"); + if (c & DDCAPS_VBI) strcat(eb, "VBI+"); + if (c & DDCAPS_ZBLTS) strcat(eb, "ZBLTS+"); + if (c & DDCAPS_ZOVERLAYS) strcat(eb, "ZOVERLAYS+"); + if (c & DDCAPS_COLORKEY) strcat(eb, "COLORKEY+"); + if (c & DDCAPS_ALPHA) strcat(eb, "ALPHA+"); + if (c & DDCAPS_COLORKEYHWASSIST) strcat(eb, "COLORKEYHWASSIST+"); + if (c & DDCAPS_NOHARDWARE) strcat(eb, "NOHARDWARE+"); + if (c & DDCAPS_BLTCOLORFILL) strcat(eb, "BLTCOLORFILL+"); + if (c & DDCAPS_BANKSWITCHED) strcat(eb, "BANKSWITCHED+"); + if (c & DDCAPS_BLTDEPTHFILL) strcat(eb, "BLTDEPTHFILL+"); + if (c & DDCAPS_CANCLIP) strcat(eb, "CANCLIP+"); + if (c & DDCAPS_CANCLIPSTRETCHED) strcat(eb, "CANCLIPSTRETCHED+"); + if (c & DDCAPS_CANBLTSYSMEM) strcat(eb, "CANBLTSYSMEM+"); + l=strlen(eb); + if (l>strlen("DDCAPS_")) eb[l-1]=0; // delete last '+' if any + else eb[0]=0; + return(eb); +} + +char *ExplainDDDCaps2(DWORD c) +{ + static char eb[512]; + unsigned int l; + strcpy(eb,"DDCAPS2_"); + if (c & DDCAPS2_CERTIFIED) strcat(eb, "CERTIFIED+"); + if (c & DDCAPS2_NO2DDURING3DSCENE) strcat(eb, "NO2DDURING3DSCENE+"); + if (c & DDCAPS2_VIDEOPORT) strcat(eb, "VIDEOPORT+"); + if (c & DDCAPS2_AUTOFLIPOVERLAY) strcat(eb, "AUTOFLIPOVERLAY+"); + if (c & DDCAPS2_CANBOBINTERLEAVED) strcat(eb, "CANBOBINTERLEAVED+"); + if (c & DDCAPS2_CANBOBNONINTERLEAVED) strcat(eb, "CANBOBNONINTERLEAVED+"); + if (c & DDCAPS2_COLORCONTROLOVERLAY) strcat(eb, "COLORCONTROLOVERLAY+"); + if (c & DDCAPS2_COLORCONTROLPRIMARY) strcat(eb, "COLORCONTROLPRIMARY+"); + if (c & DDCAPS2_CANDROPZ16BIT) strcat(eb, "CANDROPZ16BIT+"); + if (c & DDCAPS2_NONLOCALVIDMEM) strcat(eb, "NONLOCALVIDMEM+"); + if (c & DDCAPS2_NONLOCALVIDMEMCAPS) strcat(eb, "NONLOCALVIDMEMCAPS+"); + if (c & DDCAPS2_NOPAGELOCKREQUIRED) strcat(eb, "NOPAGELOCKREQUIRED+"); + if (c & DDCAPS2_WIDESURFACES) strcat(eb, "WIDESURFACES+"); + if (c & DDCAPS2_CANFLIPODDEVEN) strcat(eb, "CANFLIPODDEVEN+"); + if (c & DDCAPS2_CANBOBHARDWARE) strcat(eb, "CANBOBHARDWARE+"); + if (c & DDCAPS2_COPYFOURCC) strcat(eb, "COPYFOURCC+"); + if (c & DDCAPS2_PRIMARYGAMMA) strcat(eb, "PRIMARYGAMMA+"); + if (c & DDCAPS2_CANRENDERWINDOWED) strcat(eb, "CANRENDERWINDOWED+"); + if (c & DDCAPS2_CANCALIBRATEGAMMA) strcat(eb, "CANCALIBRATEGAMMA+"); + if (c & DDCAPS2_FLIPINTERVAL) strcat(eb, "FLIPINTERVAL+"); + if (c & DDCAPS2_FLIPNOVSYNC) strcat(eb, "FLIPNOVSYNC+"); + if (c & DDCAPS2_CANMANAGETEXTURE) strcat(eb, "CANMANAGETEXTURE+"); + if (c & DDCAPS2_TEXMANINNONLOCALVIDMEM) strcat(eb, "TEXMANINNONLOCALVIDMEM+"); + if (c & DDCAPS2_STEREO) strcat(eb, "STEREO+"); + if (c & DDCAPS2_SYSTONONLOCAL_AS_SYSTOLOCAL) strcat(eb, "SYSTONONLOCAL_AS_SYSTOLOCAL+"); + if (c & DDCAPS2_RESERVED1) strcat(eb, "RESERVED1/PUREHAL+"); + if (c & DDCAPS2_CANMANAGERESOURCE) strcat(eb, "CANMANAGERESOURCE+"); + if (c & DDCAPS2_DYNAMICTEXTURES) strcat(eb, "DYNAMICTEXTURES+"); + if (c & DDCAPS2_CANAUTOGENMIPMAP) strcat(eb, "CANAUTOGENMIPMAP+"); + l=strlen(eb); + if (l>strlen("DDCAPS2_")) eb[l-1]=0; // delete last '+' if any + else eb[0]=0; + return(eb); +} + +char *ExplainDDFXALPHACaps(DWORD c) +{ + static char eb[512]; + unsigned int l; + strcpy(eb,"DDFXALPHACAPS_"); + if (c & DDFXALPHACAPS_BLTALPHAEDGEBLEND) strcat(eb, "BLTALPHAEDGEBLEND+"); + if (c & DDFXALPHACAPS_BLTALPHAPIXELS) strcat(eb, "BLTALPHAPIXELS+"); + if (c & DDFXALPHACAPS_BLTALPHAPIXELSNEG) strcat(eb, "BLTALPHAPIXELSNEG+"); + if (c & DDFXALPHACAPS_BLTALPHASURFACES) strcat(eb, "BLTALPHASURFACES+"); + if (c & DDFXALPHACAPS_BLTALPHASURFACESNEG) strcat(eb, "BLTALPHASURFACESNEG+"); + if (c & DDFXALPHACAPS_OVERLAYALPHAEDGEBLEND) strcat(eb, "OVERLAYALPHAEDGEBLEND+"); + if (c & DDFXALPHACAPS_OVERLAYALPHAPIXELS) strcat(eb, "OVERLAYALPHAPIXELS+"); + if (c & DDFXALPHACAPS_OVERLAYALPHAPIXELSNEG) strcat(eb, "OVERLAYALPHAPIXELSNEG+"); + if (c & DDFXALPHACAPS_OVERLAYALPHASURFACES) strcat(eb, "OVERLAYALPHASURFACES+"); + if (c & DDFXALPHACAPS_OVERLAYALPHASURFACESNEG) strcat(eb, "OVERLAYALPHASURFACESNEG+"); + l=strlen(eb); + if (l>strlen("DDFXALPHACAPS_")) eb[l-1]=0; // delete last '+' if any + else eb[0]=0; + return(eb); +} + +char *ExplainDDFXCaps(DWORD c) +{ + static char eb[512]; + unsigned int l; + strcpy(eb,"DDFXCAPS_"); + if (c & DDFXCAPS_BLTARITHSTRETCHY) strcat(eb, "BLTARITHSTRETCHY+"); + if (c & DDFXCAPS_BLTARITHSTRETCHYN) strcat(eb, "BLTARITHSTRETCHYN+"); + if (c & DDFXCAPS_BLTMIRRORLEFTRIGHT) strcat(eb, "BLTMIRRORLEFTRIGHT+"); + if (c & DDFXCAPS_BLTMIRRORUPDOWN) strcat(eb, "BLTMIRRORUPDOWN+"); + if (c & DDFXCAPS_BLTROTATION) strcat(eb, "BLTROTATION+"); + if (c & DDFXCAPS_BLTROTATION90) strcat(eb, "BLTROTATION90+"); + if (c & DDFXCAPS_BLTSHRINKX) strcat(eb, "BLTSHRINKX+"); + if (c & DDFXCAPS_BLTSHRINKXN) strcat(eb, "BLTSHRINKXN+"); + if (c & DDFXCAPS_BLTSHRINKY) strcat(eb, "BLTSHRINKY+"); + if (c & DDFXCAPS_BLTSHRINKYN) strcat(eb, "BLTSHRINKYN+"); + if (c & DDFXCAPS_BLTSTRETCHX) strcat(eb, "BLTSTRETCHX+"); + if (c & DDFXCAPS_BLTSTRETCHXN) strcat(eb, "BLTSTRETCHXN+"); + if (c & DDFXCAPS_BLTSTRETCHY) strcat(eb, "BLTSTRETCHY+"); + if (c & DDFXCAPS_BLTSTRETCHYN) strcat(eb, "BLTSTRETCHYN+"); + if (c & DDFXCAPS_OVERLAYARITHSTRETCHY) strcat(eb, "OVERLAYARITHSTRETCHY+"); + if (c & DDFXCAPS_OVERLAYARITHSTRETCHYN) strcat(eb, "OVERLAYARITHSTRETCHYN+"); + if (c & DDFXCAPS_OVERLAYSHRINKX) strcat(eb, "OVERLAYSHRINKX+"); + if (c & DDFXCAPS_OVERLAYSHRINKXN) strcat(eb, "OVERLAYSHRINKXN+"); + if (c & DDFXCAPS_OVERLAYSHRINKY) strcat(eb, "OVERLAYSHRINKY+"); + if (c & DDFXCAPS_OVERLAYSHRINKYN) strcat(eb, "OVERLAYSHRINKYN+"); + if (c & DDFXCAPS_OVERLAYSTRETCHX) strcat(eb, "OVERLAYSTRETCHX+"); + if (c & DDFXCAPS_OVERLAYSTRETCHXN) strcat(eb, "OVERLAYSTRETCHXN+"); + if (c & DDFXCAPS_OVERLAYSTRETCHY) strcat(eb, "OVERLAYSTRETCHY+"); + if (c & DDFXCAPS_OVERLAYSTRETCHYN) strcat(eb, "OVERLAYSTRETCHYN+"); + if (c & DDFXCAPS_OVERLAYMIRRORLEFTRIGHT) strcat(eb, "OVERLAYMIRRORLEFTRIGHT+"); + if (c & DDFXCAPS_OVERLAYMIRRORUPDOWN) strcat(eb, "OVERLAYMIRRORUPDOWN+"); + if (c & DDFXCAPS_OVERLAYDEINTERLACE) strcat(eb, "OVERLAYDEINTERLACE+"); + if (c & DDFXCAPS_BLTALPHA) strcat(eb, "BLTALPHA+"); + if (c & DDFXCAPS_BLTFILTER) strcat(eb, "BLTFILTER+"); + if (c & DDFXCAPS_OVERLAYALPHA) strcat(eb, "OVERLAYALPHA+"); + if (c & DDFXCAPS_BLTARITHSTRETCHY) strcat(eb, "BLTARITHSTRETCHY+"); + if (c & DDFXCAPS_OVERLAYFILTER) strcat(eb, "OVERLAYFILTER+"); + if (c & DDFXCAPS_OVERLAYARITHSTRETCHY) strcat(eb, "OVERLAYARITHSTRETCHY+"); + l=strlen(eb); + if (l>strlen("DDFXCAPS_")) eb[l-1]=0; // delete last '+' if any + else eb[0]=0; + return(eb); +} + +char *ExplainDDCKeyCaps(DWORD c) +{ + static char eb[512]; + unsigned int l; + strcpy(eb,"DDCKEYCAPS_"); + if (c & DDCKEYCAPS_DESTBLT) strcat(eb, "DDCKEYCAPS_DESTBLT+"); + if (c & DDCKEYCAPS_DESTBLTCLRSPACE) strcat(eb, "DDCKEYCAPS_DESTBLTCLRSPACE+"); + if (c & DDCKEYCAPS_DESTBLTCLRSPACEYUV) strcat(eb, "DDCKEYCAPS_DESTBLTCLRSPACEYUV+"); + if (c & DDCKEYCAPS_DESTBLTYUV) strcat(eb, "DDCKEYCAPS_DESTBLTYUV+"); + if (c & DDCKEYCAPS_DESTOVERLAY) strcat(eb, "DDCKEYCAPS_DESTOVERLAY+"); + if (c & DDCKEYCAPS_DESTOVERLAYCLRSPACE) strcat(eb, "DDCKEYCAPS_DESTOVERLAYCLRSPACE+"); + if (c & DDCKEYCAPS_DESTOVERLAYCLRSPACEYUV) strcat(eb, "DDCKEYCAPS_DESTOVERLAYCLRSPACEYUV+"); + if (c & DDCKEYCAPS_DESTOVERLAYONEACTIVE) strcat(eb, "DDCKEYCAPS_DESTOVERLAYONEACTIVE+"); + if (c & DDCKEYCAPS_DESTOVERLAYYUV) strcat(eb, "DDCKEYCAPS_DESTOVERLAYYUV+"); + if (c & DDCKEYCAPS_SRCBLT) strcat(eb, "DDCKEYCAPS_SRCBLT+"); + if (c & DDCKEYCAPS_SRCBLTCLRSPACE) strcat(eb, "DDCKEYCAPS_SRCBLTCLRSPACE+"); + if (c & DDCKEYCAPS_SRCBLTCLRSPACEYUV) strcat(eb, "DDCKEYCAPS_SRCBLTCLRSPACEYUV+"); + if (c & DDCKEYCAPS_SRCBLTYUV) strcat(eb, "DDCKEYCAPS_SRCBLTYUV+"); + if (c & DDCKEYCAPS_SRCOVERLAY) strcat(eb, "DDCKEYCAPS_SRCOVERLAY+"); + if (c & DDCKEYCAPS_SRCOVERLAYCLRSPACE) strcat(eb, "DDCKEYCAPS_SRCOVERLAYCLRSPACE+"); + if (c & DDCKEYCAPS_SRCOVERLAYCLRSPACEYUV) strcat(eb, "DDCKEYCAPS_SRCOVERLAYCLRSPACEYUV+"); + if (c & DDCKEYCAPS_SRCOVERLAYONEACTIVE) strcat(eb, "DDCKEYCAPS_SRCOVERLAYONEACTIVE+"); + if (c & DDCKEYCAPS_SRCOVERLAYYUV) strcat(eb, "DDCKEYCAPS_SRCOVERLAYYUV+"); + if (c & DDCKEYCAPS_NOCOSTOVERLAY) strcat(eb, "DDCKEYCAPS_NOCOSTOVERLAY+"); + l=strlen(eb); + if (l>strlen("DDCKEYCAPS_")) eb[l-1]=0; // delete last '+' if any + else eb[0]=0; + return(eb); +} + char *ExplainCoopFlags(DWORD c) { static char eb[256]; @@ -656,6 +899,9 @@ char *ExplainWinMessage(DWORD c) case WM_RBUTTONDBLCLK: eb="WM_RBUTTONDBLCLK"; break; case WM_MBUTTONDOWN: eb="WM_MBUTTONDOWN"; break; case WM_MBUTTONUP: eb="WM_MBUTTONUP"; break; + case WM_MBUTTONDBLCLK: eb="WM_MBUTTONDBLCLK"; break; + case WM_MOUSEWHEEL: eb="WM_MOUSEWHEEL"; break; + case WM_MOUSEHWHEEL: eb="WM_MOUSEHWHEEL"; break; case WM_PARENTNOTIFY: eb="WM_PARENTNOTIFY"; break; case WM_ENTERMENULOOP: eb="WM_ENTERMENULOOP"; break; case WM_EXITMENULOOP: eb="WM_EXITMENULOOP"; break; diff --git a/dll/dxhelper.h b/dll/dxhelper.h index cc93fb5..1ceb25a 100644 --- a/dll/dxhelper.h +++ b/dll/dxhelper.h @@ -3,6 +3,13 @@ extern void DumpRect(char *, LPRECT, int); extern char *ExplainFlags(DWORD); extern char *ExplainDDSCaps(DWORD); +extern char *ExplainDDSCaps2(DWORD); +extern char *ExplainDDSCaps3(DWORD); +extern char *ExplainDDDCaps(DWORD); +extern char *ExplainDDDCaps2(DWORD); +extern char *ExplainDDFXALPHACaps(DWORD); +extern char *ExplainDDFXCaps(DWORD); +extern char *ExplainDDCKeyCaps(DWORD); extern char *ExplainCoopFlags(DWORD); extern char *ExplainPixelFormatFlags(DWORD); extern char *ExplainFlipFlags(DWORD); diff --git a/dll/dxhook.cpp b/dll/dxhook.cpp index 5503136..2d3d113 100644 --- a/dll/dxhook.cpp +++ b/dll/dxhook.cpp @@ -58,7 +58,7 @@ static char *Flag3Names[32]={ "HOOKENABLED", "FIXD3DFRAME", "FORCE16BPP", "BLACKWHITE", "SAVECAPS", "SINGLEPROCAFFINITY", "EMULATEREGISTRY", "CDROMDRIVETYPE", "NOWINDOWMOVE", "DISABLEHAL", "LOCKSYSCOLORS", "EMULATEDC", - "Flags3:17", "Flags3:18", "Flags3:19", "Flags3:20", + "FULLSCREENONLY", "FONTBYPASS", "YUV2RGB", "RGB2YUV", "Flags3:21", "Flags3:22", "Flags3:23", "Flags3:24", "Flags3:25", "Flags3:26", "Flags3:27", "Flags3:28", "Flags3:29", "Flags3:30", "Flags3:31", "Flags3:32", @@ -458,7 +458,7 @@ void *HookAPI(HMODULE module, char *dll, void *apiproc, const char *apiname, voi DWORD oldprotect; void *org; - OutTraceB("HookAPI: module=%x dll=%s apiproc=%x apiname=%s hookproc=%x\n", + if(dxw.dwTFlags & OUTIMPORTTABLE) OutTrace("HookAPI: module=%x dll=%s apiproc=%x apiname=%s hookproc=%x\n", module, dll, apiproc, apiname, hookproc); if(!*apiname) { // check @@ -744,8 +744,14 @@ LRESULT CALLBACK extChildWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPAR // scale mouse coordinates prev.x = LOWORD(lparam); prev.y = HIWORD(lparam); + curr = prev; + if(message == WM_MOUSEWHEEL){ // v2.02.33 mousewheel fix + POINT upleft={0,0}; + (*pClientToScreen)(dxw.GethWnd(), &upleft); + curr = dxw.SubCoordinates(curr, upleft); + } //OutTraceC("ChildWindowProc: hwnd=%x pos XY prev=(%d,%d)\n", hwnd, prev.x, prev.y); - curr=dxw.FixCursorPos(prev); // Warn! the correction must refer to the main window hWnd, not the current hwnd one !!! + curr=dxw.FixCursorPos(curr); // Warn! the correction must refer to the main window hWnd, not the current hwnd one !!! lparam = MAKELPARAM(curr.x, curr.y); OutTraceC("ChildWindowProc: hwnd=%x pos XY=(%d,%d)->(%d,%d)\n", hwnd, prev.x, prev.y, curr.x, curr.y); } @@ -1009,7 +1015,13 @@ LRESULT CALLBACK extWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lp // scale mouse coordinates prev.x = LOWORD(lparam); prev.y = HIWORD(lparam); - curr=dxw.FixCursorPos(prev); //v2.02.30 + curr = prev; + if(message == WM_MOUSEWHEEL){ // v2.02.33 mousewheel fix + POINT upleft={0,0}; + (*pClientToScreen)(dxw.GethWnd(), &upleft); + curr = dxw.SubCoordinates(curr, upleft); + } + curr=dxw.FixCursorPos(curr); //v2.02.30 lparam = MAKELPARAM(curr.x, curr.y); OutTraceC("WindowProc: hwnd=%x pos XY=(%d,%d)->(%d,%d)\n", hwnd, prev.x, prev.y, curr.x, curr.y); } @@ -1126,12 +1138,15 @@ void HookSysLibsInit() static void RecoverScreenMode() { - DEVMODE InitDevMode; + DEVMODE InitDevMode, CurrentDevMode; BOOL res; + EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &CurrentDevMode); EnumDisplaySettings(NULL, ENUM_REGISTRY_SETTINGS, &InitDevMode); - OutTraceD("ChangeDisplaySettings: RECOVER WxH=(%dx%d) BitsPerPel=%d\n", + OutTraceD("ChangeDisplaySettings: recover CURRENT WxH=(%dx%d) BitsPerPel=%d TARGET WxH=(%dx%d) BitsPerPel=%d\n", + CurrentDevMode.dmPelsWidth, CurrentDevMode.dmPelsHeight, CurrentDevMode.dmBitsPerPel, InitDevMode.dmPelsWidth, InitDevMode.dmPelsHeight, InitDevMode.dmBitsPerPel); - InitDevMode.dmFields |= DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT; + //InitDevMode.dmFields |= (DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT); + InitDevMode.dmFields = (DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT); res=(*pChangeDisplaySettings)(&InitDevMode, 0); if(res) OutTraceE("ChangeDisplaySettings: ERROR err=%d at %d\n", GetLastError(), __LINE__); } @@ -1430,7 +1445,7 @@ void HookLibrary(HMODULE hModule, HookEntry_Type *Hooks, char *DLLName) void *tmp; for(; Hooks->APIName; Hooks++){ tmp = HookAPI(hModule, DLLName, Hooks->OriginalAddress, Hooks->APIName, Hooks->HookerAddress); - if(tmp) *(Hooks->StoreAddress) = (FARPROC)tmp; + if(tmp && Hooks->StoreAddress) *(Hooks->StoreAddress) = (FARPROC)tmp; } } diff --git a/dll/dxwcore.cpp b/dll/dxwcore.cpp index 6f3eed6..55fdf06 100644 --- a/dll/dxwcore.cpp +++ b/dll/dxwcore.cpp @@ -15,6 +15,7 @@ dxwCore::dxwCore() { // initialization stuff .... FullScreen=FALSE; + if(dxw.dwFlags3 & FULLSCREENONLY) FullScreen=TRUE; SethWnd(NULL); SetScreenSize(); dwMaxDDVersion=7; @@ -42,13 +43,13 @@ void dxwCore::SetFullScreen(BOOL fs, int line) void dxwCore::SetFullScreen(BOOL fs) { + if(dxw.dwFlags3 & FULLSCREENONLY) fs=TRUE; OutTraceD("SetFullScreen: %s\n", fs?"FULLSCREEN":"WINDOWED"); FullScreen=fs; } BOOL dxwCore::IsFullScreen() { - // if(dxw.dwFlagsX && ALWAYSFULLSCREEN) return TRUE; return FullScreen; } @@ -290,24 +291,24 @@ void dxwCore::FixNCHITCursorPos(LPPOINT lppoint) void dxwCore::SetClipCursor() { RECT Rect; - POINT UpLeftCorner; + POINT UpLeftCorner={0,0}; OutTraceD("SetClipCursor:\n"); if (hWnd==NULL) { OutTraceD("SetClipCursor: ASSERT hWnd==NULL\n"); return; } - (*pGetClientRect)(hWnd, &Rect); - UpLeftCorner.x=UpLeftCorner.y=0; - (*pClientToScreen)(hWnd, &UpLeftCorner); + if(!(*pGetClientRect)(hWnd, &Rect)) + OutTraceE("GetClientRect: ERROR err=%d at %d\n", GetLastError(), __LINE__); + if(!(*pClientToScreen)(hWnd, &UpLeftCorner)) + OutTraceE("ClientToScreen: ERROR err=%d at %d\n", GetLastError(), __LINE__); Rect.left+=UpLeftCorner.x; Rect.right+=UpLeftCorner.x; Rect.top+=UpLeftCorner.y; Rect.bottom+=UpLeftCorner.y; (*pClipCursor)(NULL); - if(!(*pClipCursor)(&Rect)){ + if(!(*pClipCursor)(&Rect)) OutTraceE("ClipCursor: ERROR err=%d at %d\n", GetLastError(), __LINE__); - } OutTraceD("SetClipCursor: rect=(%d,%d)-(%d,%d)\n", Rect.left, Rect.top, Rect.right, Rect.bottom); } @@ -1006,6 +1007,14 @@ HDC dxwCore::AcquireEmulatedDC(HWND hwnd) HDC wdc; if(!(wdc=(*pGDIGetDC)(hwnd))) OutTraceE("GetDC: ERROR err=%d at=%d\n", GetLastError(), __LINE__); + return AcquireEmulatedDC(wdc); +} + +HDC dxwCore::AcquireEmulatedDC(HDC wdc) +{ + //HDC wdc; + //if(!(wdc=(*pGDIGetDC)(hwnd))) + //OutTraceE("GetDC: ERROR err=%d at=%d\n", GetLastError(), __LINE__); if(!VirtualHDC){ // or resolution changed and you must rebuild a new one .... !!!!! if(!(VirtualHDC=CreateCompatibleDC(wdc))) OutTraceE("CreateCompatibleDC: ERROR err=%d at=%d\n", GetLastError(), __LINE__); diff --git a/dll/dxwcore.hpp b/dll/dxwcore.hpp index 4b912fb..88f3c75 100644 --- a/dll/dxwcore.hpp +++ b/dll/dxwcore.hpp @@ -70,6 +70,7 @@ public: // methods int GetDLLIndex(char *); void FixStyle(char *, HWND, WPARAM, LPARAM); HDC AcquireEmulatedDC(HWND); + HDC AcquireEmulatedDC(HDC); BOOL ReleaseEmulatedDC(HWND); BOOL IsVirtual(HDC); void ResetEmulatedDC(); diff --git a/dll/dxwnd.aps b/dll/dxwnd.aps index 9d1f741ebce5990ff4b6132130b295be315ba250..398eefeb91e094c744b2ac6ce79b451557b58a3f 100644 GIT binary patch delta 48 zcmZ3mjA_9#rU~I}#>Vl*Madgu`TMzz8H^d?8HyQ-7?L-a_e(QD. #include "dxwnd.h" #include "dxwcore.hpp" -#define VERSION "2.02.32" +#define VERSION "2.02.33" #define DDTHREADLOCK 1 diff --git a/dll/dxwnd.vs2008.suo b/dll/dxwnd.vs2008.suo index b327df8810f53769ee839902c19c15f8c151d019..d6d0d609399d1424ef9f4636b50d253753c1d168 100644 GIT binary patch delta 38492 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 delta 13131 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 GQ~uv#c)xT2 diff --git a/dll/gdi32.cpp b/dll/gdi32.cpp index 4b47582..efbcc9c 100644 --- a/dll/gdi32.cpp +++ b/dll/gdi32.cpp @@ -102,6 +102,14 @@ static HookEntry_Type GammaHooks[]={ {0, NULL, 0, 0} // terminator }; +static HookEntry_Type FontHooks[]={ + {"CreateScalableFontResourceA", (FARPROC)NULL, (FARPROC *)&pCreateScalableFontResourceA, (FARPROC)extCreateScalableFontResourceA}, + {"CreateScalableFontResourceW", (FARPROC)NULL, (FARPROC *)&pCreateScalableFontResourceW, (FARPROC)extCreateScalableFontResourceW}, + {"AddFontResourceA", (FARPROC)NULL, (FARPROC *)&pAddFontResourceA, (FARPROC)extAddFontResourceA}, + {"AddFontResourceW", (FARPROC)NULL, (FARPROC *)&pAddFontResourceW, (FARPROC)extAddFontResourceW}, + {0, NULL, 0, 0} // terminator +}; + extern HRESULT WINAPI extDirectDrawCreate(GUID FAR *, LPDIRECTDRAW FAR *, IUnknown FAR *); extern HRESULT WINAPI extDirectDrawCreateEx(GUID FAR *, LPDIRECTDRAW FAR *, REFIID, IUnknown FAR *); @@ -145,6 +153,9 @@ void HookGDI32(HMODULE module) if(dxw.dwFlags2 & DISABLEGAMMARAMP) HookLibrary(module, GammaHooks, libname); + + if(dxw.dwFlags3 & FONTBYPASS) // v2.02.33 - for "Stratego" compatibility option + HookLibrary(module, FontHooks, libname); } FARPROC Remap_GDI32_ProcAddress(LPCSTR proc, HMODULE hModule) @@ -180,6 +191,9 @@ FARPROC Remap_GDI32_ProcAddress(LPCSTR proc, HMODULE hModule) if(dxw.dwFlags2 & DISABLEGAMMARAMP) if(addr=RemapLibrary(proc, hModule, GammaHooks)) return addr; + if(1) // v2.02.33 - for "Stratego" compatibility option + if(addr=RemapLibrary(proc, hModule, FontHooks)) return addr; + return NULL; } @@ -345,6 +359,9 @@ int WINAPI extGetDeviceCaps(HDC hdc, int nindex) OutTraceD("GetDeviceCaps: fix(2) BITSPIXEL/COLORRES cap=%d\n",res); } break; + //case NUMCOLORS: // numcolors windows bug fix.... + // if(res == -1) res=1; + // return res; } if(dxw.dwFlags1 & EMULATESURFACE){ @@ -1555,6 +1572,44 @@ BOOL WINAPI extGetCurrentPositionEx(HDC hdc, LPPOINT lpPoint) return ret; } +BOOL WINAPI extCreateScalableFontResourceA(DWORD fdwHidden, LPCTSTR lpszFontRes, LPCTSTR lpszFontFile, LPCTSTR lpszCurrentPath) +{ + BOOL res; + OutTraceD("CreateScalableFontResource: hidden=%d FontRes=\"%s\" FontFile=\"%s\" CurrentPath=\"%s\"\n", + fdwHidden, lpszFontRes, lpszFontFile, lpszCurrentPath); + if (1) return TRUE; + res=(*pCreateScalableFontResourceA)(fdwHidden, lpszFontRes, lpszFontFile, lpszCurrentPath); + if(!res) OutTraceE("CreateScalableFontResource: ERROR err=%d at=%d\n", GetLastError(), __LINE__); +} + +BOOL WINAPI extCreateScalableFontResourceW(DWORD fdwHidden, LPCWSTR lpszFontRes, LPCWSTR lpszFontFile, LPCWSTR lpszCurrentPath) +{ + BOOL res; + OutTraceD("CreateScalableFontResource: hidden=%d FontRes=\"%ls\" FontFile=\"%ls\" CurrentPath=\"%ls\"\n", + fdwHidden, lpszFontRes, lpszFontFile, lpszCurrentPath); + if (1) return TRUE; + res=(*pCreateScalableFontResourceW)(fdwHidden, lpszFontRes, lpszFontFile, lpszCurrentPath); + if(!res) OutTraceE("CreateScalableFontResource: ERROR err=%d at=%d\n", GetLastError(), __LINE__); +} + +int WINAPI extAddFontResourceA(LPCTSTR lpszFontFile) +{ + BOOL res; + OutTraceD("AddFontResource: FontFile=\"%s\"\n", lpszFontFile); + if(1) return TRUE; + res=(*pAddFontResourceA)(lpszFontFile); + if(!res) OutTraceE("AddFontResource: ERROR err=%d at=%d\n", GetLastError(), __LINE__); +} + +int WINAPI extAddFontResourceW(LPCWSTR lpszFontFile) +{ + BOOL res; + OutTraceD("AddFontResource: FontFile=\"%ls\"\n", lpszFontFile); + if(1) return TRUE; + res=(*pAddFontResourceW)(lpszFontFile); + if(!res) OutTraceE("AddFontResource: ERROR err=%d at=%d\n", GetLastError(), __LINE__); +} + #if 0 // to map: // GetCurrentPositionEx diff --git a/dll/hd3d.cpp b/dll/hd3d.cpp index 4648599..774e533 100644 --- a/dll/hd3d.cpp +++ b/dll/hd3d.cpp @@ -55,13 +55,16 @@ void* WINAPI extDirect3DCreate9(UINT); HRESULT WINAPI extDirect3DCreate9Ex(UINT, IDirect3D9Ex **); HRESULT WINAPI extCheckFullScreen(void); -UINT WINAPI extGetAdapterCount(void *); -HRESULT WINAPI extGetAdapterIdentifier(void *, UINT, DWORD, D3DADAPTER_IDENTIFIER9 *); +UINT WINAPI extGetAdapterCount8(void *); +UINT WINAPI extGetAdapterCount9(void *); +HRESULT WINAPI extGetAdapterIdentifier8(void *, UINT, DWORD, D3DADAPTER_IDENTIFIER9 *); +HRESULT WINAPI extGetAdapterIdentifier9(void *, UINT, DWORD, D3DADAPTER_IDENTIFIER9 *); HRESULT WINAPI extCreateDevice(void *, UINT, D3DDEVTYPE, HWND, DWORD, D3DPRESENT_PARAMETERS *, void **); HRESULT WINAPI extCreateDeviceEx(void *, UINT, D3DDEVTYPE, HWND, DWORD, D3DPRESENT_PARAMETERS *, D3DDISPLAYMODEEX *, void **); HRESULT WINAPI extEnumAdapterModes8(void *, UINT, UINT , D3DDISPLAYMODE *); HRESULT WINAPI extEnumAdapterModes9(void *, UINT, D3DFORMAT, UINT , D3DDISPLAYMODE *); -HRESULT WINAPI extGetAdapterDisplayMode(void *, UINT, D3DDISPLAYMODE *); +HRESULT WINAPI extGetAdapterDisplayMode8(void *, UINT, D3DDISPLAYMODE *); +HRESULT WINAPI extGetAdapterDisplayMode9(void *, UINT, D3DDISPLAYMODE *); HRESULT WINAPI extGetDisplayMode(void *, D3DDISPLAYMODE *); HRESULT WINAPI extPresent(void *, CONST RECT *, CONST RECT *, HWND, CONST RGNDATA *); HRESULT WINAPI extSetRenderState(void *, D3DRENDERSTATETYPE, DWORD); @@ -93,13 +96,17 @@ Direct3DCreate9_Type pDirect3DCreate9 = 0; Direct3DCreate9Ex_Type pDirect3DCreate9Ex = 0; CheckFullScreen_Type pCheckFullScreen = 0; -GetAdapterCount_Type pGetAdapterCount = 0; -GetAdapterIdentifier_Type pGetAdapterIdentifier = 0; -CreateDevice_Type pCreateDevice = 0; +GetAdapterCount_Type pGetAdapterCount8 = 0; +GetAdapterCount_Type pGetAdapterCount9 = 0; +GetAdapterIdentifier_Type pGetAdapterIdentifier8 = 0; +GetAdapterIdentifier_Type pGetAdapterIdentifier9 = 0; +CreateDevice_Type pCreateDevice8 = 0; +CreateDevice_Type pCreateDevice9 = 0; CreateDeviceEx_Type pCreateDeviceEx = 0; EnumAdapterModes8_Type pEnumAdapterModes8 = 0; EnumAdapterModes9_Type pEnumAdapterModes9 = 0; -GetAdapterDisplayMode_Type pGetAdapterDisplayMode = 0; +GetAdapterDisplayMode_Type pGetAdapterDisplayMode8 = 0; +GetAdapterDisplayMode_Type pGetAdapterDisplayMode9 = 0; GetDisplayMode_Type pGetDisplayMode = 0; Present_Type pPresent = 0; SetRenderState_Type pSetRenderState = 0; @@ -400,14 +407,14 @@ void* WINAPI extDirect3DCreate8(UINT sdkversion) lpd3d = (*pDirect3DCreate8)(sdkversion); if(!lpd3d) return 0; SetHook((void *)(*(DWORD *)lpd3d + 0), extQueryInterfaceD3D8, (void **)&pQueryInterfaceD3D8, "QueryInterface(D8)"); - SetHook((void *)(*(DWORD *)lpd3d + 16), extGetAdapterCount, (void **)&pGetAdapterCount, "GetAdapterCount(D8)"); - SetHook((void *)(*(DWORD *)lpd3d + 20), extGetAdapterIdentifier, (void **)&pGetAdapterIdentifier, "GetAdapterIdentifier(D8)"); + SetHook((void *)(*(DWORD *)lpd3d + 16), extGetAdapterCount8, (void **)&pGetAdapterCount8, "GetAdapterCount(D8)"); + SetHook((void *)(*(DWORD *)lpd3d + 20), extGetAdapterIdentifier8, (void **)&pGetAdapterIdentifier8, "GetAdapterIdentifier(D8)"); SetHook((void *)(*(DWORD *)lpd3d + 28), extEnumAdapterModes8, (void **)&pEnumAdapterModes8, "EnumAdapterModes(D8)"); - SetHook((void *)(*(DWORD *)lpd3d + 32), extGetAdapterDisplayMode, (void **)&pGetAdapterDisplayMode, "GetAdapterDisplayMode(D8)"); - SetHook((void *)(*(DWORD *)lpd3d + 60), extCreateDevice, (void **)&pCreateDevice, "CreateDevice(D8)"); + SetHook((void *)(*(DWORD *)lpd3d + 32), extGetAdapterDisplayMode8, (void **)&pGetAdapterDisplayMode8, "GetAdapterDisplayMode(D8)"); + SetHook((void *)(*(DWORD *)lpd3d + 60), extCreateDevice, (void **)&pCreateDevice8, "CreateDevice(D8)"); OutTraceD("Direct3DCreate8: SDKVERSION=%x pCreateDevice=%x\n", - sdkversion, pCreateDevice); + sdkversion, pCreateDevice8); return lpd3d; } @@ -419,14 +426,14 @@ void* WINAPI extDirect3DCreate9(UINT sdkversion) lpd3d = (*pDirect3DCreate9)(sdkversion); if(!lpd3d) return 0; SetHook((void *)(*(DWORD *)lpd3d + 0), extQueryInterfaceD3D9, (void **)&pQueryInterfaceD3D9, "QueryInterface(D9)"); - SetHook((void *)(*(DWORD *)lpd3d + 16), extGetAdapterCount, (void **)&pGetAdapterCount, "GetAdapterCount(D9)"); - SetHook((void *)(*(DWORD *)lpd3d + 20), extGetAdapterIdentifier, (void **)&pGetAdapterIdentifier, "GetAdapterIdentifier(D9)"); + SetHook((void *)(*(DWORD *)lpd3d + 16), extGetAdapterCount9, (void **)&pGetAdapterCount9, "GetAdapterCount(D9)"); + SetHook((void *)(*(DWORD *)lpd3d + 20), extGetAdapterIdentifier9, (void **)&pGetAdapterIdentifier9, "GetAdapterIdentifier(D9)"); SetHook((void *)(*(DWORD *)lpd3d + 28), extEnumAdapterModes9, (void **)&pEnumAdapterModes9, "EnumAdapterModes(D9)"); - SetHook((void *)(*(DWORD *)lpd3d + 32), extGetAdapterDisplayMode, (void **)&pGetAdapterDisplayMode, "GetAdapterDisplayMode(D9)"); - SetHook((void *)(*(DWORD *)lpd3d + 64), extCreateDevice, (void **)&pCreateDevice, "CreateDevice(D9)"); + SetHook((void *)(*(DWORD *)lpd3d + 32), extGetAdapterDisplayMode9, (void **)&pGetAdapterDisplayMode9, "GetAdapterDisplayMode(D9)"); + SetHook((void *)(*(DWORD *)lpd3d + 64), extCreateDevice, (void **)&pCreateDevice9, "CreateDevice(D9)"); OutTraceD("Direct3DCreate9: SDKVERSION=%x pCreateDevice=%x\n", - sdkversion, pCreateDevice); + sdkversion, pCreateDevice9); return lpd3d; } @@ -444,11 +451,11 @@ HRESULT WINAPI extDirect3DCreate9Ex(UINT sdkversion, IDirect3D9Ex **ppD3D) } lpd3d = *ppD3D; SetHook((void *)(*(DWORD *)lpd3d + 0), extQueryInterfaceD3D9, (void **)&pQueryInterfaceD3D9, "QueryInterface(D9)"); - SetHook((void *)(*(DWORD *)lpd3d + 16), extGetAdapterCount, (void **)&pGetAdapterCount, "GetAdapterCount(D9)"); - SetHook((void *)(*(DWORD *)lpd3d + 20), extGetAdapterIdentifier, (void **)&pGetAdapterIdentifier, "GetAdapterIdentifier(D9)"); + SetHook((void *)(*(DWORD *)lpd3d + 16), extGetAdapterCount9, (void **)&pGetAdapterCount9, "GetAdapterCount(D9)"); + SetHook((void *)(*(DWORD *)lpd3d + 20), extGetAdapterIdentifier9, (void **)&pGetAdapterIdentifier9, "GetAdapterIdentifier(D9)"); SetHook((void *)(*(DWORD *)lpd3d + 28), extEnumAdapterModes9, (void **)&pEnumAdapterModes9, "EnumAdapterModes(D9)"); - SetHook((void *)(*(DWORD *)lpd3d + 32), extGetAdapterDisplayMode, (void **)&pGetAdapterDisplayMode, "GetAdapterDisplayMode(D9)"); - SetHook((void *)(*(DWORD *)lpd3d + 64), extCreateDevice, (void **)&pCreateDevice, "CreateDevice(D9)"); + SetHook((void *)(*(DWORD *)lpd3d + 32), extGetAdapterDisplayMode9, (void **)&pGetAdapterDisplayMode9, "GetAdapterDisplayMode(D9)"); + SetHook((void *)(*(DWORD *)lpd3d + 64), extCreateDevice, (void **)&pCreateDevice9, "CreateDevice(D9)"); SetHook((void *)(*(DWORD *)lpd3d + 80), extCreateDeviceEx, (void **)&pCreateDeviceEx, "CreateDeviceEx(D9)"); OutTraceD("Direct3DCreate9Ex: SDKVERSION=%x pCreateDeviceEx=%x\n", @@ -457,11 +464,11 @@ HRESULT WINAPI extDirect3DCreate9Ex(UINT sdkversion, IDirect3D9Ex **ppD3D) return res; } -UINT WINAPI extGetAdapterCount(void *lpd3d) +UINT WINAPI extGetAdapterCount8(void *lpd3d) { UINT res; - res=(*pGetAdapterCount)(lpd3d); - OutTraceD("GetAdapterCount: count=%d\n", res); + res=(*pGetAdapterCount8)(lpd3d); + OutTraceD("GetAdapterCount(8): count=%d\n", res); if(dxw.dwFlags2 & HIDEMULTIMONITOR) { OutTraceD("GetAdapterCount: HIDEMULTIMONITOR count=1\n"); res=1; @@ -469,12 +476,33 @@ UINT WINAPI extGetAdapterCount(void *lpd3d) return res; } -HRESULT WINAPI extGetAdapterIdentifier(void *pd3dd, UINT Adapter, DWORD Flags, D3DADAPTER_IDENTIFIER9 *pIdentifier) +UINT WINAPI extGetAdapterCount9(void *lpd3d) +{ + UINT res; + res=(*pGetAdapterCount9)(lpd3d); + OutTraceD("GetAdapterCount(9): count=%d\n", res); + if(dxw.dwFlags2 & HIDEMULTIMONITOR) { + OutTraceD("GetAdapterCount: HIDEMULTIMONITOR count=1\n"); + res=1; + } + return res; +} + +HRESULT WINAPI extGetAdapterIdentifier8(void *pd3dd, UINT Adapter, DWORD Flags, D3DADAPTER_IDENTIFIER9 *pIdentifier) { HRESULT res; - OutTraceD("GetAdapterIdentifier: Adapter=%d flags=%x\n", Adapter, Flags); - res=pGetAdapterIdentifier(pd3dd, Adapter, Flags, pIdentifier); - OutTraceD("GetAdapterIdentifier: ret=%x\n", res); + OutTraceD("GetAdapterIdentifier(8): Adapter=%d flags=%x\n", Adapter, Flags); + res=pGetAdapterIdentifier8(pd3dd, Adapter, Flags, pIdentifier); + OutTraceD("GetAdapterIdentifier(8): ret=%x\n", res); + return res; +} + +HRESULT WINAPI extGetAdapterIdentifier9(void *pd3dd, UINT Adapter, DWORD Flags, D3DADAPTER_IDENTIFIER9 *pIdentifier) +{ + HRESULT res; + OutTraceD("GetAdapterIdentifier(9): Adapter=%d flags=%x\n", Adapter, Flags); + res=pGetAdapterIdentifier9(pd3dd, Adapter, Flags, pIdentifier); + OutTraceD("GetAdapterIdentifier(9): ret=%x\n", res); return res; } @@ -528,16 +556,30 @@ HRESULT WINAPI extEnumAdapterModes9(void *lpd3d, UINT Adapter, D3DFORMAT Format, return res; } -HRESULT WINAPI extGetAdapterDisplayMode(void *lpd3d, UINT Adapter, D3DDISPLAYMODE *pMode) +HRESULT WINAPI extGetAdapterDisplayMode8(void *lpd3d, UINT Adapter, D3DDISPLAYMODE *pMode) { HRESULT res; - res=(*pGetAdapterDisplayMode)(lpd3d, Adapter, pMode); - OutTraceD("DEBUG: GetAdapterDisplayMode: size=(%dx%d) RefreshRate=%d Format=%d\n", + res=(*pGetAdapterDisplayMode8)(lpd3d, Adapter, pMode); + OutTraceD("DEBUG: GetAdapterDisplayMode(8): size=(%dx%d) RefreshRate=%d Format=%d\n", pMode->Width, pMode->Height, pMode->RefreshRate, pMode->Format); if(dxw.dwFlags2 & KEEPASPECTRATIO){ pMode->Width=dxw.iSizX; pMode->Height=dxw.iSizY; - OutTraceD("DEBUG: GetDisplayMode: fixed size=(%dx%d)\n", pMode->Width, pMode->Height); + OutTraceD("DEBUG: GetAdapterDisplayMode(8): fixed size=(%dx%d)\n", pMode->Width, pMode->Height); + } + return res; +} + +HRESULT WINAPI extGetAdapterDisplayMode9(void *lpd3d, UINT Adapter, D3DDISPLAYMODE *pMode) +{ + HRESULT res; + res=(*pGetAdapterDisplayMode9)(lpd3d, Adapter, pMode); + OutTraceD("DEBUG: GetAdapterDisplayMode(9): size=(%dx%d) RefreshRate=%d Format=%d\n", + pMode->Width, pMode->Height, pMode->RefreshRate, pMode->Format); + if(dxw.dwFlags2 & KEEPASPECTRATIO){ + pMode->Width=dxw.iSizX; + pMode->Height=dxw.iSizY; + OutTraceD("DEBUG: GetAdapterDisplayMode(9): fixed size=(%dx%d)\n", pMode->Width, pMode->Height); } return res; } @@ -636,7 +678,10 @@ HRESULT WINAPI extCreateDevice(void *lpd3d, UINT adapter, D3DDEVTYPE devicetype, OutTraceD(" PresentationInterval = 0x%x\n", *(tmp ++)); //((LPDIRECT3D9)lpd3d)->GetAdapterDisplayMode(0, &mode); - (*pGetAdapterDisplayMode)(lpd3d, 0, &mode); + if(dwD3DVersion == 9) + (*pGetAdapterDisplayMode9)(lpd3d, 0, &mode); + else + (*pGetAdapterDisplayMode8)(lpd3d, 0, &mode); param[2] = mode.Format; OutTraceD(" Current Format = 0x%x\n", mode.Format); @@ -649,6 +694,7 @@ HRESULT WINAPI extCreateDevice(void *lpd3d, UINT adapter, D3DDEVTYPE devicetype, //param[11] = D3DPRESENTFLAG_DEVICECLIP; //Flags; param[12] = 0; //FullScreen_RefreshRateInHz; param[13] = D3DPRESENT_INTERVAL_DEFAULT; //PresentationInterval + res = (*pCreateDevice9)(lpd3d, 0, devicetype, hfocuswindow, behaviorflags, param, ppd3dd); } else{ param[6] = 0; //hDeviceWindow @@ -657,9 +703,9 @@ HRESULT WINAPI extCreateDevice(void *lpd3d, UINT adapter, D3DDEVTYPE devicetype, //param[10] = D3DPRESENTFLAG_DEVICECLIP; //Flags; param[11] = 0; //FullScreen_RefreshRateInHz; param[12] = D3DPRESENT_INTERVAL_DEFAULT; //PresentationInterval + res = (*pCreateDevice8)(lpd3d, 0, devicetype, hfocuswindow, behaviorflags, param, ppd3dd); } - res = (*pCreateDevice)(lpd3d, 0, devicetype, hfocuswindow, behaviorflags, param, ppd3dd); if(res){ OutTraceD("FAILED! %x\n", res); return res; @@ -757,7 +803,7 @@ HRESULT WINAPI extCreateDeviceEx(void *lpd3d, UINT adapter, D3DDEVTYPE devicetyp OutTraceD(" PresentationInterval = 0x%x\n", *(tmp ++)); //((LPDIRECT3D9)lpd3d)->GetAdapterDisplayMode(0, &mode); - (*pGetAdapterDisplayMode)(lpd3d, 0, &mode); + (*pGetAdapterDisplayMode9)(lpd3d, 0, &mode); param[2] = mode.Format; OutTraceD(" Current Format = 0x%x\n", mode.Format); @@ -866,7 +912,10 @@ HRESULT WINAPI extCreateAdditionalSwapChain(void *lpd3d, D3DPRESENT_PARAMETERS * OutTraceD(" PresentationInterval = 0x%x\n", *(tmp ++)); //((LPDIRECT3D9)lpd3d)->GetAdapterDisplayMode(0, &mode); - (*pGetAdapterDisplayMode)(lpd3d, 0, &mode); + if (dwD3DVersion == 9) + (*pGetAdapterDisplayMode9)(lpd3d, 0, &mode); + else + (*pGetAdapterDisplayMode8)(lpd3d, 0, &mode); param[2] = mode.Format; OutTraceD(" Current Format = 0x%x\n", mode.Format); diff --git a/dll/ole32.cpp b/dll/ole32.cpp index 1e67ee5..263ede1 100644 --- a/dll/ole32.cpp +++ b/dll/ole32.cpp @@ -5,6 +5,8 @@ #include "dxhook.h" #include "dxhelper.h" +extern void HookModule(HMODULE, int); + static HookEntry_Type Hooks[]={ {"CoCreateInstance", NULL, (FARPROC *)&pCoCreateInstance, (FARPROC)extCoCreateInstance}, {"CoCreateInstanceEx", NULL, (FARPROC *)&pCoCreateInstanceEx, (FARPROC)extCoCreateInstanceEx}, @@ -46,9 +48,7 @@ HRESULT STDAPICALLTYPE extCoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, OutTraceD("CoCreateInstance: CLSID_FilterGraph RIID=%x\n", *(DWORD *)&riid); qlib=(*pLoadLibraryA)("quartz.dll"); OutTraceD("CoCreateInstance: quartz lib handle=%x\n", qlib); - HookKernel32(qlib); - HookUser32(qlib); - HookWinMM(qlib); + HookModule(qlib, 0); } res=(*pCoCreateInstance)(rclsid, pUnkOuter, dwClsContext, riid, ppv); @@ -126,9 +126,7 @@ HRESULT STDAPICALLTYPE extCoCreateInstanceEx(REFCLSID rclsid, IUnknown *punkOute OutTraceD("CoCreateInstanceEx: CLSID_FilterGraph RIID=%x\n", *(DWORD *)&riid); qlib=(*pLoadLibraryA)("quartz.dll"); OutTraceD("CoCreateInstanceEx: quartz lib handle=%x\n", qlib); - HookKernel32(qlib); - HookUser32(qlib); - HookWinMM(qlib); + HookModule(qlib, 0); } if (*(DWORD *)&rclsid==*(DWORD *)&CLSID_DirectDraw){ diff --git a/dll/syslibs.h b/dll/syslibs.h index e2b2c98..21705e6 100644 --- a/dll/syslibs.h +++ b/dll/syslibs.h @@ -108,6 +108,10 @@ typedef LPTOP_LEVEL_EXCEPTION_FILTER (WINAPI *SetUnhandledExceptionFilter_Type)(LPTOP_LEVEL_EXCEPTION_FILTER); typedef void (WINAPI *Sleep_Type)(DWORD); typedef DWORD (WINAPI *SleepEx_Type)(DWORD, BOOL); +typedef BOOL (WINAPI *CreateScalableFontResourceA_Type)(DWORD, LPCTSTR, LPCTSTR, LPCTSTR); +typedef int (WINAPI *AddFontResourceA_Type)(LPCTSTR); +typedef BOOL (WINAPI *CreateScalableFontResourceW_Type)(DWORD, LPCWSTR, LPCWSTR, LPCWSTR); +typedef int (WINAPI *AddFontResourceW_Type)(LPCWSTR); // ole32.dll: typedef HRESULT (STDAPICALLTYPE *CoCreateInstance_Type)(REFCLSID, LPUNKNOWN, DWORD, REFIID, LPVOID FAR*); @@ -159,6 +163,10 @@ typedef BOOL (WINAPI *DestroyWindow_Type)(HWND); typedef BOOL (WINAPI *CloseWindow_Type)(HWND); typedef BOOL (WINAPI *SetSysColors_Type)(int, const INT *, const COLORREF *); typedef HDC (WINAPI *GetDCEx_Type)(HWND, HRGN, DWORD); +typedef BOOL (WINAPI *UpdateWindow_Type)(HWND); +typedef BOOL (WINAPI *GetWindowPlacement_Type)(HWND, WINDOWPLACEMENT *); +typedef BOOL (WINAPI *SetWindowPlacement_Type)(HWND, WINDOWPLACEMENT *); +typedef HWND (WINAPI *SetCapture_Type)(HWND); // Winmm.dll: typedef MCIERROR(WINAPI *mciSendCommand_Type)(MCIDEVICEID, UINT, DWORD_PTR, DWORD_PTR); @@ -253,6 +261,10 @@ DXWEXTERN GetViewportOrgEx_Type pGetViewportOrgEx DXWINITIALIZED; DXWEXTERN GetWindowOrgEx_Type pGetWindowOrgEx DXWINITIALIZED; DXWEXTERN SetWindowOrgEx_Type pSetWindowOrgEx DXWINITIALIZED; DXWEXTERN GetCurrentPositionEx_Type pGetCurrentPositionEx DXWINITIALIZED; +DXWEXTERN CreateScalableFontResourceA_Type pCreateScalableFontResourceA DXWINITIALIZED; +DXWEXTERN AddFontResourceA_Type pAddFontResourceA DXWINITIALIZED; +DXWEXTERN CreateScalableFontResourceW_Type pCreateScalableFontResourceW DXWINITIALIZED; +DXWEXTERN AddFontResourceW_Type pAddFontResourceW DXWINITIALIZED; // Kernel32.dll: DXWEXTERN GetDiskFreeSpaceA_Type pGetDiskFreeSpaceA DXWINITIALIZED; @@ -325,6 +337,10 @@ DXWEXTERN DestroyWindow_Type pDestroyWindow DXWINITIALIZED; DXWEXTERN CloseWindow_Type pCloseWindow DXWINITIALIZED; DXWEXTERN SetSysColors_Type pSetSysColors DXWINITIALIZED; DXWEXTERN GetDCEx_Type pGDIGetDCEx DXWINITIALIZED; +DXWEXTERN UpdateWindow_Type pUpdateWindow DXWINITIALIZED; +DXWEXTERN GetWindowPlacement_Type pGetWindowPlacement DXWINITIALIZED; +DXWEXTERN SetWindowPlacement_Type pSetWindowPlacement DXWINITIALIZED; +DXWEXTERN SetCapture_Type pSetCapture DXWINITIALIZED; // Winmm.dll: DXWEXTERN mciSendCommand_Type pmciSendCommand DXWINITIALIZED; @@ -412,6 +428,10 @@ extern BOOL WINAPI extGetViewportOrgEx(HDC, LPPOINT); extern BOOL WINAPI extGetWindowOrgEx(HDC, LPPOINT); extern BOOL WINAPI extSetWindowOrgEx(HDC, int, int, LPPOINT); extern BOOL WINAPI extGetCurrentPositionEx(HDC, LPPOINT); +extern BOOL WINAPI extCreateScalableFontResourceA(DWORD, LPCTSTR, LPCTSTR, LPCTSTR); +extern int WINAPI extAddFontResourceA(LPCTSTR); +extern BOOL WINAPI extCreateScalableFontResourceW(DWORD, LPCWSTR, LPCWSTR, LPCWSTR); +extern int WINAPI extAddFontResourceW(LPCWSTR); // Kernel32.dll: extern BOOL WINAPI extGetDiskFreeSpaceA(LPCSTR, LPDWORD, LPDWORD, LPDWORD, LPDWORD); @@ -488,7 +508,10 @@ extern BOOL WINAPI extDestroyWindow(HWND); extern BOOL WINAPI extCloseWindow(HWND); extern BOOL WINAPI extSetSysColors(int, const INT *, const COLORREF *); extern HDC WINAPI extGDIGetDCEx(HWND, HRGN, DWORD); - +extern BOOL WINAPI extUpdateWindow(HWND); +extern BOOL WINAPI extGetWindowPlacement(HWND, WINDOWPLACEMENT *); +extern BOOL WINAPI extSetWindowPlacement(HWND, WINDOWPLACEMENT *); +extern HWND WINAPI extSetCapture(HWND); // Winmm.dll: extern MCIERROR WINAPI extmciSendCommand(MCIDEVICEID, UINT, DWORD_PTR, DWORD_PTR); diff --git a/dll/user32.cpp b/dll/user32.cpp index adc21d9..9ee20e8 100644 --- a/dll/user32.cpp +++ b/dll/user32.cpp @@ -11,6 +11,8 @@ #include "dxhelper.h" static HookEntry_Type Hooks[]={ + {"UpdateWindow", (FARPROC)NULL, (FARPROC *)&pUpdateWindow, (FARPROC)extUpdateWindow}, + {"GetWindowPlacement", (FARPROC)NULL, (FARPROC *)&pGetWindowPlacement, (FARPROC)extGetWindowPlacement}, {"ChangeDisplaySettingsA", (FARPROC)ChangeDisplaySettingsA, (FARPROC *)&pChangeDisplaySettings, (FARPROC)extChangeDisplaySettings}, {"ChangeDisplaySettingsExA", (FARPROC)ChangeDisplaySettingsA, (FARPROC *)&pChangeDisplaySettingsEx, (FARPROC)extChangeDisplaySettingsEx}, {"BeginPaint", (FARPROC)BeginPaint, (FARPROC *)&pBeginPaint, (FARPROC)extBeginPaint}, @@ -34,6 +36,7 @@ static HookEntry_Type Hooks[]={ {"CloseWindow", (FARPROC)NULL, (FARPROC *)&pCloseWindow, (FARPROC)extCloseWindow}, {"DestroyWindow", (FARPROC)NULL, (FARPROC *)&pDestroyWindow, (FARPROC)extDestroyWindow}, {"SetSysColors", (FARPROC)NULL, (FARPROC *)&pSetSysColors, (FARPROC)extSetSysColors}, + {"SetCapture", (FARPROC)NULL, (FARPROC *)&pSetCapture, (FARPROC)extSetCapture}, {0, NULL, 0, 0} // terminator }; @@ -654,6 +657,11 @@ LRESULT WINAPI extSendMessage(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam) (*pGetClientRect)(dxw.GethWnd(), &rect); curr.x = (prev.x * rect.right) / dxw.GetScreenWidth(); curr.y = (prev.y * rect.bottom) / dxw.GetScreenHeight(); + if (Msg == WM_MOUSEWHEEL){ // v2.02.33 mousewheel fix + POINT upleft={0,0}; + (*pClientToScreen)(dxw.GethWnd(), &upleft); + curr = dxw.AddCoordinates(curr, upleft); + } lParam = MAKELPARAM(curr.x, curr.y); OutTraceC("SendMessage: hwnd=%x pos XY=(%d,%d)->(%d,%d)\n", hwnd, prev.x, prev.y, curr.x, curr.y); break; @@ -1811,3 +1819,85 @@ BOOL WINAPI extSetSysColors(int cElements, const INT *lpaElements, const COLORRE if(!ret) OutTraceE("SetSysColors: ERROR er=%d\n", GetLastError()); return ret; } + +BOOL WINAPI extUpdateWindow(HWND hwnd) +{ + BOOL ret; + OutTraceD("UpdateWindow: hwnd=%x\n", hwnd); + + if(dxw.IsRealDesktop(hwnd)){ + OutTraceD("UpdateWindow: remapping hwnd=%x->%x\n", hwnd, dxw.GethWnd()); + hwnd=dxw.GethWnd(); + } + + ret=(*pUpdateWindow)(hwnd); + if(!ret) OutTraceE("UpdateWindow: ERROR er=%d\n", GetLastError()); + return ret; +} + +BOOL WINAPI extGetWindowPlacement(HWND hwnd, WINDOWPLACEMENT *lpwndpl) +{ + BOOL ret; + OutTraceD("GetWindowPlacement: hwnd=%x\n", hwnd); + + if(dxw.IsRealDesktop(hwnd)){ + OutTraceD("GetWindowPlacement: remapping hwnd=%x->%x\n", hwnd, dxw.GethWnd()); + hwnd=dxw.GethWnd(); + } + + ret=(*pGetWindowPlacement)(hwnd, lpwndpl); + OutTraceD("GetWindowPlacement: flags=%x showCmd=%x MinPosition=(%d,%d) MaxPosition=(%d,%d) NormalPosition=(%d,%d)-(%d,%d)\n", + lpwndpl->flags, lpwndpl->showCmd, + lpwndpl->ptMinPosition.x, lpwndpl->ptMinPosition.y, + lpwndpl->ptMaxPosition.x, lpwndpl->ptMaxPosition.y, + lpwndpl->rcNormalPosition.left, lpwndpl->rcNormalPosition.top, lpwndpl->rcNormalPosition.right, lpwndpl->rcNormalPosition.bottom); + + switch (lpwndpl->showCmd){ + case SW_SHOW: + if (dxw.IsFullScreen()){ + lpwndpl->showCmd = SW_MAXIMIZE; + OutTraceD("GetWindowPlacement: forcing SW_MAXIMIZE state\n"); + } + break; + } + if(!ret) OutTraceE("GetWindowPlacement: ERROR er=%d\n", GetLastError()); + return ret; +} + +BOOL WINAPI extSetWindowPlacement(HWND hwnd, WINDOWPLACEMENT *lpwndpl) +{ + BOOL ret; + OutTraceD("SetWindowPlacement: hwnd=%x\n", hwnd); + + if(dxw.IsRealDesktop(hwnd)){ + OutTraceD("SetWindowPlacement: remapping hwnd=%x->%x\n", hwnd, dxw.GethWnd()); + hwnd=dxw.GethWnd(); + } + + OutTraceD("SetWindowPlacement: flags=%x showCmd=%x MinPosition=(%d,%d) MaxPosition=(%d,%d) NormalPosition=(%d,%d)-(%d,%d)\n", + lpwndpl->flags, lpwndpl->showCmd, + lpwndpl->ptMinPosition.x, lpwndpl->ptMinPosition.y, + lpwndpl->ptMaxPosition.x, lpwndpl->ptMaxPosition.y, + lpwndpl->rcNormalPosition.left, lpwndpl->rcNormalPosition.top, lpwndpl->rcNormalPosition.right, lpwndpl->rcNormalPosition.bottom); + + switch (lpwndpl->showCmd){ + case SW_SHOW: + if (dxw.IsFullScreen()){ + lpwndpl->showCmd = SW_MAXIMIZE; + OutTraceD("SetWindowPlacement: forcing SW_MAXIMIZE state\n"); + } + break; + } + ret=(*pSetWindowPlacement)(hwnd, lpwndpl); + if(!ret) OutTraceE("SetWindowPlacement: ERROR er=%d\n", GetLastError()); + return ret; +} + +HWND WINAPI extSetCapture(HWND hwnd) +{ + HWND ret; + OutTraceD("SetCapture: hwnd=%x\n", hwnd); + ret=(*pSetCapture)(hwnd); + OutTraceD("SetCapture: ret=%x\n", ret); + return ret; +} \ No newline at end of file diff --git a/host/Resource.h b/host/Resource.h index c256518..5becd67 100644 --- a/host/Resource.h +++ b/host/Resource.h @@ -163,6 +163,10 @@ #define IDC_GDISCALED 1120 #define IDC_EMULATEDC 1121 #define IDC_MAPGDITOPRIMARY 1122 +#define IDC_FULLSCREENONLY 1123 +#define IDC_FONTBYPASS 1124 +#define IDC_YUV2RGB 1125 +#define IDC_RGB2YUV 1126 #define ID_MODIFY 32771 #define ID_DELETE 32772 #define ID_ADD 32773 diff --git a/host/TabColor.cpp b/host/TabColor.cpp index 692c411..5874151 100644 --- a/host/TabColor.cpp +++ b/host/TabColor.cpp @@ -34,6 +34,8 @@ void CTabColor::DoDataExchange(CDataExchange* pDX) DDX_Check(pDX, IDC_BLACKWHITE, cTarget->m_BlackWhite); DDX_Check(pDX, IDC_USERGB565, cTarget->m_UseRGB565); DDX_Check(pDX, IDC_LOCKSYSCOLORS, cTarget->m_LockSysColors); + DDX_Check(pDX, IDC_RGB2YUV, cTarget->m_ForceRGBtoYUV); + DDX_Check(pDX, IDC_YUV2RGB, cTarget->m_ForceYUVtoRGB); } BEGIN_MESSAGE_MAP(CTabColor, CDialog) diff --git a/host/TabCompat.cpp b/host/TabCompat.cpp index 2f6fa49..b102458 100644 --- a/host/TabCompat.cpp +++ b/host/TabCompat.cpp @@ -35,6 +35,7 @@ void CTabCompat::DoDataExchange(CDataExchange* pDX) DDX_Check(pDX, IDC_SUPPRESSIME, cTarget->m_SuppressIME); DDX_Check(pDX, IDC_SUPPRESSD3DEXT, cTarget->m_SuppressD3DExt); DDX_Check(pDX, IDC_CDROMDRIVETYPE, cTarget->m_CDROMDriveType); + DDX_Check(pDX, IDC_FONTBYPASS, cTarget->m_FontBypass); } BEGIN_MESSAGE_MAP(CTabCompat, CDialog) diff --git a/host/TabProgram.cpp b/host/TabProgram.cpp index cf43eaa..90b34ed 100644 --- a/host/TabProgram.cpp +++ b/host/TabProgram.cpp @@ -35,6 +35,7 @@ void CTabProgram::DoDataExchange(CDataExchange* pDX) DDX_Check(pDX, IDC_WINDOWIZE, cTarget->m_Windowize); DDX_Check(pDX, IDC_HOOKDLLS, cTarget->m_HookDLLs); DDX_Check(pDX, IDC_EMULATEREGISTRY, cTarget->m_EmulateRegistry); + DDX_Check(pDX, IDC_FULLSCREENONLY, cTarget->m_FullScreenOnly); DDX_Check(pDX, IDC_HOOKCHILDWIN, cTarget->m_HookChildWin); DDX_Check(pDX, IDC_HOOKENABLED, cTarget->m_HookEnabled); DDX_Check(pDX, IDC_NOBANNER, cTarget->m_NoBanner); diff --git a/host/TargetDlg.cpp b/host/TargetDlg.cpp index 0f75ead..ebdfc70 100644 --- a/host/TargetDlg.cpp +++ b/host/TargetDlg.cpp @@ -20,7 +20,7 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/) //{{AFX_DATA_INIT(CTargetDlg) m_DXVersion = -1; m_Coordinates = 0; - m_DxEmulationMode = 0; // default: no emulation + m_DxEmulationMode = 3; // default: EMULATESURFACE m_DCEmulationMode = 0; // default: no emulation m_HookDI = FALSE; m_ModifyMouse = TRUE; // default true !! @@ -37,15 +37,19 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/) m_SetCompatibility = FALSE; m_DisableHAL = FALSE; m_LockSysColors = FALSE; + m_ForceYUVtoRGB = FALSE; + m_ForceRGBtoYUV = FALSE; m_SaveCaps = FALSE; m_SingleProcAffinity = FALSE; m_LimitResources = FALSE; m_CDROMDriveType = FALSE; + m_FontBypass = FALSE; m_UnNotify = FALSE; m_Windowize = TRUE; // default true !! m_HookDLLs = TRUE; // default true !! m_HookEnabled = TRUE; // default true !! m_EmulateRegistry = FALSE; // default true !! + m_FullScreenOnly = FALSE; m_NoBanner = FALSE; m_StartDebug = FALSE; m_FilePath = _T(""); diff --git a/host/TargetDlg.h b/host/TargetDlg.h index a18a025..b62f1ee 100644 --- a/host/TargetDlg.h +++ b/host/TargetDlg.h @@ -44,6 +44,7 @@ public: BOOL m_Windowize; BOOL m_HookDLLs; BOOL m_EmulateRegistry; + BOOL m_FullScreenOnly; BOOL m_NoBanner; BOOL m_StartDebug; BOOL m_HookEnabled; @@ -103,6 +104,7 @@ public: BOOL m_NoPaletteUpdate; BOOL m_LimitResources; BOOL m_CDROMDriveType; + BOOL m_FontBypass; BOOL m_SuppressIME; BOOL m_SetCompatibility; BOOL m_DisableHAL; @@ -113,6 +115,8 @@ public: BOOL m_BlackWhite; BOOL m_SuppressD3DExt; BOOL m_Force16BPP; + BOOL m_ForceYUVtoRGB; + BOOL m_ForceRGBtoYUV; int m_InitX; int m_InitY; int m_MaxX; diff --git a/host/dxwndhost.aps b/host/dxwndhost.aps index f0015a50fa15a8f0baafc946b173b9285f09a3f0..2339bdcf821c2af0ad9635f4ad1c33f59ef09925 100644 GIT binary patch delta 16729 zcmZ`=3!Ie2k^lMwd9x3eeZelfprC-l%q;A~L~$P9?v6VY)7&AF4Gy`gj>l`%BS zoL@04Gq5DdL>ti}&#gBo8KE=iY%l=d5S=0CZU(N5 zdxMEo4~^2<;rx$&c(bYAT|zFW;L=^-+(mWzKyJ zB|tu#3ukf+UhZu2gHvgSwmX{{isAA!ECaio`-{M$l{y0f=K%)8CPJKO3v~v9&Xy9` zM;>w>WH?Kg3uj5X&On><5JL%&PlpGxWZllda_4{bi}$N$^|1cze$~+U2osS+q(W{W z%T!&?R=wl_Raf^LMrXq-J>pKdV8D4)U-*EUUH4nY#fAoxF{s42kn@=S;RC8kJ+5zm zK()qyH=27JlP!0)F`_S?NR(s?wmVOhz!@()&~HZUaGuoFTU2f1?-|V+`Osa?cD-VY zs-L}s(eY%=8w%tx-zlDv&QQ?Vsju9kY8LKdf;0_Fa=@2&J5D~F&gR=<`6&E3lS;sw zoqhVQEviNB*E_bTR`sktLQl`>iU*pA2+ix;?)^?4`MWy*xtrvE*m{$9z0&MNokwmr>t*W319*Zq@i?;Gb1+jh@*x7W6R zIo|!eZ66=+J|XQ*FP!4;R5Lj;%Y*h(eaA%ibRkm>`i+V1TlQ(urX!QwmtFh#SNe^q z?tAuWjXpNbeaJqIYxvRA&L*>yrEobAm>cfL)Gp=%ji-4(`xro`}C~-<_x#nKK+A!W=2sA z^L`Ut0|7HChO;G+yxdlMbDb)&bLof^^osrn*MR=NvCSv zsrt}NceW7geY!UD(np5lb-^g4r11YUIF#8N;U zCs0+&*ZQZ&;el;>%W<_>#q_(!Rm;>?=M3i>r_*V77V66XQ&;{4cwSHXOwAY}j&%Q1^68hy%5ScC>i{--+%y}d=`4%?-O3(8GU-o;S^kmsV6l5oEY5UfCc`kA!n%i^ zF!{=Cex;Ym##6~WOqz0HUN+v7jma zz@W_0NZBM2w2hRE=aIO>@f-{c2x&-=cnnFNAj?PX?ZGfdZo5tSlqtOAAIvLJTLPUIO#Rgp&b52xL$`pc@`CUM@3? zc;W~6098iI&C@Vkpxrc+DW}70nz2RgJ+yKT_yyi7PXp4+wQiEBg}=b$7L5^Xq|i?0M-8|GK9xKq`RF!B_`h|)=RIGf9aQGvE$ zYN_J{;7U#mpJr&2K#e2AuNm4bP~*%p@*D(r&<_!y$F4pg&_?f42W*TnGYZw(9~p<1-bhah9Y6v z+(+qxbbx(XqzG>WyuqZWSUlrJb3^DOYF6l< z|4P;LbN@=|pX(2&VI3q{Heq=dA}HxSt0;qHTS~x;snWmRqUKO%n-nGW2A7L{s*4zt ze}l_qUT5gmb!z4X%%-MDB)ON;F=J*HF_eFU$j1z>ErM+l7IW1(y6+Ea);NTOzWfhr z4mbYg4{G*^FG$jvcru6DwFl1G?}P#ptwR?{WmmBxW`UuJe%*#CYU82xX+0 zXnwdqoQ!vS*&MChWhsO9f^fTZ5kXqh!bkv7d0H`t5OoqI14?belAXWvC)JSgnU_ei z@e2(Jr$w89kOty?9uERBFLLr5m3 zJ_Sy6rF;ULp{D8`j1FY7RDlITqO!5HmkdV|UNjL;SEZ>o1YVS{)aR{N^%GdONYu*Q;5^ z0gTLW0O*6r$s+NP@!CWs;|4&-hOCF!CDEW_Lx|5Ij~v0SiUyI3=h)tDGLOdG*#v6e zU;t&H6CxFiz+{i2!Dz`Wp~!P`BoQr~`uYvlEQX!&&u}8wjioSP*UV{p>jt~j8~xI$ zEV++eEKO$s$$ji z)fH~tR6xWHtMym!E}x4?INFE!4(D>=D0!Y;>5R|gSjyxp%zzS#rlXl=Zz$@ebJ)j_JHWZwOJ?eu{|D!2 z+%^^>XZ0cj6kF{QdxlGPAe}}uXUW?n_}a@ePbwBp6jheVHd>Lf!r3&67L@Jr6nJ+? zDq{R>)V%%i9Jr?jGEt5o98-#bfsHoXQpFHO@t-rLL_88tn7r5_wlEsNzDami4$A<| zbcfi�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 delta 2655 zcmZuy3s6+o8UD|4-CZ8REpL_u(b5EKio18EEXESh#YzNs!!9o&S<|XnB?zuT1yQ$+ znWi1JnqN6ib!uaih)Fc0OOytamX=L<h=h2weVK}9u0G0k;N7cr*X?M$@!*FHLU9jM7(dOiWhi@mfpI5%0VDKa|4;xshK-m%UUd>^JBVnUf&S8V2VPQf&hXU`aVnuOLWr^#@vZf;!I#kVD=vm}jR9sS`s(J7p zVC3!${s%zoZcBDZ^(-hZDe^6JxfV%J-fZYpRVny9-oi4kD(AraSYS%1Ii?1wj8B$R zLwRs~OdM<8VYNb+D$~Y{nH^Re{Bc~J;8x%R>@X#ybgNOdZFgb0NA9S@ngb^Q3-(x2 zKMY693afo(MILW>#~oG&d<3{?XXOk&xR`>(}*Hpw=B(uSv zREx8!a`)Z=b6C^fm_xC{1pr^6 z+vBr4ee+$5y=ATv57^*ufZJQr*(E#|o53#Qo!F`D?-(6tVOK&k;+}lc3b1VwKqj3} z3!xI`(f7y*HARmVB6M6uQVTy3x>o}kOu=b^nNj1~d@K!2#SMYR|D!#Nfwi%rZDpLN zjaa^2=^f$S1;61>XNw{YFN@6 zMj?021%~!#9t~5Lgn?)7Xn00w{j>kz8mYy=a|0S)jhlY*p@uhyJU?}5McHobUiSTP zfd7W!$tCHSw!BtzzJaeU??BHAtyJ9mtk^lZE6rV5* zE=|CvoSn zCyQfEJe>#inEw~E=$D$`AO@w@Z@{A$&BD5lw7C)Z@ULd!mN+X?RIH=;#Yo)oxmn*s z_r&9mVBaN5DZ{3CjJatR7bP|(iObSjFb(tj%)+#uw2n+X`W2;>*!mb|_fuMlPt3#* zzBY?Si7k(#`My~nq%ng(z|Dh{n&jyj^dA}-nM|M8!arxa+(w_%FpnJ5$r1b|EgN<85E+umwzYvsZRRO@Y4IKstJW~HUf#QV4~e6M4H7TyqU58d ztX`3iTHu9V%Gpe5W?uubPlDk-DlM%vE%XeDYp2L6Z{zr35ZB4UOSpL0%)>p!$1ySU zCQC8Mo4JZe0}-|Stz!VB+I@THwwMu|x*s(4BLbIH#kbkU5V%`UzMoURD{m5MB=QQQ<_}R$X~{fH&8#K$;L`wS4zpeB(+u)}-Z{ju Sp)6fbM`*za6Ll~0wEqH3VFu#> diff --git a/host/dxwndhost.rc b/host/dxwndhost.rc index 21ac183..e24db61 100644 --- a/host/dxwndhost.rc +++ b/host/dxwndhost.rc @@ -259,21 +259,22 @@ BEGIN EDITTEXT IDC_POSY,55,210,19,14,ES_AUTOHSCROLL | ES_NUMBER,WS_EX_RIGHT EDITTEXT IDC_SIZX,85,210,19,14,ES_AUTOHSCROLL,WS_EX_RIGHT EDITTEXT IDC_SIZY,113,210,19,14,ES_AUTOHSCROLL,WS_EX_RIGHT - CONTROL "Do not notify on task switch",IDC_UNNOTIFY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,122,124,10 - CONTROL "Optimize CPU (DirectX1 - 7)",IDC_SAVELOAD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,170,152,109,10 - CONTROL "Intercept Alt-F4 key",IDC_HANDLEALTF4,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,132,109,10 - CONTROL "Run in Window",IDC_WINDOWIZE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,142,124,10 + CONTROL "Do not notify on task switch",IDC_UNNOTIFY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,124,124,10 + CONTROL "Optimize CPU (DirectX1 - 7)",IDC_SAVELOAD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,170,160,109,10 + CONTROL "Intercept Alt-F4 key",IDC_HANDLEALTF4,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,136,109,10 + CONTROL "Run in Window",IDC_WINDOWIZE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,148,124,10 GROUPBOX "Generic",IDC_STATIC,7,103,286,88 - CONTROL "No banner",IDC_NOBANNER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,170,122,108,10 - CONTROL "use DLL Injection",IDC_STARTDEBUG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,170,132,100,10 + CONTROL "No banner",IDC_NOBANNER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,170,124,108,10 + CONTROL "use DLL Injection",IDC_STARTDEBUG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,170,136,100,10 CONTROL "Remap Client Rect",IDC_CLIENTREMAPPING,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,170,112,115,10 - CONTROL "Hook all DLLs",IDC_HOOKDLLS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,152,124,10 + CONTROL "Hook all DLLs",IDC_HOOKDLLS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,160,124,10 CONTROL "Hook enabled",IDC_HOOKENABLED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,112,124,10 CONTROL "X,Y coordinates",IDC_COORDINATES,"Button",BS_AUTORADIOBUTTON | WS_GROUP,170,198,95,10 CONTROL "Desktop work area",IDC_DESKTOPWORKAREA,"Button",BS_AUTORADIOBUTTON,170,208,95,10 CONTROL "Desktop center",IDC_DESKTOPCENTER,"Button",BS_AUTORADIOBUTTON,170,218,95,10 - CONTROL "Hook child WindowProc",IDC_HOOKCHILDWIN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,170,142,124,10 - CONTROL "Emulate Registry",IDC_EMULATEREGISTRY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,162,124,10 + CONTROL "Hook child WindowProc",IDC_HOOKCHILDWIN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,170,148,114,10 + CONTROL "Emulate Registry",IDC_EMULATEREGISTRY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,172,124,10 + CONTROL "Fullscreen only",IDC_FULLSCREENONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,170,172,114,10 END IDD_TAB_LOG DIALOGEX 0, 0, 300, 240 @@ -432,6 +433,7 @@ BEGIN CONTROL "Set single core process affinity",IDC_SINGLEPROCAFFINITY, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,164,109,12 CONTROL "Set CDROM Drive Type",IDC_CDROMDRIVETYPE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,152,109,12 + CONTROL "Bypass font unsupported api",IDC_FONTBYPASS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,140,109,12 END IDD_TAB_GDI DIALOGEX 0, 0, 300, 240 @@ -459,6 +461,8 @@ BEGIN CONTROL "Simulate BW monitor",IDC_BLACKWHITE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,76,96,10 CONTROL "Set 16BPP RGB565 encoding",IDC_USERGB565,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,88,126,9 CONTROL "Lock Sys Colors",IDC_LOCKSYSCOLORS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,100,126,9 + CONTROL "Simulate YUV to RGB color conv.",IDC_YUV2RGB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,112,126,9 + CONTROL "Simulate RGB to YUV color conv.",IDC_RGB2YUV,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,124,126,9 END diff --git a/host/dxwndhost.vs2008.suo b/host/dxwndhost.vs2008.suo index 9553ebbe84df9e2c788e115bf93cbbd89b80c5ee..ad316851092fc7f25e9f209253ef9e62f3b4854b 100644 GIT binary patch delta 5899 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 delta 3210 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 t->flags3 |= HOOKENABLED; if(dlg->m_NoBanner) t->flags2 |= NOBANNER; if(dlg->m_StartDebug) t->flags2 |= STARTDEBUG; + if(dlg->m_FullScreenOnly) t->flags3 |= FULLSCREENONLY; t->flags &= ~EMULATEFLAGS; switch(dlg->m_DxEmulationMode){ @@ -146,11 +147,14 @@ static void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg) if(dlg->m_HandleExceptions) t->flags |= HANDLEEXCEPTIONS; if(dlg->m_LimitResources) t->flags2 |= LIMITRESOURCES; if(dlg->m_CDROMDriveType) t->flags3 |= CDROMDRIVETYPE; + if(dlg->m_FontBypass) t->flags3 |= FONTBYPASS; if(dlg->m_SuppressIME) t->flags2 |= SUPPRESSIME; if(dlg->m_SuppressD3DExt) t->flags3 |= SUPPRESSD3DEXT; if(dlg->m_SetCompatibility) t->flags2 |= SETCOMPATIBILITY; if(dlg->m_DisableHAL) t->flags3 |= DISABLEHAL; if(dlg->m_LockSysColors) t->flags3 |= LOCKSYSCOLORS; + if(dlg->m_ForceYUVtoRGB) t->flags3 |= YUV2RGB; + if(dlg->m_ForceRGBtoYUV) t->flags3 |= RGB2YUV; if(dlg->m_SaveCaps) t->flags3 |= SAVECAPS; if(dlg->m_SingleProcAffinity) t->flags3 |= SINGLEPROCAFFINITY; if(dlg->m_SaveLoad) t->flags |= SAVELOAD; @@ -237,6 +241,7 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg) dlg->m_HookEnabled = t->flags3 & HOOKENABLED ? 1 : 0; dlg->m_NoBanner = t->flags2 & NOBANNER ? 1 : 0; dlg->m_StartDebug = t->flags2 & STARTDEBUG ? 1 : 0; + dlg->m_FullScreenOnly = t->flags3 & FULLSCREENONLY ? 1 : 0; dlg->m_DxEmulationMode = 0; if(t->flags & EMULATEBUFFER) dlg->m_DxEmulationMode = 1; @@ -267,10 +272,13 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg) dlg->m_SetCompatibility = t->flags2 & SETCOMPATIBILITY ? 1 : 0; dlg->m_DisableHAL = t->flags3 & DISABLEHAL ? 1 : 0; dlg->m_LockSysColors = t->flags3 & LOCKSYSCOLORS ? 1 : 0; + dlg->m_ForceRGBtoYUV = t->flags3 & RGB2YUV ? 1 : 0; + dlg->m_ForceYUVtoRGB = t->flags3 & YUV2RGB ? 1 : 0; dlg->m_SaveCaps = t->flags3 & SAVECAPS ? 1 : 0; dlg->m_SingleProcAffinity = t->flags3 & SINGLEPROCAFFINITY ? 1 : 0; dlg->m_LimitResources = t->flags2 & LIMITRESOURCES ? 1 : 0; dlg->m_CDROMDriveType = t->flags3 & CDROMDRIVETYPE ? 1 : 0; + dlg->m_FontBypass = t->flags3 & FONTBYPASS ? 1 : 0; dlg->m_SaveLoad = t->flags & SAVELOAD ? 1 : 0; dlg->m_SlowDown = t->flags & SLOWDOWN ? 1 : 0; dlg->m_BlitFromBackBuffer = t->flags & BLITFROMBACKBUFFER ? 1 : 0; @@ -1046,7 +1054,7 @@ void CDxwndhostView::OnAdd() dlg.m_Coordinates = 0; dlg.m_MaxX = 0; //639; dlg.m_MaxY = 0; //479; - dlg.m_DxEmulationMode = 0; + dlg.m_DxEmulationMode = 3; // defaulting to EMULATIONMODE for(i = 0; i < MAXTARGETS; i ++) if(!TargetMaps[i].path[0]) break; if(i>=MAXTARGETS){ MessageBoxEx(0, "Maximum entries number reached.\nDelete some entry to add a new one.", "Warning", MB_OK | MB_ICONEXCLAMATION, NULL);