mirror of
https://github.com/DxWnd/DxWnd.reloaded
synced 2024-12-30 09:25:35 +01:00
v2_03_55_src
Former-commit-id: f9c701a8752969160145a02028b1e3576f355691
This commit is contained in:
parent
c095fc7c57
commit
ab7246282c
31
build/dxwnd.0.ini
Normal file
31
build/dxwnd.0.ini
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
[window]
|
||||||
|
posx=50
|
||||||
|
posy=50
|
||||||
|
sizx=320
|
||||||
|
sizy=200
|
||||||
|
lang=default
|
||||||
|
;lang=automatic
|
||||||
|
;updatepaths=1
|
||||||
|
;debug=1
|
||||||
|
;multiprocesshook=0
|
||||||
|
;checkadmin=0
|
||||||
|
[texture]
|
||||||
|
MinTexX=16
|
||||||
|
MaxTexX=0
|
||||||
|
MinTexY=16
|
||||||
|
MaxTexY=0
|
||||||
|
[keymapping]
|
||||||
|
timetoggle=0x72
|
||||||
|
altf4=0x73
|
||||||
|
timeslow=0x74
|
||||||
|
timefast=0x75
|
||||||
|
cliptoggle=
|
||||||
|
refresh=
|
||||||
|
logtoggle=
|
||||||
|
plocktoggle=
|
||||||
|
fpstoggle=
|
||||||
|
printscreen=0x7B
|
||||||
|
corner=0x7A
|
||||||
|
freezetime=0x79
|
||||||
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:6ca8e1fa67ffd8ece8ce4dd729b0eec753da49cad2b29f93f9560f96a1105d18
|
oid sha256:61651edf36eea1710fe669de4024922eca627ff0992815cd2b51cce9cadbd82c
|
||||||
size 620544
|
size 620032
|
||||||
|
176
build/dxwnd.ini
176
build/dxwnd.ini
@ -1,176 +0,0 @@
|
|||||||
[window]
|
|
||||||
exepath=D:\Games\Dark Earth\
|
|
||||||
exportpath=D:\DxWnd\exports\
|
|
||||||
posx=1087
|
|
||||||
posy=286
|
|
||||||
sizx=320
|
|
||||||
sizy=200
|
|
||||||
[target]
|
|
||||||
title0=Warlords Battlecry 3 (GOG)
|
|
||||||
path0=D:\Games\Warlords Battlecry 3 (GOG)\Battlecry III.exe
|
|
||||||
launchpath0=
|
|
||||||
module0=
|
|
||||||
opengllib0=
|
|
||||||
notes0=
|
|
||||||
registry0=
|
|
||||||
ver0=0
|
|
||||||
coord0=2
|
|
||||||
flag0=136314914
|
|
||||||
flagg0=1207959568
|
|
||||||
flagh0=20
|
|
||||||
flagi0=138543108
|
|
||||||
flagj0=4224
|
|
||||||
flagk0=65536
|
|
||||||
flagl0=0
|
|
||||||
flagm0=0
|
|
||||||
tflag0=0
|
|
||||||
posx0=50
|
|
||||||
posy0=50
|
|
||||||
sizx0=800
|
|
||||||
sizy0=600
|
|
||||||
maxfps0=0
|
|
||||||
initts0=0
|
|
||||||
winver0=0
|
|
||||||
maxres0=-1
|
|
||||||
swapeffect0=0
|
|
||||||
maxddinterface0=7
|
|
||||||
title1=Galapagos
|
|
||||||
path1=D:\Games\Galapagos\GALA.EXE
|
|
||||||
launchpath1=
|
|
||||||
module1=
|
|
||||||
opengllib1=
|
|
||||||
notes1=
|
|
||||||
registry1=
|
|
||||||
ver1=7
|
|
||||||
coord1=0
|
|
||||||
flag1=681623718
|
|
||||||
flagg1=1207959556
|
|
||||||
flagh1=20
|
|
||||||
flagi1=203423748
|
|
||||||
flagj1=128
|
|
||||||
flagk1=65536
|
|
||||||
flagl1=0
|
|
||||||
flagm1=0
|
|
||||||
tflag1=-2147477245
|
|
||||||
posx1=50
|
|
||||||
posy1=50
|
|
||||||
sizx1=800
|
|
||||||
sizy1=600
|
|
||||||
maxfps1=0
|
|
||||||
initts1=0
|
|
||||||
winver1=0
|
|
||||||
maxres1=-1
|
|
||||||
swapeffect1=0
|
|
||||||
maxddinterface1=7
|
|
||||||
title2=Warlords Battlecry III
|
|
||||||
path2=D:\Games\Warlords Battlecry III\Battlecry III.exe
|
|
||||||
launchpath2=
|
|
||||||
module2=
|
|
||||||
opengllib2=
|
|
||||||
notes2=
|
|
||||||
registry2=
|
|
||||||
ver2=0
|
|
||||||
coord2=0
|
|
||||||
flag2=136314914
|
|
||||||
flagg2=1207959568
|
|
||||||
flagh2=20
|
|
||||||
flagi2=-2009071612
|
|
||||||
flagj2=4224
|
|
||||||
flagk2=65536
|
|
||||||
flagl2=0
|
|
||||||
flagm2=0
|
|
||||||
tflag2=-2147477245
|
|
||||||
posx2=50
|
|
||||||
posy2=50
|
|
||||||
sizx2=880
|
|
||||||
sizy2=660
|
|
||||||
maxfps2=0
|
|
||||||
initts2=0
|
|
||||||
winver2=0
|
|
||||||
maxres2=-1
|
|
||||||
swapeffect2=0
|
|
||||||
maxddinterface2=7
|
|
||||||
title3=Close Combat 2: a bridge too far
|
|
||||||
path3=D:\Games\Close Combat 2\CC2.EXE
|
|
||||||
launchpath3=
|
|
||||||
module3=
|
|
||||||
opengllib3=
|
|
||||||
notes3=
|
|
||||||
registry3=[HKEY_LOCAL_MACHINE\SOFTWARE]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games\Close Combat]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games\Close Combat\2.00]\n"PID"="00000-000-0000000-00000"\n"InstalledTo"="C:\\GAMES\\CC2"\n"ScreenX"="800"\n"ScreenY"="600"\n"Version"="2.0"\n"IType"=hex:01,00,00,00\n"GameSpeed"=hex:01,00,00,00\n"ShowDSAlert"=hex:01,00,00,00\n"ShowQuickHelp"=hex:01,00,00,00\n"PlaySounds"=hex:01,00,00,00\n"PlayMusic"=hex:01,00,00,00\n"PlayVideos"=hex:00,00,00,00\n"FCopy"=hex:00,00,00,00\n"SMethod"=hex:00,00,00,00\n"Save"=hex:00,00,00,00\n"ShowTrees"=hex:01,00,00,00\n"StaticFPS"=hex:0a,00,00,00\n"InstalledFrom"=".\\"\n"Launched"="1"\n"VersionType"="RetailVersion"\n\n[HKEY_LOCAL_MACHINE\SOFTWARE]\n[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft]\n[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft Games]\n[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft Games\Close Combat]\n[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft Games\Close Combat\2.00]\n"PID"="00000-000-0000000-00000"\n"InstalledTo"="C:\\GAMES\\CC2"\n"ScreenX"="800"\n"ScreenY"="600"\n"Version"="2.0"\n"IType"=hex:01,00,00,00\n"GameSpeed"=hex:01,00,00,00\n"ShowDSAlert"=hex:01,00,00,00\n"ShowQuickHelp"=hex:01,00,00,00\n"PlaySounds"=hex:01,00,00,00\n"PlayMusic"=hex:01,00,00,00\n"PlayVideos"=hex:00,00,00,00\n"FCopy"=hex:00,00,00,00\n"SMethod"=hex:00,00,00,00\n"Save"=hex:00,00,00,00\n"ShowTrees"=hex:01,00,00,00\n"StaticFPS"=hex:0a,00,00,00\n"InstalledFrom"=".\\"\n"Launched"="1"\n"VersionType"="RetailVersion"\n\n
|
|
||||||
ver3=0
|
|
||||||
coord3=0
|
|
||||||
flag3=134225952
|
|
||||||
flagg3=1744830464
|
|
||||||
flagh3=1044
|
|
||||||
flagi3=1279262724
|
|
||||||
flagj3=8392832
|
|
||||||
flagk3=0
|
|
||||||
flagl3=0
|
|
||||||
flagm3=0
|
|
||||||
tflag3=0
|
|
||||||
posx3=50
|
|
||||||
posy3=50
|
|
||||||
sizx3=0
|
|
||||||
sizy3=0
|
|
||||||
maxfps3=0
|
|
||||||
initts3=0
|
|
||||||
winver3=0
|
|
||||||
maxres3=-1
|
|
||||||
swapeffect3=0
|
|
||||||
maxddinterface3=7
|
|
||||||
title4=CyberStrike 2
|
|
||||||
path4=D:\Games\CyberStrike 2\CS2OG.FUN
|
|
||||||
launchpath4=
|
|
||||||
module4=
|
|
||||||
opengllib4=
|
|
||||||
notes4=
|
|
||||||
registry4=
|
|
||||||
ver4=0
|
|
||||||
coord4=0
|
|
||||||
flag4=136314978
|
|
||||||
flagg4=1476395008
|
|
||||||
flagh4=20
|
|
||||||
flagi4=136314884
|
|
||||||
flagj4=1054848
|
|
||||||
flagk4=65536
|
|
||||||
flagl4=0
|
|
||||||
flagm4=0
|
|
||||||
tflag4=-2147477245
|
|
||||||
posx4=50
|
|
||||||
posy4=50
|
|
||||||
sizx4=800
|
|
||||||
sizy4=600
|
|
||||||
maxfps4=0
|
|
||||||
initts4=0
|
|
||||||
winver4=0
|
|
||||||
maxres4=-1
|
|
||||||
swapeffect4=0
|
|
||||||
maxddinterface4=7
|
|
||||||
title5=Dark Earth
|
|
||||||
path5=D:\Games\Dark Earth\dkev.exe
|
|
||||||
launchpath5=
|
|
||||||
module5=
|
|
||||||
opengllib5=
|
|
||||||
notes5=
|
|
||||||
registry5=
|
|
||||||
ver5=0
|
|
||||||
coord5=0
|
|
||||||
flag5=136331362
|
|
||||||
flagg5=1476395008
|
|
||||||
flagh5=20
|
|
||||||
flagi5=138936324
|
|
||||||
flagj5=4224
|
|
||||||
flagk5=65536
|
|
||||||
flagl5=0
|
|
||||||
flagm5=0
|
|
||||||
tflag5=-2147477245
|
|
||||||
posx5=50
|
|
||||||
posy5=50
|
|
||||||
sizx5=800
|
|
||||||
sizy5=600
|
|
||||||
maxfps5=0
|
|
||||||
initts5=0
|
|
||||||
winver5=0
|
|
||||||
maxres5=-1
|
|
||||||
swapeffect5=0
|
|
||||||
maxddinterface5=7
|
|
@ -1,52 +0,0 @@
|
|||||||
[HKEY_LOCAL_MACHINE\SOFTWARE]
|
|
||||||
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft]
|
|
||||||
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games]
|
|
||||||
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games\Close Combat]
|
|
||||||
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games\Close Combat\2.00]
|
|
||||||
"PID"="00000-000-0000000-00000"
|
|
||||||
"InstalledTo"="C:\\GAMES\\CC2"
|
|
||||||
"ScreenX"="800"
|
|
||||||
"ScreenY"="600"
|
|
||||||
"Version"="2.0"
|
|
||||||
"IType"=hex:01,00,00,00
|
|
||||||
"GameSpeed"=hex:01,00,00,00
|
|
||||||
"ShowDSAlert"=hex:01,00,00,00
|
|
||||||
"ShowQuickHelp"=hex:01,00,00,00
|
|
||||||
"PlaySounds"=hex:01,00,00,00
|
|
||||||
"PlayMusic"=hex:01,00,00,00
|
|
||||||
"PlayVideos"=hex:00,00,00,00
|
|
||||||
"FCopy"=hex:00,00,00,00
|
|
||||||
"SMethod"=hex:00,00,00,00
|
|
||||||
"Save"=hex:00,00,00,00
|
|
||||||
"ShowTrees"=hex:01,00,00,00
|
|
||||||
"StaticFPS"=hex:0a,00,00,00
|
|
||||||
"InstalledFrom"=".\\"
|
|
||||||
"Launched"="1"
|
|
||||||
"VersionType"="RetailVersion"
|
|
||||||
|
|
||||||
[HKEY_LOCAL_MACHINE\SOFTWARE]
|
|
||||||
[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft]
|
|
||||||
[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft Games]
|
|
||||||
[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft Games\Close Combat]
|
|
||||||
[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft Games\Close Combat\2.00]
|
|
||||||
"PID"="00000-000-0000000-00000"
|
|
||||||
"InstalledTo"="C:\\GAMES\\CC2"
|
|
||||||
"ScreenX"="800"
|
|
||||||
"ScreenY"="600"
|
|
||||||
"Version"="2.0"
|
|
||||||
"IType"=hex:01,00,00,00
|
|
||||||
"GameSpeed"=hex:01,00,00,00
|
|
||||||
"ShowDSAlert"=hex:01,00,00,00
|
|
||||||
"ShowQuickHelp"=hex:01,00,00,00
|
|
||||||
"PlaySounds"=hex:01,00,00,00
|
|
||||||
"PlayMusic"=hex:01,00,00,00
|
|
||||||
"PlayVideos"=hex:00,00,00,00
|
|
||||||
"FCopy"=hex:00,00,00,00
|
|
||||||
"SMethod"=hex:00,00,00,00
|
|
||||||
"Save"=hex:00,00,00,00
|
|
||||||
"ShowTrees"=hex:01,00,00,00
|
|
||||||
"StaticFPS"=hex:0a,00,00,00
|
|
||||||
"InstalledFrom"=".\\"
|
|
||||||
"Launched"="1"
|
|
||||||
"VersionType"="RetailVersion"
|
|
||||||
|
|
@ -1030,4 +1030,8 @@ add: syslib shared dc mode preliminary implementation, thank to Narzoul's ideas.
|
|||||||
fix: handling of cursor hide/show for programs that don't go through the message window ("Deadlock II rel. 1.2")
|
fix: handling of cursor hide/show for programs that don't go through the message window ("Deadlock II rel. 1.2")
|
||||||
add: /R:n command line option to automatically start DxWnd in icon tray, run the n-th program in configuration and terminate.
|
add: /R:n command line option to automatically start DxWnd in icon tray, run the n-th program in configuration and terminate.
|
||||||
add: option to disable the disabling of Alt-Tab key through SetWindowHooks through WH_KEYBOARD_LL event. Make it posssible to use Alt-Tab key on "Dungeon Kepper II".
|
add: option to disable the disabling of Alt-Tab key through SetWindowHooks through WH_KEYBOARD_LL event. Make it posssible to use Alt-Tab key on "Dungeon Kepper II".
|
||||||
fix: palette object reference count decremented from extra references and zeroed by the "Return 0 refcount" flag: make it possible to run "Dark Earth" that makes a check on the palette reerence counter before starting the game.
|
fix: palette object reference count decremented from extra references and zeroed by the "Return 0 refcount" flag: make it possible to run "Dark Earth" that makes a check on the palette reerence counter before starting the game.
|
||||||
|
|
||||||
|
v2.03.55
|
||||||
|
fix: differentiated handling of blitting from memory to DC vs. from DC vs. memory. The second case is less frequent, but altered the correct rendering of "Battlezone 1998 edition", now working both in scaled, emulated DC shared DC and shared ddraw and GDI DC. The fix impacts both BitBlt and ScaledBlt GDI calls.
|
||||||
|
fix: prevented InvalidateRect to return giving a scaled rect. Fixes "Deadlock 2"partial screen updates.
|
@ -711,6 +711,19 @@ void dxwCore::UnmapClient(int *nXDest, int *nYDest)
|
|||||||
if(h) *nYDest = ((*nYDest * (int)dwScreenHeight) + (h >> 1)) / h;
|
if(h) *nYDest = ((*nYDest * (int)dwScreenHeight) + (h >> 1)) / h;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void dxwCore::UnmapClient(int *nXDest, int *nYDest, int *nWidth, int *nHeight)
|
||||||
|
{
|
||||||
|
RECT client;
|
||||||
|
int w, h;
|
||||||
|
if(!(*pGetClientRect)(hWnd, &client)) return;
|
||||||
|
w = client.right ? client.right : iSizX;
|
||||||
|
h = client.bottom ? client.bottom : iSizY;
|
||||||
|
if(w) *nXDest = ((*nXDest * (int)dwScreenWidth) + (w >> 1)) / w;
|
||||||
|
if(h) *nYDest = ((*nYDest * (int)dwScreenHeight) + (h >> 1)) / h;
|
||||||
|
if(w) *nWidth = ((*nWidth * (int)dwScreenWidth) + (w >> 1)) / w;
|
||||||
|
if(h) *nHeight = ((*nHeight * (int)dwScreenHeight) + (h >> 1)) / h;
|
||||||
|
}
|
||||||
|
|
||||||
void dxwCore::UnmapClient(LPRECT lpRect)
|
void dxwCore::UnmapClient(LPRECT lpRect)
|
||||||
{
|
{
|
||||||
RECT client;
|
RECT client;
|
||||||
|
@ -73,6 +73,7 @@ public: // methods
|
|||||||
//void MapClient(float *, float *);
|
//void MapClient(float *, float *);
|
||||||
void UnmapClient(LPPOINT);
|
void UnmapClient(LPPOINT);
|
||||||
void UnmapClient(int *, int *);
|
void UnmapClient(int *, int *);
|
||||||
|
void UnmapClient(int *, int *, int *, int *);
|
||||||
void UnmapClient(LPRECT);
|
void UnmapClient(LPRECT);
|
||||||
void MapWindow(LPPOINT);
|
void MapWindow(LPPOINT);
|
||||||
void MapWindow(LPRECT);
|
void MapWindow(LPRECT);
|
||||||
|
@ -27,7 +27,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
|
|
||||||
#include "TlHelp32.h"
|
#include "TlHelp32.h"
|
||||||
|
|
||||||
#define VERSION "2.03.54.fix2"
|
#define VERSION "2.03.55"
|
||||||
|
|
||||||
#define DDTHREADLOCK 1
|
#define DDTHREADLOCK 1
|
||||||
//#define LOCKTHREADS
|
//#define LOCKTHREADS
|
||||||
|
Binary file not shown.
@ -221,7 +221,8 @@ static HookEntry_Type SyscallHooks[]={
|
|||||||
{HOOK_IAT_CANDIDATE, "DeleteDC", (FARPROC)DeleteDC, (FARPROC *)&pGDIDeleteDC, (FARPROC)extGDIDeleteDC}, // for tracing only!
|
{HOOK_IAT_CANDIDATE, "DeleteDC", (FARPROC)DeleteDC, (FARPROC *)&pGDIDeleteDC, (FARPROC)extGDIDeleteDC}, // for tracing only!
|
||||||
{HOOK_IAT_CANDIDATE, "CreateDCA", (FARPROC)CreateDCA, (FARPROC *)&pGDICreateDCA, (FARPROC)extGDICreateDCA},
|
{HOOK_IAT_CANDIDATE, "CreateDCA", (FARPROC)CreateDCA, (FARPROC *)&pGDICreateDCA, (FARPROC)extGDICreateDCA},
|
||||||
{HOOK_IAT_CANDIDATE, "CreateDCW", (FARPROC)CreateDCW, (FARPROC *)&pGDICreateDCW, (FARPROC)extGDICreateDCW},
|
{HOOK_IAT_CANDIDATE, "CreateDCW", (FARPROC)CreateDCW, (FARPROC *)&pGDICreateDCW, (FARPROC)extGDICreateDCW},
|
||||||
// CreateDCW ..... {HOOK_IAT_CANDIDATE, 0, NULL, 0, 0} // terminator
|
// CreateDCW .....
|
||||||
|
{HOOK_IAT_CANDIDATE, 0, NULL, 0, 0} // terminator
|
||||||
};
|
};
|
||||||
|
|
||||||
static HookEntry_Type ScaledHooks[]={
|
static HookEntry_Type ScaledHooks[]={
|
||||||
@ -994,7 +995,16 @@ BOOL WINAPI extGDIBitBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nH
|
|||||||
case GDIMODE_STRETCHED:
|
case GDIMODE_STRETCHED:
|
||||||
nWDest= nWidth;
|
nWDest= nWidth;
|
||||||
nHDest= nHeight;
|
nHDest= nHeight;
|
||||||
if (IsToScreen && !IsFromScreen) dxw.MapClient(&nXDest, &nYDest, &nWDest, &nHDest);
|
switch(Flux){
|
||||||
|
case 1: // memory to screen
|
||||||
|
dxw.MapClient(&nXDest, &nYDest, &nWDest, &nHDest);
|
||||||
|
break;
|
||||||
|
case 2: // screen to memory
|
||||||
|
dxw.MapClient(&nXSrc, &nYSrc, &nWidth, &nHeight);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
res=(*pGDIStretchBlt)(hdcDest, nXDest, nYDest, nWDest, nHDest, hdcSrc, nXSrc, nYSrc, nWidth, nHeight, dwRop);
|
res=(*pGDIStretchBlt)(hdcDest, nXDest, nYDest, nWDest, nHDest, hdcSrc, nXSrc, nYSrc, nWidth, nHeight, dwRop);
|
||||||
OutTraceB("GDI.BitBlt: DEBUG DC dest=(%d,%d) size=(%d,%d)\n", nXDest, nYDest, nWDest, nHDest);
|
OutTraceB("GDI.BitBlt: DEBUG DC dest=(%d,%d) size=(%d,%d)\n", nXDest, nYDest, nWDest, nHDest);
|
||||||
break;
|
break;
|
||||||
@ -1081,7 +1091,16 @@ BOOL WINAPI extGDIStretchBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, in
|
|||||||
int nWDest, nHDest;
|
int nWDest, nHDest;
|
||||||
nWDest= nWidth;
|
nWDest= nWidth;
|
||||||
nHDest= nHeight;
|
nHDest= nHeight;
|
||||||
dxw.MapClient(&nXDest, &nYDest, &nWDest, &nHDest);
|
switch(Flux){
|
||||||
|
case 1: // memory to screen
|
||||||
|
dxw.MapClient(&nXDest, &nYDest, &nWDest, &nHDest);
|
||||||
|
break;
|
||||||
|
case 2: // screen to memory
|
||||||
|
dxw.MapClient(&nXSrc, &nYSrc, &nWidth, &nHeight);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
res=(*pGDIStretchBlt)(hdcDest, nXDest, nYDest, nWDest, nHDest, hdcSrc, nXSrc, nYSrc, nWSrc, nHSrc, dwRop);
|
res=(*pGDIStretchBlt)(hdcDest, nXDest, nYDest, nWDest, nHDest, hdcSrc, nXSrc, nYSrc, nWSrc, nHSrc, dwRop);
|
||||||
OutTraceB("GDI.StretchBlt: DEBUG DC dest=(%d,%d) size=(%d,%d)\n", nXDest, nYDest, nWDest, nHDest);
|
OutTraceB("GDI.StretchBlt: DEBUG DC dest=(%d,%d) size=(%d,%d)\n", nXDest, nYDest, nWDest, nHDest);
|
||||||
}
|
}
|
||||||
|
146
dll/shareddc.cpp
146
dll/shareddc.cpp
@ -61,85 +61,40 @@ HDC dxwSDC::GetPrimaryDC(HDC hdc)
|
|||||||
extern void *lpD3DActiveDevice;
|
extern void *lpD3DActiveDevice;
|
||||||
|
|
||||||
OutTraceB("dxwSDC::GetPrimaryDC: hdc=%x\n", hdc);
|
OutTraceB("dxwSDC::GetPrimaryDC: hdc=%x\n", hdc);
|
||||||
#ifdef D3D9TRY
|
|
||||||
if(lpD3DActiveDevice){
|
// look for ddraw first
|
||||||
// search for D3D first
|
//if(pReleaseDDThreadLock)(*pReleaseDDThreadLock)();
|
||||||
//RECT client;
|
lpDDSPrimary = dxwss.GetPrimarySurface();
|
||||||
//(*pGetClientRect)(dxw.GethWnd(), &client);
|
if (lpDDSPrimary) {
|
||||||
//if(pDestSurface == NULL){
|
if(pReleaseDDThreadLock)(*pReleaseDDThreadLock)();
|
||||||
// //res=((IDirect3DDevice9 *)lpD3DActiveDevice)->CreateOffscreenPlainSurface(ScreenWidth, ScreenHeight, D3DFMT_UNKNOWN, D3DPOOL_DEFAULT, &pDestSurface, NULL);
|
res=((*pGetDC)(lpDDSPrimary, &PrimaryDC));
|
||||||
// //res=((IDirect3DDevice9 *)lpD3DActiveDevice)->CreateOffscreenPlainSurface(dxw.GetScreenWidth(), dxw.GetScreenHeight(), D3DFMT_UNKNOWN, D3DPOOL_DEFAULT, &pDestSurface, NULL);
|
while((PrimaryDC == NULL) && lpDDSPrimary) {
|
||||||
// res=((IDirect3DDevice9 *)lpD3DActiveDevice)->CreateOffscreenPlainSurface(client.right, client.bottom, D3DFMT_UNKNOWN, D3DPOOL_DEFAULT, &pDestSurface, NULL);
|
OutTraceB("dxwSDC::GetPrimaryDC: found primary surface with no DC, unref lpdds=%x\n", lpDDSPrimary);
|
||||||
// if(res){
|
dxwss.UnrefSurface(lpDDSPrimary);
|
||||||
// OutTraceE("dxwSDC::CreateOffscreenPlainSurface: ERROR err=%x(%s) at=%d\n", res, ExplainDDError(res), __LINE__);
|
lpDDSPrimary = dxwss.GetPrimarySurface();
|
||||||
// return NULL;
|
if (lpDDSPrimary) (*pGetDC)(lpDDSPrimary, &PrimaryDC);
|
||||||
// _Warn("CreateOffscreenPlainSurface ERROR");
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
//res=((IDirect3DDevice9 *)lpD3DActiveDevice)->GetFrontBufferData(1, pDestSurface);
|
|
||||||
//if(res){
|
|
||||||
// OutTraceE("GetFrontBufferData: ERROR err=%x(%s) at=%d\n", res, ExplainDDError(res), __LINE__);
|
|
||||||
// _Warn("GetFrontBufferData ERROR");
|
|
||||||
//}
|
|
||||||
IDirect3DSurface9 *pRenderSurface;
|
|
||||||
res=((IDirect3DDevice9 *)lpD3DActiveDevice)->GetRenderTarget(0, &pRenderSurface);
|
|
||||||
if(res){
|
|
||||||
OutTraceE("d3d9::GetRenderTarget: ERROR err=%x(%s) at=%d\n", res, ExplainDDError(res), __LINE__);
|
|
||||||
_Warn("d3d9::GetRenderTarget ERROR");
|
|
||||||
}
|
}
|
||||||
//res=((IDirect3DDevice9 *)lpD3DActiveDevice)->GetRenderTargetData(pRenderSurface, pDestSurface);
|
if (!PrimaryDC) {
|
||||||
//if(res){
|
_Warn("No primary DC");
|
||||||
// OutTraceE("d3d9::GetRenderTargetData: ERROR err=%x(%s) at=%d\n", res, ExplainDDError(res), __LINE__);
|
OutTraceB("dxwSDC::GetPrimaryDC: no ddraw primary DC\n");
|
||||||
// _Warn("d3d9::GetRenderTargetData ERROR");
|
|
||||||
//}
|
|
||||||
//res=pDestSurface->GetDC(&PrimaryDC);
|
|
||||||
res=pRenderSurface->GetDC(&PrimaryDC);
|
|
||||||
if(res){
|
|
||||||
OutTraceE("d3d9::GetDC: ERROR err=%x(%s) at=%d\n", res, ExplainDDError(res), __LINE__);
|
|
||||||
//_Warn("d3d9::GetDC ERROR");
|
|
||||||
VirtualSurfaceType = VIRTUAL_ON_D3D;
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
VirtualSurfaceType = VIRTUAL_ON_D3D;
|
// avoid double Getdc on same hdc and lock
|
||||||
|
// if(PrimaryDC == hdc) (*pReleaseDC)(lpDDSPrimary, PrimaryDC);
|
||||||
|
OutTraceB("dxwSDC::GetPrimaryDC: ddraw PrimaryDC=%x\n", PrimaryDC);
|
||||||
|
VirtualSurfaceType = VIRTUAL_ON_DDRAW;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
#else
|
// finally, search GDI DC
|
||||||
{
|
PrimaryDC = (*pGDIGetDC)(dxw.GethWnd());
|
||||||
#endif
|
if (!PrimaryDC) {
|
||||||
// else look for ddraw
|
_Warn("No window DC");
|
||||||
//if(pReleaseDDThreadLock)(*pReleaseDDThreadLock)();
|
OutTraceB("dxwSDC::GetPrimaryDC: no windows DC\n");
|
||||||
lpDDSPrimary = dxwss.GetPrimarySurface();
|
return NULL;
|
||||||
if (lpDDSPrimary) {
|
|
||||||
if(pReleaseDDThreadLock)(*pReleaseDDThreadLock)();
|
|
||||||
res=((*pGetDC)(lpDDSPrimary, &PrimaryDC));
|
|
||||||
while((PrimaryDC == NULL) && lpDDSPrimary) {
|
|
||||||
OutTraceB("dxwSDC::GetPrimaryDC: found primary surface with no DC, unref lpdds=%x\n", lpDDSPrimary);
|
|
||||||
dxwss.UnrefSurface(lpDDSPrimary);
|
|
||||||
lpDDSPrimary = dxwss.GetPrimarySurface();
|
|
||||||
if (lpDDSPrimary) (*pGetDC)(lpDDSPrimary, &PrimaryDC);
|
|
||||||
}
|
|
||||||
if (!PrimaryDC) {
|
|
||||||
_Warn("No primary DC");
|
|
||||||
OutTraceB("dxwSDC::GetPrimaryDC: no ddraw primary DC\n");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
// avoid double Getdc on same hdc and lock
|
|
||||||
// if(PrimaryDC == hdc) (*pReleaseDC)(lpDDSPrimary, PrimaryDC);
|
|
||||||
OutTraceB("dxwSDC::GetPrimaryDC: ddraw PrimaryDC=%x\n", PrimaryDC);
|
|
||||||
VirtualSurfaceType = VIRTUAL_ON_DDRAW;
|
|
||||||
}
|
}
|
||||||
else {
|
OutTraceB("dxwSDC::GetPrimaryDC: gdi PrimaryDC=%x\n", PrimaryDC);
|
||||||
// finally, search GDI DC
|
VirtualSurfaceType = VIRTUAL_ON_WINDOW;
|
||||||
PrimaryDC = (*pGDIGetDC)(dxw.GethWnd());
|
}
|
||||||
if (!PrimaryDC) {
|
|
||||||
_Warn("No window DC");
|
|
||||||
OutTraceB("dxwSDC::GetPrimaryDC: no windows DC\n");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
OutTraceB("dxwSDC::GetPrimaryDC: gdi PrimaryDC=%x\n", PrimaryDC);
|
|
||||||
VirtualSurfaceType = VIRTUAL_ON_WINDOW;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// whenever the hdc changes, rebuild the virtual DC
|
// whenever the hdc changes, rebuild the virtual DC
|
||||||
if(hdc != LastHDC) do {
|
if(hdc != LastHDC) do {
|
||||||
@ -208,11 +163,27 @@ HDC dxwSDC::GetPrimaryDC(HDC hdc)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(PrimaryDC){
|
if(PrimaryDC){
|
||||||
if(!(*pGDIBitBlt)(VirtualHDC, 0, 0, ScreenWidth, ScreenHeight, PrimaryDC, VirtualOffset.x, VirtualOffset.y, SRCCOPY)){
|
switch(VirtualSurfaceType){
|
||||||
OutTraceE("dxwSDC::GetPrimaryDC: StretchBlt ERROR err=%d at=%d\n", GetLastError(), __LINE__);
|
case VIRTUAL_ON_DDRAW:
|
||||||
_Warn("StretchBlt ERROR");
|
if(!(*pGDIBitBlt)(VirtualHDC, 0, 0, ScreenWidth, ScreenHeight, PrimaryDC, VirtualOffset.x, VirtualOffset.y, SRCCOPY)){
|
||||||
|
OutTraceE("dxwSDC::GetPrimaryDC: StretchBlt ERROR err=%d at=%d\n", GetLastError(), __LINE__);
|
||||||
|
_Warn("StretchBlt ERROR");
|
||||||
|
}
|
||||||
|
OutTraceB("dxwSDC::GetPrimaryDC: fill=(0,0)-(%dx%d) from=(%d,%d)\n", ScreenWidth, ScreenHeight, VirtualOffset.x, VirtualOffset.y);
|
||||||
|
break;
|
||||||
|
case VIRTUAL_ON_WINDOW:
|
||||||
|
int w, h;
|
||||||
|
dxw.MapClient(&VirtualOffset);
|
||||||
|
w = ScreenWidth;
|
||||||
|
h = ScreenHeight;
|
||||||
|
dxw.MapClient(&w, &h);
|
||||||
|
if(!(*pGDIStretchBlt)(VirtualHDC, 0, 0, ScreenWidth, ScreenHeight, PrimaryDC, VirtualOffset.x, VirtualOffset.y, w, h, SRCCOPY)){
|
||||||
|
OutTraceE("dxwSDC::GetPrimaryDC: StretchBlt ERROR err=%d at=%d\n", GetLastError(), __LINE__);
|
||||||
|
_Warn("StretchBlt ERROR");
|
||||||
|
}
|
||||||
|
OutTraceB("dxwSDC::GetPrimaryDC: fill=(0,0)-(%dx%d) from=(%d,%d)-(%dx%d)\n", ScreenWidth, ScreenHeight, VirtualOffset.x, VirtualOffset.y, w, h);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
OutTraceB("dxwSDC::GetPrimaryDC: fill=(0,0)-(%d,%d) from=(%d,%d)\n", ScreenWidth, ScreenHeight, VirtualOffset.x, VirtualOffset.y);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
POINT origin = {};
|
POINT origin = {};
|
||||||
@ -274,18 +245,6 @@ BOOL dxwSDC::PutPrimaryDC(HDC hdc, BOOL UpdateScreen, int XDest, int YDest, int
|
|||||||
|
|
||||||
if(UpdateScreen){
|
if(UpdateScreen){
|
||||||
switch(VirtualSurfaceType){
|
switch(VirtualSurfaceType){
|
||||||
#ifdef D3D9TRY
|
|
||||||
case VIRTUAL_ON_D3D:
|
|
||||||
RECT client;
|
|
||||||
SetStretchBltMode(PrimaryDC, HALFTONE);
|
|
||||||
(*pGetClientRect)(dxw.GethWnd(), &client);
|
|
||||||
if(PrimaryDC) ret=(*pGDIStretchBlt)(PrimaryDC, 0, 0, client.right, client.bottom, VirtualHDC, 0, 0, dxw.GetScreenWidth(), dxw.GetScreenHeight(), SRCCOPY);
|
|
||||||
ret=(*pGDIReleaseDC)(dxw.GethWnd(), PrimaryDC);
|
|
||||||
//ret=(*pGDIReleaseDC)(dxw.GethWnd(), PrimaryDC);
|
|
||||||
if(!ret) OutTrace("dxwSDC::PutPrimaryDC: ReleaseDC ERROR err=%d\n", GetLastError());
|
|
||||||
//pDestSurface->Release();
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
case VIRTUAL_ON_DDRAW:
|
case VIRTUAL_ON_DDRAW:
|
||||||
ret=(*pGDIBitBlt)(PrimaryDC, XDest+VirtualOffset.x, YDest+VirtualOffset.y, nDestWidth, nDestHeight, VirtualHDC, XDest, YDest, SRCCOPY);
|
ret=(*pGDIBitBlt)(PrimaryDC, XDest+VirtualOffset.x, YDest+VirtualOffset.y, nDestWidth, nDestHeight, VirtualHDC, XDest, YDest, SRCCOPY);
|
||||||
if(!ret || (ret==GDI_ERROR)) {
|
if(!ret || (ret==GDI_ERROR)) {
|
||||||
@ -409,6 +368,7 @@ static BOOL CALLBACK excludeClipRectsForOverlappingWindows(HWND hwnd, LPARAM lPa
|
|||||||
|
|
||||||
void dxwSDC::setClippingRegion(HDC compatDc, HDC origDc, POINT& origin)
|
void dxwSDC::setClippingRegion(HDC compatDc, HDC origDc, POINT& origin)
|
||||||
{
|
{
|
||||||
|
#if 0
|
||||||
OutTrace("dxwSDC::setClippingRegion: compdc=%x origdc=%x origin=(%d,%d)\n", compatDc, origDc, origin.x, origin.y);
|
OutTrace("dxwSDC::setClippingRegion: compdc=%x origdc=%x origin=(%d,%d)\n", compatDc, origDc, origin.x, origin.y);
|
||||||
HRGN clipRgn = CreateRectRgn(0, 0, 0, 0);
|
HRGN clipRgn = CreateRectRgn(0, 0, 0, 0);
|
||||||
const bool isEmptyClipRgn = (1 != GetRandomRgn(origDc, clipRgn, SYSRGN));
|
const bool isEmptyClipRgn = (1 != GetRandomRgn(origDc, clipRgn, SYSRGN));
|
||||||
@ -444,13 +404,14 @@ void dxwSDC::setClippingRegion(HDC compatDc, HDC origDc, POINT& origin)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
DeleteObject(origClipRgn);
|
DeleteObject(origClipRgn);
|
||||||
|
#endif
|
||||||
|
|
||||||
return;
|
#if 0
|
||||||
// to finish .....
|
// to finish .....
|
||||||
// on Win10 this part seems unnecessary and giving troubles .....
|
// on Win10 this part seems unnecessary and giving troubles .....
|
||||||
//dxw.MapClient(&origin);
|
//dxw.MapClient(&origin);
|
||||||
if (!isEmptyClipRgn)
|
//if (!isEmptyClipRgn)
|
||||||
{
|
if(1){
|
||||||
HWND hwnd = WindowFromDC(origDc);
|
HWND hwnd = WindowFromDC(origDc);
|
||||||
if (hwnd)
|
if (hwnd)
|
||||||
{
|
{
|
||||||
@ -458,4 +419,5 @@ void dxwSDC::setClippingRegion(HDC compatDc, HDC origDc, POINT& origin)
|
|||||||
EnumWindows(&excludeClipRectsForOverlappingWindows,(LPARAM)(&excludeClipRectsData));
|
EnumWindows(&excludeClipRectsForOverlappingWindows,(LPARAM)(&excludeClipRectsData));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -639,12 +639,19 @@ BOOL WINAPI extInvalidateRect(HWND hwnd, RECT *lpRect, BOOL bErase)
|
|||||||
OutTrace("InvalidateRect: hwnd=%x rect=%s erase=%x\n", hwnd, sRect, bErase);
|
OutTrace("InvalidateRect: hwnd=%x rect=%s erase=%x\n", hwnd, sRect, bErase);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RECT ScaledRect;
|
||||||
if(dxw.IsFullScreen()) {
|
if(dxw.IsFullScreen()) {
|
||||||
switch(dxw.GDIEmulationMode){
|
switch(dxw.GDIEmulationMode){
|
||||||
case GDIMODE_STRETCHED:
|
case GDIMODE_STRETCHED:
|
||||||
case GDIMODE_SHAREDDC:
|
case GDIMODE_SHAREDDC:
|
||||||
case GDIMODE_EMULATED:
|
case GDIMODE_EMULATED:
|
||||||
if(lpRect) dxw.MapClient(lpRect);
|
if(lpRect) {
|
||||||
|
// v2.03.55: the lpRect area must NOT be altered by the call
|
||||||
|
// effect visible in partial updates of Deadlock 2 main menu buttons
|
||||||
|
ScaledRect = *lpRect;
|
||||||
|
dxw.MapClient(&ScaledRect);
|
||||||
|
lpRect = &ScaledRect;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user