1
0
mirror of https://github.com/DxWnd/DxWnd.reloaded synced 2024-12-30 09:25:35 +01:00

v2_03_96_src

Former-commit-id: e3c19066d5e85028dcc186ae8bd4142209903234
This commit is contained in:
gho tik 2016-11-13 11:48:08 -05:00 committed by Refael ACkermann
parent 94f575cc42
commit d5e3bf8bc5
33 changed files with 395 additions and 367 deletions

View File

@ -244,6 +244,8 @@
#define FIXSMACKLOOP 0x04000000 // fix Smack loop by insert processmessage and blit between frames
#define FIXFREELIBRARY 0x08000000 // fix FreeLibrary simulating retcode 0(error) when attempting free of unallocated module
#define ANCHORED 0x10000000 // Anchored position & size, mo stretching or sliding is allowed
#define CLEARTEXTUREFOURCC 0x20000000 // Clear DDSCAPS2_FOURCC bit and makes texture load without codec
#define NODDEXCLUSIVEMODE 0x40000000 // Do not allow ddraw EXCLUSIVE mode also in non windowed mode
// eighth flags DWORD dxw.dwFlags8:

View File

@ -1,4 +1,4 @@
Readme First release notes - October 10th, 2016
Readme First release notes - November 7th, 2016
DxWnd is a project still in development, so new releases are not always fully compatible with previous ones.
Compatibility issues may easily happen while trying to use old configurations (the dxwnd.ini file) or exported files (*.dxw files located in the export folder) with new releases of the program.
@ -6,22 +6,42 @@ In particular, dxw exported files are not always checked and updated before rele
This file will try to provide a quick guide to the resolution of the most common portability problems, listing the known cases that can be easily fixed.
==============================================================================================
DxWnd does nothing!
If it seems that DxWnd is perfectly useless, the programs starting in fullscreen mode exactly as if DxWnd was not running, you could likely have a capability problem caused either from lack of permissions or some compatibility setting.
You can try these two simple steps:
1) Assign to DxWnd.exe administrator privileges (right-click on DxWnd.exe, Properties->Compatibility->check "run this program as administrator" or whatever is your locale translated interface). I always try to set this flag in the DxWnd distribution, but a simple file copy can clear the privilege.
2) Clear compatibility settings on the target program (again, "Properties"->"Compatibility"->uncheck all compatibility flags). Maybe you'd better use the dedicated DxWnd command ("Tools"->"Clear compatibility flags", apparently this one goes a little deeper and clears some possibly hidden flags). If you clear compatibility flags it is likely that the game will no longer run in fullscreen without DxWnd, so maybe you can perform the operation on a copy of the executable file.
==============================================================================================
Flip emulation:
the DirectX/"Flip emulation" flag is required for most of DirectDraw games and is now set by default, but old exported files may not have this flag set. The sympthom generally is an error in DirectDraw calls or a black screen. In case the flag is not checked, just check it.
==============================================================================================
Optimize for AERO mode:
same as above, the flag is set by default, but some old exported files may not have it.
The flag activated a blitting schema that is more compatible with AERO and desktop composition that is now mandatory on recent OS (Win8 and above). Better check it in case of problems.
==============================================================================================
Force clipper:
Setting a clipper on the primary surface is something that sometimes is good, sometimes is bad. For this reason, so far the "DirectX" / "Force clipper" is unchecked by default.
But a side effect of the lack of a clipping region is the rupture of the desktop composition! So, if that happens (the desktop blinks and the AERO transparency effects disappear) you can try to set the flag and see if there are changes for the better.
============================================================================================
Final note:
If all else fails do not despair! Defaulted values are pretty good in most cases, so better start from scratch without using an old .dxw export file.
Or, even better, create a new defauled entry, import the old .dxw file and start comparing the two configurations: it is a hell of a job, but likely you can pick something good from the old file that will make the new entry working.
Finally, share your success with the community! Please, post on the SF board any working and non trivial configuration to share it with other users, and notify residual problems that I could work about.
Please, consider this as being part of the fun!
yours faithfully
GHO
GHO

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:e98419de58b94f79d91d5044fe603e7754db6ea3d79e641b4fc16d9df5ea17e5
size 700416
oid sha256:eca050e2e867b9ccd61ce1e78b991f48504d208b1454e486e76ace04e7763b5f
size 700928

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:a75eed6fc7414d986f53c430fc32131c3052a40abfabdac6c13e0ba6a8900b08
size 664576
oid sha256:e2ea4c3b5e4fd2628d255b154cb6d5094da8be5175c844919cc1ad8ab6eecf81
size 665088

View File

@ -1,281 +0,0 @@
[window]
exepath=D:\Games\Year Dead\
posx=1164
posy=243
sizx=320
sizy=494
exportpath=G:\DxWnd.develop\v2_03_94fx3_src\build\exports\
debug=1
autohide=0
checkadmin=0
namefromfolder=0
multiprocesshook=0
updatepaths=1
defaultcoord=0
defaultposx=50
defaultposy=50
defaultsizx=800
defaultsizy=600
[target]
title0=NITRO.EXE
path0=D:\Games\WCW Nitro\NITRO.EXE
startfolder0=
launchpath0=
module0=
opengllib0=
notes0=
registry0=
ver0=0
monitorid0=-1
coord0=0
flag0=136314914
flagg0=1207959552
flagh0=20
flagi0=138412036
flagj0=4224
flagk0=65536
flagl0=0
flagm0=0
tflag0=0
dflag0=0
posx0=50
posy0=50
sizx0=800
sizy0=600
maxfps0=0
initts0=0
winver0=0
maxres0=-1
swapeffect0=0
maxddinterface0=7
slowratio0=2
initresw0=800
initresh0=600
title1=Warcraft II BNE.exe
path1=D:\Games\WarCraft II BNE\Warcraft II BNE.exe
startfolder1=
launchpath1=
module1=
opengllib1=
notes1=
registry1=
ver1=0
monitorid1=-1
coord1=0
flag1=136314914
flagg1=1207959552
flagh1=20
flagi1=138412036
flagj1=4224
flagk1=65536
flagl1=0
flagm1=0
tflag1=0
dflag1=0
posx1=50
posy1=50
sizx1=800
sizy1=600
maxfps1=0
initts1=0
winver1=0
maxres1=-1
swapeffect1=0
maxddinterface1=7
slowratio1=2
initresw1=800
initresh1=600
title2=Dethkarz
path2=D:\Games\dethkarz\Dethkarz.exe
startfolder2=
launchpath2=
module2=Vertigo Direct3D
opengllib2=
notes2=Beware! This game REQUIRES initial resolution set as 640x480 as needed by the \nintro movie, otherwise the game won't start and will show an error message\ndialog box.\nNeeds also bypass MCI calls if no CD is present.\nTested OK with D3D renderer, 16 & 32 bpp.
registry2=
ver2=0
monitorid2=-1
coord2=0
flag2=681574434
flagg2=1207959552
flagh2=20
flagi2=205520902
flagj2=4224
flagk2=35717120
flagl2=8389120
flagm2=0
tflag2=0
dflag2=0
posx2=50
posy2=50
sizx2=800
sizy2=600
maxfps2=0
initts2=0
winver2=0
maxres2=-1
swapeffect2=0
maxddinterface2=7
slowratio2=2
initresw2=640
initresh2=480
title3=yeardead.exe
path3=f:\Games\Year Dead\yeardead.exe
startfolder3=
launchpath3=
module3=
opengllib3=
notes3=
registry3=
ver3=0
monitorid3=-1
coord3=0
flag3=681574434
flagg3=1207959552
flagh3=20
flagi3=138412036
flagj3=4224
flagk3=2162688
flagl3=0
flagm3=0
tflag3=-2147477245
dflag3=0
posx3=50
posy3=50
sizx3=800
sizy3=600
maxfps3=0
initts3=0
winver3=0
maxres3=-1
swapeffect3=0
maxddinterface3=7
slowratio3=2
initresw3=800
initresh3=600
title4=SPWaW 2016
path4=G:\Games\The Depot\SPWaW 2016\mech.exe
startfolder4=
launchpath4=
module4=
opengllib4=
notes4=
registry4=
ver4=0
monitorid4=0
coord4=1
flag4=49186
flagg4=1207992338
flagh4=532
flagi4=18907136
flagj4=1152
flagk4=0
flagl4=0
flagm4=0
tflag4=0
dflag4=0
posx4=50
posy4=50
sizx4=1340
sizy4=1000
maxfps4=0
initts4=0
winver4=0
maxres4=-1
swapeffect4=0
maxddinterface4=7
slowratio4=1
initresw4=0
initresh4=0
title5=Adrenix 3D
path5=F:\Games\Adrenix\AdrenixD.exe
startfolder5=
launchpath5=
module5=
opengllib5=
notes5=
registry5=
ver5=0
monitorid5=0
coord5=0
flag5=134235174
flagg5=1216413696
flagh5=20
flagi5=138412036
flagj5=5248
flagk5=65536
flagl5=0
flagm5=0
tflag5=6402
dflag5=0
posx5=50
posy5=50
sizx5=800
sizy5=600
maxfps5=0
initts5=0
winver5=0
maxres5=-1
swapeffect5=0
maxddinterface5=7
slowratio5=1
initresw5=0
initresh5=0
title6=Adrenix
path6=F:\Games\Adrenix\Adrenix.exe
startfolder6=
launchpath6=
module6=
opengllib6=
notes6=
registry6=
ver6=0
monitorid6=0
coord6=0
flag6=136314918
flagg6=1207959552
flagh6=20
flagi6=138412036
flagj6=4224
flagk6=0
flagl6=0
flagm6=0
tflag6=0
dflag6=0
posx6=50
posy6=50
sizx6=800
sizy6=600
maxfps6=0
initts6=0
winver6=0
maxres6=-1
swapeffect6=0
maxddinterface6=7
slowratio6=1
initresw6=0
initresh6=0
[texture]
MinTexX=0
MinTexY=0
MaxTexX=0
MaxTexY=0
[keymapping]
timetoggle=
timefast=
timeslow=
altf4=
cliptoggle=
refresh=
logtoggle=
plogtoggle=
fpstoggle=
printscreen=
corner=
freezetime=
fullscreen=
workarea=
desktop=
minimize=
restore=
kill=

View File

@ -0,0 +1,35 @@
[target]
title0=Blade Runner (4CD version)
path0=D:\Blade\BLADE.EXE
startfolder0=
launchpath0=
module0=
opengllib0=
notes0=Courtesy of Riitaoja:\n\nInstalling Blade Runner on 64bit Windows (4CD version):\n\n- Copy the "BASE" folder from CD1 to your hard drive and rename it to "BLADE".\n- Copy "CDFRAMES.DAT" file from \CD1 -forder of the optical drive to the "BLADE"\ndirectory on your hard drive and rename the file to "HDFRAMES.DAT".\n\n- Timing -> Frames per Second - Limit delay 40 msec (25 FPS)\nFixes the shooting range by limiting FPS.
registry0=
ver0=0
monitorid0=-1
coord0=0
flag0=136331298
flagg0=1207963648
flagh0=20
flagi0=138412036
flagj0=4224
flagk0=65536
flagl0=0
flagm0=0
tflag0=0
dflag0=0
posx0=50
posy0=50
sizx0=800
sizy0=600
maxfps0=40
initts0=0
winver0=0
maxres0=-1
swapeffect0=0
maxddinterface0=7
slowratio0=2
initresw0=800
initresh0=600

View File

@ -0,0 +1,35 @@
[target]
title0=Blade Runner (Win7)
path0=F:\Games\Blade Runner\Blade7.EXE
startfolder0=
launchpath0=
module0=
opengllib0=
notes0=From DVD version V2, with patched exe for WinXP and Win7\n\nBlade7.exe working ok also on Win10
registry0=
ver0=0
monitorid0=-1
coord0=0
flag0=136314914
flagg0=1207959552
flagh0=20
flagi0=138412036
flagj0=4224
flagk0=65536
flagl0=0
flagm0=0
tflag0=0
dflag0=0
posx0=50
posy0=50
sizx0=800
sizy0=600
maxfps0=0
initts0=0
winver0=0
maxres0=-1
swapeffect0=0
maxddinterface0=7
slowratio0=2
initresw0=800
initresh0=600

View File

@ -1,21 +1,25 @@
[target]
title0=Blade Runner
path0=D:\Games\blade runner\BLADE.EXE
path0=F:\Games\blade runner\BLADE.EXE
startfolder0=
launchpath0=
module0=
opengllib0=
notes0=
registry0=
ver0=0
monitorid0=0
coord0=0
flag0=134234210
flagg0=1480589312
flagh0=2580
flagi0=4210692
flagi0=4194308
flagj0=128
flagk0=2048
flagl0=0
flagm0=0
tflag0=0
initx0=0
inity0=0
minx0=0
miny0=0
maxx0=0
maxy0=0
dflag0=0
posx0=50
posy0=50
sizx0=800
@ -24,5 +28,8 @@ maxfps0=0
initts0=0
winver0=0
maxres0=-1
launchpath0=
flagj0=128
swapeffect0=0
maxddinterface0=7
slowratio0=1
initresw0=0
initresh0=0

View File

@ -0,0 +1,35 @@
[target]
title0=Return Fire 2 (OpenGL)
path0=F:\Games\Return Fire 2\RFireII.exe
startfolder0=
launchpath0=
module0=
opengllib0=
notes0=
registry0=HKEY_CURRENT_USER\Software\Prolific]\n\n[HKEY_CURRENT_USER\Software\Prolific\RFireII]\n\n[HKEY_CURRENT_USER\Software\Prolific\RFireII\1.0]\n;"GfxDLL"="SC_3dfx"\n"GfxDLL"="SC_OGL"\n;"GfxDLL"="36D_S3D"\n"ID"="{E6E7C9E0-41B2-11D2-9C0B-006097B4D5BF}"\n"NAME1"="JOHN"\n"name2"=""\n"name3"=""\n"name4"=""\n"LASTRFIREIIGAME"="JOHN.UI"\n\n[HKEY_LOCAL_MACHINE\Software\Prolific Publishing, Inc.]\n\n[HKEY_LOCAL_MACHINE\Software\Prolific Publishing, Inc.\Return Fire II]\n"Path"=".\\"\n\n[HKEY_LOCAL_MACHINE\Software\Prolific Publishing, Inc.\Return Fire II\1.00.000]\n\n
ver0=0
monitorid0=-1
coord0=0
flag0=681574434
flagg0=1208090624
flagh0=3093
flagi0=1212153860
flagj0=4224
flagk0=327680
flagl0=0
flagm0=0
tflag0=0
dflag0=0
posx0=50
posy0=50
sizx0=800
sizy0=600
maxfps0=0
initts0=0
winver0=0
maxres0=-1
swapeffect0=0
maxddinterface0=7
slowratio0=2
initresw0=800
initresh0=600

View File

@ -0,0 +1,35 @@
[target]
title0=Return Fire 2 (SW)
path0=F:\Games\Return Fire 2\RFireII.exe
startfolder0=
launchpath0=
module0=
opengllib0=
notes0=
registry0=HKEY_CURRENT_USER\Software\Prolific]\n\n[HKEY_CURRENT_USER\Software\Prolific\RFireII]\n\n[HKEY_CURRENT_USER\Software\Prolific\RFireII\1.0]\n;"GfxDLL"="SC_3dfx"\n"GfxDLL"="SC_OGL"\n;"GfxDLL"="36D_S3D"\n"ID"="{E6E7C9E0-41B2-11D2-9C0B-006097B4D5BF}"\n"NAME1"="JOHN"\n"name2"=""\n"name3"=""\n"name4"=""\n"LASTRFIREIIGAME"="JOHN.UI"\n\n[HKEY_LOCAL_MACHINE\Software\Prolific Publishing, Inc.]\n\n[HKEY_LOCAL_MACHINE\Software\Prolific Publishing, Inc.\Return Fire II]\n"Path"=".\\"\n\n[HKEY_LOCAL_MACHINE\Software\Prolific Publishing, Inc.\Return Fire II\1.00.000]\n\n
ver0=0
monitorid0=-1
coord0=0
flag0=681574434
flagg0=1207959552
flagh0=1044
flagi0=1212153860
flagj0=4224
flagk0=327680
flagl0=0
flagm0=0
tflag0=0
dflag0=0
posx0=50
posy0=50
sizx0=800
sizy0=600
maxfps0=0
initts0=0
winver0=0
maxres0=-1
swapeffect0=0
maxddinterface0=7
slowratio0=2
initresw0=800
initresh0=600

View File

@ -0,0 +1,35 @@
[target]
title0=RoboRumble (dx5)
path0=F:\Games\RoboRumble\DATA\rr_dx5.exe
startfolder0=
launchpath0=
module0=
opengllib0=
notes0=
registry0=\n[HKEY_LOCAL_MACHINE\SOFTWARE\Metropolis]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Metropolis\RoboRumble]\n"Directory"=".\\"\n\n
ver0=1
monitorid0=-1
coord0=0
flag0=681574442
flagg0=1208221696
flagh0=1044
flagi0=1212153860
flagj0=4224
flagk0=65536
flagl0=0
flagm0=0
tflag0=0
dflag0=0
posx0=50
posy0=50
sizx0=800
sizy0=600
maxfps0=0
initts0=0
winver0=0
maxres0=-1
swapeffect0=0
maxddinterface0=7
slowratio0=2
initresw0=800
initresh0=600

View File

@ -0,0 +1,35 @@
[target]
title0=RoboRumble (sw)
path0=F:\Games\RoboRumble\DATA\rr_soft.exe
startfolder0=
launchpath0=F:\Games\RoboRumble\rrumble.exe
module0=
opengllib0=
notes0=
registry0=\n[HKEY_LOCAL_MACHINE\SOFTWARE\Metropolis]\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Metropolis\RoboRumble]\n"Directory"=".\\"\n\n
ver0=1
monitorid0=-1
coord0=0
flag0=681574442
flagg0=1207959552
flagh0=1044
flagi0=1212153860
flagj0=4224
flagk0=65536
flagl0=0
flagm0=0
tflag0=0
dflag0=0
posx0=50
posy0=50
sizx0=800
sizy0=600
maxfps0=0
initts0=0
winver0=0
maxres0=-1
swapeffect0=0
maxddinterface0=7
slowratio0=2
initresw0=800
initresh0=600

View File

@ -0,0 +1,35 @@
[target]
title0=Warhammer Dark Omen
path0=D:\Dark Omen\PRG_ENG\EngRel.exe
startfolder0=
launchpath0=
module0=
opengllib0=
notes0=Courtesy of Riitaoja:\n\nDark Omen needs a d3drm.dll file to run:\n- This file can be located in the CD's \DIRECTX -folder.\n- Copy the file into the "Dark Omen\PRG_ENG" directory.\n\nSound issues:\nDark Omen can sometimes produce a burst of white noise from the speakers.\nUsing the Timing option "CPU slow down" may fix this issue.
registry0=[HKEY_LOCAL_MACHINE\SOFTWARE\Electronic Arts\Dark Omen\1.0\Options\Options]\n"Selected"="4"\n"HardwareSelected"="252"\n"SoftwareSelected"="228"\n"MMXSelected"="256"\n"ToolTips"="1"\n"MusicVolume"="408"\n"SFXVolume"="816"\n"SoftwareSoundQuality"="2"\n"SoftwareParticleQuality"="2"\n"MMXSoundQuality"="2"\n"MMXParticaleQuality"="1"\n"HardwareSoundQuality"="2"\n"HardwareParticleQuality"="2"\n"InformationNum"="11"\n
ver0=0
monitorid0=-1
coord0=0
flag0=136314920
flagg0=1207959552
flagh0=1044
flagi0=1212153860
flagj0=4224
flagk0=65536
flagl0=0
flagm0=0
tflag0=0
dflag0=0
posx0=50
posy0=50
sizx0=800
sizy0=600
maxfps0=0
initts0=0
winver0=0
maxres0=-1
swapeffect0=0
maxddinterface0=7
slowratio0=2
initresw0=800
initresh0=600

View File

@ -1339,3 +1339,13 @@ add: window position selector & "locked size" + "anchored" modes
fix: transient mode when system tray is not available
fix: recursion problem in kernel32 LoadLibrary* wrappers. Allows "Hot patch" on WinXP.
fix: initial position problem.
v2.03.96:
preliminary handling of hidden window
fix: handling of non-windowed mode. Fixes "Warhammer 40.000 Rites of War" in non-windowed mode
add: NODDEXCLUSIVEMODE flag. Forces non exclusive ddraw coop level in non-windowed mode. Fixes "Warhammer 40.000 Rites of War" in non-windowed mode
add: CLEARTEXTUREFOURCC flag. Suppresses FOURCC capability and handling. Should help to process compressed textures.
fix: CreateDIBSection wrapper log messages
fix: PREVENTMAXIMIZE window size checks: should avoid size bigger than initial size, bugged coding inhibited any growth.
fix: GUI setting of execution folder when running "Launcher" task.

View File

@ -137,6 +137,9 @@ static HRESULT sBltToPrimary(int dxversion, Blt_Type pBlt, char *api, LPDIRECTDR
RECT destrect, emurect;
extern PrimaryBlt_Type pPrimaryBlt;
// handle minimized states
if(!dxw.IsVisible) return DD_OK;
// check coordinates
dxw.UpdateDesktopCoordinates();

View File

@ -2273,15 +2273,16 @@ HRESULT WINAPI extGetDisplayMode(int dxversion, GetDisplayMode_Type pGetDisplayM
if(dxw.Windowize){
lpddsd->dwWidth = dxw.GetScreenWidth();
lpddsd->dwHeight = dxw.GetScreenHeight();
}
// v2.1.96: fake screen color depth
if((dxw.dwFlags2 & (INIT8BPP|INIT16BPP)) || (dxw.dwFlags7 & (INIT24BPP|INIT32BPP))){ // v2.02.32 fix
if(dxw.dwFlags2 & INIT8BPP) FixPixelFormat(8, &lpddsd->ddpfPixelFormat);
if(dxw.dwFlags2 & INIT16BPP) FixPixelFormat(16, &lpddsd->ddpfPixelFormat);
if(dxw.dwFlags7 & INIT24BPP) FixPixelFormat(24, &lpddsd->ddpfPixelFormat);
if(dxw.dwFlags7 & INIT32BPP) FixPixelFormat(32, &lpddsd->ddpfPixelFormat);
OutTraceDW("GetDisplayMode: fix RGBBitCount=%d\n", lpddsd->ddpfPixelFormat.dwRGBBitCount);
}
// v2.1.96: fake screen color depth
// v2.03.96: moved out from dxw.Windowize condition
if((dxw.dwFlags2 & (INIT8BPP|INIT16BPP)) || (dxw.dwFlags7 & (INIT24BPP|INIT32BPP))){ // v2.02.32 fix
if(dxw.dwFlags2 & INIT8BPP) FixPixelFormat(8, &lpddsd->ddpfPixelFormat);
if(dxw.dwFlags2 & INIT16BPP) FixPixelFormat(16, &lpddsd->ddpfPixelFormat);
if(dxw.dwFlags7 & INIT24BPP) FixPixelFormat(24, &lpddsd->ddpfPixelFormat);
if(dxw.dwFlags7 & INIT32BPP) FixPixelFormat(32, &lpddsd->ddpfPixelFormat);
OutTraceDW("GetDisplayMode: fix RGBBitCount=%d\n", lpddsd->ddpfPixelFormat.dwRGBBitCount);
}
//OutTraceDW("GetDisplayMode: returning WxH=(%dx%d) PixelFormat Flags=%x(%s) RGBBitCount=%d RGBAmask=(%x,%x,%x,%x) Caps=%x(%s)\n",
@ -2335,7 +2336,7 @@ HRESULT WINAPI extSetCooperativeLevel(int dxversion, SetCooperativeLevel_Type pS
if(dxw.VirtualPixelFormat.dwRGBBitCount==0) dxw.VirtualPixelFormat=ddsd.ddpfPixelFormat;
SetBltTransformations(dxversion);
if(dxw.Windowize){
if(dxw.Windowize || (dxw.dwFlags7 & NODDEXCLUSIVEMODE)){
if (dwflags & DDSCL_FULLSCREEN){
// v2.01.82 fix:
// WARN: Tomb Raider 4 demo is setting cooperative level against hwnd 0 (desktop)
@ -2450,6 +2451,13 @@ static void FixSurfaceCaps(LPDDSURFACEDESC2 lpddsd, int dxversion)
lpddsd->dwFlags |= DDSD_PIXELFORMAT;
GetPixFmt(lpddsd);
}
if((lpddsd->dwFlags & DDSD_PIXELFORMAT) &&
(lpddsd->ddpfPixelFormat.dwFlags & DDPF_FOURCC) &&
(dxw.dwFlags7 & CLEARTEXTUREFOURCC)){
lpddsd->ddpfPixelFormat = dxw.VirtualPixelFormat;
lpddsd->ddpfPixelFormat.dwFourCC = 0;
lpddsd->ddpfPixelFormat.dwFlags &= ~DDPF_FOURCC;
}
return;
}
@ -3211,7 +3219,9 @@ static HRESULT WINAPI extCreateSurface(int dxversion, CreateSurface_Type pCreate
OutTraceDDRAW("CreateSurface: Version=%d lpdd=%x %s\n",
dxversion, lpdd, LogSurfaceAttributes((LPDDSURFACEDESC)lpddsd, "[CreateSurface]", __LINE__));
lpddsd->ddpfPixelFormat.dwFourCC = 0;
// 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?
//lpddsd->ddpfPixelFormat.dwFourCC = 0;
SurfaceMode = (dxw.dwFlags1 & EMULATESURFACE) ? ((dxw.dwFlags6 & FLIPEMULATION) ? PRIMARY_EMULATED : PRIMARY_FLIPPABLE) : PRIMARY_DIRECT;
@ -3342,7 +3352,8 @@ static HRESULT WINAPI extCreateSurface(int dxversion, CreateSurface_Type pCreate
// v2.3.59: same extra reference is needed by "Wahammer Chaos Gate" that uses ddraw interface release 2
// v2.3.72: fixed previous fix: condition is <=2, not >=2 !
// Be aware that it may perhaps become <=3, if we get the same problem elsewhere
if((dxw.dwDDVersion<=2) && dxw.Windowize) lpdd->AddRef();
// if((dxw.dwDDVersion<=2) && dxw.Windowize) lpdd->AddRef();
if(dxw.dwDDVersion<=2) lpdd->AddRef();
return DD_OK;
}
@ -3660,12 +3671,21 @@ HRESULT WINAPI PrimaryStretchBlt(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFA
res= (*pBlt)(lpdds, lpdestrect, lpddsTmp, &TmpRect, DDBLT_WAIT, 0);
}
if(res) OutTraceE("PrimaryStretchBlt: BltFast ERROR %x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
//if(res && !dxw.Windowize) RestoreDDrawSurfaces();
if(res == DDERR_SURFACELOST){
res = lpdds->Restore();
if(res) {
OutTraceE("PrimaryStretchBlt: Restore ERROR %x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
if(lpdds->IsLost()) {
res = lpdds->Restore();
if(res) {
OutTraceE("PrimaryStretchBlt: Restore ERROR lpdds=%x err=%x(%s) at %d\n", lpdds, res, ExplainDDError(res), __LINE__);
}
}
else {
if(lpddsTmp->IsLost()) {
res = lpddsTmp->Restore();
if(res) {
OutTraceE("PrimaryStretchBlt: Restore ERROR lpdds=%x err=%x(%s) at %d\n", lpddsTmp, res, ExplainDDError(res), __LINE__);
}
}
if(!res) {
OutTraceDW("PrimaryStretchBlt: surface sucessfully recovered, retry\n");
continue;
}

View File

@ -94,6 +94,7 @@ void dxwCore::InitTarget(TARGETMAP *target)
dwFlags8 = target->flags8;
dwTFlags = target->tflags;
Windowize = (dwFlags2 & WINDOWIZE) ? TRUE : FALSE;
IsVisible = TRUE;
if(dwFlags3 & FULLSCREENONLY) FullScreen=TRUE;
gsModules = target->module;
MaxFPS = target->MaxFPS;

View File

@ -149,6 +149,7 @@ public: // methods
public: // simple data variables
int MonitorId;
BOOL Windowize;
BOOL IsVisible;
DDPIXELFORMAT ActualPixelFormat;
DDPIXELFORMAT VirtualPixelFormat;
DWORD dwDDVersion;
@ -401,7 +402,7 @@ char *SysNames[]={
extern char *SysNames[];
#endif
typedef enum {
enum {
HINT_HINT = 0,
HINT_DDRAW, HINT_D3D8, HINT_D3D9, HINT_D3D10,
HINT_D3D11, HINT_OPENGL, HINT_DSOUND, HINT_DINPUT,
@ -409,9 +410,9 @@ typedef enum {
HINT_FAKEOS, HINT_OBFUSCATED,HINT_SAFEDISC, HINT_SECUROM,
HINT_LIMITMEM, HINT_HOOKUPDATE,
HINT_LAST
} HintEnumIds;
};
typedef enum {
enum {
DXVK_NONE=0,
DXVK_CLIPTOGGLE,
DXVK_REFRESH,
@ -431,7 +432,7 @@ typedef enum {
DXVK_SIZE
};
typedef enum {
enum {
GDIMODE_NONE = 0,
GDIMODE_STRETCHED,
GDIMODE_EMULATED,

View File

@ -27,7 +27,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "TlHelp32.h"
#define VERSION "2.03.95"
#define VERSION "2.03.96"
#define DDTHREADLOCK 1
//#define LOCKTHREADS

View File

@ -1,20 +0,0 @@

Microsoft Visual Studio Solution File, Format Version 10.00
# Visual Studio 2008
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dxwnd", "dxwnd.vs2008.vcproj", "{579E7FE7-2745-4100-A802-23511711FCDE}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
Release|Win32 = Release|Win32
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{579E7FE7-2745-4100-A802-23511711FCDE}.Debug|Win32.ActiveCfg = Debug|Win32
{579E7FE7-2745-4100-A802-23511711FCDE}.Debug|Win32.Build.0 = Debug|Win32
{579E7FE7-2745-4100-A802-23511711FCDE}.Release|Win32.ActiveCfg = Release|Win32
{579E7FE7-2745-4100-A802-23511711FCDE}.Release|Win32.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

Binary file not shown.

View File

@ -361,6 +361,15 @@ static char *ExplainDIBUsage(UINT u)
return p;
}
static char *sBMIDump(BITMAPINFO *pbmi)
{
static char s[256];
sprintf(s, "colors RGBX=(%x,%x,%x,%x) header bitc=%d size=(%dx%d) compr=%x",
pbmi->bmiColors->rgbRed, pbmi->bmiColors->rgbGreen, pbmi->bmiColors->rgbBlue, pbmi->bmiColors->rgbReserved,
pbmi->bmiHeader.biBitCount, pbmi->bmiHeader.biWidth, pbmi->bmiHeader.biHeight, pbmi->bmiHeader.biCompression);
return s;
}
static void TraceBITMAPINFOHEADER(char *fName, BITMAPINFOHEADER *bmi)
{
OutTrace("%s: BitmapInfo {Size=%d dim=(%dx%d) Planes=%d bitcount=%d Compression=%x SizeImage=%d PelsPerMeter=%dx%d colors=U%d:I%d}\n",
@ -2994,7 +3003,7 @@ HBITMAP WINAPI extCreateDIBitmap(HDC hdc, BITMAPINFOHEADER *lpbmih, DWORD fdwIni
HBITMAP WINAPI extCreateDIBSection(HDC hdc, const BITMAPINFO *pbmi, UINT iUsage, VOID **ppvBits, HANDLE hSection, DWORD dwOffset)
{
HBITMAP ret;
OutTraceDW("CreateDIBitmap: hdc=%x\n", hdc);
OutTraceDW("CreateDIBSection: hdc=%x bmi=%s usage=%s hsect=%x offset=%x\n", hdc, sBMIDump((BITMAPINFO *)pbmi), ExplainDIBUsage(iUsage), hSection, dwOffset);
if(dxw.IsToRemap(hdc)) {
switch(dxw.GDIEmulationMode){
@ -3010,7 +3019,12 @@ HBITMAP WINAPI extCreateDIBSection(HDC hdc, const BITMAPINFO *pbmi, UINT iUsage,
}
ret=(*pCreateDIBSection)(hdc, pbmi, iUsage, ppvBits, hSection, dwOffset);
if(!ret) OutTraceE("CreateDIBitmap ERROR: err=%d\n", GetLastError());
if(!ret) {
OutTraceE("CreateDIBSection ERROR: err=%d\n", GetLastError());
}
else {
OutTraceDW("CreateDIBSection: ret=%x\n", ret);
}
return ret;
}

View File

@ -788,6 +788,7 @@ BOOL WINAPI extShowWindow(HWND hwnd, int nCmdShow)
// v2.03.95: force zero size when minimize and drefresh window coordinates
if(hwnd == dxw.GethWnd()){
if(nCmdShow==SW_MINIMIZE) {
dxw.IsVisible = FALSE;
iLastSizX = dxw.iSizX;
iLastSizY = dxw.iSizY;
//iLastPosX = dxw.iPosX;
@ -795,6 +796,7 @@ BOOL WINAPI extShowWindow(HWND hwnd, int nCmdShow)
dxw.iSizX = dxw.iSizY = 0;
}
else {
dxw.IsVisible = TRUE;
if((dxw.iSizX == 0) && (dxw.iSizY == 0)){
dxw.iSizX = iLastSizX;
dxw.iSizY = iLastSizY;
@ -991,8 +993,9 @@ BOOL WINAPI extSetWindowPos(HWND hwnd, HWND hWndInsertAfter, int X, int Y, int c
if (dxw.dwFlags1 & PREVENTMAXIMIZE){
int UpdFlag =0;
int MaxX, MaxY;
MaxX = dxw.iSizX;
MaxY = dxw.iSizY;
// v2.03.96: in PREVENTMAXIMIZE mode don't exceed the initial size
MaxX = dxw.iSiz0X;
MaxY = dxw.iSiz0Y;
if (!MaxX) MaxX = dxw.GetScreenWidth();
if (!MaxY) MaxY = dxw.GetScreenHeight();
if(cx>MaxX) { cx=MaxX; UpdFlag=1; }
@ -1735,6 +1738,7 @@ static HWND WINAPI CreateWindowCommon(
//if (dxw.IsFullScreen() && (dxw.dwFlags1 & PREVENTMAXIMIZE)){
if ((hwnd == dxw.GethWnd()) && dxw.IsFullScreen() && (dxw.dwFlags1 & PREVENTMAXIMIZE)){
OutTraceDW("%s: entering maximized state\n", ApiName);
dxw.IsVisible = TRUE;
(*pShowWindow)(hwnd, SW_MAXIMIZE);
}
@ -4013,3 +4017,6 @@ INT_PTR WINAPI extDialogBoxIndirectParamA(HINSTANCE hInstance, LPCDLGTEMPLATE hD
return (*pDialogBoxIndirectParamA)(hInstance, hDialogTemplate, hWndParent, lpDialogFunc, dwInitParam);
}
// To do:
// GrayStringA
// GrayStringW

View File

@ -502,14 +502,19 @@ LRESULT CALLBACK extWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lp
static int iLastX, iLastY, iLastW, iLastH;
switch(wparam & 0xFFF0){
case SC_MINIMIZE:
dxw.IsVisible = FALSE;
iLastX = dxw.iPosX; iLastY = dxw.iPosY;
iLastW = dxw.iSizX; iLastH = dxw.iSizY;
dxw.iPosX = dxw.iPosY = dxw.iSizX = dxw.iSizY = 0;
break;
case SC_RESTORE:
dxw.IsVisible = TRUE;
dxw.iPosX = iLastX; dxw.iPosY = iLastY;
dxw.iSizX = iLastW; dxw.iSizY = iLastH;
break;
case SC_MAXIMIZE:
dxw.IsVisible = TRUE;
break;
}
}
break;

View File

@ -44,6 +44,8 @@ void CTabDirectX2::DoDataExchange(CDataExchange* pDX)
DDX_Check(pDX, IDC_USERGB565, cTarget->m_UseRGB565);
DDX_CBIndex(pDX, IDC_DDWAWLIMITCOMBO, cTarget->m_MaxDdrawInterface);
DDX_Check(pDX, IDC_BACKBUFATTACH, cTarget->m_BackBufAttach);
DDX_Check(pDX, IDC_CLEARTEXTUREFOURCC, cTarget->m_ClearTextureFourCC);
DDX_Check(pDX, IDC_NODDEXCLUSIVEMODE, cTarget->m_NoDDExclusiveMode);
}
BEGIN_MESSAGE_MAP(CTabDirectX2, CDialog)

View File

@ -192,6 +192,8 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/)
m_Init8BPP = FALSE;
m_Init16BPP = FALSE;
m_BackBufAttach = FALSE;
m_ClearTextureFourCC = FALSE;
m_NoDDExclusiveMode = FALSE;
m_HandleAltF4 = FALSE;
m_LimitFPS = FALSE;
m_SkipFPS = FALSE;

View File

@ -153,6 +153,8 @@ public:
BOOL m_Init8BPP;
BOOL m_Init16BPP;
BOOL m_BackBufAttach;
BOOL m_ClearTextureFourCC;
BOOL m_NoDDExclusiveMode;
BOOL m_HandleAltF4;
BOOL m_HandleExceptions;
BOOL m_SkipFPS;

Binary file not shown.

Binary file not shown.

View File

@ -1,20 +0,0 @@

Microsoft Visual Studio Solution File, Format Version 10.00
# Visual Studio 2008
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dxwndhost", "dxwndhost.vs2008.vcproj", "{FD0B0234-8EC5-43C0-A384-1B881DD3D925}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
Release|Win32 = Release|Win32
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{FD0B0234-8EC5-43C0-A384-1B881DD3D925}.Debug|Win32.ActiveCfg = Debug|Win32
{FD0B0234-8EC5-43C0-A384-1B881DD3D925}.Debug|Win32.Build.0 = Debug|Win32
{FD0B0234-8EC5-43C0-A384-1B881DD3D925}.Release|Win32.ActiveCfg = Release|Win32
{FD0B0234-8EC5-43C0-A384-1B881DD3D925}.Release|Win32.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

Binary file not shown.

View File

@ -444,6 +444,8 @@ void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg)
//if(dlg->m_Init8BPP) t->flags2 |= INIT8BPP;
//if(dlg->m_Init16BPP) t->flags2 |= INIT16BPP;
if(dlg->m_BackBufAttach) t->flags2 |= BACKBUFATTACH;
if(dlg->m_ClearTextureFourCC) t->flags7 |= CLEARTEXTUREFOURCC;
if(dlg->m_NoDDExclusiveMode) t->flags7 |= NODDEXCLUSIVEMODE;
if(dlg->m_HandleAltF4) t->flags |= HANDLEALTF4;
if(dlg->m_LimitFPS) t->flags2 |= LIMITFPS;
if(dlg->m_SkipFPS) t->flags2 |= SKIPFPS;
@ -731,6 +733,8 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg)
dlg->m_RecoverScreenMode = t->flags2 & RECOVERSCREENMODE ? 1 : 0;
dlg->m_RefreshOnResize = t->flags2 & REFRESHONRESIZE ? 1 : 0;
dlg->m_BackBufAttach = t->flags2 & BACKBUFATTACH ? 1 : 0;
dlg->m_ClearTextureFourCC = t->flags7 & CLEARTEXTUREFOURCC ? 1 : 0;
dlg->m_NoDDExclusiveMode = t->flags7 & NODDEXCLUSIVEMODE ? 1 : 0;
dlg->m_HandleAltF4 = t->flags & HANDLEALTF4 ? 1 : 0;
dlg->m_LimitFPS = t->flags2 & LIMITFPS ? 1 : 0;
dlg->m_SkipFPS = t->flags2 & SKIPFPS ? 1 : 0;
@ -2638,6 +2642,7 @@ DWORD WINAPI StartDebug(void *p)
PROCESS_INFORMATION pinfo;
char path[MAX_PATH];
extern char *GetFileNameFromHandle(HANDLE);
char *sRunTargetPath;
#ifdef DXWDEBUGSTEPPING
PROCESS_INFORMATION *pi;
CREATE_THREAD_DEBUG_INFO *ti;
@ -2661,10 +2666,11 @@ DWORD WINAPI StartDebug(void *p)
ThInfo = (ThreadInfo_Type *)p;
ZeroMemory(&sinfo, sizeof(sinfo));
sinfo.cb = sizeof(sinfo);
strcpy_s(path, sizeof(path), ThInfo->TM->path);
sRunTargetPath = (strlen(ThInfo->PM->launchpath)>0) ? ThInfo->PM->launchpath : ThInfo->TM->path;
strcpy_s(path, sizeof(path), sRunTargetPath);
PathRemoveFileSpec(path);
if(!CreateProcess(NULL,
(strlen(ThInfo->PM->launchpath)>0) ? ThInfo->PM->launchpath : ThInfo->TM->path,
sRunTargetPath,
0, 0, false, DEBUG_PROCESS|DEBUG_ONLY_THIS_PROCESS, NULL, path, &sinfo, &pinfo)){
DWORD dwLastErr = GetLastError();
switch (dwLastErr){
@ -3064,6 +3070,7 @@ void CDxwndhostView::OnRun()
PROCESS_INFORMATION pinfo;
char path[MAX_PATH];
TARGETMAP RestrictedMaps[2];
char *sRunTargetPath;
if(gTransientMode){
i=iProgIndex-1;
@ -3074,13 +3081,14 @@ void CDxwndhostView::OnRun()
pos = listctrl.GetFirstSelectedItemPosition();
i = listctrl.GetNextSelectedItem(pos);
}
sRunTargetPath = (strlen(PrivateMaps[i].launchpath)>0) ? PrivateMaps[i].launchpath : TargetMaps[i].path;
ZeroMemory(&sinfo, sizeof(sinfo));
sinfo.cb = sizeof(sinfo);
// create a virtually single entry in the targetmap array
memcpy(&RestrictedMaps[0], &TargetMaps[i], sizeof(TARGETMAP));
memset(&RestrictedMaps[1], 0, sizeof(TARGETMAP));
if(!(PrivateMaps[i].startfolder[0])){
strcpy_s(path, sizeof(path), TargetMaps[i].path);
strcpy_s(path, sizeof(path), sRunTargetPath);
PathRemoveFileSpec(path);
}else{
strcpy_s(path, sizeof(path), PrivateMaps[i].startfolder);
@ -3130,12 +3138,12 @@ void CDxwndhostView::OnRun()
else
if(TargetMaps[i].flags7 & INJECTSUSPENDED){
OutTrace("injectsuspended mode\n");
InjectSuspended((strlen(PrivateMaps[i].launchpath)>0) ? PrivateMaps[i].launchpath: TargetMaps[i].path, path);
InjectSuspended(sRunTargetPath, path);
}
else{
OutTrace("setwindowshook mode\n");
CreateProcess(NULL,
(strlen(PrivateMaps[i].launchpath)>0) ? PrivateMaps[i].launchpath: TargetMaps[i].path,
sRunTargetPath,
0, 0, false, CREATE_DEFAULT_ERROR_MODE, NULL, path, &sinfo, &pinfo);
CloseHandle(pinfo.hProcess); // no longer needed, avoid handle leakage
CloseHandle(pinfo.hThread); // no longer needed, avoid handle leakage

Binary file not shown.