mirror of
https://github.com/DxWnd/DxWnd.reloaded
synced 2024-12-30 09:25:35 +01:00
v2_04_15_src
Former-commit-id: ed85ecc7b0db29ac5378e8152b132f529999f5f5
This commit is contained in:
parent
0e42098a3d
commit
fb320c8ab3
@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:73c4aac223a633aa820b3761678170f484fb15a016ecd2c41e77d5c820e3dd46
|
||||
size 791552
|
||||
oid sha256:a6e3eed0ef40c5d67c9179b539a02e0d2044ede982322f019816d85db5694161
|
||||
size 793088
|
||||
|
@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:933a86972f0a96e62d8c5f4b656315cf09d656d2a131d1685acdd231b7ac2139
|
||||
oid sha256:b65ce7c723d642c6c753ab05c5e3e8eb4d50fc80592f0e333decdf7e77c0b00e
|
||||
size 677376
|
||||
|
183
build/dxwnd.ini
183
build/dxwnd.ini
@ -1,183 +0,0 @@
|
||||
[window]
|
||||
exportpath=D:\Games\Age of Empires Trial\
|
||||
exepath=D:\Games\Sid Meiers Alpha Centauri Demo\
|
||||
posx=-666
|
||||
posy=95
|
||||
sizx=320
|
||||
sizy=200
|
||||
[target]
|
||||
title0=Planet of the Apes
|
||||
path0=D:\Games\Planet of the Apes\pota.exe
|
||||
startfolder0=
|
||||
launchpath0=
|
||||
module0=
|
||||
opengllib0=
|
||||
notes0=
|
||||
registry0=
|
||||
ver0=0
|
||||
monitorid0=0
|
||||
coord0=0
|
||||
flag0=203423795
|
||||
flagg0=1207959552
|
||||
flagh0=524308
|
||||
flagi0=138412068
|
||||
flagj0=67129472
|
||||
flagk0=-1879044096
|
||||
flagl0=1048576
|
||||
flagm0=0
|
||||
tflag0=0
|
||||
dflag0=0
|
||||
posx0=-1050
|
||||
posy0=100
|
||||
sizx0=800
|
||||
sizy0=600
|
||||
maxfps0=0
|
||||
initts0=0
|
||||
winver0=0
|
||||
maxres0=-1
|
||||
swapeffect0=0
|
||||
maxddinterface0=7
|
||||
slowratio0=2
|
||||
scanline0=1
|
||||
initresw0=0
|
||||
initresh0=0
|
||||
title1=Sid Meiers Alpha Centauri Demo
|
||||
path1=D:\Games\Sid Meiers Alpha Centauri Demo\terran.exe
|
||||
startfolder1=
|
||||
launchpath1=
|
||||
module1=
|
||||
opengllib1=
|
||||
notes1=
|
||||
registry1=
|
||||
ver1=0
|
||||
monitorid1=-1
|
||||
coord1=0
|
||||
flag1=673185826
|
||||
flagg1=1207959616
|
||||
flagh1=32788
|
||||
flagi1=138420228
|
||||
flagj1=4224
|
||||
flagk1=65536
|
||||
flagl1=0
|
||||
flagm1=0
|
||||
tflag1=-2147477245
|
||||
dflag1=0
|
||||
posx1=50
|
||||
posy1=50
|
||||
sizx1=800
|
||||
sizy1=600
|
||||
maxfps1=0
|
||||
initts1=0
|
||||
winver1=0
|
||||
maxres1=0
|
||||
swapeffect1=0
|
||||
maxddinterface1=7
|
||||
slowratio1=2
|
||||
scanline1=0
|
||||
initresw1=800
|
||||
initresh1=600
|
||||
title2=Diablo
|
||||
path2=D:\Games\Diablo\Diablo.exe
|
||||
startfolder2=
|
||||
launchpath2=
|
||||
module2=
|
||||
opengllib2=
|
||||
notes2=
|
||||
registry2=
|
||||
ver2=1
|
||||
monitorid2=0
|
||||
coord2=0
|
||||
flag2=138428450
|
||||
flagg2=1241514000
|
||||
flagh2=8212
|
||||
flagi2=4194304
|
||||
flagj2=128
|
||||
flagk2=262144
|
||||
flagl2=0
|
||||
flagm2=1024
|
||||
tflag2=0
|
||||
dflag2=0
|
||||
posx2=50
|
||||
posy2=50
|
||||
sizx2=800
|
||||
sizy2=600
|
||||
maxfps2=0
|
||||
initts2=0
|
||||
winver2=0
|
||||
maxres2=0
|
||||
swapeffect2=0
|
||||
maxddinterface2=7
|
||||
slowratio2=1
|
||||
scanline2=1
|
||||
initresw2=0
|
||||
initresh2=0
|
||||
title3=TOCA Touring Car Championship demo
|
||||
path3=D:\Games\tocademo\tourcars.exe
|
||||
startfolder3=
|
||||
launchpath3=D:\Games\tocademo\setup.exe
|
||||
module3=
|
||||
opengllib3=
|
||||
notes3=
|
||||
registry3=\n[HKEY_LOCAL_MACHINE\SOFTWARE\Codemasters]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Codemasters\Touring Car]\n"GameDirectory"="F:\\Games\\tourcar\\"\n"CD_Drive"="."\n"Install_Drive"="F:"\n"CardHintIndex"=dword:00000000\n"ShowRunInfo"=dword:00000000\n"S3RunInfo"=dword:00000000\n\n
|
||||
ver3=0
|
||||
monitorid3=-1
|
||||
coord3=0
|
||||
flag3=673185834
|
||||
flagg3=1073741824
|
||||
flagh3=528
|
||||
flagi3=136314880
|
||||
flagj3=4224
|
||||
flagk3=65536
|
||||
flagl3=0
|
||||
flagm3=33554432
|
||||
tflag3=-2147477245
|
||||
dflag3=0
|
||||
posx3=50
|
||||
posy3=50
|
||||
sizx3=800
|
||||
sizy3=600
|
||||
maxfps3=0
|
||||
initts3=0
|
||||
winver3=0
|
||||
maxres3=0
|
||||
swapeffect3=0
|
||||
maxddinterface3=7
|
||||
slowratio3=2
|
||||
scanline3=0
|
||||
initresw3=800
|
||||
initresh3=600
|
||||
title4=empires.exe
|
||||
path4=D:\Games\Age of Empires Trial\empires.exe
|
||||
startfolder4=
|
||||
launchpath4=
|
||||
module4=
|
||||
opengllib4=
|
||||
notes4=
|
||||
registry4=
|
||||
ver4=0
|
||||
monitorid4=-1
|
||||
coord4=0
|
||||
flag4=673710114
|
||||
flagg4=1207959552
|
||||
flagh4=8212
|
||||
flagi4=138412036
|
||||
flagj4=4224
|
||||
flagk4=65536
|
||||
flagl4=0
|
||||
flagm4=2097152
|
||||
tflag4=0
|
||||
dflag4=0
|
||||
posx4=50
|
||||
posy4=50
|
||||
sizx4=800
|
||||
sizy4=600
|
||||
maxfps4=0
|
||||
initts4=0
|
||||
winver4=0
|
||||
maxres4=0
|
||||
swapeffect4=0
|
||||
maxddinterface4=7
|
||||
slowratio4=2
|
||||
scanline4=0
|
||||
initresw4=800
|
||||
initresh4=600
|
@ -1547,3 +1547,15 @@ add: virtual heap (makes some "Wing Commander" games work)
|
||||
fix: freak help->about...
|
||||
add: GUI "Tools->Recover system colors" utility
|
||||
|
||||
v2.04.15
|
||||
fix: suppress DDERR_EXCLUSIVEMODEALREADYSET error in ddraw::SetCooperativeLevel(). Fixes program termination in "Sid Meier's Alpha centauri".
|
||||
fix: exception caught on DirectDrawSurface::Release(): it may fix problems when using ddraw proxies
|
||||
fix: added clipper object to ddraw QueryInterface management
|
||||
fix: added IID_UNKNOWN object to ddraw QueryInterface management
|
||||
fix: better implementation of LIMITRESOURCES flag: now HD virtual space is 100MB free in a 120MB disk.
|
||||
fix: SLOWDOWN flag in PeekMessage now uses dxw.DoSlow(1) instead of *pSleep(1), preserves more messages
|
||||
add: more cases in mciSendCommand wrapper for BYPASSMCI flag
|
||||
fix: in mciSendCommand using ANSI MCI_OVLY_WINDOW_PARMS instead of WIDECHAR version
|
||||
fix: DirectDraw:GetCaps wrapper crash when setting SUPPRESSOVERLAY and the hw or sw caps pointer is NULL
|
||||
fix: exception when trying to use ddraw SetAppCompatData and LoadLibrary failed
|
||||
fix: error messages on LoadLibrary errors
|
||||
|
@ -17,7 +17,7 @@
|
||||
|
||||
extern void SetPixFmt(LPDDSURFACEDESC2);
|
||||
extern void GetPixFmt(LPDDSURFACEDESC2);
|
||||
extern CHAR *LogSurfaceAttributes(LPDDSURFACEDESC, char *, int);
|
||||
extern CHAR *LogSurfaceAttributes(LPDDSURFACEDESC2, char *, int);
|
||||
extern void DumpPixFmt(LPDDSURFACEDESC2);
|
||||
extern void DescribeSurface(LPDIRECTDRAWSURFACE, int, char *, int);
|
||||
extern void HookDDSurface(LPDIRECTDRAWSURFACE *, int, BOOL);
|
||||
@ -95,7 +95,7 @@ static void BuildRealSurfaces(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurfa
|
||||
// try DDSCAPS_SYSTEMMEMORY first, then suppress it if not supported
|
||||
// no, DDSCAPS_SYSTEMMEMORY cause screen flickering while moving the window (and other troubles?)
|
||||
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
|
||||
OutTraceDW("BuildRealSurfaces: %s\n", LogSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[EmuPrim]", __LINE__));
|
||||
OutTraceDW("BuildRealSurfaces: %s\n", LogSurfaceAttributes(&ddsd, "[EmuPrim]", __LINE__));
|
||||
res=(*pCreateSurface)(lpdd, &ddsd, &lpDDSEmu_Prim, 0);
|
||||
if(res==DDERR_PRIMARYSURFACEALREADYEXISTS){
|
||||
OutTraceDW("BuildRealSurfaces: ASSERT DDSEmu_Prim already exists\n");
|
||||
@ -146,11 +146,11 @@ static void BuildRealSurfaces(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurfa
|
||||
ddsd.dwHeight = dxw.GetScreenHeight() << 1;
|
||||
}
|
||||
|
||||
OutTraceDW("BuildRealSurfaces: %s\n", LogSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[EmuBack]", __LINE__));
|
||||
OutTraceDW("BuildRealSurfaces: %s\n", LogSurfaceAttributes(&ddsd, "[EmuBack]", __LINE__));
|
||||
res=(*pCreateSurface)(lpdd, &ddsd, &lpDDSEmu_Back, 0);
|
||||
if(res) {
|
||||
ddsd.ddsCaps.dwCaps &= ~DDSCAPS_SYSTEMMEMORY;
|
||||
OutTraceDW("BuildRealSurfaces: %s\n", LogSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[EmuBack]", __LINE__));
|
||||
OutTraceDW("BuildRealSurfaces: %s\n", LogSurfaceAttributes(&ddsd, "[EmuBack]", __LINE__));
|
||||
res=(*pCreateSurface)(lpdd, &ddsd, &lpDDSEmu_Back, 0);
|
||||
}
|
||||
if(res){
|
||||
@ -213,7 +213,7 @@ static HRESULT BuildPrimaryEmu(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurf
|
||||
ddsd.dwHeight = dxw.GetScreenHeight();
|
||||
|
||||
// create Primary surface
|
||||
OutTraceDW("BuildPrimaryEmu: %s\n", LogSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[Primary]" , __LINE__));
|
||||
OutTraceDW("BuildPrimaryEmu: %s\n", LogSurfaceAttributes(&ddsd, "[Primary]" , __LINE__));
|
||||
res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, 0);
|
||||
if(res){
|
||||
OutTraceE("BuildPrimaryEmu: CreateSurface ERROR on DDSPrim res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
|
||||
@ -293,7 +293,7 @@ static HRESULT BuildPrimaryFlippable(LPDIRECTDRAW lpdd, CreateSurface_Type pCrea
|
||||
ddsd.dwHeight = dxw.GetScreenHeight();
|
||||
|
||||
// create Primary surface
|
||||
OutTraceDW("BuildPrimaryFlippable: %s\n", LogSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[Primary]" , __LINE__));
|
||||
OutTraceDW("BuildPrimaryFlippable: %s\n", LogSurfaceAttributes(&ddsd, "[Primary]" , __LINE__));
|
||||
res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, 0);
|
||||
if(res){
|
||||
OutTraceE("BuildPrimaryFlippable: CreateSurface ERROR on DDSPrim res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
|
||||
@ -346,7 +346,7 @@ static HRESULT BuildPrimaryFullscreen(LPDIRECTDRAW lpdd, CreateSurface_Type pCre
|
||||
memcpy((void *)&ddsd, lpddsd, lpddsd->dwSize);
|
||||
|
||||
// create Primary surface
|
||||
OutTraceDW("BuildPrimaryFullscreen: %s\n", LogSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[Primary]", __LINE__));
|
||||
OutTraceDW("BuildPrimaryFullscreen: %s\n", LogSurfaceAttributes(&ddsd, "[Primary]", __LINE__));
|
||||
res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, 0);
|
||||
if(res){
|
||||
if (res==DDERR_PRIMARYSURFACEALREADYEXISTS){
|
||||
@ -398,7 +398,7 @@ static HRESULT BuildPrimaryDir(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurf
|
||||
}
|
||||
|
||||
// create Primary surface
|
||||
OutTraceDW("BuildPrimaryDir: %s\n", LogSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[Primary]", __LINE__));
|
||||
OutTraceDW("BuildPrimaryDir: %s\n", LogSurfaceAttributes(&ddsd, "[Primary]", __LINE__));
|
||||
res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, 0);
|
||||
if(res){
|
||||
if (res==DDERR_PRIMARYSURFACEALREADYEXISTS){
|
||||
@ -431,7 +431,7 @@ static HRESULT BuildPrimaryDir(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurf
|
||||
ddsd.dwHeight = dxw.GetScreenHeight();
|
||||
ddsd.ddsCaps.dwCaps = 0;
|
||||
if (dxversion >= 4) ddsd.ddsCaps.dwCaps |= DDSCAPS_OFFSCREENPLAIN;
|
||||
OutTraceDW("BuildPrimaryDir: %s\n", LogSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[Dir FixBuf]", __LINE__));
|
||||
OutTraceDW("BuildPrimaryDir: %s\n", LogSurfaceAttributes(&ddsd, "[Dir FixBuf]", __LINE__));
|
||||
res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, 0);
|
||||
if(res){
|
||||
OutTraceE("BuildPrimaryDir: CreateSurface ERROR on DDSPrim res=%x(%s) at %d\n",res, ExplainDDError(res), __LINE__);
|
||||
@ -478,7 +478,7 @@ static HRESULT BuildBackBufferEmu(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateS
|
||||
ddsd.dwHeight = dxw.GetScreenHeight();
|
||||
GetPixFmt(&ddsd);
|
||||
|
||||
OutTraceDW("BuildBackBufferEmu: %s\n", LogSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[Backbuf]", __LINE__));
|
||||
OutTraceDW("BuildBackBufferEmu: %s\n", LogSurfaceAttributes(&ddsd, "[Backbuf]", __LINE__));
|
||||
res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, 0);
|
||||
if(res) {
|
||||
OutTraceE("BuildBackBufferEmu: CreateSurface ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
|
||||
@ -537,7 +537,7 @@ static HRESULT BuildBackBufferFlippable(LPDIRECTDRAW lpdd, CreateSurface_Type pC
|
||||
ddsd.dwHeight = dxw.GetScreenHeight();
|
||||
GetPixFmt(&ddsd);
|
||||
|
||||
OutTraceDW("BuildBackBufferFlippable: %s\n", LogSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[Backbuf]", __LINE__));
|
||||
OutTraceDW("BuildBackBufferFlippable: %s\n", LogSurfaceAttributes(&ddsd, "[Backbuf]", __LINE__));
|
||||
res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, 0);
|
||||
if(res) {
|
||||
OutTraceE("BuildBackBufferFlippable: CreateSurface ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
|
||||
@ -664,7 +664,7 @@ static HRESULT BuildBackBufferDir(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateS
|
||||
ddsd.dwHeight = prim.dwHeight;
|
||||
OutTraceDW("BuildBackBufferDir: BMX FIX res=%x(%s) wxh=(%dx%d)\n", res, ExplainDDError(res),ddsd.dwWidth, ddsd.dwHeight);
|
||||
}
|
||||
OutTraceDW("BuildBackBufferDir: %s\n", LogSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[Backbuf]", __LINE__));
|
||||
OutTraceDW("BuildBackBufferDir: %s\n", LogSurfaceAttributes(&ddsd, "[Backbuf]", __LINE__));
|
||||
res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, 0);
|
||||
if(res) {
|
||||
if ((dxw.dwFlags1 & SWITCHVIDEOMEMORY) && (res==DDERR_OUTOFVIDEOMEMORY)){
|
||||
@ -732,7 +732,7 @@ static HRESULT BuildGenericEmu(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurf
|
||||
}
|
||||
|
||||
OutTraceDW("BuildGenericEmu: CREATED lpddsd=%x version=%d %s\n",
|
||||
*lplpdds, dxversion, LogSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[Emu Generic]", __LINE__));
|
||||
*lplpdds, dxversion, LogSurfaceAttributes(&ddsd, "[Emu Generic]", __LINE__));
|
||||
|
||||
// v2.02.66: if 8BPP paletized surface and a primary palette exixts, apply.
|
||||
// fixes "Virtua Fighter PC" palette bug
|
||||
@ -785,7 +785,7 @@ static HRESULT BuildGenericFlippable(LPDIRECTDRAW lpdd, CreateSurface_Type pCrea
|
||||
}
|
||||
|
||||
OutTraceDW("BuildGenericFlippable: CREATED lpddsd=%x version=%d %s\n",
|
||||
*lplpdds, dxversion, LogSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[Emu Generic]", __LINE__));
|
||||
*lplpdds, dxversion, LogSurfaceAttributes(&ddsd, "[Emu Generic]", __LINE__));
|
||||
|
||||
// v2.02.66: if 8BPP paletized surface and a primary palette exixts, apply.
|
||||
// fixes "Virtua Fighter PC" palette bug
|
||||
@ -810,7 +810,7 @@ static HRESULT BuildGenericDir(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurf
|
||||
HRESULT res;
|
||||
|
||||
OutTraceDW("BuildGenericDir: lpdd=%x pCreateSurface=%x lpddsd=%x version=%d\n", lpdd, pCreateSurface, lpddsd, dxversion);
|
||||
OutTraceDW("BuildGenericDir: %s\n", LogSurfaceAttributes((LPDDSURFACEDESC)lpddsd, "[Dir Generic]", __LINE__));
|
||||
OutTraceDW("BuildGenericDir: %s\n", LogSurfaceAttributes(lpddsd, "[Dir Generic]", __LINE__));
|
||||
|
||||
res = (*pCreateSurface)(lpdd, lpddsd, lplpdds, 0);
|
||||
if(res){
|
||||
@ -828,7 +828,7 @@ static HRESULT BuildGenericDir(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurf
|
||||
}
|
||||
|
||||
OutTraceDW("BuildGenericDir: CREATED lpddsd=%x version=%d %s\n",
|
||||
*lplpdds, dxversion, LogSurfaceAttributes((LPDDSURFACEDESC)lpddsd, "[Dir Generic]", __LINE__));
|
||||
*lplpdds, dxversion, LogSurfaceAttributes(lpddsd, "[Dir Generic]", __LINE__));
|
||||
|
||||
// hooks ....
|
||||
HookDDSurface(lplpdds, dxversion, FALSE);
|
||||
@ -858,7 +858,7 @@ HRESULT WINAPI extCreateSurface(int dxversion, CreateSurface_Type pCreateSurface
|
||||
} SurfaceMode;
|
||||
|
||||
OutTraceDDRAW("CreateSurface(%d): lpdd=%x %s\n",
|
||||
dxversion, lpdd, LogSurfaceAttributes((LPDDSURFACEDESC)lpddsd, "[CreateSurface]", __LINE__));
|
||||
dxversion, lpdd, LogSurfaceAttributes(lpddsd, "[CreateSurface]", __LINE__));
|
||||
|
||||
// v2.03.95.fx1 - deleted: some texture handling REQUIRES a proper FourCC codec.
|
||||
// maybe it could be suppressed by a dedicated config. flag and on primary surfaces only?
|
||||
|
186
dll/ddraw.cpp
186
dll/ddraw.cpp
@ -190,11 +190,11 @@ HRESULT WINAPI extFlip2(LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE, DWORD);
|
||||
HRESULT WINAPI extFlip3(LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE, DWORD);
|
||||
HRESULT WINAPI extFlip4(LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE, DWORD);
|
||||
HRESULT WINAPI extFlip7(LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE, DWORD);
|
||||
HRESULT WINAPI extGetAttachedSurface1(LPDIRECTDRAWSURFACE, DDSCAPS *, LPDIRECTDRAWSURFACE *);
|
||||
HRESULT WINAPI extGetAttachedSurface2(LPDIRECTDRAWSURFACE, DDSCAPS *, LPDIRECTDRAWSURFACE *);
|
||||
HRESULT WINAPI extGetAttachedSurface3(LPDIRECTDRAWSURFACE, DDSCAPS *, LPDIRECTDRAWSURFACE *);
|
||||
HRESULT WINAPI extGetAttachedSurface4(LPDIRECTDRAWSURFACE, DDSCAPS *, LPDIRECTDRAWSURFACE *);
|
||||
HRESULT WINAPI extGetAttachedSurface7(LPDIRECTDRAWSURFACE, DDSCAPS *, LPDIRECTDRAWSURFACE *);
|
||||
HRESULT WINAPI extGetAttachedSurface1(LPDIRECTDRAWSURFACE, LPDDSCAPS, LPDIRECTDRAWSURFACE *);
|
||||
HRESULT WINAPI extGetAttachedSurface2(LPDIRECTDRAWSURFACE, LPDDSCAPS, LPDIRECTDRAWSURFACE *);
|
||||
HRESULT WINAPI extGetAttachedSurface3(LPDIRECTDRAWSURFACE, LPDDSCAPS, LPDIRECTDRAWSURFACE *);
|
||||
HRESULT WINAPI extGetAttachedSurface4(LPDIRECTDRAWSURFACE, LPDDSCAPS2, LPDIRECTDRAWSURFACE *);
|
||||
HRESULT WINAPI extGetAttachedSurface7(LPDIRECTDRAWSURFACE, LPDDSCAPS2, LPDIRECTDRAWSURFACE *);
|
||||
HRESULT WINAPI extGetCaps1S(LPDIRECTDRAWSURFACE, LPDDSCAPS);
|
||||
HRESULT WINAPI extGetCaps2S(LPDIRECTDRAWSURFACE, LPDDSCAPS);
|
||||
HRESULT WINAPI extGetCaps3S(LPDIRECTDRAWSURFACE, LPDDSCAPS);
|
||||
@ -581,7 +581,7 @@ char *DumpPixelFormat(LPDDSURFACEDESC2 lpddsd)
|
||||
return ExplainPixelFormat(&(lpddsd->ddpfPixelFormat));
|
||||
}
|
||||
|
||||
CHAR *LogSurfaceAttributes(LPDDSURFACEDESC lpddsd, char *label, int line)
|
||||
CHAR *LogSurfaceAttributes(LPDDSURFACEDESC2 lpddsd, char *label, int line)
|
||||
{
|
||||
static char sInfo[1024];
|
||||
sprintf(sInfo, "SurfaceDesc: %s Flags=%x(%s)",
|
||||
@ -595,9 +595,10 @@ CHAR *LogSurfaceAttributes(LPDDSURFACEDESC lpddsd, char *label, int line)
|
||||
if (lpddsd->dwFlags & DDSD_CAPS) {
|
||||
sprintf(sInfo, "%s Caps=%x(%s)", sInfo, lpddsd->ddsCaps.dwCaps, ExplainDDSCaps(lpddsd->ddsCaps.dwCaps));
|
||||
if(lpddsd->dwSize==sizeof(DDSURFACEDESC2)){
|
||||
LPDDSURFACEDESC2 lpddsd2=(LPDDSURFACEDESC2)lpddsd;
|
||||
LPDDSURFACEDESC2 lpddsd2=lpddsd;
|
||||
sprintf(sInfo, "%s Caps2=%x(%s)", sInfo, lpddsd2->ddsCaps.dwCaps2, ExplainDDSCaps2(lpddsd2->ddsCaps.dwCaps2));
|
||||
sprintf(sInfo, "%s Caps3=%x(%s)", sInfo, lpddsd2->ddsCaps.dwCaps3, ExplainDDSCaps3(lpddsd2->ddsCaps.dwCaps3));
|
||||
sprintf(sInfo, "%s Caps4=%x(%s)", sInfo, lpddsd2->ddsCaps.dwCaps4, ExplainDDSCaps4(lpddsd2->ddsCaps.dwCaps4));
|
||||
}
|
||||
}
|
||||
if (lpddsd->dwFlags & DDSD_CKDESTBLT ) sprintf(sInfo, "%s CKDestBlt=(%x,%x)", sInfo, lpddsd->ddckCKDestBlt.dwColorSpaceLowValue, lpddsd->ddckCKDestBlt.dwColorSpaceHighValue);
|
||||
@ -606,7 +607,7 @@ CHAR *LogSurfaceAttributes(LPDDSURFACEDESC lpddsd, char *label, int line)
|
||||
if (lpddsd->dwFlags & DDSD_CKSRCOVERLAY ) sprintf(sInfo, "%s CKSrcOverlay=(%x,%x)", sInfo, lpddsd->ddckCKSrcOverlay.dwColorSpaceLowValue, lpddsd->ddckCKSrcOverlay.dwColorSpaceHighValue);
|
||||
if (lpddsd->dwFlags & DDSD_PIXELFORMAT ) sprintf(sInfo, "%s %s", sInfo, DumpPixelFormat((LPDDSURFACEDESC2)lpddsd));
|
||||
if (lpddsd->dwFlags & DDSD_LPSURFACE) sprintf(sInfo, "%s Surface=%x", sInfo, lpddsd->lpSurface);
|
||||
if (lpddsd->dwFlags & DDSD_ZBUFFERBITDEPTH) sprintf(sInfo, "%s ZBufferBitDepth=%d", sInfo, lpddsd->dwZBufferBitDepth);
|
||||
if ((lpddsd->dwFlags & DDSD_ZBUFFERBITDEPTH) && (lpddsd->dwSize==sizeof(DDSURFACEDESC))) sprintf(sInfo, "%s ZBufferBitDepth=%d", sInfo, ((LPDDSURFACEDESC)lpddsd)->dwZBufferBitDepth);
|
||||
if (lpddsd->dwFlags & DDSD_ALPHABITDEPTH) sprintf(sInfo, "%s AlphaBitDepth=%d", sInfo, lpddsd->dwAlphaBitDepth);
|
||||
if (lpddsd->dwReserved) sprintf(sInfo, "%s Reserved=%d", sInfo, lpddsd->dwReserved);
|
||||
if (lpddsd->dwFlags & DDSD_REFRESHRATE) sprintf(sInfo, "%s RefreshRate=%d", sInfo, lpddsd->dwRefreshRate);
|
||||
@ -809,6 +810,9 @@ static void ddSetCompatibility()
|
||||
HINSTANCE hinst;
|
||||
|
||||
hinst=(*pLoadLibraryA)("ddraw.dll");
|
||||
if(!hinst){
|
||||
OutTraceDW("LoadLibrary ddraw.dll ERROR err=%d at %d\n", GetLastError(), __LINE__);
|
||||
}
|
||||
pSetAppCompatData=(SetAppCompatData_Type)(*pGetProcAddress)(hinst, "SetAppCompatData");
|
||||
if(pSetAppCompatData) {
|
||||
if (dxw.dwFlags2 & SETCOMPATIBILITY){
|
||||
@ -822,9 +826,10 @@ static void ddSetCompatibility()
|
||||
OutTraceDW("HookDirectDraw: SetAppCompatData(12,0) ret=%x(%s)\n", res, ExplainDDError(res));
|
||||
}
|
||||
}
|
||||
else
|
||||
else{
|
||||
OutTraceDW("HookDirectDraw: missing SetAppCompatData call\n");
|
||||
FreeLibrary(hinst);
|
||||
}
|
||||
(*pFreeLibrary)(hinst);
|
||||
}
|
||||
|
||||
static void BypassGOGDDrawRedirector()
|
||||
@ -886,6 +891,7 @@ int HookDirectDraw(HMODULE module, int version)
|
||||
HookLibraryEx(module, ddHooks, "ddraw.dll");
|
||||
if(!pDirectDrawCreate){ // required for IAT patching
|
||||
hinst = (*pLoadLibraryA)("ddraw.dll");
|
||||
if(!hinst) OutTraceE("LoadLibrary ddraw.dll ERROR err=%d at %d\n", GetLastError(), __LINE__);
|
||||
pDirectDrawCreate = (DirectDrawCreate_Type)GetProcAddress(hinst, "DirectDrawCreate");
|
||||
pDirectDrawEnumerateA = (DirectDrawEnumerateA_Type)GetProcAddress(hinst, "DirectDrawEnumerateA");
|
||||
}
|
||||
@ -901,10 +907,10 @@ int HookDirectDraw(HMODULE module, int version)
|
||||
}
|
||||
break;
|
||||
case 7:
|
||||
//hinst = LoadLibrary("ddraw.dll");
|
||||
HookLibraryEx(module, ddHooks, "ddraw.dll");
|
||||
if(!pDirectDrawCreate){ // required for IAT patching in "Crimson skies"
|
||||
hinst = (*pLoadLibraryA)("ddraw.dll");
|
||||
if(!hinst) OutTraceE("LoadLibrary ddraw.dll ERROR err=%d at %d\n", GetLastError(), __LINE__);
|
||||
pDirectDrawEnumerateA = (DirectDrawEnumerateA_Type)GetProcAddress(hinst, "DirectDrawEnumerateA");
|
||||
pDirectDrawEnumerateExA = (DirectDrawEnumerateExA_Type)GetProcAddress(hinst, "DirectDrawEnumerateExA");
|
||||
pDirectDrawCreate = (DirectDrawCreate_Type)GetProcAddress(hinst, "DirectDrawCreate");
|
||||
@ -1126,7 +1132,7 @@ void DescribeSurface(LPDIRECTDRAWSURFACE lpdds, int dxversion, char *label, int
|
||||
res=(*pGetSurfaceDescMethod())((LPDIRECTDRAWSURFACE2)lpdds, &ddsd);
|
||||
if(res)return;
|
||||
OutTraceDW("Surface %s: ddsd=%x dxversion=%d %s\n",
|
||||
label, lpdds, dxversion, LogSurfaceAttributes((LPDDSURFACEDESC)&ddsd, label, line));
|
||||
label, lpdds, dxversion, LogSurfaceAttributes(&ddsd, label, line));
|
||||
}
|
||||
|
||||
void RegisterPixelFormat(int dxversion, LPDIRECTDRAWSURFACE lpdds)
|
||||
@ -1325,7 +1331,7 @@ void HookDDSession(LPDIRECTDRAW *lplpdd, int dxversion)
|
||||
}
|
||||
}
|
||||
|
||||
static void HookDDClipper(LPDIRECTDRAWCLIPPER FAR* lplpDDClipper)
|
||||
void HookDDClipper(LPDIRECTDRAWCLIPPER FAR* lplpDDClipper)
|
||||
{
|
||||
OutTraceDW("Hooking directdraw clipper dd=%x\n", *lplpDDClipper);
|
||||
|
||||
@ -1706,20 +1712,25 @@ static HRESULT WINAPI extGetCapsD(int dxversion, GetCapsD_Type pGetCapsD, LPDIRE
|
||||
|
||||
if(dxw.dwFlags3 & CAPMASK) MaskCapsD(c1, c2);
|
||||
|
||||
if(dxw.dwFlags7 & SUPPRESSOVERLAY){
|
||||
#define OVERLAYLAYERCAPS \
|
||||
(DDCAPS_OVERLAY|DDCAPS_OVERLAYCANTCLIP|\
|
||||
DDCAPS_OVERLAYFOURCC|DDCAPS_OVERLAYSTRETCH)
|
||||
c1->ddsCaps.dwCaps &= ~OVERLAYLAYERCAPS;
|
||||
c2->ddsCaps.dwCaps &= ~OVERLAYLAYERCAPS;
|
||||
#define OVERLAYKEYCAPS \
|
||||
(DDCKEYCAPS_DESTOVERLAY|DDCKEYCAPS_DESTOVERLAYYUV|\
|
||||
DDCKEYCAPS_SRCOVERLAY|DDCKEYCAPS_SRCOVERLAYYUV|\
|
||||
DDCKEYCAPS_SRCOVERLAYCLRSPACE|DDCKEYCAPS_SRCOVERLAYCLRSPACEYUV)
|
||||
c1->dwCKeyCaps &= ~OVERLAYKEYCAPS;
|
||||
c2->dwCKeyCaps &= ~OVERLAYKEYCAPS;
|
||||
c1->dwMaxVisibleOverlays = c1->dwCurrVisibleOverlays = 0;
|
||||
c2->dwMaxVisibleOverlays = c2->dwCurrVisibleOverlays = 0;
|
||||
|
||||
if(dxw.dwFlags7 & SUPPRESSOVERLAY){
|
||||
if(c1){
|
||||
c1->ddsCaps.dwCaps &= ~OVERLAYLAYERCAPS;
|
||||
c1->dwCKeyCaps &= ~OVERLAYKEYCAPS;
|
||||
c1->dwMaxVisibleOverlays = c1->dwCurrVisibleOverlays = 0;
|
||||
}
|
||||
if(c2){
|
||||
c2->ddsCaps.dwCaps &= ~OVERLAYLAYERCAPS;
|
||||
c2->dwCKeyCaps &= ~OVERLAYKEYCAPS;
|
||||
c2->dwMaxVisibleOverlays = c2->dwCurrVisibleOverlays = 0;
|
||||
}
|
||||
}
|
||||
|
||||
return res;
|
||||
@ -1747,7 +1758,7 @@ HRESULT WINAPI extDirectDrawCreate(GUID FAR *lpguid, LPDIRECTDRAW FAR *lplpdd, I
|
||||
HINSTANCE hinst;
|
||||
hinst = (*pLoadLibraryA)("ddraw.dll");
|
||||
if(!hinst){
|
||||
OutTraceE("LoadLibrary ERROR err=%d at %d\n", GetLastError(), __LINE__);
|
||||
OutTraceE("LoadLibrary ddraw.dll ERROR err=%d at %d\n", GetLastError(), __LINE__);
|
||||
}
|
||||
pDirectDrawCreate =
|
||||
(DirectDrawCreate_Type)GetProcAddress(hinst, "DirectDrawCreate");
|
||||
@ -1841,7 +1852,7 @@ HRESULT WINAPI extDirectDrawCreateEx(GUID FAR *lpguid,
|
||||
HINSTANCE hinst;
|
||||
hinst = (*pLoadLibraryA)("ddraw.dll");
|
||||
if(!hinst){
|
||||
OutTraceE("LoadLibrary ERROR err=%d at %d\n", GetLastError(), __LINE__);
|
||||
OutTraceE("LoadLibrary ddraw.dll ERROR err=%d at %d\n", GetLastError(), __LINE__);
|
||||
}
|
||||
pDirectDrawCreateEx =
|
||||
(DirectDrawCreateEx_Type)GetProcAddress(hinst, "DirectDrawCreateEx");
|
||||
@ -2278,14 +2289,22 @@ HRESULT WINAPI extSetCooperativeLevel(int dxversion, SetCooperativeLevel_Type pS
|
||||
|
||||
res=(*pSetCooperativeLevel)(lpdd, hwnd, dwflags);
|
||||
if(res){
|
||||
if(res == DDERR_INVALIDPARAMS){
|
||||
//hwnd = GetForegroundWindow();
|
||||
PostMessage(hwnd, WM_SYSCOMMAND, SC_RESTORE, 0);
|
||||
Sleep(1000);
|
||||
res=(*pSetCooperativeLevel)(lpdd, hwnd, dwflags);
|
||||
switch(res){
|
||||
case DDERR_EXCLUSIVEMODEALREADYSET: // v2.04.15 - "Sid Meier's Alpha Centauri" in non-windowed mode
|
||||
OutTraceDW("SetCooperativeLevel: bypass DDERR_EXCLUSIVEMODEALREADYSET\n");
|
||||
res = 0;
|
||||
break;
|
||||
case DDERR_INVALIDPARAMS:
|
||||
//hwnd = GetForegroundWindow();
|
||||
PostMessage(hwnd, WM_SYSCOMMAND, SC_RESTORE, 0);
|
||||
Sleep(1000);
|
||||
res=(*pSetCooperativeLevel)(lpdd, hwnd, dwflags);
|
||||
break;
|
||||
}
|
||||
if(res){
|
||||
OutTraceE("SetCooperativeLevel: ERROR lpdd=%x hwnd=%x Flags=%x err=%x(%s) at %d\n",
|
||||
lpdd, hwnd, dwflags, res, ExplainDDError(res), __LINE__);
|
||||
}
|
||||
OutTraceE("SetCooperativeLevel: ERROR lpdd=%x hwnd=%x Flags=%x err=%x(%s) at %d\n",
|
||||
lpdd, hwnd, dwflags, res, ExplainDDError(res), __LINE__);
|
||||
}
|
||||
|
||||
if(bFixFrame){
|
||||
@ -2431,7 +2450,7 @@ HRESULT WINAPI extCreateSurface7(LPDIRECTDRAW lpdd, DDSURFACEDESC2 *lpddsd, LPDI
|
||||
|
||||
|
||||
HRESULT WINAPI extGetAttachedSurface(int dxversion, GetAttachedSurface_Type pGetAttachedSurface,
|
||||
LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS lpddsc, LPDIRECTDRAWSURFACE *lplpddas)
|
||||
LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS2 lpddsc, LPDIRECTDRAWSURFACE *lplpddas)
|
||||
{
|
||||
HRESULT res;
|
||||
BOOL IsPrim;
|
||||
@ -2439,8 +2458,14 @@ HRESULT WINAPI extGetAttachedSurface(int dxversion, GetAttachedSurface_Type pGet
|
||||
|
||||
IsPrim=dxwss.IsAPrimarySurface(lpdds);
|
||||
IsBack=dxwss.IsABackBufferSurface(lpdds);
|
||||
OutTraceDDRAW("GetAttachedSurface(%d): lpdds=%x%s caps=%x(%s)\n",
|
||||
dxversion, lpdds, (IsPrim?"(PRIM)":(IsBack ? "(BACK)":"")), lpddsc->dwCaps, ExplainDDSCaps(lpddsc->dwCaps));
|
||||
if(IsTraceDDRAW){
|
||||
char sCaps2[60];
|
||||
strcpy(sCaps2, "");
|
||||
if(dxversion >= 4) sprintf(sCaps2, " caps2=%x caps3=%x caps4=%x", lpddsc->dwCaps2, lpddsc->dwCaps3, lpddsc->dwCaps4);
|
||||
OutTrace("GetAttachedSurface(%d): lpdds=%x%s caps=%x(%s)%s\n",
|
||||
dxversion, lpdds, (IsPrim?"(PRIM)":(IsBack ? "(BACK)":"")),
|
||||
lpddsc->dwCaps, ExplainDDSCaps(lpddsc->dwCaps), sCaps2);
|
||||
}
|
||||
|
||||
if(dxw.dwFlags1 & EMULATESURFACE){
|
||||
|
||||
@ -2499,7 +2524,7 @@ HRESULT WINAPI extGetAttachedSurface(int dxversion, GetAttachedSurface_Type pGet
|
||||
|
||||
// proxy the call...
|
||||
|
||||
res=(*pGetAttachedSurface)(lpdds, lpddsc, lplpddas);
|
||||
res=(*pGetAttachedSurface)(lpdds, (LPDDSCAPS)lpddsc, lplpddas);
|
||||
if(res) {
|
||||
// if possible, simulate a backbuffer attached to primary surface
|
||||
if (IsPrim && (DDSD_Prim.dwBackBufferCount > 0) && (lpddsc->dwCaps & (DDSCAPS_BACKBUFFER|DDSCAPS_FLIP))){
|
||||
@ -2548,7 +2573,9 @@ HRESULT WINAPI extGetAttachedSurface(int dxversion, GetAttachedSurface_Type pGet
|
||||
}
|
||||
else sMode = "unknown";
|
||||
}
|
||||
else sMode = "known";
|
||||
else {
|
||||
sMode = "known";
|
||||
}
|
||||
OutTraceDW("GetAttachedSurface(%d): ZBUFFER caps=%x(%s) (%s)\n", dxversion, dwCaps, ExplainDDSCaps(dwCaps), sMode);
|
||||
}
|
||||
|
||||
@ -2559,14 +2586,14 @@ HRESULT WINAPI extGetAttachedSurface(int dxversion, GetAttachedSurface_Type pGet
|
||||
}
|
||||
|
||||
HRESULT WINAPI extGetAttachedSurface1(LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS lpddsc, LPDIRECTDRAWSURFACE *lplpddas)
|
||||
{ return extGetAttachedSurface(1, pGetAttachedSurface1, lpdds, lpddsc, lplpddas); }
|
||||
{ return extGetAttachedSurface(1, pGetAttachedSurface1, lpdds, (LPDDSCAPS2)lpddsc, lplpddas); }
|
||||
HRESULT WINAPI extGetAttachedSurface2(LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS lpddsc, LPDIRECTDRAWSURFACE *lplpddas)
|
||||
{ return extGetAttachedSurface(2, pGetAttachedSurface2, lpdds, lpddsc, lplpddas); }
|
||||
{ return extGetAttachedSurface(2, pGetAttachedSurface2, lpdds, (LPDDSCAPS2)lpddsc, lplpddas); }
|
||||
HRESULT WINAPI extGetAttachedSurface3(LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS lpddsc, LPDIRECTDRAWSURFACE *lplpddas)
|
||||
{ return extGetAttachedSurface(3, pGetAttachedSurface3, lpdds, lpddsc, lplpddas); }
|
||||
HRESULT WINAPI extGetAttachedSurface4(LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS lpddsc, LPDIRECTDRAWSURFACE *lplpddas)
|
||||
{ return extGetAttachedSurface(3, pGetAttachedSurface3, lpdds, (LPDDSCAPS2)lpddsc, lplpddas); }
|
||||
HRESULT WINAPI extGetAttachedSurface4(LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS2 lpddsc, LPDIRECTDRAWSURFACE *lplpddas)
|
||||
{ return extGetAttachedSurface(4, pGetAttachedSurface4, lpdds, lpddsc, lplpddas); }
|
||||
HRESULT WINAPI extGetAttachedSurface7(LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS lpddsc, LPDIRECTDRAWSURFACE *lplpddas)
|
||||
HRESULT WINAPI extGetAttachedSurface7(LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS2 lpddsc, LPDIRECTDRAWSURFACE *lplpddas)
|
||||
{ return extGetAttachedSurface(7, pGetAttachedSurface7, lpdds, lpddsc, lplpddas); }
|
||||
|
||||
void BlitError(HRESULT res, LPRECT lps, LPRECT lpd, int line)
|
||||
@ -2709,7 +2736,7 @@ HRESULT WINAPI PrimaryStretchBlt(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFA
|
||||
res=(*pCreateSurface)(lpPrimaryDD, (LPDDSURFACEDESC)&ddsd, &lpddsTmp, NULL);
|
||||
if(res) {
|
||||
OutTraceE("PrimaryStretchBlt: CreateSurface ERROR %x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
|
||||
OutTraceB("PrimaryStretchBlt: CreateSurface %s\n", LogSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[Gateway]", __LINE__));
|
||||
OutTraceB("PrimaryStretchBlt: CreateSurface %s\n", LogSurfaceAttributes(&ddsd, "[Gateway]", __LINE__));
|
||||
return res;
|
||||
}
|
||||
// stretch-blit to target size on OFFSCREENPLAIN temp surface
|
||||
@ -3117,7 +3144,7 @@ HRESULT WINAPI extFlip(int dxversion, Flip_Type pFlip, LPDIRECTDRAWSURFACE lpdds
|
||||
if(res2) {
|
||||
OutTraceE("CreateSurface: ERROR %x(%s) at %d\n", res2, ExplainDDError(res2), __LINE__);
|
||||
OutTraceE("Size=%d lpPrimaryDD=%x lpDDSBack=%x %s\n",
|
||||
ddsd.dwSize, lpPrimaryDD, lpDDSBack, LogSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[FlipBuf]", __LINE__));
|
||||
ddsd.dwSize, lpPrimaryDD, lpDDSBack, LogSurfaceAttributes(&ddsd, "[FlipBuf]", __LINE__));
|
||||
}
|
||||
//OutTrace("DEBUG: copied surface size=(%dx%d)\n", ddsd.dwWidth, ddsd.dwHeight);
|
||||
// copy front buffer
|
||||
@ -3518,12 +3545,12 @@ HRESULT WINAPI extSetEntries(LPDIRECTDRAWPALETTE lpddp, DWORD dwflags, DWORD dws
|
||||
return res;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI extSetClipper(SetClipper_Type pSetClipper, LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWCLIPPER lpddc)
|
||||
static HRESULT WINAPI extSetClipper(int dxversion, SetClipper_Type pSetClipper, LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWCLIPPER lpddc)
|
||||
{
|
||||
HRESULT res;
|
||||
BOOL isPrim;
|
||||
isPrim=dxwss.IsAPrimarySurface(lpdds);
|
||||
OutTraceDDRAW("SetClipper: lpdds=%x%s lpddc=%x\n", lpdds, isPrim?"(PRIM)":"", lpddc);
|
||||
OutTraceDDRAW("SetClipper(%d): lpdds=%x%s lpddc=%x\n", dxversion, lpdds, isPrim?"(PRIM)":"", lpddc);
|
||||
|
||||
// v2.1.84: SUPPRESSCLIPPING flag - improves "Monopoly Edition 3D" where continuous
|
||||
// clipping ON & OFF affects blitting on primary surface.
|
||||
@ -3562,15 +3589,15 @@ static HRESULT WINAPI extSetClipper(SetClipper_Type pSetClipper, LPDIRECTDRAWSUR
|
||||
}
|
||||
|
||||
HRESULT WINAPI extSetClipper1(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWCLIPPER lpddc)
|
||||
{ return extSetClipper(pSetClipper1, lpdds, lpddc); }
|
||||
{ return extSetClipper(1, pSetClipper1, lpdds, lpddc); }
|
||||
HRESULT WINAPI extSetClipper2(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWCLIPPER lpddc)
|
||||
{ return extSetClipper(pSetClipper2, lpdds, lpddc); }
|
||||
{ return extSetClipper(2, pSetClipper2, lpdds, lpddc); }
|
||||
HRESULT WINAPI extSetClipper3(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWCLIPPER lpddc)
|
||||
{ return extSetClipper(pSetClipper3, lpdds, lpddc); }
|
||||
{ return extSetClipper(3, pSetClipper3, lpdds, lpddc); }
|
||||
HRESULT WINAPI extSetClipper4(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWCLIPPER lpddc)
|
||||
{ return extSetClipper(pSetClipper4, lpdds, lpddc); }
|
||||
{ return extSetClipper(4, pSetClipper4, lpdds, lpddc); }
|
||||
HRESULT WINAPI extSetClipper7(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWCLIPPER lpddc)
|
||||
{ return extSetClipper(pSetClipper7, lpdds, lpddc); }
|
||||
{ return extSetClipper(7, pSetClipper7, lpdds, lpddc); }
|
||||
|
||||
DDSURFACEDESC SaveSurfaceDesc;
|
||||
LPDIRECTDRAWSURFACE SaveSurface = NULL;
|
||||
@ -3624,8 +3651,8 @@ static HRESULT WINAPI extLock(int dxversion, Lock_Type pLock, LPDIRECTDRAWSURFAC
|
||||
OutTraceDW("Lock SURFACELOST RETRY: ret=%x(%s)\n", res, ExplainDDError(res));
|
||||
}
|
||||
if(res) OutTraceE("Lock ERROR: ret=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
|
||||
OutTraceB("Lock: lPitch=%d lpSurface=%x ZBufferBitDepth=%d %s\n",
|
||||
lpDDSurfaceDesc->lPitch, lpDDSurfaceDesc->lpSurface, lpDDSurfaceDesc->dwZBufferBitDepth, LogSurfaceAttributes(lpDDSurfaceDesc, "[Locked]", __LINE__));
|
||||
OutTraceB("Lock: lPitch=%d lpSurface=%x %s\n",
|
||||
lpDDSurfaceDesc->lPitch, lpDDSurfaceDesc->lpSurface, LogSurfaceAttributes((LPDDSURFACEDESC2)lpDDSurfaceDesc, "[Locked]", __LINE__));
|
||||
|
||||
// v2.03.60: necessary for "Mech Commander 2"
|
||||
if(dxw.dwFlags6 & SETZBUFFERBITDEPTHS)
|
||||
@ -3699,7 +3726,7 @@ static HRESULT WINAPI extLockDir(int dxversion, Lock_Type pLock, LPDIRECTDRAWSUR
|
||||
ddsd.dwWidth = dxw.GetScreenWidth();
|
||||
ddsd.dwHeight = dxw.GetScreenHeight();
|
||||
ddsd.ddsCaps.dwCaps = 0;
|
||||
OutTraceB("Lock: %s\n", LogSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[Dir FixBuf]" , __LINE__));
|
||||
OutTraceB("Lock: %s\n", LogSurfaceAttributes(&ddsd, "[Dir FixBuf]" , __LINE__));
|
||||
res=(*pCreateSurface1)(lpPrimaryDD, (DDSURFACEDESC *)&ddsd, (LPDIRECTDRAWSURFACE *)&lpDDSBuffer, 0);
|
||||
if(res){
|
||||
OutTraceE("CreateSurface: ERROR on DDSBuffer res=%x(%s) at %d\n",res, ExplainDDError(res), __LINE__);
|
||||
@ -3743,8 +3770,8 @@ static HRESULT WINAPI extLockDir(int dxversion, Lock_Type pLock, LPDIRECTDRAWSUR
|
||||
}
|
||||
|
||||
if(res) OutTraceE("Lock ERROR: ret=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
|
||||
OutTraceB("Lock: lPitch=%d lpSurface=%x ZBufferBitDepth=%d %s\n",
|
||||
lpDDSurfaceDesc->lPitch, lpDDSurfaceDesc->lpSurface, lpDDSurfaceDesc->dwZBufferBitDepth, LogSurfaceAttributes(lpDDSurfaceDesc, "[Locked]", __LINE__));
|
||||
OutTraceB("Lock: lPitch=%d lpSurface=%x %s\n",
|
||||
lpDDSurfaceDesc->lPitch, lpDDSurfaceDesc->lpSurface, LogSurfaceAttributes((LPDDSURFACEDESC2)lpDDSurfaceDesc, "[Locked]", __LINE__));
|
||||
|
||||
// v2.03.60: necessary for "Mech Commander 2"
|
||||
if(dxw.dwFlags6 & SETZBUFFERBITDEPTHS)
|
||||
@ -4307,7 +4334,7 @@ HRESULT WINAPI extEnumDisplayModes(int dxversion, EnumDisplayModes1_Type pEnumDi
|
||||
NewContext_Type NewContext;
|
||||
|
||||
OutTraceDDRAW("EnumDisplayModes(D%d): lpdd=%x flags=%x lpddsd=%x callback=%x\n", dxversion, lpdd, dwflags, lpddsd, cb);
|
||||
if(lpddsd) OutTraceDDRAW("EnumDisplayModes(D): %s\n", LogSurfaceAttributes(lpddsd, "EnumDisplayModes", __LINE__));
|
||||
if(lpddsd) OutTraceDDRAW("EnumDisplayModes(D): %s\n", LogSurfaceAttributes((LPDDSURFACEDESC2)lpddsd, "EnumDisplayModes", __LINE__));
|
||||
|
||||
if ((dxw.dwFlags4 & NATIVERES) ||
|
||||
(!(dxw.dwFlags1 & EMULATESURFACE) && !dxw.Windowize)){ // v2.04.14 - make nonemulated nonwindowed mode work ...
|
||||
@ -4470,7 +4497,13 @@ HRESULT WINAPI extReleaseS(ReleaseS_Type pReleaseS, LPDIRECTDRAWSURFACE lpdds)
|
||||
return 0;
|
||||
}
|
||||
|
||||
res = (*pReleaseS)(lpdds);
|
||||
__try { // try/except useful when using proxy dll
|
||||
res = (*pReleaseS)(lpdds);
|
||||
}
|
||||
__except(EXCEPTION_EXECUTE_HANDLER){
|
||||
OutTraceE("Release(S): EXCEPTION lpdds=%x%s res=0\n", lpdds, dxwss.ExplainSurfaceRole(lpdds));
|
||||
res = 0;
|
||||
}
|
||||
|
||||
OutTraceDDRAW("Release(S): lpdds=%x%s refcount=%d\n", lpdds, dxwss.ExplainSurfaceRole(lpdds), res);
|
||||
if (res==0) { // common precondition
|
||||
@ -4694,13 +4727,16 @@ static HRESULT WINAPI extAddAttachedSurface(AddAttachedSurface_Type pAddAttached
|
||||
// v2.02.13: emulate ZBUFFER attach to backbuffer/plain surface
|
||||
if ((sd.ddsCaps.dwCaps & DDSCAPS_ZBUFFER) && (dxw.dwFlags1 & EMULATESURFACE)){
|
||||
DWORD dwCaps;
|
||||
OutTraceDW("AddAttachedSurface: registering ZBUFFER attach on %s surface\n", IsBack ? "BACKBUFFER" : "PLAIN");
|
||||
dwCaps = dxwcdb.GetCaps(lpdds);
|
||||
if(dwCaps){
|
||||
dwCaps &= ~(DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_BACKBUFFER|DDSCAPS_3DDEVICE|DDSCAPS_COMPLEX);
|
||||
dwCaps |= DDSCAPS_ZBUFFER;
|
||||
//if(dwCaps & DDSCAPS_VIDEOMEMORY) dwCaps|=DDSCAPS_LOCALVIDMEM;
|
||||
dxwcdb.PushCaps(lpddsadd, dwCaps);
|
||||
dwCaps = dxwcdb.GetCaps(lpddsadd);
|
||||
if(!dwCaps){
|
||||
OutTraceDW("AddAttachedSurface: registering ZBUFFER attach on %s surface\n", IsBack ? "BACKBUFFER" : "PLAIN");
|
||||
dwCaps = dxwcdb.GetCaps(lpdds);
|
||||
if(dwCaps){
|
||||
dwCaps &= ~(DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_BACKBUFFER|DDSCAPS_3DDEVICE|DDSCAPS_COMPLEX);
|
||||
dwCaps |= DDSCAPS_ZBUFFER;
|
||||
//if(dwCaps & DDSCAPS_VIDEOMEMORY) dwCaps|=DDSCAPS_LOCALVIDMEM;
|
||||
dxwcdb.PushCaps(lpddsadd, dwCaps);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -4859,7 +4895,7 @@ static HRESULT WINAPI extGetSurfaceDesc(int dxversion, GetSurfaceDesc_Type pGetS
|
||||
if(IsBack) sLabel="(BACK)";
|
||||
if(IsZBuf) sLabel="(ZBUFFER)";
|
||||
|
||||
OutTraceDDRAW("GetSurfaceDesc(%d): lpdds=%x%s %s\n", dxversion, lpdds, sLabel, LogSurfaceAttributes(lpddsd, "GetSurfaceDesc", __LINE__));
|
||||
OutTraceDDRAW("GetSurfaceDesc(%d): lpdds=%x%s %s\n", dxversion, lpdds, sLabel, LogSurfaceAttributes((LPDDSURFACEDESC2)lpddsd, "GetSurfaceDesc", __LINE__));
|
||||
|
||||
if(!(dxw.IsEmulated || dxw.Windowize)) return res;
|
||||
|
||||
@ -4887,7 +4923,7 @@ static HRESULT WINAPI extGetSurfaceDesc(int dxversion, GetSurfaceDesc_Type pGetS
|
||||
}
|
||||
|
||||
if(IsFixed){
|
||||
OutTraceDW("GetSurfaceDesc: FIXED lpdds=%x %s\n", lpdds, LogSurfaceAttributes(lpddsd, sLabel, __LINE__));
|
||||
OutTraceDW("GetSurfaceDesc: FIXED lpdds=%x %s\n", lpdds, LogSurfaceAttributes((LPDDSURFACEDESC2)lpddsd, sLabel, __LINE__));
|
||||
//if(IsDebug) HexTrace((unsigned char *)lpddsd, sizeof(DDSURFACEDESC));
|
||||
}
|
||||
|
||||
@ -4969,11 +5005,11 @@ ULONG WINAPI extReleaseD4(LPDIRECTDRAW lpdd)
|
||||
ULONG WINAPI extReleaseD7(LPDIRECTDRAW lpdd)
|
||||
{ return extReleaseD(7, pReleaseD7, lpdd); }
|
||||
|
||||
static HRESULT WINAPI extCreateClipper(CreateClipper_Type pCreateClipper, LPDIRECTDRAW lpdd, DWORD dwflags,
|
||||
static HRESULT WINAPI extCreateClipper(int dxversion, CreateClipper_Type pCreateClipper, LPDIRECTDRAW lpdd, DWORD dwflags,
|
||||
LPDIRECTDRAWCLIPPER FAR* lplpDDClipper, IUnknown FAR* pUnkOuter)
|
||||
{
|
||||
HRESULT res;
|
||||
OutTraceDDRAW("CreateClipper: lpdd=%x flags=%x\n", lpdd, dwflags);
|
||||
OutTraceDDRAW("CreateClipper(%d): lpdd=%x flags=%x\n", dxversion, lpdd, dwflags);
|
||||
res=(*pCreateClipper)(lpdd, dwflags, lplpDDClipper, pUnkOuter);
|
||||
if(res) {
|
||||
OutTraceE("CreateClipper: ERROR res=%x(%s)\n", lpdd, res, ExplainDDError(res));
|
||||
@ -4985,15 +5021,15 @@ static HRESULT WINAPI extCreateClipper(CreateClipper_Type pCreateClipper, LPDIRE
|
||||
}
|
||||
|
||||
HRESULT WINAPI extCreateClipper1(LPDIRECTDRAW lpdd, DWORD dwflags, LPDIRECTDRAWCLIPPER FAR* lplpDDClipper, IUnknown FAR* pUnkOuter)
|
||||
{ return extCreateClipper(pCreateClipper1, lpdd, dwflags, lplpDDClipper, pUnkOuter); }
|
||||
{ return extCreateClipper(1, pCreateClipper1, lpdd, dwflags, lplpDDClipper, pUnkOuter); }
|
||||
HRESULT WINAPI extCreateClipper2(LPDIRECTDRAW lpdd, DWORD dwflags, LPDIRECTDRAWCLIPPER FAR* lplpDDClipper, IUnknown FAR* pUnkOuter)
|
||||
{ return extCreateClipper(pCreateClipper2, lpdd, dwflags, lplpDDClipper, pUnkOuter); }
|
||||
{ return extCreateClipper(2, pCreateClipper2, lpdd, dwflags, lplpDDClipper, pUnkOuter); }
|
||||
HRESULT WINAPI extCreateClipper3(LPDIRECTDRAW lpdd, DWORD dwflags, LPDIRECTDRAWCLIPPER FAR* lplpDDClipper, IUnknown FAR* pUnkOuter)
|
||||
{ return extCreateClipper(pCreateClipper3, lpdd, dwflags, lplpDDClipper, pUnkOuter); }
|
||||
{ return extCreateClipper(3, pCreateClipper3, lpdd, dwflags, lplpDDClipper, pUnkOuter); }
|
||||
HRESULT WINAPI extCreateClipper4(LPDIRECTDRAW lpdd, DWORD dwflags, LPDIRECTDRAWCLIPPER FAR* lplpDDClipper, IUnknown FAR* pUnkOuter)
|
||||
{ return extCreateClipper(pCreateClipper4, lpdd, dwflags, lplpDDClipper, pUnkOuter); }
|
||||
{ return extCreateClipper(4, pCreateClipper4, lpdd, dwflags, lplpDDClipper, pUnkOuter); }
|
||||
HRESULT WINAPI extCreateClipper7(LPDIRECTDRAW lpdd, DWORD dwflags, LPDIRECTDRAWCLIPPER FAR* lplpDDClipper, IUnknown FAR* pUnkOuter)
|
||||
{ return extCreateClipper(pCreateClipper7, lpdd, dwflags, lplpDDClipper, pUnkOuter); }
|
||||
{ return extCreateClipper(7, pCreateClipper7, lpdd, dwflags, lplpDDClipper, pUnkOuter); }
|
||||
|
||||
HRESULT WINAPI extReleaseC(LPDIRECTDRAWCLIPPER lpddClip)
|
||||
{
|
||||
@ -5292,9 +5328,11 @@ static HRESULT WINAPI extGetAvailableVidMem(int dxversion, GetAvailableVidMem4_T
|
||||
return res;
|
||||
}
|
||||
|
||||
if(dxversion == 2){
|
||||
OutTraceDW("GetAvailableVidMem(D2): DDSCaps=%x(%s) Total=%x Free=%x\n",
|
||||
lpDDSCaps->dwCaps, ExplainDDSCaps(lpDDSCaps->dwCaps), lpdwTotal?*lpdwTotal:0, lpdwFree?*lpdwFree:0);
|
||||
if(dxversion < 4){ // fix: should include also dxversion 3!!!
|
||||
OutTraceDW("GetAvailableVidMem(D%d): DDSCaps=%x(%s) Total=%x Free=%x\n",
|
||||
dxversion,
|
||||
lpDDSCaps->dwCaps, ExplainDDSCaps(lpDDSCaps->dwCaps),
|
||||
lpdwTotal?*lpdwTotal:0, lpdwFree?*lpdwFree:0);
|
||||
}
|
||||
else{
|
||||
OutTraceDW("GetAvailableVidMem(D%d): DDSCaps=%x(%s).%x.%x.%x volumedepth=%d Total=%x Free=%x\n",
|
||||
|
@ -171,6 +171,10 @@ void HookDirectInput(HMODULE module)
|
||||
HookLibraryEx(module, diHooks, "dinput.dll");
|
||||
if(!pDirectInputCreateA && !pDirectInputCreateW && !pDirectInputCreateEx){
|
||||
hinst = LoadLibrary("dinput.dll");
|
||||
if(!hinst) {
|
||||
OutTraceE("LoadLibrary dinput.dll ERROR err=%d at %d\n", GetLastError(), __LINE__);
|
||||
return;
|
||||
}
|
||||
pDirectInputCreateA = (DirectInputCreateA_Type)GetProcAddress(hinst, "DirectInputCreateA");
|
||||
if(pDirectInputCreateA)
|
||||
if(!extDirectInputCreateA(GetModuleHandle(0), DIRECTINPUT_VERSION,
|
||||
@ -193,6 +197,10 @@ void HookDirectInput8(HMODULE module)
|
||||
HookLibraryEx(module, di8Hooks, "dinput8.dll");
|
||||
if(!pDirectInput8Create){
|
||||
hinst = LoadLibrary("dinput8.dll");
|
||||
if(!hinst) {
|
||||
OutTraceE("LoadLibrary dinput8.dll ERROR err=%d at %d\n", GetLastError(), __LINE__);
|
||||
return;
|
||||
}
|
||||
pDirectInput8Create = (DirectInput8Create_Type)GetProcAddress(hinst, "DirectInput8Create");
|
||||
if(pDirectInput8Create)
|
||||
if(!extDirectInput8Create(GetModuleHandle(0), DIRECTINPUT8_VERSION,
|
||||
|
@ -154,6 +154,19 @@ char *ExplainDDSCaps3(DWORD c)
|
||||
return(eb);
|
||||
}
|
||||
|
||||
char *ExplainDDSCaps4(DWORD c)
|
||||
{
|
||||
static char eb[256];
|
||||
unsigned int l;
|
||||
strcpy(eb,"DDSCAPS4_");
|
||||
// insert here ....
|
||||
// if (c & DDSCAPS4_XXX) strcat(eb, "XXX+");
|
||||
l=strlen(eb);
|
||||
if (l>strlen("DDSCAPS4_")) eb[l-1]=0; // delete last '+' if any
|
||||
else eb[0]=0;
|
||||
return(eb);
|
||||
}
|
||||
|
||||
char *ExplainDDDCaps(DWORD c)
|
||||
{
|
||||
static char eb[512];
|
||||
|
@ -5,6 +5,7 @@ extern char *ExplainFlags(DWORD);
|
||||
extern char *ExplainDDSCaps(DWORD);
|
||||
extern char *ExplainDDSCaps2(DWORD);
|
||||
extern char *ExplainDDSCaps3(DWORD);
|
||||
extern char *ExplainDDSCaps4(DWORD);
|
||||
extern char *ExplainDDDCaps(DWORD);
|
||||
extern char *ExplainDDDCaps2(DWORD);
|
||||
extern char *ExplainDDPalCaps(DWORD);
|
||||
|
@ -74,3 +74,5 @@ extern void HookLibraryEx(HMODULE, HookEntryEx_Type *, char *);
|
||||
extern void PinLibraryEx(HookEntryEx_Type *, char *);
|
||||
extern void HookLibInitEx(HookEntryEx_Type *);
|
||||
extern BOOL IsHotPatchedEx(HookEntryEx_Type *, char *);
|
||||
|
||||
#define MISSING ((FARPROC)-1)
|
@ -27,7 +27,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include "TlHelp32.h"
|
||||
|
||||
#define VERSION "2.04.14"
|
||||
#define VERSION "2.04.15"
|
||||
|
||||
#define DDTHREADLOCK 1
|
||||
|
||||
|
Binary file not shown.
121
dll/kernel32.cpp
121
dll/kernel32.cpp
@ -56,28 +56,6 @@ HeapCompact_Type pHeapCompact;
|
||||
GetProcessHeap_Type pGetProcessHeap;
|
||||
HeapDestroy_Type pHeapDestroy;
|
||||
|
||||
typedef BOOL (WINAPI *FreeLibrary_Type)(HMODULE);
|
||||
FreeLibrary_Type pFreeLibrary = NULL;
|
||||
BOOL WINAPI extFreeLibrary(HMODULE hModule)
|
||||
{
|
||||
BOOL ret;
|
||||
static HMODULE hLastModule;
|
||||
OutTraceB("FreeLibrary: hModule=%x\n", hModule);
|
||||
ret = (*pFreeLibrary)(hModule);
|
||||
if(ret){
|
||||
OutTrace("FreeLibrary: ret=%x\n", ret);
|
||||
if((hModule == hLastModule) && (dxw.dwFlags7 & FIXFREELIBRARY)) {
|
||||
OutTraceDW("FreeLibrary: FIXFREELIBRARY hack ret=0\n");
|
||||
ret = 0;
|
||||
}
|
||||
hLastModule = hModule;
|
||||
}
|
||||
else {
|
||||
OutTraceE("FreeLibrary ERROR: err=%d\n", GetLastError());
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
// v2.02.96: the GetSystemInfo API is NOT hot patchable on Win7. This can cause problems because it can't be hooked by simply
|
||||
// enabling hot patch. A solution is making all LoadLibrary* calls hot patchable, so that when loading the module, the call
|
||||
// can be hooked by the IAT lookup. This fixes a problem after movie playing in Wind Fantasy SP.
|
||||
@ -225,8 +203,21 @@ BOOL WINAPI extGetDiskFreeSpaceA(LPCSTR lpRootPathName, LPDWORD lpSectorsPerClus
|
||||
BOOL ret;
|
||||
OutTraceDW("GetDiskFreeSpace: RootPathName=\"%s\"\n", lpRootPathName);
|
||||
ret=(*pGetDiskFreeSpaceA)(lpRootPathName, lpSectorsPerCluster, lpBytesPerSector, lpNumberOfFreeClusters, lpTotalNumberOfClusters);
|
||||
if(!ret) OutTraceE("GetDiskFreeSpace: ERROR err=%d at %d\n", GetLastError(), __LINE__);
|
||||
*lpNumberOfFreeClusters = 16000;
|
||||
if(ret) {
|
||||
OutTraceDW("GetDiskFreeSpace: SectXCluster=%d BytesXSect=%d FreeClusters=%d TotalClusters=%d\n",
|
||||
*lpSectorsPerCluster, *lpBytesPerSector, *lpNumberOfFreeClusters, *lpTotalNumberOfClusters);
|
||||
}
|
||||
else {
|
||||
OutTraceE("GetDiskFreeSpace: ERROR err=%d at %d\n", GetLastError(), __LINE__);
|
||||
}
|
||||
// try to define 100MB free space in a 120MB hard disk
|
||||
DWORD BytesXCluster = *lpBytesPerSector * *lpSectorsPerCluster;
|
||||
if(BytesXCluster){
|
||||
*lpNumberOfFreeClusters = 100000000 / BytesXCluster;
|
||||
*lpTotalNumberOfClusters = 120000000 / BytesXCluster;
|
||||
OutTraceDW("GetDiskFreeSpace: FIXED SectXCluster=%d BytesXSect=%d FreeClusters=%d TotalClusters=%d\n",
|
||||
*lpSectorsPerCluster, *lpBytesPerSector, *lpNumberOfFreeClusters, *lpTotalNumberOfClusters);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -655,6 +646,26 @@ HMODULE WINAPI extLoadLibraryExA(LPCTSTR lpFileName, HANDLE hFile, DWORD dwFlags
|
||||
HMODULE WINAPI extLoadLibraryExW(LPCWSTR lpFileName, HANDLE hFile, DWORD dwFlags)
|
||||
{ return LoadLibraryExWrapper((LPVOID)lpFileName, TRUE, hFile, dwFlags, "LoadLibraryExW"); }
|
||||
|
||||
BOOL WINAPI extFreeLibrary(HMODULE hModule)
|
||||
{
|
||||
BOOL ret;
|
||||
static HMODULE hLastModule;
|
||||
OutTraceB("FreeLibrary: hModule=%x\n", hModule);
|
||||
ret = (*pFreeLibrary)(hModule);
|
||||
if(ret){
|
||||
OutTrace("FreeLibrary: ret=%x\n", ret);
|
||||
if((hModule == hLastModule) && (dxw.dwFlags7 & FIXFREELIBRARY)) {
|
||||
OutTraceDW("FreeLibrary: FIXFREELIBRARY hack ret=0\n");
|
||||
ret = 0;
|
||||
}
|
||||
hLastModule = hModule;
|
||||
}
|
||||
else {
|
||||
OutTraceE("FreeLibrary ERROR: err=%d\n", GetLastError());
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
extern DirectDrawCreate_Type pDirectDrawCreate;
|
||||
extern DirectDrawCreateEx_Type pDirectDrawCreateEx;
|
||||
extern HRESULT WINAPI extDirectDrawCreate(GUID FAR *, LPDIRECTDRAW FAR *, IUnknown FAR *);
|
||||
@ -681,89 +692,97 @@ FARPROC WINAPI extGetProcAddress(HMODULE hModule, LPCSTR proc)
|
||||
|
||||
// to do: the else condition: the program COULD load addresses by ordinal value ... done ??
|
||||
if((DWORD)proc & 0xFFFF0000){
|
||||
FARPROC remap;
|
||||
FARPROC remap = 0;
|
||||
switch(idx){
|
||||
case SYSLIBIDX_AVIFIL32:
|
||||
if (remap=Remap_AVIFil32_ProcAddress(proc, hModule)) return remap;
|
||||
remap=Remap_AVIFil32_ProcAddress(proc, hModule);
|
||||
break;
|
||||
case SYSLIBIDX_DIRECTDRAW:
|
||||
if (remap=Remap_ddraw_ProcAddress(proc, hModule)) return remap;
|
||||
remap=Remap_ddraw_ProcAddress(proc, hModule);
|
||||
break;
|
||||
case SYSLIBIDX_USER32:
|
||||
if (remap=Remap_user32_ProcAddress(proc, hModule)) return remap;
|
||||
remap=Remap_user32_ProcAddress(proc, hModule);
|
||||
break;
|
||||
case SYSLIBIDX_GDI32:
|
||||
if (remap=Remap_GDI32_ProcAddress(proc, hModule)) return remap;
|
||||
remap=Remap_GDI32_ProcAddress(proc, hModule);
|
||||
break;
|
||||
case SYSLIBIDX_KERNEL32:
|
||||
if (remap=Remap_kernel32_ProcAddress(proc, hModule)) return remap;
|
||||
remap=Remap_kernel32_ProcAddress(proc, hModule);
|
||||
break;
|
||||
case SYSLIBIDX_IMELIB:
|
||||
if (remap=Remap_ImeLib_ProcAddress(proc, hModule)) return remap;
|
||||
remap=Remap_ImeLib_ProcAddress(proc, hModule);
|
||||
break;
|
||||
case SYSLIBIDX_WINMM:
|
||||
if (remap=Remap_WinMM_ProcAddress(proc, hModule)) return remap;
|
||||
remap=Remap_WinMM_ProcAddress(proc, hModule);
|
||||
break;
|
||||
case SYSLIBIDX_OLE32:
|
||||
if (remap=Remap_ole32_ProcAddress(proc, hModule)) return remap;
|
||||
remap=Remap_ole32_ProcAddress(proc, hModule);
|
||||
break;
|
||||
case SYSLIBIDX_DIRECT3D8:
|
||||
if (remap=Remap_d3d8_ProcAddress(proc, hModule)) return remap;
|
||||
remap=Remap_d3d8_ProcAddress(proc, hModule);
|
||||
break;
|
||||
case SYSLIBIDX_DIRECT3D9:
|
||||
if (remap=Remap_d3d9_ProcAddress(proc, hModule)) return remap;
|
||||
remap=Remap_d3d9_ProcAddress(proc, hModule);
|
||||
break;
|
||||
case SYSLIBIDX_DIRECT3D10:
|
||||
if (remap=Remap_d3d10_ProcAddress(proc, hModule)) return remap;
|
||||
remap=Remap_d3d10_ProcAddress(proc, hModule);
|
||||
break;
|
||||
case SYSLIBIDX_DIRECT3D10_1:
|
||||
if (remap=Remap_d3d10_1_ProcAddress(proc, hModule)) return remap;
|
||||
remap=Remap_d3d10_1_ProcAddress(proc, hModule);
|
||||
break;
|
||||
case SYSLIBIDX_DIRECT3D11:
|
||||
if (remap=Remap_d3d11_ProcAddress(proc, hModule)) return remap;
|
||||
remap=Remap_d3d11_ProcAddress(proc, hModule);
|
||||
break;
|
||||
case SYSLIBIDX_OPENGL:
|
||||
if(dxw.Windowize) if (remap=Remap_gl_ProcAddress(proc, hModule)) return remap;
|
||||
if(dxw.Windowize) remap=Remap_gl_ProcAddress(proc, hModule);
|
||||
break;
|
||||
case SYSLIBIDX_MSVFW:
|
||||
if (remap=Remap_vfw_ProcAddress(proc, hModule)) return remap;
|
||||
remap=Remap_vfw_ProcAddress(proc, hModule);
|
||||
break;
|
||||
case SYSLIBIDX_WINTRUST:
|
||||
if (remap=Remap_trust_ProcAddress(proc, hModule)) return remap;
|
||||
remap=Remap_trust_ProcAddress(proc, hModule);
|
||||
break;
|
||||
case SYSLIBIDX_ADVAPI32:
|
||||
if (remap=Remap_AdvApi32_ProcAddress(proc, hModule)) return remap;
|
||||
remap=Remap_AdvApi32_ProcAddress(proc, hModule);
|
||||
break;
|
||||
case SYSLIBIDX_DIRECT3D:
|
||||
if (remap=Remap_d3d7_ProcAddress(proc, hModule)) return remap;
|
||||
remap=Remap_d3d7_ProcAddress(proc, hModule);
|
||||
break;
|
||||
case SYSLIBIDX_DIRECT3D700:
|
||||
if (remap=Remap_d3d7_ProcAddress(proc, hModule)) return remap;
|
||||
remap=Remap_d3d7_ProcAddress(proc, hModule);
|
||||
break;
|
||||
case SYSLIBIDX_IMAGEHLP:
|
||||
if (remap=Remap_Imagehlp_ProcAddress(proc, hModule)) return remap;
|
||||
remap=Remap_Imagehlp_ProcAddress(proc, hModule);
|
||||
break;
|
||||
case SYSLIBIDX_DINPUT:
|
||||
if (remap=Remap_DInput_ProcAddress(proc, hModule)) return remap;
|
||||
remap=Remap_DInput_ProcAddress(proc, hModule);
|
||||
break;
|
||||
case SYSLIBIDX_DINPUT8:
|
||||
if (remap=Remap_DInput8_ProcAddress(proc, hModule)) return remap;
|
||||
remap=Remap_DInput8_ProcAddress(proc, hModule);
|
||||
break;
|
||||
case SYSLIBIDX_COMCTL32:
|
||||
if (remap=Remap_ComCtl32_ProcAddress(proc, hModule)) return remap;
|
||||
remap=Remap_ComCtl32_ProcAddress(proc, hModule);
|
||||
break;
|
||||
case SYSLIBIDX_COMDLG32:
|
||||
if (remap=Remap_ComDlg32_ProcAddress(proc, hModule)) return remap;
|
||||
remap=Remap_ComDlg32_ProcAddress(proc, hModule);
|
||||
break;
|
||||
case SYSLIBIDX_DSOUND:
|
||||
if (remap=Remap_DSound_ProcAddress(proc, hModule)) return remap;
|
||||
remap=Remap_DSound_ProcAddress(proc, hModule);
|
||||
break;
|
||||
case SYSLIBIDX_WING32:
|
||||
if (remap=Remap_WinG32_ProcAddress(proc, hModule)) return remap;
|
||||
remap=Remap_WinG32_ProcAddress(proc, hModule);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if(remap == (FARPROC)-1) {
|
||||
OutTraceDW("GetProcAddress: FAKE ret=0\n");
|
||||
return 0; // pretend the call isn't there ....
|
||||
}
|
||||
if(remap) {
|
||||
OutTraceDW("GetProcAddress: HOOK ret=%x\n", remap);
|
||||
return remap;
|
||||
}
|
||||
}
|
||||
else {
|
||||
switch(idx){
|
||||
|
@ -16,6 +16,7 @@ extern void HookDDSession(LPDIRECTDRAW *, int);
|
||||
extern void HookDirect3DSession(LPDIRECTDRAW *, int);
|
||||
extern void HookDirect3DDevice(LPVOID *, int);
|
||||
extern void HookViewport(LPDIRECT3DVIEWPORT *, int);
|
||||
extern void HookDDClipper(LPDIRECTDRAWCLIPPER FAR *);
|
||||
|
||||
// extQueryInterfaceDX: this is the single procedure that manages all QueryInterface methods within the DirectX classes
|
||||
// it is better to have it unique because of the transitive and reflexive properties of QueryInterface, that means
|
||||
@ -28,6 +29,7 @@ typedef enum {
|
||||
TYPE_OBJECT_UNKNOWN = 0,
|
||||
TYPE_OBJECT_DIRECTDRAW,
|
||||
TYPE_OBJECT_DDRAWSURFACE,
|
||||
TYPE_OBJECT_CLIPPER,
|
||||
TYPE_OBJECT_DIRECT3D,
|
||||
TYPE_OBJECT_D3DDEVICE,
|
||||
TYPE_OBJECT_GAMMARAMP,
|
||||
@ -53,6 +55,10 @@ HRESULT WINAPI extQueryInterfaceDX(int dxversion, QueryInterface_Type pQueryInte
|
||||
iObjectType = TYPE_OBJECT_UNKNOWN;
|
||||
switch(riid.Data1){
|
||||
// DirectDraw
|
||||
case 0xD7B70EE0: // CLSID_DirectDraw
|
||||
iObjectType=TYPE_OBJECT_DIRECTDRAW; iObjectVersion=1; break;
|
||||
case 0x3c305196: // CLSID_DirectDraw7
|
||||
iObjectType=TYPE_OBJECT_DIRECTDRAW; iObjectVersion=7; break;
|
||||
case 0x6C14DB80: // IID_IDirectDraw
|
||||
iObjectType=TYPE_OBJECT_DIRECTDRAW; iObjectVersion=1; break;
|
||||
case 0xB3A6F3E0: // IID_IDirectDraw2
|
||||
@ -122,6 +128,8 @@ HRESULT WINAPI extQueryInterfaceDX(int dxversion, QueryInterface_Type pQueryInte
|
||||
iObjectType=TYPE_OBJECT_VIEWPORT; iObjectVersion=2; break;
|
||||
case 0xb0ab3b61: //IID_IDirect3DViewport3
|
||||
iObjectType=TYPE_OBJECT_VIEWPORT; iObjectVersion=3; break;
|
||||
case 0x593817A0: //CLSID_DirectDrawClipper
|
||||
iObjectType=TYPE_OBJECT_CLIPPER; iObjectVersion=1; break;
|
||||
}
|
||||
|
||||
char *sLabel;
|
||||
@ -129,6 +137,7 @@ HRESULT WINAPI extQueryInterfaceDX(int dxversion, QueryInterface_Type pQueryInte
|
||||
case TYPE_OBJECT_UNKNOWN: sLabel = "(unknown)"; break;
|
||||
case TYPE_OBJECT_DIRECTDRAW: sLabel = "IID_IDirectDraw"; break;
|
||||
case TYPE_OBJECT_DDRAWSURFACE: sLabel = "IID_IDirectDrawSurface"; break;
|
||||
case TYPE_OBJECT_CLIPPER: sLabel = "CLSID_DirectDrawClipper"; break;
|
||||
case TYPE_OBJECT_DIRECT3D: sLabel = "IID_IDirect3D"; break;
|
||||
case TYPE_OBJECT_D3DDEVICE: sLabel = "IID_IDirect3DDevice"; break;
|
||||
case TYPE_OBJECT_GAMMARAMP: sLabel = "IID_IDirectDrawGammaRamp"; break;
|
||||
@ -162,6 +171,13 @@ HRESULT WINAPI extQueryInterfaceDX(int dxversion, QueryInterface_Type pQueryInte
|
||||
dxwss.IsAPrimarySurface((LPDIRECTDRAWSURFACE)lpdds))
|
||||
lpdds = lpDDSEmu_Prim;
|
||||
break;
|
||||
#ifdef YEARDEAD
|
||||
//case TYPE_OBJECT_UNKNOWN:
|
||||
// OutTraceDW("QueryInterface: returning same object\n");
|
||||
// ((LPDIRECTDRAWSURFACE)lpdds)->AddRef();
|
||||
// *obp = lpdds;
|
||||
// return DD_OK;
|
||||
#endif
|
||||
}
|
||||
|
||||
res = (*pQueryInterface)(lpdds, riid, obp);
|
||||
@ -182,7 +198,33 @@ HRESULT WINAPI extQueryInterfaceDX(int dxversion, QueryInterface_Type pQueryInte
|
||||
lpdds, riid.Data1, *obp, sLabel, iObjectVersion);
|
||||
|
||||
switch(iObjectType){
|
||||
// simulate unavailable interfaces (useful?)
|
||||
case TYPE_OBJECT_UNKNOWN:
|
||||
dwCaps = dxwcdb.GetCaps((LPDIRECTDRAWSURFACE)lpdds);
|
||||
if (dwCaps) {
|
||||
OutTraceDW("QueryInterface(S): PASS lpdds=%x->%x caps=%x(%s)\n", lpdds, *obp, dwCaps, ExplainDDSCaps(dwCaps));
|
||||
dxwcdb.PushCaps(*(LPDIRECTDRAWSURFACE *)obp, dwCaps);
|
||||
}
|
||||
else {
|
||||
OutTraceDW("QueryInterface(S): NO CAPS\n");
|
||||
}
|
||||
break;
|
||||
#ifdef YEARDEAD
|
||||
case TYPE_OBJECT_UNKNOWN:
|
||||
// triky: some games (actually, only one: "Year Dead") perform a QueryInterface with IID_UNKNOWN
|
||||
// to duplicate the object. In this case, the CAPS should be passed, but maybe the new object
|
||||
// also needs hooking?
|
||||
dwCaps = dxwcdb.GetCaps((LPDIRECTDRAWSURFACE)lpdds);
|
||||
if (dwCaps) {
|
||||
OutTraceDW("QueryInterface(S): PASS lpdds=%x->%x caps=%x(%s)\n", lpdds, *obp, dwCaps, ExplainDDSCaps(dwCaps));
|
||||
dxwcdb.PushCaps(*(LPDIRECTDRAWSURFACE *)obp, dwCaps);
|
||||
if(dwCaps & DDSCAPS_PRIMARYSURFACE) {
|
||||
HookDDSurface((LPDIRECTDRAWSURFACE *)obp, 1, TRUE);
|
||||
dxwss.PushPrimarySurface((LPDIRECTDRAWSURFACE)*obp, dxversion);
|
||||
}
|
||||
else HookDDSurface((LPDIRECTDRAWSURFACE *)obp, 1, FALSE);
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
case TYPE_OBJECT_DIRECTDRAW:
|
||||
HookDDSession((LPDIRECTDRAW *)obp, iObjectVersion);
|
||||
break;
|
||||
@ -208,6 +250,9 @@ HRESULT WINAPI extQueryInterfaceDX(int dxversion, QueryInterface_Type pQueryInte
|
||||
OutTraceDW("QueryInterface(S): NO CAPS\n");
|
||||
}
|
||||
break;
|
||||
case TYPE_OBJECT_CLIPPER:
|
||||
HookDDClipper((LPDIRECTDRAWCLIPPER *)obp); // there is a single Clipper intrface!
|
||||
break;
|
||||
case TYPE_OBJECT_DIRECT3D:
|
||||
HookDirect3DSession((LPDIRECTDRAW *)obp, iObjectVersion);
|
||||
break;
|
||||
|
@ -180,6 +180,7 @@ typedef BOOL (WINAPI *QueryPerformanceFrequency_Type)(LARGE_INTEGER *);
|
||||
typedef BOOL (WINAPI *QueryPerformanceCounter_Type)(LARGE_INTEGER *);
|
||||
typedef BOOL (WINAPI *QueryPerformanceFrequency_Type)(LARGE_INTEGER *);
|
||||
typedef BOOL (WINAPI *GetExitCodeProcess_Type)(HANDLE, LPDWORD);
|
||||
typedef BOOL (WINAPI *FreeLibrary_Type)(HMODULE);
|
||||
|
||||
// ole32.dll:
|
||||
typedef HRESULT (STDAPICALLTYPE *CoCreateInstance_Type)(REFCLSID, LPUNKNOWN, DWORD, REFIID, LPVOID FAR*);
|
||||
@ -494,7 +495,7 @@ DXWEXTERN CloseHandle_Type pCloseHandle DXWINITIALIZED;
|
||||
DXWEXTERN QueryPerformanceFrequency_Type pQueryPerformanceFrequency DXWINITIALIZED;
|
||||
DXWEXTERN QueryPerformanceCounter_Type pQueryPerformanceCounter DXWINITIALIZED;
|
||||
DXWEXTERN GetExitCodeProcess_Type pGetExitCodeProcess DXWINITIALIZED;
|
||||
|
||||
DXWEXTERN FreeLibrary_Type pFreeLibrary DXWINITIALIZED;
|
||||
|
||||
// ole32.dll:
|
||||
DXWEXTERN CoCreateInstance_Type pCoCreateInstance DXWINITIALIZED;
|
||||
@ -806,6 +807,7 @@ extern BOOL WINAPI extCreateProcessA(LPCTSTR, LPTSTR, LPSECURITY_ATTRIBUTES, LPS
|
||||
extern BOOL WINAPI extGetExitCodeProcess(HANDLE, LPDWORD);
|
||||
extern BOOL WINAPI extQueryPerformanceFrequency(LARGE_INTEGER *);
|
||||
extern BOOL WINAPI extQueryPerformanceCounter(LARGE_INTEGER *);
|
||||
extern BOOL WINAPI extFreeLibrary(HMODULE);
|
||||
|
||||
// ole32.dll:
|
||||
extern HRESULT STDAPICALLTYPE extCoCreateInstance(REFCLSID, LPUNKNOWN, DWORD, REFIID, LPVOID FAR*);
|
||||
|
@ -29,6 +29,9 @@ extern HDC hFlippedDC;
|
||||
//EnumDisplayMonitors_Type pEnumDisplayMonitors = NULL;
|
||||
//BOOL WINAPI extEnumDisplayMonitors(HDC, LPCRECT, MONITORENUMPROC, LPARAM);
|
||||
|
||||
typedef BOOL (WINAPI *ValidateRgn_Type)(HWND, HRGN);
|
||||
ValidateRgn_Type pValidateRgn;
|
||||
BOOL WINAPI extValidateRgn(HWND, HRGN);
|
||||
|
||||
#ifdef TRACEPALETTE
|
||||
typedef UINT (WINAPI *GetDIBColorTable_Type)(HDC, UINT, UINT, RGBQUAD *);
|
||||
@ -58,7 +61,7 @@ static HookEntryEx_Type Hooks[]={
|
||||
{HOOK_IAT_CANDIDATE, 0, "MoveWindow", (FARPROC)MoveWindow, (FARPROC *)&pMoveWindow, (FARPROC)extMoveWindow},
|
||||
{HOOK_HOT_CANDIDATE, 0, "EnumDisplaySettingsA", (FARPROC)EnumDisplaySettingsA, (FARPROC *)&pEnumDisplaySettings, (FARPROC)extEnumDisplaySettings},
|
||||
{HOOK_IAT_CANDIDATE, 0, "GetClipCursor", (FARPROC)GetClipCursor, (FARPROC*)&pGetClipCursor, (FARPROC)extGetClipCursor},
|
||||
{HOOK_IAT_CANDIDATE, 0, "ClipCursor", (FARPROC)ClipCursor, (FARPROC *)&pClipCursor, (FARPROC)extClipCursor},
|
||||
{HOOK_HOT_CANDIDATE, 0, "ClipCursor", (FARPROC)ClipCursor, (FARPROC *)&pClipCursor, (FARPROC)extClipCursor},
|
||||
{HOOK_IAT_CANDIDATE, 0, "DefWindowProcA", (FARPROC)DefWindowProcA, (FARPROC *)&pDefWindowProcA, (FARPROC)extDefWindowProcA},
|
||||
{HOOK_IAT_CANDIDATE, 0, "DefWindowProcW", (FARPROC)DefWindowProcW, (FARPROC *)&pDefWindowProcW, (FARPROC)extDefWindowProcW},
|
||||
{HOOK_HOT_CANDIDATE, 0, "CreateWindowExA", (FARPROC)CreateWindowExA, (FARPROC *)&pCreateWindowExA, (FARPROC)extCreateWindowExA},
|
||||
@ -186,7 +189,8 @@ static HookEntryEx_Type SyscallHooks[]={
|
||||
};
|
||||
|
||||
static HookEntryEx_Type ScaledHooks[]={
|
||||
{HOOK_IAT_CANDIDATE, 0, "ValidateRect", (FARPROC)ValidateRect, (FARPROC *)&pValidateRect, (FARPROC)extValidateRect},
|
||||
{HOOK_HOT_CANDIDATE, 0, "ValidateRect", (FARPROC)ValidateRect, (FARPROC *)&pValidateRect, (FARPROC)extValidateRect},
|
||||
{HOOK_HOT_CANDIDATE, 0, "ValidateRgn", (FARPROC)ValidateRgn, (FARPROC *)&pValidateRgn, (FARPROC)extValidateRgn},
|
||||
{HOOK_IAT_CANDIDATE, 0, "ScrollWindow", (FARPROC)ScrollWindow, (FARPROC *)&pScrollWindow, (FARPROC)extScrollWindow},
|
||||
{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator
|
||||
};
|
||||
@ -1127,8 +1131,10 @@ BOOL WINAPI extSetCursorPos(int x, int y)
|
||||
static BOOL WINAPI extPeekMessage(PeekMessage_Type pPeekMessage, LPMSG lpMsg, HWND hwnd, UINT wMsgFilterMin, UINT wMsgFilterMax, UINT wRemoveMsg)
|
||||
{
|
||||
BOOL res;
|
||||
char *sLabel;
|
||||
|
||||
if(dxw.dwFlags3 & PEEKALLMESSAGES){
|
||||
sLabel="(ANY) ";
|
||||
if((wMsgFilterMin==0) && (wMsgFilterMax == 0)){
|
||||
// no filtering, everything is good
|
||||
res=(*pPeekMessage)(lpMsg, hwnd, wMsgFilterMin, wMsgFilterMax, (wRemoveMsg & 0x000F));
|
||||
@ -1142,22 +1148,19 @@ static BOOL WINAPI extPeekMessage(PeekMessage_Type pPeekMessage, LPMSG lpMsg, HW
|
||||
if(wMsgFilterMax<WM_KEYFIRST)(*pPeekMessage)(&Dummy, hwnd, wMsgFilterMax+1, WM_KEYFIRST-1, TRUE); // don't touch above WM_KEYFIRST !!!!
|
||||
}
|
||||
|
||||
if(res)
|
||||
OutTraceW("PeekMessage: ANY lpmsg=%x hwnd=%x filter=(%x-%x) remove=%x(%s) msg=%x(%s) wparam=%x, lparam=%x pt=(%d,%d) res=%x\n",
|
||||
lpMsg, lpMsg->hwnd, wMsgFilterMin, wMsgFilterMax, wRemoveMsg, ExplainPeekRemoveMsg(wRemoveMsg),
|
||||
lpMsg->message, ExplainWinMessage(lpMsg->message & 0xFFFF),
|
||||
lpMsg->wParam, lpMsg->lParam, lpMsg->pt.x, lpMsg->pt.y, res);
|
||||
else
|
||||
OutTraceW("PeekMessage: ANY lpmsg=%x hwnd=%x filter=(%x-%x) remove=%x(%s) res=%x\n",
|
||||
lpMsg, lpMsg->hwnd, wMsgFilterMin, wMsgFilterMax, wRemoveMsg, ExplainPeekRemoveMsg(wRemoveMsg), res);
|
||||
}
|
||||
else {
|
||||
sLabel="";
|
||||
res=(*pPeekMessage)(lpMsg, hwnd, wMsgFilterMin, wMsgFilterMax, (wRemoveMsg & 0x000F));
|
||||
OutTraceW("PeekMessage: lpmsg=%x hwnd=%x filter=(%x-%x) remove=%x(%s) msg=%x(%s) wparam=%x, lparam=%x pt=(%d,%d) res=%x\n",
|
||||
lpMsg, lpMsg->hwnd, wMsgFilterMin, wMsgFilterMax, wRemoveMsg, ExplainPeekRemoveMsg(wRemoveMsg),
|
||||
}
|
||||
if(res)
|
||||
OutTraceW("PeekMessage: %slpmsg=%x hwnd=%x filter=(%x-%x) remove=%x(%s) msg=%x(%s) wparam=%x, lparam=%x pt=(%d,%d) res=%x\n",
|
||||
sLabel, lpMsg, lpMsg->hwnd, wMsgFilterMin, wMsgFilterMax, wRemoveMsg, ExplainPeekRemoveMsg(wRemoveMsg),
|
||||
lpMsg->message, ExplainWinMessage(lpMsg->message & 0xFFFF),
|
||||
lpMsg->wParam, lpMsg->lParam, lpMsg->pt.x, lpMsg->pt.y, res);
|
||||
}
|
||||
else
|
||||
OutTraceW("PeekMessage: %slpmsg=%x hwnd=%x filter=(%x-%x) remove=%x(%s) res=%x\n",
|
||||
sLabel, lpMsg, lpMsg->hwnd, wMsgFilterMin, wMsgFilterMax, wRemoveMsg, ExplainPeekRemoveMsg(wRemoveMsg), res);
|
||||
|
||||
if((dxw.dwFlags1 & MODIFYMOUSE) && dxw.GethWnd()){
|
||||
POINT point;
|
||||
@ -1180,7 +1183,7 @@ static BOOL WINAPI extPeekMessage(PeekMessage_Type pPeekMessage, LPMSG lpMsg, HW
|
||||
// }
|
||||
//}
|
||||
|
||||
if(dxw.dwFlags1 & SLOWDOWN) (*pSleep)(1);
|
||||
if(dxw.dwFlags1 & SLOWDOWN) dxw.DoSlow(1);
|
||||
|
||||
return res;
|
||||
}
|
||||
@ -2079,10 +2082,10 @@ int WINAPI extValidateRect(HWND hwnd, const RECT *lprc)
|
||||
|
||||
if(IsTraceDW){
|
||||
if (lprc)
|
||||
OutTrace("ValidateRect: rect=(%d,%d)-(%d,%d)\n",
|
||||
lprc->left, lprc->top, lprc->right, lprc->bottom);
|
||||
OutTrace("ValidateRect: hwnd=%x rect=(%d,%d)-(%d,%d)\n",
|
||||
hwnd, lprc->left, lprc->top, lprc->right, lprc->bottom);
|
||||
else
|
||||
OutTrace("ValidateRect: rect=(NULL)\n");
|
||||
OutTrace("ValidateRect: hwnd=%x rect=(NULL)\n", hwnd);
|
||||
}
|
||||
|
||||
if(lprc){
|
||||
@ -4194,6 +4197,15 @@ BOOL WINAPI extAdjustWindowRectEx(LPRECT lpRect, DWORD dwStyle, BOOL bMenu, DWOR
|
||||
return ret;
|
||||
}
|
||||
|
||||
BOOL WINAPI extValidateRgn(HWND hwnd, HRGN hrgn)
|
||||
{
|
||||
BOOL ret;
|
||||
OutTraceDW("ValidateRgn: hwnd=%x hrgn=%x\n", hwnd, hrgn);
|
||||
|
||||
ret = (*pValidateRgn)(hwnd, hrgn);
|
||||
return ret;
|
||||
}
|
||||
|
||||
// To do:
|
||||
// GrayStringA
|
||||
// GrayStringW
|
@ -288,7 +288,8 @@ MCIERROR WINAPI extmciSendCommand(BOOL isAnsi, mciSendCommand_Type pmciSendComma
|
||||
RECT saverect;
|
||||
MCIERROR ret;
|
||||
MCI_ANIM_RECT_PARMS *pr;
|
||||
MCI_OVLY_WINDOW_PARMSW *pw;
|
||||
MCI_OVLY_WINDOW_PARMSA *pw;
|
||||
MCI_OPEN_PARMSA *po;
|
||||
|
||||
OutTraceDW("mciSendCommand%c: IDDevice=%x msg=%x(%s) Command=%x(%s)\n",
|
||||
isAnsi ? 'A' : 'W',
|
||||
@ -302,6 +303,11 @@ MCIERROR WINAPI extmciSendCommand(BOOL isAnsi, mciSendCommand_Type pmciSendComma
|
||||
//MCI_OPEN_PARMS *op;
|
||||
MCI_STATUS_PARMS *sp;
|
||||
switch(uMsg){
|
||||
case MCI_OPEN:
|
||||
po = (MCI_OPEN_PARMSA *)dwParam;
|
||||
po->wDeviceID = 1;
|
||||
ret = 0;
|
||||
break;
|
||||
case MCI_STATUS:
|
||||
if(fdwCommand & MCI_STATUS_ITEM){
|
||||
// fix for Tie Fighter 95: when bypassing, let the caller know you have no CD tracks
|
||||
@ -319,6 +325,7 @@ MCIERROR WINAPI extmciSendCommand(BOOL isAnsi, mciSendCommand_Type pmciSendComma
|
||||
if(sp->dwItem == MCI_STATUS_CURRENT_TRACK) sp->dwTrack = 1;
|
||||
if(sp->dwItem == MCI_STATUS_NUMBER_OF_TRACKS) sp->dwTrack = 1;
|
||||
if(sp->dwItem == MCI_STATUS_LENGTH) sp->dwTrack = 200;
|
||||
if(sp->dwItem == MCI_STATUS_MEDIA_PRESENT) sp->dwTrack = 1;
|
||||
sp->dwReturn = 0;
|
||||
break;
|
||||
}
|
||||
@ -336,7 +343,7 @@ MCIERROR WINAPI extmciSendCommand(BOOL isAnsi, mciSendCommand_Type pmciSendComma
|
||||
if(dxw.IsFullScreen()){
|
||||
switch(uMsg){
|
||||
case MCI_WINDOW:
|
||||
pw = (MCI_OVLY_WINDOW_PARMSW *)dwParam;
|
||||
pw = (MCI_OVLY_WINDOW_PARMSA *)dwParam;
|
||||
OutTraceB("mciSendCommand: hwnd=%x CmdShow=%x\n",
|
||||
pw->hWnd, pw->nCmdShow);
|
||||
if(dxw.IsRealDesktop(pw->hWnd)) {
|
||||
@ -376,6 +383,9 @@ MCIERROR WINAPI extmciSendCommand(BOOL isAnsi, mciSendCommand_Type pmciSendComma
|
||||
case MCI_STOP:
|
||||
if(dxw.dwFlags6 & NOMOVIES) return 0; // ???
|
||||
break;
|
||||
case MCI_CLOSE:
|
||||
if(dxw.dwFlags6 & NOMOVIES) return 0; // ???
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
Binary file not shown.
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user