mirror of
https://github.com/DxWnd/DxWnd.reloaded
synced 2024-12-30 09:25:35 +01:00
v2_04_10_src
Former-commit-id: cd11f26fc7bdf993e8fcb4cc61c310f6f928ade6
This commit is contained in:
parent
4b8141b136
commit
13872ca16f
@ -365,6 +365,7 @@ int GetHookStatus(DXWNDSTATUS *);
|
|||||||
DXWNDSTATUS *GetHookInfo();
|
DXWNDSTATUS *GetHookInfo();
|
||||||
void HookInit(TARGETMAP *, HWND);
|
void HookInit(TARGETMAP *, HWND);
|
||||||
void ShowHint(int);
|
void ShowHint(int);
|
||||||
|
LPCSTR GetFlagCaption(int, int);
|
||||||
|
|
||||||
char *GetDxWndPath();
|
char *GetDxWndPath();
|
||||||
void *SetHook(void *, void *);
|
void *SetHook(void *, void *);
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:5fc4cf8ef5a8514260d213b7d89caebe950a9dcfc43e948b25bb835c57e2df28
|
oid sha256:f56c6024dad175adc0c6a62555e71669b86c0f56e010de59375d88049230b5e3
|
||||||
size 782848
|
size 785920
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:0478367b7c87124f807b20c7a3f5e3c6337815e9f8d63619ae023702f0efd817
|
oid sha256:0229b0055c3941f91b315ef934a7e335fdfc62799b6ef489883c3beecace2971
|
||||||
size 673792
|
size 675840
|
||||||
|
36
build/exports/Daytona USA Deluxe Edition.dxw
Normal file
36
build/exports/Daytona USA Deluxe Edition.dxw
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
[target]
|
||||||
|
title0=Daytona USA Deluxe Edition
|
||||||
|
path0=D:\Games\Daytona USA Deluxe Edition\DAYTONA USA Deluxe.exe
|
||||||
|
startfolder0=
|
||||||
|
launchpath0=
|
||||||
|
module0=
|
||||||
|
opengllib0=
|
||||||
|
notes0=
|
||||||
|
registry0=
|
||||||
|
ver0=0
|
||||||
|
monitorid0=-1
|
||||||
|
coord0=0
|
||||||
|
flag0=673185826
|
||||||
|
flagg0=1207959552
|
||||||
|
flagh0=20
|
||||||
|
flagi0=134217732
|
||||||
|
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=0
|
||||||
|
swapeffect0=0
|
||||||
|
maxddinterface0=7
|
||||||
|
slowratio0=2
|
||||||
|
scanline0=0
|
||||||
|
initresw0=800
|
||||||
|
initresh0=600
|
36
build/exports/Need for Speed Underground 2.dxw
Normal file
36
build/exports/Need for Speed Underground 2.dxw
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
[target]
|
||||||
|
title0=Need for Speed Underground 2
|
||||||
|
path0=D:\Games\Need for Speed Underground 2\SPEED2.EXE
|
||||||
|
startfolder0=
|
||||||
|
launchpath0=
|
||||||
|
module0=
|
||||||
|
opengllib0=
|
||||||
|
notes0=
|
||||||
|
registry0=
|
||||||
|
ver0=0
|
||||||
|
monitorid0=-1
|
||||||
|
coord0=0
|
||||||
|
flag0=673185826
|
||||||
|
flagg0=1207959552
|
||||||
|
flagh0=20
|
||||||
|
flagi0=138412036
|
||||||
|
flagj0=4224
|
||||||
|
flagk0=65536
|
||||||
|
flagl0=1081344
|
||||||
|
flagm0=0
|
||||||
|
tflag0=0
|
||||||
|
dflag0=0
|
||||||
|
posx0=50
|
||||||
|
posy0=50
|
||||||
|
sizx0=800
|
||||||
|
sizy0=600
|
||||||
|
maxfps0=0
|
||||||
|
initts0=0
|
||||||
|
winver0=0
|
||||||
|
maxres0=0
|
||||||
|
swapeffect0=0
|
||||||
|
maxddinterface0=7
|
||||||
|
slowratio0=2
|
||||||
|
scanline0=0
|
||||||
|
initresw0=800
|
||||||
|
initresh0=600
|
@ -1,41 +1,5 @@
|
|||||||
[window]
|
[window]
|
||||||
posx=1165
|
posx=0
|
||||||
posy=618
|
posy=472
|
||||||
sizx=320
|
sizx=320
|
||||||
sizy=200
|
sizy=200
|
||||||
[target]
|
|
||||||
title0=administrator
|
|
||||||
path0=administrator
|
|
||||||
startfolder0=
|
|
||||||
launchpath0=
|
|
||||||
module0=
|
|
||||||
opengllib0=
|
|
||||||
notes0=
|
|
||||||
registry0=
|
|
||||||
ver0=0
|
|
||||||
monitorid0=-1
|
|
||||||
coord0=0
|
|
||||||
flag0=673185826
|
|
||||||
flagg0=1207959552
|
|
||||||
flagh0=20
|
|
||||||
flagi0=134217732
|
|
||||||
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=0
|
|
||||||
swapeffect0=0
|
|
||||||
maxddinterface0=7
|
|
||||||
slowratio0=2
|
|
||||||
scanline0=0
|
|
||||||
initresw0=800
|
|
||||||
initresh0=600
|
|
||||||
|
@ -1,2 +1,5 @@
|
|||||||
OnRun idx=28 prog="D:\Games\ManTT\MANXTT.EXE" unhooked=0
|
OnRun idx=36 prog="D:\Games\International Football 2000\MSIF2000.ICD" unhooked=0
|
||||||
|
setwindowshook mode
|
||||||
|
OnRun idx=36 prog="D:\Games\International Football 2000\MSIF2000.ICD" unhooked=0
|
||||||
|
self elevation
|
||||||
setwindowshook mode
|
setwindowshook mode
|
||||||
|
@ -1,52 +0,0 @@
|
|||||||
|
|
||||||
[HKEY_LOCAL_MACHINE\SOFTWARE]
|
|
||||||
|
|
||||||
[HKEY_LOCAL_MACHINE\SOFTWARE\Mindscape]
|
|
||||||
|
|
||||||
[HKEY_LOCAL_MACHINE\SOFTWARE\Mindscape\WarHammerFB]
|
|
||||||
;"Options"="3,1,1,2,1,1,0,0" // High Quality, digital audio off
|
|
||||||
"Options"="3,1,1,2,1,1,1,1" // High Quality, digital audio on
|
|
||||||
|
|
||||||
[HKEY_LOCAL_MACHINE\SOFTWARE\Mindscape\WarHammerFB\InstallDir]
|
|
||||||
@="\{path}"
|
|
||||||
|
|
||||||
[HKEY_LOCAL_MACHINE\SOFTWARE\Mindscape\WarHammerFB\InstallOption]
|
|
||||||
@="Maximum"
|
|
||||||
|
|
||||||
[HKEY_LOCAL_MACHINE\SOFTWARE\Mindscape\WarHammerFB\Language]
|
|
||||||
@="ENG"
|
|
||||||
|
|
||||||
[HKEY_LOCAL_MACHINE\SOFTWARE\Mindscape\WarHammerFB\LocalDir]
|
|
||||||
@="\{path}\\FILE"
|
|
||||||
|
|
||||||
[HKEY_LOCAL_MACHINE\SOFTWARE\Mindscape\WarHammerFB\RemoteDir]
|
|
||||||
@="\{path}\\REMOTE"
|
|
||||||
|
|
||||||
[HKEY_LOCAL_MACHINE\SOFTWARE\Mindscape\WarHammerFB\SaveDir]
|
|
||||||
@="\{path}\\TEMP"
|
|
||||||
|
|
||||||
[HKEY_LOCAL_MACHINE\SOFTWARE\Mindscape\WarHammerFB\UpdateDir]
|
|
||||||
@="C:\\GAMES\\WARFB\\Update"
|
|
||||||
|
|
||||||
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\SharedDLLs]
|
|
||||||
"C:\\WINDOWS\\SYSTEM32\\WING.DLL"=hex:01,00,00,00
|
|
||||||
"C:\\WINDOWS\\SYSTEM32\\WING32.DLL"=hex:01,00,00,00
|
|
||||||
"C:\\WINDOWS\\SYSTEM32\\WINGDE.DLL"=hex:01,00,00,00
|
|
||||||
"C:\\WINDOWS\\SYSTEM32\\WINGDIB.DRV"=hex:01,00,00,00
|
|
||||||
"C:\\WINDOWS\\SYSTEM32\\WINGPAL.WND"=hex:01,00,00,00
|
|
||||||
"C:\\WINDOWS\\SYSTEM32\\RLDDF.DLL"=hex:01,00,00,00
|
|
||||||
"C:\\WINDOWS\\SYSTEM32\\RLDDI.DLL"=hex:01,00,00,00
|
|
||||||
"C:\\WINDOWS\\SYSTEM32\\RL\\SOFTF.DLL"=hex:01,00,00,00
|
|
||||||
"C:\\WINDOWS\\SYSTEM32\\RL\\SOFTI.DLL"=hex:01,00,00,00
|
|
||||||
"C:\\WINDOWS\\SYSTEM32\\RL\\SOFT\\RLFRG16M.DLL"=hex:01,00,00,00
|
|
||||||
"C:\\WINDOWS\\SYSTEM32\\RL\\SOFT\\RLFRG256.DLL"=hex:01,00,00,00
|
|
||||||
"C:\\WINDOWS\\SYSTEM32\\RL\\SOFT\\RLFRG64K.DLL"=hex:01,00,00,00
|
|
||||||
"C:\\WINDOWS\\SYSTEM32\\RL\\SOFT\\RLFRM16M.DLL"=hex:01,00,00,00
|
|
||||||
"C:\\WINDOWS\\SYSTEM32\\RL\\SOFT\\RLFRM256.DLL"=hex:01,00,00,00
|
|
||||||
"C:\\WINDOWS\\SYSTEM32\\RL\\SOFT\\RLFRM64K.DLL"=hex:01,00,00,00
|
|
||||||
"C:\\WINDOWS\\SYSTEM32\\RL\\SOFT\\RLIRG16M.DLL"=hex:01,00,00,00
|
|
||||||
"C:\\WINDOWS\\SYSTEM32\\RL\\SOFT\\RLIRG256.DLL"=hex:01,00,00,00
|
|
||||||
"C:\\WINDOWS\\SYSTEM32\\RL\\SOFT\\RLIRG64K.DLL"=hex:01,00,00,00
|
|
||||||
"C:\\WINDOWS\\SYSTEM32\\RL\\SOFT\\RLIRM16M.DLL"=hex:01,00,00,00
|
|
||||||
"C:\\WINDOWS\\SYSTEM32\\RL\\SOFT\\RLIRM256.DLL"=hex:01,00,00,00
|
|
||||||
"C:\\WINDOWS\\SYSTEM32\\RL\\SOFT\\RLIRM64K.DLL"=hex:01,00,00,00
|
|
@ -1494,3 +1494,14 @@ fix: version hooking for IDIrectDraw methods called by IDIrectDrawSurface method
|
|||||||
fix: capability registration passed in IDIrectDrawSurface::QueryInterface() calls: fixes settings for ZBUFFER surfaces
|
fix: capability registration passed in IDIrectDrawSurface::QueryInterface() calls: fixes settings for ZBUFFER surfaces
|
||||||
fix: capsdb logging (developer's use only)
|
fix: capsdb logging (developer's use only)
|
||||||
fix: handling of WM_NCCALCSIZE & WM_NCPAINT messages in winproc hooker to align behaviour to comment. To be tested ...
|
fix: handling of WM_NCCALCSIZE & WM_NCPAINT messages in winproc hooker to align behaviour to comment. To be tested ...
|
||||||
|
|
||||||
|
v2.04.10
|
||||||
|
GUI:
|
||||||
|
add: view flags window (expert mode only)
|
||||||
|
DLL:
|
||||||
|
fix: prevent InvalidateRect on desktop, eliminates some flickering
|
||||||
|
fix: ZBUFFER capability management - fixes "Galapagos" in HW mode (but it may crash because of the intro movie...)
|
||||||
|
fix: logging of log flags
|
||||||
|
fix: D3D8/9 QueryInterface fully revisited
|
||||||
|
add: (very) preliminary texture transparency hack
|
||||||
|
|
||||||
|
@ -929,6 +929,69 @@ void D3DTextureHack(D3DSURFACE_DESC Desc, D3DLOCKED_RECT LockedRect)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void D3DTextureTransp(D3DSURFACE_DESC Desc, D3DLOCKED_RECT LockedRect)
|
||||||
|
{
|
||||||
|
switch (Desc.Format){
|
||||||
|
case D3DFMT_X8R8G8B8:
|
||||||
|
case D3DFMT_A8R8G8B8:
|
||||||
|
{
|
||||||
|
DWORD *p;
|
||||||
|
for(UINT y=0; y<Desc.Height; y++){
|
||||||
|
p = (DWORD *)LockedRect.pBits + ((y * LockedRect.Pitch) >> 2);
|
||||||
|
for(UINT x=0; x<Desc.Width; x++) *(p+x) = (*(p+x) & 0x00FFFFFF) | 0x7F000000;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case D3DFMT_A4R4G4B4: // AoE III - to test ....
|
||||||
|
case D3DFMT_X4R4G4B4:
|
||||||
|
{
|
||||||
|
WORD *p;
|
||||||
|
for(UINT y=0; y<Desc.Height; y++){
|
||||||
|
p = (WORD *)LockedRect.pBits + ((y * LockedRect.Pitch) >> 1);
|
||||||
|
for(UINT x=0; x<Desc.Width; x++) *(p+x) = (*(p+x) & 0x0FFF) | 0x7000;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case D3DFMT_DXT1:
|
||||||
|
// no way, no alpha
|
||||||
|
break;
|
||||||
|
case D3DFMT_DXT2:
|
||||||
|
case D3DFMT_DXT3:
|
||||||
|
{
|
||||||
|
WORD *p = (WORD *)LockedRect.pBits;
|
||||||
|
for(int y=0; y<(int)Desc.Height; y+=4){
|
||||||
|
for(int x=0; x<(int)Desc.Width; x+=4){
|
||||||
|
for(int row=0; row<4; row++) *(p+row) = 0x7F7F;
|
||||||
|
p += 8;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case D3DFMT_DXT4:
|
||||||
|
case D3DFMT_DXT5:
|
||||||
|
{
|
||||||
|
WORD *p = (WORD *)LockedRect.pBits;
|
||||||
|
for(int y=0; y<(int)Desc.Height; y+=4){
|
||||||
|
for(int x=0; x<(int)Desc.Width; x+=4){
|
||||||
|
//*p = 0x7F7F;
|
||||||
|
*p = 0x5F5F;
|
||||||
|
//*(p+1) = 0x0;
|
||||||
|
//*(p+2) = 0x0;
|
||||||
|
//*(p+3) = 0x0;
|
||||||
|
*(p+1) = 0x9249;
|
||||||
|
*(p+2) = 0x2492;
|
||||||
|
*(p+3) = 0x4924;
|
||||||
|
p += 8;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// no way ....
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#define GRIDSIZE 16
|
#define GRIDSIZE 16
|
||||||
|
|
||||||
void D3DTextureHighlight(D3DSURFACE_DESC Desc, D3DLOCKED_RECT LockedRect)
|
void D3DTextureHighlight(D3DSURFACE_DESC Desc, D3DLOCKED_RECT LockedRect)
|
||||||
@ -1016,7 +1079,3 @@ void D3DTextureHighlight(D3DSURFACE_DESC Desc, D3DLOCKED_RECT LockedRect)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void D3DTextureTransp(D3DSURFACE_DESC Desc, D3DLOCKED_RECT LockedRect)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
134
dll/ddraw.cpp
134
dll/ddraw.cpp
@ -528,6 +528,40 @@ static DWORD GetFlipWaitFlags(DWORD dwFlipFlags)
|
|||||||
return dwFlipFlags;
|
return dwFlipFlags;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static DWORD SetPrimaryCaps(DWORD dwCaps)
|
||||||
|
{
|
||||||
|
dwCaps |= DDSD_Prim.ddsCaps.dwCaps;
|
||||||
|
dwCaps |= (DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_FRONTBUFFER|DDSCAPS_VIDEOMEMORY|DDSCAPS_VISIBLE); // primary surfaces must be this way
|
||||||
|
dwCaps &= ~(DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN); // primary surfaces can't be this way
|
||||||
|
if(dwCaps & DDSCAPS_3DDEVICE) dwCaps |= DDSCAPS_LOCALVIDMEM;
|
||||||
|
return dwCaps;
|
||||||
|
}
|
||||||
|
|
||||||
|
static DWORD SetBackBufferCaps(DWORD dwCaps)
|
||||||
|
{
|
||||||
|
// v2.03.11: added DDSCAPS_FLIP capability to backbuffer surface: "Ignition" checks for it before Flip-ping to primary
|
||||||
|
dwCaps |= (DDSCAPS_BACKBUFFER|DDSCAPS_VIDEOMEMORY|DDSCAPS_FLIP|DDSCAPS_LOCALVIDMEM); // you never know....
|
||||||
|
dwCaps &= ~(DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN); // backbuffer surfaces can't be this way
|
||||||
|
if(dwCaps & DDSCAPS_3DDEVICE) dwCaps |= DDSCAPS_LOCALVIDMEM;
|
||||||
|
//if(dwCaps & DDSCAPS_3DDEVICE) dwCaps |= (DDSCAPS_LOCALVIDMEM | DDSCAPS_COMPLEX);
|
||||||
|
return dwCaps;
|
||||||
|
}
|
||||||
|
|
||||||
|
static DWORD SetZBufferCaps(DWORD dwCaps)
|
||||||
|
{
|
||||||
|
// beware! the ZBUFFER surface could have never been registered!
|
||||||
|
// in this case better adapt to the primary/backbuffer ones, since a ZBUFFER with no good caps won't work.
|
||||||
|
|
||||||
|
// input caps not null or simply DDSCAPS_ZBUFFER, supposedly good, don't touch ....
|
||||||
|
if(dwCaps & ~DDSCAPS_ZBUFFER) return dwCaps;
|
||||||
|
|
||||||
|
// ... else try to cope with primary surface caps
|
||||||
|
dwCaps = dxwcdb.GetCaps(dxwss.GetPrimarySurface());
|
||||||
|
dwCaps &= ~(DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_BACKBUFFER|DDSCAPS_3DDEVICE|DDSCAPS_COMPLEX);
|
||||||
|
dwCaps |= DDSCAPS_ZBUFFER;
|
||||||
|
return dwCaps;
|
||||||
|
}
|
||||||
|
|
||||||
static void Stopper(char *s, int line)
|
static void Stopper(char *s, int line)
|
||||||
{
|
{
|
||||||
char sMsg[81];
|
char sMsg[81];
|
||||||
@ -2316,6 +2350,15 @@ void FixSurfaceCaps(LPDDSURFACEDESC2 lpddsd, int dxversion)
|
|||||||
lpddsd->ddpfPixelFormat.dwFourCC = 0;
|
lpddsd->ddpfPixelFormat.dwFourCC = 0;
|
||||||
lpddsd->ddpfPixelFormat.dwFlags &= ~DDPF_FOURCC;
|
lpddsd->ddpfPixelFormat.dwFlags &= ~DDPF_FOURCC;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//// try
|
||||||
|
//if((lpddsd->dwFlags & DDSD_PIXELFORMAT) && (lpddsd->ddpfPixelFormat.dwRGBBitCount == 16)){
|
||||||
|
// lpddsd->ddpfPixelFormat.dwRGBAlphaBitMask = 0x8000;
|
||||||
|
// lpddsd->ddpfPixelFormat.dwBBitMask = 0x001F;
|
||||||
|
// lpddsd->ddpfPixelFormat.dwGBitMask = 0x03E0;
|
||||||
|
// lpddsd->ddpfPixelFormat.dwRBitMask = 0x7C00;
|
||||||
|
//}
|
||||||
|
//// try
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2335,8 +2378,6 @@ void FixSurfaceCaps(LPDDSURFACEDESC2 lpddsd, int dxversion)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 3DDEVICE no TEXTURE: enforce PIXELFORMAT
|
// 3DDEVICE no TEXTURE: enforce PIXELFORMAT
|
||||||
// v2.02.90: added for "Zoo Tycoon" textures
|
// v2.02.90: added for "Zoo Tycoon" textures
|
||||||
// v2.03.48 - there are two situations
|
// v2.03.48 - there are two situations
|
||||||
@ -4550,7 +4591,7 @@ static HRESULT WINAPI extAddAttachedSurface(AddAttachedSurface_Type pAddAttached
|
|||||||
}
|
}
|
||||||
//else if (IsBack) {
|
//else if (IsBack) {
|
||||||
else {
|
else {
|
||||||
// v2.02.13: emulate ZBUFFER attach to backbuffer: do nothing and return OK
|
// v2.02.13: emulate ZBUFFER attach to backbuffer/plain surface: do nothing and return OK
|
||||||
// this trick makes at least "Nocturne" work also in emulated mode when hardware acceleration
|
// this trick makes at least "Nocturne" work also in emulated mode when hardware acceleration
|
||||||
// is set in the game "Options" menu.
|
// is set in the game "Options" menu.
|
||||||
if (sd.ddsCaps.dwCaps & DDSCAPS_ZBUFFER) // DDSCAPS_BACKBUFFER for double buffering ???
|
if (sd.ddsCaps.dwCaps & DDSCAPS_ZBUFFER) // DDSCAPS_BACKBUFFER for double buffering ???
|
||||||
@ -4561,6 +4602,40 @@ static HRESULT WINAPI extAddAttachedSurface(AddAttachedSurface_Type pAddAttached
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
// AddAttachedSurface successful, manage CAPS propagation
|
||||||
|
if ((dxw.dwFlags1 & EMULATESURFACE) && (IsPrim || IsBack)){
|
||||||
|
}
|
||||||
|
HRESULT sdres;
|
||||||
|
DDSURFACEDESC2 sd;
|
||||||
|
sd.dwSize=Set_dwSize_From_Surface();
|
||||||
|
sdres=lpddsadd->GetSurfaceDesc((DDSURFACEDESC *)&sd);
|
||||||
|
if (sdres)
|
||||||
|
OutTraceE("AddAttachedSurface: GetSurfaceDesc ERROR res=%x at %d\n", sdres, __LINE__);
|
||||||
|
else
|
||||||
|
OutTraceDW("AddAttachedSurface: GetSurfaceDesc dwCaps=%x(%s)\n",
|
||||||
|
sd.ddsCaps.dwCaps, ExplainDDSCaps(sd.ddsCaps.dwCaps));
|
||||||
|
if (IsPrim){
|
||||||
|
if (sd.ddsCaps.dwCaps & DDSCAPS_BACKBUFFER)
|
||||||
|
OutTraceDW("AddAttachedSurface: registering BACKBUFFER attach on PRIMARY\n");
|
||||||
|
dxwss.PushBackBufferSurface(lpddsadd, 1);
|
||||||
|
}
|
||||||
|
//else if (IsBack) or plain surface for ZBUFFER {
|
||||||
|
else {
|
||||||
|
// 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
if (res) OutTraceE("AddAttachedSurface: ERROR %x(%s)\n", res, ExplainDDError(res));
|
if (res) OutTraceE("AddAttachedSurface: ERROR %x(%s)\n", res, ExplainDDError(res));
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
@ -4644,33 +4719,18 @@ static HRESULT WINAPI extGetCapsS(int dxInterface, GetCapsS_Type pGetCapsS, LPDI
|
|||||||
while(TRUE){ // fake loop
|
while(TRUE){ // fake loop
|
||||||
if (IsPrim) {
|
if (IsPrim) {
|
||||||
IsFixed=TRUE;
|
IsFixed=TRUE;
|
||||||
caps->dwCaps |= DDSD_Prim.ddsCaps.dwCaps;
|
caps->dwCaps = SetPrimaryCaps(caps->dwCaps);
|
||||||
caps->dwCaps |= DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_FRONTBUFFER|DDSCAPS_VIDEOMEMORY|DDSCAPS_VISIBLE; // primary surfaces must be this way
|
break;
|
||||||
caps->dwCaps &= ~(DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN); // primary surfaces can't be this way
|
|
||||||
if(caps->dwCaps & DDSCAPS_3DDEVICE) caps->dwCaps |= DDSCAPS_LOCALVIDMEM;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IsBack) {
|
if (IsBack) {
|
||||||
IsFixed=TRUE;
|
IsFixed=TRUE;
|
||||||
// v2.03.11: added DDSCAPS_FLIP capability to backbuffer surface: "Ignition" checks for it before Flip-ping to primary
|
caps->dwCaps = SetBackBufferCaps(caps->dwCaps);
|
||||||
caps->dwCaps |= (DDSCAPS_BACKBUFFER|DDSCAPS_VIDEOMEMORY|DDSCAPS_FLIP|DDSCAPS_LOCALVIDMEM); // you never know....
|
break;
|
||||||
caps->dwCaps &= ~(DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN); // backbuffer surfaces can't be this way
|
|
||||||
if(caps->dwCaps & DDSCAPS_3DDEVICE) caps->dwCaps |= DDSCAPS_LOCALVIDMEM;
|
|
||||||
//if(caps->dwCaps & DDSCAPS_3DDEVICE) caps->dwCaps |= (DDSCAPS_LOCALVIDMEM | DDSCAPS_COMPLEX);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// v2.03.82: fixed logic for ZBUFFER capabilities: "The Creed" may have two, in SYSTEMMEMORY or in VIDEOMEMORY ...
|
|
||||||
// v2.03.90: "Galapagos" fix - if there's a DDSCAPS_SYSTEMMEMORY or DDSCAPS_VIDEOMEMORY spec, let it be.
|
|
||||||
// v2.03.97: "Galapagos" fix erased.
|
|
||||||
if (IsZBuf) {
|
if (IsZBuf) {
|
||||||
DWORD dwCaps = dxwcdb.GetCaps(lpdds);
|
IsFixed=TRUE;
|
||||||
// beware! the ZBUFFER surface could have never been registered!
|
caps->dwCaps = SetZBufferCaps(dxwcdb.GetCaps(lpdds));
|
||||||
// in this case better keep the original capabilities (or adapt to the primary/backbuffer ones?)
|
break;
|
||||||
if(dwCaps) {
|
|
||||||
IsFixed=TRUE;
|
|
||||||
sLabel="(REG.ZBUFFER)";
|
|
||||||
caps->dwCaps = dwCaps;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break; // inconditional break;
|
break; // inconditional break;
|
||||||
}
|
}
|
||||||
@ -4738,36 +4798,22 @@ static HRESULT WINAPI extGetSurfaceDesc(int dxversion, GetSurfaceDesc_Type pGetS
|
|||||||
if (IsPrim) {
|
if (IsPrim) {
|
||||||
IsFixed=TRUE;
|
IsFixed=TRUE;
|
||||||
if (dxw.dwFlags1 & EMULATESURFACE) lpddsd->ddpfPixelFormat = dxw.VirtualPixelFormat;
|
if (dxw.dwFlags1 & EMULATESURFACE) lpddsd->ddpfPixelFormat = dxw.VirtualPixelFormat;
|
||||||
lpddsd->ddsCaps.dwCaps |= DDSD_Prim.ddsCaps.dwCaps;
|
lpddsd->ddsCaps.dwCaps = SetPrimaryCaps(lpddsd->ddsCaps.dwCaps);
|
||||||
lpddsd->ddsCaps.dwCaps |= (DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_FRONTBUFFER|DDSCAPS_VIDEOMEMORY|DDSCAPS_VISIBLE); // primary surfaces must be this way
|
|
||||||
lpddsd->ddsCaps.dwCaps &= ~(DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN); // primary surfaces can't be this way
|
|
||||||
if(lpddsd->ddsCaps.dwCaps & DDSCAPS_3DDEVICE) lpddsd->ddsCaps.dwCaps |= DDSCAPS_LOCALVIDMEM;
|
|
||||||
lpddsd->dwBackBufferCount=DDSD_Prim.dwBackBufferCount;
|
lpddsd->dwBackBufferCount=DDSD_Prim.dwBackBufferCount;
|
||||||
lpddsd->dwHeight=dxw.GetScreenHeight();
|
lpddsd->dwHeight=dxw.GetScreenHeight();
|
||||||
lpddsd->dwWidth=dxw.GetScreenWidth();
|
lpddsd->dwWidth=dxw.GetScreenWidth();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IsBack) {
|
if (IsBack) {
|
||||||
IsFixed=TRUE;
|
IsFixed=TRUE;
|
||||||
// flags that backbuffer surfaces must have set
|
lpddsd->ddsCaps.dwCaps = SetBackBufferCaps(lpddsd->ddsCaps.dwCaps);
|
||||||
lpddsd->ddsCaps.dwCaps |= (DDSCAPS_BACKBUFFER|DDSCAPS_VIDEOMEMORY|DDSCAPS_FLIP|DDSCAPS_LOCALVIDMEM);;
|
|
||||||
lpddsd->ddsCaps.dwCaps &= ~(DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN); // backbuffer surfaces can't be this way
|
|
||||||
if(lpddsd->ddsCaps.dwCaps & DDSCAPS_3DDEVICE) lpddsd->ddsCaps.dwCaps |= DDSCAPS_LOCALVIDMEM;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if (IsZBuf) {
|
||||||
// v2.03.82: fixed logic for ZBUFFER capabilities: "The Creed" may have two, in SYSTEMMEMORY or in VIDEOMEMORY ...
|
IsFixed=TRUE;
|
||||||
if(IsZBuf) {
|
lpddsd->ddsCaps.dwCaps = SetZBufferCaps(dxwcdb.GetCaps(lpdds));
|
||||||
DWORD dwCaps = dxwcdb.GetCaps(lpdds);
|
|
||||||
if(dwCaps) {
|
|
||||||
IsFixed=TRUE;
|
|
||||||
sLabel="(REG.ZBUFFER)";
|
|
||||||
lpddsd->ddsCaps.dwCaps = dwCaps;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
break; // inconditional break
|
break; // inconditional break
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -503,6 +503,55 @@ static void TextureHack(LPDIRECTDRAWSURFACE s, int dxversion)
|
|||||||
if (res) OutTraceE("TextureHack: Unlock ERROR lpdds=%x res=%x(%s) at %d\n", s, res, ExplainDDError(res), __LINE__);
|
if (res) OutTraceE("TextureHack: Unlock ERROR lpdds=%x res=%x(%s) at %d\n", s, res, ExplainDDError(res), __LINE__);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TextureTransp(LPDIRECTDRAWSURFACE s, int dxversion)
|
||||||
|
{
|
||||||
|
DDSURFACEDESC2 ddsd;
|
||||||
|
int x, y, w, h;
|
||||||
|
HRESULT res;
|
||||||
|
|
||||||
|
OutTraceB("TextureTransp(%d): lpdds=%x\n", dxversion, s);
|
||||||
|
|
||||||
|
memset(&ddsd,0,sizeof(DDSURFACEDESC2));
|
||||||
|
ddsd.dwSize = Set_dwSize_From_Surface();
|
||||||
|
ddsd.dwFlags = DDSD_LPSURFACE | DDSD_PITCH;
|
||||||
|
// if(res=(*pLockMethod(lpddsHookedVersion()))(s, 0, (LPDDSURFACEDESC)&ddsd, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){
|
||||||
|
if(res=(*pLockMethod(dxversion))(s, 0, (LPDDSURFACEDESC)&ddsd, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){
|
||||||
|
OutTraceE("TextureTransp(%d): Lock ERROR res=%x(%s) at %d\n", dxversion, res, ExplainDDError(res), __LINE__);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if((ddsd.ddsCaps.dwCaps & DDSCAPS_TEXTURE) && !dxwss.IsABackBufferSurface(s)) {
|
||||||
|
OutTrace("TextureTransp(%d): lpdds=%x BitCount=%d size=(%dx%d)\n",
|
||||||
|
dxversion, s, ddsd.ddpfPixelFormat.dwRGBBitCount, ddsd.dwWidth, ddsd.dwHeight);
|
||||||
|
w = ddsd.dwWidth;
|
||||||
|
h = ddsd.dwHeight;
|
||||||
|
switch (ddsd.ddpfPixelFormat.dwRGBBitCount){
|
||||||
|
case 8:
|
||||||
|
// no way
|
||||||
|
break;
|
||||||
|
case 16:
|
||||||
|
{
|
||||||
|
WORD *p;
|
||||||
|
for(y=0; y<h; y++){
|
||||||
|
p = (WORD *)ddsd.lpSurface + ((y * ddsd.lPitch) >> 1);
|
||||||
|
for(x=0; x<w; x++) *(p+x) = (*(p+x) & 0x7FFF) | 0x8000;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 32:
|
||||||
|
{
|
||||||
|
DWORD *p;
|
||||||
|
for(y=0; y<h; y++){
|
||||||
|
p = (DWORD *)ddsd.lpSurface + ((y * ddsd.lPitch) >> 2);
|
||||||
|
for(x=0; x<w; x++) *(p+x) = (*(p+x) & 0x00FFFFFF) | 0x7F000000;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
res=(*pUnlockMethod(dxversion))(s, NULL);
|
||||||
|
if (res) OutTraceE("TextureTransp: Unlock ERROR lpdds=%x res=%x(%s) at %d\n", s, res, ExplainDDError(res), __LINE__);
|
||||||
|
}
|
||||||
|
|
||||||
void TextureHandling(LPDIRECTDRAWSURFACE s, int dxversion)
|
void TextureHandling(LPDIRECTDRAWSURFACE s, int dxversion)
|
||||||
{
|
{
|
||||||
//OutTrace("TextureHandling(1-7): dxw.dwFlags5 = %x\n", dxw.dwFlags5 & (TEXTUREHIGHLIGHT|TEXTUREDUMP|TEXTUREHACK));
|
//OutTrace("TextureHandling(1-7): dxw.dwFlags5 = %x\n", dxw.dwFlags5 & (TEXTUREHIGHLIGHT|TEXTUREDUMP|TEXTUREHACK));
|
||||||
@ -518,7 +567,7 @@ void TextureHandling(LPDIRECTDRAWSURFACE s, int dxversion)
|
|||||||
TextureHack(s, dxversion);
|
TextureHack(s, dxversion);
|
||||||
break;
|
break;
|
||||||
case TEXTURETRANSP:
|
case TEXTURETRANSP:
|
||||||
//TextureTransp(s);
|
TextureTransp(s, dxversion);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1031,6 +1031,18 @@ char *ExplainGUID(GUID FAR *lpguid)
|
|||||||
case 0x54D41080: sguid="IID_IDirectInputDevice8A"; break;
|
case 0x54D41080: sguid="IID_IDirectInputDevice8A"; break;
|
||||||
case 0x54D41081: sguid="IID_IDirectInputDevice8W"; break;
|
case 0x54D41081: sguid="IID_IDirectInputDevice8W"; break;
|
||||||
case 0xE7E1F7C0: sguid="IID_IDirectInputEffect"; break;
|
case 0xE7E1F7C0: sguid="IID_IDirectInputEffect"; break;
|
||||||
|
case 0x1dd9e8da: sguid="IID_IDirect3D8"; break;
|
||||||
|
case 0x81bdcbca: sguid="IID_IDirect3D9"; break;
|
||||||
|
case 0x02177241: sguid="IID_IDirect3D9Ex"; break;
|
||||||
|
case 0x7385e5df: sguid="IID_IDirect3DDevice8"; break;
|
||||||
|
case 0xd0223b96: sguid="IID_IDirect3DDevice9"; break;
|
||||||
|
case 0xb18b10ce: sguid="IID_IDirect3DDevice9Ex"; break;
|
||||||
|
case 0xb4211cfa: sguid="IID_IDirect3DBaseTexture8"; break;
|
||||||
|
case 0xe4cdd575: sguid="IID_IDirect3DTexture8"; break;
|
||||||
|
case 0x580ca87e: sguid="IID_IDirect3DBaseTexture9"; break;
|
||||||
|
case 0x85c31227: sguid="IID_IDirect3DTexture9"; break;
|
||||||
|
case 0xb96eebca: sguid="IID_IDirect3DSurface8"; break;
|
||||||
|
case 0x0cfbaf3a: sguid="IID_IDirect3DSurface9"; break;
|
||||||
default: sguid="UNKNOWN"; break;
|
default: sguid="UNKNOWN"; break;
|
||||||
}
|
}
|
||||||
return sguid;
|
return sguid;
|
||||||
|
121
dll/dxhook.cpp
121
dll/dxhook.cpp
@ -72,105 +72,6 @@ extern HANDLE hTraceMutex;
|
|||||||
|
|
||||||
CRITICAL_SECTION TraceCS;
|
CRITICAL_SECTION TraceCS;
|
||||||
|
|
||||||
static char *FlagNames[32]={
|
|
||||||
"UNNOTIFY", "EMULATESURFACE", "CLIPCURSOR", "NEEDADMINCAPS",
|
|
||||||
"HOOKDI", "MODIFYMOUSE", "HANDLEEXCEPTIONS", "SAVELOAD",
|
|
||||||
"EMULATEBUFFER", "HOOKDI8", "BLITFROMBACKBUFFER", "SUPPRESSCLIPPING",
|
|
||||||
"AUTOREFRESH", "FIXWINFRAME", "HIDEHWCURSOR", "SLOWDOWN",
|
|
||||||
"DISABLECLIPPING", "LOCKWINSTYLE", "MAPGDITOPRIMARY", "FIXTEXTOUT",
|
|
||||||
"KEEPCURSORWITHIN", "USERGB565", "SUPPRESSDXERRORS", "PREVENTMAXIMIZE",
|
|
||||||
"LOCKEDSURFACE", "FIXPARENTWIN", "SWITCHVIDEOMEMORY", "CLIENTREMAPPING",
|
|
||||||
"HANDLEALTF4", "LOCKWINPOS", "HOOKCHILDWIN", "MESSAGEPROC"
|
|
||||||
};
|
|
||||||
|
|
||||||
static char *Flag2Names[32]={
|
|
||||||
"RECOVERSCREENMODE", "REFRESHONRESIZE", "BACKBUFATTACH", "MODALSTYLE",
|
|
||||||
"KEEPASPECTRATIO", "INIT8BPP", "FORCEWINRESIZE", "INIT16BPP",
|
|
||||||
"KEEPCURSORFIXED", "DISABLEGAMMARAMP", "INDEPENDENTREFRESH", "FIXNCHITTEST",
|
|
||||||
"LIMITFPS", "SKIPFPS", "SHOWFPS", "HIDEMULTIMONITOR",
|
|
||||||
"TIMESTRETCH", "HOOKOPENGL", "LOCKEDSIZE", "SHOWHWCURSOR",
|
|
||||||
"GDISTRETCHED", "SHOWFPSOVERLAY", "FAKEVERSION", "FULLRECTBLT",
|
|
||||||
"NOPALETTEUPDATE", "SUPPRESSIME", "NOBANNER", "WINDOWIZE",
|
|
||||||
"LIMITRESOURCES", "STARTDEBUG", "SETCOMPATIBILITY", "WIREFRAME",
|
|
||||||
};
|
|
||||||
|
|
||||||
static char *Flag3Names[32]={
|
|
||||||
"FORCEHOOKOPENGL", "MARKBLIT", "HOOKDLLS", "SUPPRESSD3DEXT",
|
|
||||||
"HOOKENABLED", "FIXD3DFRAME", "FORCE16BPP", "BLACKWHITE",
|
|
||||||
"MARKLOCK", "SINGLEPROCAFFINITY", "EMULATEREGISTRY", "CDROMDRIVETYPE",
|
|
||||||
"NOWINDOWMOVE", "FORCECLIPPER", "LOCKSYSCOLORS", "GDIEMULATEDC",
|
|
||||||
"FULLSCREENONLY", "FONTBYPASS", "MINIMALCAPS", "DEFAULTMESSAGES",
|
|
||||||
"BUFFEREDIOFIX", "FILTERMESSAGES", "PEEKALLMESSAGES", "SURFACEWARN",
|
|
||||||
"ANALYTICMODE", "FORCESHEL", "CAPMASK", "COLORFIX",
|
|
||||||
"NODDRAWBLT", "NODDRAWFLIP", "NOGDIBLT", "NOPIXELFORMAT",
|
|
||||||
};
|
|
||||||
|
|
||||||
static char *Flag4Names[32]={
|
|
||||||
"NOALPHACHANNEL", "SUPPRESSCHILD", "FIXREFCOUNTER", "SHOWTIMESTRETCH",
|
|
||||||
"ZBUFFERCLEAN", "ZBUFFER0CLEAN", "ZBUFFERALWAYS", "DISABLEFOGGING",
|
|
||||||
"NOPOWER2FIX", "NOPERFCOUNTER", "BILINEAR2XFILTER", "INTERCEPTRDTSC",
|
|
||||||
"LIMITSCREENRES", "NOFILLRECT", "HOOKGLIDE", "HIDEDESKTOP",
|
|
||||||
"STRETCHTIMERS", "NOFLIPEMULATION", "NOTEXTURES", "RETURNNULLREF",
|
|
||||||
"FINETIMING", "NATIVERES", "SUPPORTSVGA", "SUPPORTHDTV",
|
|
||||||
"RELEASEMOUSE", "ENABLETIMEFREEZE", "HOTPATCH", "ENABLEHOTKEYS",
|
|
||||||
"HOTPATCHALWAYS", "NOD3DRESET", "OVERRIDEREGISTRY", "HIDECDROMEMPTY",
|
|
||||||
};
|
|
||||||
|
|
||||||
static char *Flag5Names[32]={
|
|
||||||
"DIABLOTWEAK", "CLEARTARGET", "NOWINPOSCHANGES", "ANSIWIDE",
|
|
||||||
"NOBLT", "USELASTCORE", "DOFASTBLT", "AEROBOOST",
|
|
||||||
"QUARTERBLT", "NOIMAGEHLP", "BILINEARFILTER", "REPLACEPRIVOPS",
|
|
||||||
"REMAPMCI", "TEXTUREHIGHLIGHT", "TEXTUREDUMP", "TEXTUREHACK",
|
|
||||||
"TEXTURETRANSP", "NORMALIZEPERFCOUNT", "HYBRIDMODE", "GDICOLORCONV",
|
|
||||||
"INJECTSON", "ENABLESONHOOK", "FREEZEINJECTEDSON", "GDIMODE",
|
|
||||||
"CENTERTOWIN", "STRESSRESOURCES", "MESSAGEPUMP", "TEXTUREFORMAT",
|
|
||||||
"DEINTERLACE", "LOCKRESERVEDPALETTE", "UNLOCKZORDER", "EASPORTSHACK",
|
|
||||||
};
|
|
||||||
|
|
||||||
static char *Flag6Names[32]={
|
|
||||||
"FORCESWAPEFFECT", "LEGACYALLOC", "NODESTROYWINDOW", "NOMOVIES",
|
|
||||||
"SUPPRESSRELEASE", "FIXMOVIESCOLOR", "WOW64REGISTRY", "DISABLEMAXWINMODE",
|
|
||||||
"FIXPITCH", "POWER2WIDTH", "HIDETASKBAR", "ACTIVATEAPP",
|
|
||||||
"NOSYSMEMPRIMARY", "NOSYSMEMBACKBUF", "CONFIRMONCLOSE", "TERMINATEONCLOSE",
|
|
||||||
"FLIPEMULATION", "SETZBUFFERBITDEPTHS", "SHAREDDC", "WOW32REGISTRY",
|
|
||||||
"STRETCHMOVIES", "BYPASSMCI", "FIXPIXELZOOM", "---REUSEEMULATEDDC---",
|
|
||||||
"CREATEDESKTOP", "NOWINDOWHOOKS", "SYNCPALETTE", "VIRTUALJOYSTICK",
|
|
||||||
"UNACQUIRE", "HOOKGOGLIBS", "BYPASSGOGLIBS", "EMULATERELMOUSE",
|
|
||||||
};
|
|
||||||
|
|
||||||
static char *Flag7Names[32]={
|
|
||||||
"LIMITDDRAW", "DISABLEDISABLEALTTAB", "FIXCLIPPERAREA", "HOOKDIRECTSOUND",
|
|
||||||
"HOOKSMACKW32", "BLOCKPRIORITYCLASS", "CPUSLOWDOWN", "CPUMAXUSAGE",
|
|
||||||
"NOWINERRORS", "SUPPRESSOVERLAY", "INIT24BPP", "INIT32BPP",
|
|
||||||
"FIXGLOBALUNLOCK", "SHOWHINTS", "SKIPDEVTYPEHID", "INJECTSUSPENDED",
|
|
||||||
"SSUPPRESSDIERRORS", "HOOKNORUN", "FIXBINDTEXTURE", "ENUM16BITMODES",
|
|
||||||
"SHAREDKEYBOARD", "HOOKNOUPDATE", "HOOKGLUT32", "INITIALRES",
|
|
||||||
"MAXIMUMRES", "LOCKCOLORDEPTH", "FIXSMACKLOOP", "FIXFREELIBRARY",
|
|
||||||
"ANCHORED", "CLEARTEXTUREFOURCC", "NODDEXCLUSIVEMODE", "COPYNOSHIMS",
|
|
||||||
};
|
|
||||||
|
|
||||||
static char *Flag8Names[32]={
|
|
||||||
"FORCEWAIT", "FORCENOWAIT", "FORCEVSYNC", "FORCENOVSYNC",
|
|
||||||
"VSYNCSCANLINES", "TRIMTEXTUREFORMATS", "NOHALDEVICE", "CLIPLOCK",
|
|
||||||
"PRETENDVISIBLE", "RAWFORMAT", "WININSULATION", "FIXMOUSEHOOK",
|
|
||||||
"DDSFORMAT", "HOOKWING32", "SEQUENCEDIAT", "D3D8BACK16",
|
|
||||||
"MARKWING32", "DYNAMICZCLEAN", "MARKGDI32", "DUMPDIBSECTION",
|
|
||||||
"DUMPDEVCONTEXT", "QUALITYFONTS", "ALLOWSYSMEMON3DDEV", "",
|
|
||||||
"", "", "", "",
|
|
||||||
"", "", "", "",
|
|
||||||
};
|
|
||||||
|
|
||||||
static char *TFlagNames[32]={
|
|
||||||
"OUTTRACE", "OUTDDRAWTRACE", "OUTWINMESSAGES", "OUTCURSORTRACE",
|
|
||||||
"OUTSEPARATED", "**", "ASSERTDIALOG", "OUTIMPORTTABLE",
|
|
||||||
"OUTDEBUG", "OUTREGISTRY", "TRACEHOOKS", "OUTD3DTRACE",
|
|
||||||
"OUTDXWINTRACE", "OUTWINGTRACE", "OUTOGLTRACE", "",
|
|
||||||
"", "", "", "",
|
|
||||||
"", "", "", "",
|
|
||||||
"", "", "", "ADDRELATIVETIME",
|
|
||||||
"**", "ADDTIMESTAMP", "OUTDEBUGSTRING", "ERASELOGFILE",
|
|
||||||
};
|
|
||||||
|
|
||||||
char *GetDxWndPath()
|
char *GetDxWndPath()
|
||||||
{
|
{
|
||||||
static BOOL DoOnce = TRUE;
|
static BOOL DoOnce = TRUE;
|
||||||
@ -191,7 +92,7 @@ char *GetDxWndPath()
|
|||||||
return sFolderPath;
|
return sFolderPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void OutTraceHeader(FILE *fp)
|
static void OutTraceHeader(FILE *fp, DWORD tflags)
|
||||||
{
|
{
|
||||||
SYSTEMTIME Time;
|
SYSTEMTIME Time;
|
||||||
char Version[20+1];
|
char Version[20+1];
|
||||||
@ -202,15 +103,15 @@ static void OutTraceHeader(FILE *fp)
|
|||||||
fprintf(fp, "*** DxWnd %s log BEGIN: %02d-%02d-%04d %02d:%02d:%02d ***\n",
|
fprintf(fp, "*** DxWnd %s log BEGIN: %02d-%02d-%04d %02d:%02d:%02d ***\n",
|
||||||
Version, Time.wDay, Time.wMonth, Time.wYear, Time.wHour, Time.wMinute, Time.wSecond);
|
Version, Time.wDay, Time.wMonth, Time.wYear, Time.wHour, Time.wMinute, Time.wSecond);
|
||||||
fprintf(fp, "*** Flags= ");
|
fprintf(fp, "*** Flags= ");
|
||||||
for(i=0, dword=dxw.dwFlags1; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", FlagNames[i]);
|
for(i=0, dword=dxw.dwFlags1; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", GetFlagCaption(0,i));
|
||||||
for(i=0, dword=dxw.dwFlags2; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", Flag2Names[i]);
|
for(i=0, dword=dxw.dwFlags2; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", GetFlagCaption(1,i));
|
||||||
for(i=0, dword=dxw.dwFlags3; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", Flag3Names[i]);
|
for(i=0, dword=dxw.dwFlags3; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", GetFlagCaption(2,i));
|
||||||
for(i=0, dword=dxw.dwFlags4; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", Flag4Names[i]);
|
for(i=0, dword=dxw.dwFlags4; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", GetFlagCaption(3,i));
|
||||||
for(i=0, dword=dxw.dwFlags5; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", Flag5Names[i]);
|
for(i=0, dword=dxw.dwFlags5; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", GetFlagCaption(4,i));
|
||||||
for(i=0, dword=dxw.dwFlags6; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", Flag6Names[i]);
|
for(i=0, dword=dxw.dwFlags6; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", GetFlagCaption(5,i));
|
||||||
for(i=0, dword=dxw.dwFlags7; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", Flag7Names[i]);
|
for(i=0, dword=dxw.dwFlags7; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", GetFlagCaption(6,i));
|
||||||
for(i=0, dword=dxw.dwFlags8; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", Flag8Names[i]);
|
for(i=0, dword=dxw.dwFlags8; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", GetFlagCaption(7,i));
|
||||||
for(i=0, dword=dxw.dwTFlags; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", TFlagNames[i]);
|
for(i=0, dword=tflags ; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", GetFlagCaption(8,i));
|
||||||
fprintf(fp, "***\n");
|
fprintf(fp, "***\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -259,7 +160,7 @@ void OutTrace(const char *format, ...)
|
|||||||
if (fp==NULL)
|
if (fp==NULL)
|
||||||
return; // last chance: do not log...
|
return; // last chance: do not log...
|
||||||
else
|
else
|
||||||
OutTraceHeader(fp);
|
OutTraceHeader(fp, tFlags);
|
||||||
}
|
}
|
||||||
va_start(al, format);
|
va_start(al, format);
|
||||||
//vfprintf(fp, format, al);
|
//vfprintf(fp, format, al);
|
||||||
|
@ -462,6 +462,11 @@ void dxwCore::SetClipCursor()
|
|||||||
Rect.right+=UpLeftCorner.x;
|
Rect.right+=UpLeftCorner.x;
|
||||||
Rect.top+=UpLeftCorner.y;
|
Rect.top+=UpLeftCorner.y;
|
||||||
Rect.bottom+=UpLeftCorner.y;
|
Rect.bottom+=UpLeftCorner.y;
|
||||||
|
|
||||||
|
// if(0) {
|
||||||
|
// if(GetMenu(hWnd)) Rect.top -= (*pGetSystemMetrics)(SM_CYMENU);
|
||||||
|
// }
|
||||||
|
|
||||||
(*pClipCursor)(NULL);
|
(*pClipCursor)(NULL);
|
||||||
if(!(*pClipCursor)(&Rect))
|
if(!(*pClipCursor)(&Rect))
|
||||||
OutTraceE("SetClipCursor: ERROR err=%d at %d\n", GetLastError(), __LINE__);
|
OutTraceE("SetClipCursor: ERROR err=%d at %d\n", GetLastError(), __LINE__);
|
||||||
|
BIN
dll/dxwnd.aps
BIN
dll/dxwnd.aps
Binary file not shown.
103
dll/dxwnd.cpp
103
dll/dxwnd.cpp
@ -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.04.09.fx1"
|
#define VERSION "2.04.10"
|
||||||
|
|
||||||
#define DDTHREADLOCK 1
|
#define DDTHREADLOCK 1
|
||||||
|
|
||||||
@ -279,4 +279,105 @@ void InjectHook()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static char *FlagNames[9][32] ={{
|
||||||
|
// Flags1
|
||||||
|
"UNNOTIFY", "EMULATESURFACE", "CLIPCURSOR", "NEEDADMINCAPS",
|
||||||
|
"HOOKDI", "MODIFYMOUSE", "HANDLEEXCEPTIONS", "SAVELOAD",
|
||||||
|
"EMULATEBUFFER", "HOOKDI8", "BLITFROMBACKBUFFER", "SUPPRESSCLIPPING",
|
||||||
|
"AUTOREFRESH", "FIXWINFRAME", "HIDEHWCURSOR", "SLOWDOWN",
|
||||||
|
"DISABLECLIPPING", "LOCKWINSTYLE", "MAPGDITOPRIMARY", "FIXTEXTOUT",
|
||||||
|
"KEEPCURSORWITHIN", "USERGB565", "SUPPRESSDXERRORS", "PREVENTMAXIMIZE",
|
||||||
|
"LOCKEDSURFACE", "FIXPARENTWIN", "SWITCHVIDEOMEMORY", "CLIENTREMAPPING",
|
||||||
|
"HANDLEALTF4", "LOCKWINPOS", "HOOKCHILDWIN", "MESSAGEPROC"
|
||||||
|
},{
|
||||||
|
// Flags2
|
||||||
|
"RECOVERSCREENMODE", "REFRESHONRESIZE", "BACKBUFATTACH", "MODALSTYLE",
|
||||||
|
"KEEPASPECTRATIO", "INIT8BPP", "FORCEWINRESIZE", "INIT16BPP",
|
||||||
|
"KEEPCURSORFIXED", "DISABLEGAMMARAMP", "INDEPENDENTREFRESH", "FIXNCHITTEST",
|
||||||
|
"LIMITFPS", "SKIPFPS", "SHOWFPS", "HIDEMULTIMONITOR",
|
||||||
|
"TIMESTRETCH", "HOOKOPENGL", "LOCKEDSIZE", "SHOWHWCURSOR",
|
||||||
|
"GDISTRETCHED", "SHOWFPSOVERLAY", "FAKEVERSION", "FULLRECTBLT",
|
||||||
|
"NOPALETTEUPDATE", "SUPPRESSIME", "NOBANNER", "WINDOWIZE",
|
||||||
|
"LIMITRESOURCES", "STARTDEBUG", "SETCOMPATIBILITY", "WIREFRAME",
|
||||||
|
},{
|
||||||
|
// Flags3
|
||||||
|
"FORCEHOOKOPENGL", "MARKBLIT", "HOOKDLLS", "SUPPRESSD3DEXT",
|
||||||
|
"HOOKENABLED", "FIXD3DFRAME", "FORCE16BPP", "BLACKWHITE",
|
||||||
|
"MARKLOCK", "SINGLEPROCAFFINITY", "EMULATEREGISTRY", "CDROMDRIVETYPE",
|
||||||
|
"NOWINDOWMOVE", "FORCECLIPPER", "LOCKSYSCOLORS", "GDIEMULATEDC",
|
||||||
|
"FULLSCREENONLY", "FONTBYPASS", "MINIMALCAPS", "DEFAULTMESSAGES",
|
||||||
|
"BUFFEREDIOFIX", "FILTERMESSAGES", "PEEKALLMESSAGES", "SURFACEWARN",
|
||||||
|
"ANALYTICMODE", "FORCESHEL", "CAPMASK", "COLORFIX",
|
||||||
|
"NODDRAWBLT", "NODDRAWFLIP", "NOGDIBLT", "NOPIXELFORMAT",
|
||||||
|
},{
|
||||||
|
// Flags4
|
||||||
|
"NOALPHACHANNEL", "SUPPRESSCHILD", "FIXREFCOUNTER", "SHOWTIMESTRETCH",
|
||||||
|
"ZBUFFERCLEAN", "ZBUFFER0CLEAN", "ZBUFFERALWAYS", "DISABLEFOGGING",
|
||||||
|
"NOPOWER2FIX", "NOPERFCOUNTER", "BILINEAR2XFILTER", "INTERCEPTRDTSC",
|
||||||
|
"LIMITSCREENRES", "NOFILLRECT", "HOOKGLIDE", "HIDEDESKTOP",
|
||||||
|
"STRETCHTIMERS", "NOFLIPEMULATION", "NOTEXTURES", "RETURNNULLREF",
|
||||||
|
"FINETIMING", "NATIVERES", "SUPPORTSVGA", "SUPPORTHDTV",
|
||||||
|
"RELEASEMOUSE", "ENABLETIMEFREEZE", "HOTPATCH", "ENABLEHOTKEYS",
|
||||||
|
"HOTPATCHALWAYS", "NOD3DRESET", "OVERRIDEREGISTRY", "HIDECDROMEMPTY",
|
||||||
|
},{
|
||||||
|
// Flags5
|
||||||
|
"DIABLOTWEAK", "CLEARTARGET", "NOWINPOSCHANGES", "ANSIWIDE",
|
||||||
|
"NOBLT", "USELASTCORE", "DOFASTBLT", "AEROBOOST",
|
||||||
|
"QUARTERBLT", "NOIMAGEHLP", "BILINEARFILTER", "REPLACEPRIVOPS",
|
||||||
|
"REMAPMCI", "TEXTUREHIGHLIGHT", "TEXTUREDUMP", "TEXTUREHACK",
|
||||||
|
"TEXTURETRANSP", "NORMALIZEPERFCOUNT", "HYBRIDMODE", "GDICOLORCONV",
|
||||||
|
"INJECTSON", "ENABLESONHOOK", "FREEZEINJECTEDSON", "GDIMODE",
|
||||||
|
"CENTERTOWIN", "STRESSRESOURCES", "MESSAGEPUMP", "TEXTUREFORMAT",
|
||||||
|
"DEINTERLACE", "LOCKRESERVEDPALETTE", "UNLOCKZORDER", "EASPORTSHACK",
|
||||||
|
},{
|
||||||
|
// Flags6
|
||||||
|
"FORCESWAPEFFECT", "LEGACYALLOC", "NODESTROYWINDOW", "NOMOVIES",
|
||||||
|
"SUPPRESSRELEASE", "FIXMOVIESCOLOR", "WOW64REGISTRY", "DISABLEMAXWINMODE",
|
||||||
|
"FIXPITCH", "POWER2WIDTH", "HIDETASKBAR", "ACTIVATEAPP",
|
||||||
|
"NOSYSMEMPRIMARY", "NOSYSMEMBACKBUF", "CONFIRMONCLOSE", "TERMINATEONCLOSE",
|
||||||
|
"FLIPEMULATION", "SETZBUFFERBITDEPTHS", "SHAREDDC", "WOW32REGISTRY",
|
||||||
|
"STRETCHMOVIES", "BYPASSMCI", "FIXPIXELZOOM", "---REUSEEMULATEDDC---",
|
||||||
|
"CREATEDESKTOP", "NOWINDOWHOOKS", "SYNCPALETTE", "VIRTUALJOYSTICK",
|
||||||
|
"UNACQUIRE", "HOOKGOGLIBS", "BYPASSGOGLIBS", "EMULATERELMOUSE",
|
||||||
|
},{
|
||||||
|
// Flags7
|
||||||
|
"LIMITDDRAW", "DISABLEDISABLEALTTAB", "FIXCLIPPERAREA", "HOOKDIRECTSOUND",
|
||||||
|
"HOOKSMACKW32", "BLOCKPRIORITYCLASS", "CPUSLOWDOWN", "CPUMAXUSAGE",
|
||||||
|
"NOWINERRORS", "SUPPRESSOVERLAY", "INIT24BPP", "INIT32BPP",
|
||||||
|
"FIXGLOBALUNLOCK", "SHOWHINTS", "SKIPDEVTYPEHID", "INJECTSUSPENDED",
|
||||||
|
"SSUPPRESSDIERRORS", "HOOKNORUN", "FIXBINDTEXTURE", "ENUM16BITMODES",
|
||||||
|
"SHAREDKEYBOARD", "HOOKNOUPDATE", "HOOKGLUT32", "INITIALRES",
|
||||||
|
"MAXIMUMRES", "LOCKCOLORDEPTH", "FIXSMACKLOOP", "FIXFREELIBRARY",
|
||||||
|
"ANCHORED", "CLEARTEXTUREFOURCC", "NODDEXCLUSIVEMODE", "COPYNOSHIMS",
|
||||||
|
},{
|
||||||
|
// Flags8
|
||||||
|
"FORCEWAIT", "FORCENOWAIT", "FORCEVSYNC", "FORCENOVSYNC",
|
||||||
|
"VSYNCSCANLINES", "TRIMTEXTUREFORMATS", "NOHALDEVICE", "CLIPLOCK",
|
||||||
|
"PRETENDVISIBLE", "RAWFORMAT", "WININSULATION", "FIXMOUSEHOOK",
|
||||||
|
"DDSFORMAT", "HOOKWING32", "SEQUENCEDIAT", "D3D8BACK16",
|
||||||
|
"MARKWING32", "DYNAMICZCLEAN", "MARKGDI32", "DUMPDIBSECTION",
|
||||||
|
"DUMPDEVCONTEXT", "QUALITYFONTS", "ALLOWSYSMEMON3DDEV", "",
|
||||||
|
"", "", "", "",
|
||||||
|
"", "", "", "",
|
||||||
|
},{
|
||||||
|
// TFlags
|
||||||
|
"OUTTRACE", "OUTDDRAWTRACE", "OUTWINMESSAGES", "OUTCURSORTRACE",
|
||||||
|
"OUTSEPARATED", "**", "ASSERTDIALOG", "OUTIMPORTTABLE",
|
||||||
|
"OUTDEBUG", "OUTREGISTRY", "TRACEHOOKS", "OUTD3DTRACE",
|
||||||
|
"OUTDXWINTRACE", "OUTWINGTRACE", "OUTOGLTRACE", "",
|
||||||
|
"", "", "", "",
|
||||||
|
"", "", "", "",
|
||||||
|
"", "", "", "ADDRELATIVETIME",
|
||||||
|
"**", "ADDTIMESTAMP", "OUTDEBUGSTRING", "ERASELOGFILE",
|
||||||
|
}};
|
||||||
|
|
||||||
|
LPCSTR GetFlagCaption(int flag, int bit)
|
||||||
|
{
|
||||||
|
//if((flag<0) || (flag>(9*32))) return "";
|
||||||
|
//return FlagNames[flag >> 5][flag & 0x1F];
|
||||||
|
if((flag<0) || (flag>8)) return "";
|
||||||
|
if((bit<0) || (bit>31)) return "";
|
||||||
|
return FlagNames[flag][bit];
|
||||||
}
|
}
|
@ -8,3 +8,4 @@ EXPORTS
|
|||||||
GetHookInfo @6
|
GetHookInfo @6
|
||||||
Inject @7
|
Inject @7
|
||||||
GetThreadStartAddress @8
|
GetThreadStartAddress @8
|
||||||
|
GetFlagCaption @9
|
||||||
|
Binary file not shown.
229
dll/hd3d.cpp
229
dll/hd3d.cpp
@ -17,6 +17,7 @@
|
|||||||
|
|
||||||
#define HOOKD3D10ANDLATER 1
|
#define HOOKD3D10ANDLATER 1
|
||||||
#define TRACEALLMETHODS 1
|
#define TRACEALLMETHODS 1
|
||||||
|
//#define DXWNDDISABLEDHOOKS 1
|
||||||
|
|
||||||
extern void D3D9TextureHandling(void *, int);
|
extern void D3D9TextureHandling(void *, int);
|
||||||
extern void D3D8TextureHandling(void *, int);
|
extern void D3D8TextureHandling(void *, int);
|
||||||
@ -316,7 +317,6 @@ static HookEntryEx_Type d3d8Hooks[]={
|
|||||||
{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator
|
{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
static HookEntryEx_Type d3d9Hooks[]={
|
static HookEntryEx_Type d3d9Hooks[]={
|
||||||
{HOOK_HOT_CANDIDATE, 0, "Direct3DCreate9", (FARPROC)NULL, (FARPROC *)&pDirect3DCreate9, (FARPROC)extDirect3DCreate9},
|
{HOOK_HOT_CANDIDATE, 0, "Direct3DCreate9", (FARPROC)NULL, (FARPROC *)&pDirect3DCreate9, (FARPROC)extDirect3DCreate9},
|
||||||
{HOOK_HOT_CANDIDATE, 0, "Direct3DCreate9Ex", (FARPROC)NULL, (FARPROC *)&pDirect3DCreate9Ex, (FARPROC)extDirect3DCreate9Ex},
|
{HOOK_HOT_CANDIDATE, 0, "Direct3DCreate9Ex", (FARPROC)NULL, (FARPROC *)&pDirect3DCreate9Ex, (FARPROC)extDirect3DCreate9Ex},
|
||||||
@ -496,7 +496,7 @@ void HookD3DDevice8(void** ppD3Ddev8)
|
|||||||
SetHook((void *)(**(DWORD **)ppD3Ddev8 + 120), extGetFrontBuffer, (void **)&pGetFrontBuffer, "GetFrontBuffer(D8)");
|
SetHook((void *)(**(DWORD **)ppD3Ddev8 + 120), extGetFrontBuffer, (void **)&pGetFrontBuffer, "GetFrontBuffer(D8)");
|
||||||
SetHook((void *)(**(DWORD **)ppD3Ddev8 + 136), extBeginScene8, (void **)&pBeginScene8, "BeginScene(D8)");
|
SetHook((void *)(**(DWORD **)ppD3Ddev8 + 136), extBeginScene8, (void **)&pBeginScene8, "BeginScene(D8)");
|
||||||
SetHook((void *)(**(DWORD **)ppD3Ddev8 + 140), extEndScene8, (void **)&pEndScene8, "EndScene(D8)");
|
SetHook((void *)(**(DWORD **)ppD3Ddev8 + 140), extEndScene8, (void **)&pEndScene8, "EndScene(D8)");
|
||||||
if((dxw.dwFlags2 & WIREFRAME) || (dxw.dwFlags4 & DISABLEFOGGING) || (dxw.dwFlags4 & ZBUFFERALWAYS)){
|
if((dxw.dwFlags2 & WIREFRAME) || (dxw.dwFlags4 & DISABLEFOGGING) || (dxw.dwFlags4 & ZBUFFERALWAYS) || (dxw.dwFlags5 & TEXTURETRANSP)){
|
||||||
SetHook((void *)(**(DWORD **)ppD3Ddev8 + 200), extSetRenderState8, (void **)&pSetRenderState8, "SetRenderState(D8)");
|
SetHook((void *)(**(DWORD **)ppD3Ddev8 + 200), extSetRenderState8, (void **)&pSetRenderState8, "SetRenderState(D8)");
|
||||||
SetHook((void *)(**(DWORD **)ppD3Ddev8 + 204), extGetRenderState8, (void **)&pGetRenderState8, "GetRenderState(D8)");
|
SetHook((void *)(**(DWORD **)ppD3Ddev8 + 204), extGetRenderState8, (void **)&pGetRenderState8, "GetRenderState(D8)");
|
||||||
if(dxw.dwFlags2 & WIREFRAME) (*pSetRenderState8)((void *)*ppD3Ddev8, D3DRS_FILLMODE, D3DFILL_WIREFRAME);
|
if(dxw.dwFlags2 & WIREFRAME) (*pSetRenderState8)((void *)*ppD3Ddev8, D3DRS_FILLMODE, D3DFILL_WIREFRAME);
|
||||||
@ -544,7 +544,7 @@ void HookD3DDevice9(void** ppD3Ddev9)
|
|||||||
SetHook((void *)(**(DWORD **)ppD3Ddev9 + 168), extEndScene9, (void **)&pEndScene9, "EndScene(D9)");
|
SetHook((void *)(**(DWORD **)ppD3Ddev9 + 168), extEndScene9, (void **)&pEndScene9, "EndScene(D9)");
|
||||||
//SetHook((void *)(**(DWORD **)ppD3Ddev9 +188), extSetViewport, (void **)&pSetViewport, "SetViewport(D9)");
|
//SetHook((void *)(**(DWORD **)ppD3Ddev9 +188), extSetViewport, (void **)&pSetViewport, "SetViewport(D9)");
|
||||||
//SetHook((void *)(**(DWORD **)ppD3Ddev9 +192), extGetViewport, (void **)&pGetViewport, "GetViewport(D9)");
|
//SetHook((void *)(**(DWORD **)ppD3Ddev9 +192), extGetViewport, (void **)&pGetViewport, "GetViewport(D9)");
|
||||||
if((dxw.dwFlags2 & WIREFRAME) || (dxw.dwFlags4 & DISABLEFOGGING) || (dxw.dwFlags4 & ZBUFFERALWAYS)){
|
if((dxw.dwFlags2 & WIREFRAME) || (dxw.dwFlags4 & DISABLEFOGGING) || (dxw.dwFlags4 & ZBUFFERALWAYS) || (dxw.dwFlags5 & TEXTURETRANSP)){
|
||||||
SetHook((void *)(**(DWORD **)ppD3Ddev9 + 228), extSetRenderState9, (void **)&pSetRenderState9, "SetRenderState(D9)");
|
SetHook((void *)(**(DWORD **)ppD3Ddev9 + 228), extSetRenderState9, (void **)&pSetRenderState9, "SetRenderState(D9)");
|
||||||
SetHook((void *)(**(DWORD **)ppD3Ddev9 + 232), extGetRenderState9, (void **)&pGetRenderState9, "GetRenderState(D9)");
|
SetHook((void *)(**(DWORD **)ppD3Ddev9 + 232), extGetRenderState9, (void **)&pGetRenderState9, "GetRenderState(D9)");
|
||||||
if(dxw.dwFlags2 & WIREFRAME) (*pSetRenderState9)((void *)*ppD3Ddev9, D3DRS_FILLMODE, D3DFILL_WIREFRAME);
|
if(dxw.dwFlags2 & WIREFRAME) (*pSetRenderState9)((void *)*ppD3Ddev9, D3DRS_FILLMODE, D3DFILL_WIREFRAME);
|
||||||
@ -588,6 +588,131 @@ void HookDirect3D8(void *lpd3d)
|
|||||||
SetHook((void *)(*(DWORD *)lpd3d + 60), extCreateDevice8, (void **)&pCreateDevice8, "CreateDevice(D8)");
|
SetHook((void *)(*(DWORD *)lpd3d + 60), extCreateDevice8, (void **)&pCreateDevice8, "CreateDevice(D8)");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void HookDirect3D9(void *lpd3d, BOOL ex)
|
||||||
|
{
|
||||||
|
SetHook((void *)(*(DWORD *)lpd3d + 0), extQueryInterfaceD3D9, (void **)&pQueryInterfaceD3D9, "QueryInterface(D9)");
|
||||||
|
SetHook((void *)(*(DWORD *)lpd3d + 16), extGetAdapterCount9, (void **)&pGetAdapterCount9, "GetAdapterCount(D9)");
|
||||||
|
SetHook((void *)(*(DWORD *)lpd3d + 20), extGetAdapterIdentifier9, (void **)&pGetAdapterIdentifier9, "GetAdapterIdentifier(D9)");
|
||||||
|
SetHook((void *)(*(DWORD *)lpd3d + 24), extGetAdapterModeCount9, (void **)&pGetAdapterModeCount9, "GetAdapterGetAdapterModeCount(D9)");
|
||||||
|
SetHook((void *)(*(DWORD *)lpd3d + 28), extEnumAdapterModes9, (void **)&pEnumAdapterModes9, "EnumAdapterModes(D9)");
|
||||||
|
SetHook((void *)(*(DWORD *)lpd3d + 32), extGetAdapterDisplayMode9, (void **)&pGetAdapterDisplayMode9, "GetAdapterDisplayMode(D9)");
|
||||||
|
SetHook((void *)(*(DWORD *)lpd3d + 36), extCheckDeviceType9, (void **)&pCheckDeviceType9, "CheckDeviceType(D9)");
|
||||||
|
SetHook((void *)(*(DWORD *)lpd3d + 56), extD3DGetDeviceCaps9, (void **)&pD3DGetDeviceCaps9, "GetDeviceCaps(D9)");
|
||||||
|
SetHook((void *)(*(DWORD *)lpd3d + 60), extGetAdapterMonitor9, (void **)&pGetAdapterMonitor9, "GetAdapterMonitor(D9)");
|
||||||
|
SetHook((void *)(*(DWORD *)lpd3d + 64), extCreateDevice9, (void **)&pCreateDevice9, "CreateDevice(D9)");
|
||||||
|
if(ex) SetHook((void *)(*(DWORD *)lpd3d + 80), extCreateDeviceEx, (void **)&pCreateDeviceEx, "CreateDeviceEx(D9)");
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
TYPE_OBJECT_UNKNOWN = 0,
|
||||||
|
TYPE_OBJECT_DIRECT3D,
|
||||||
|
TYPE_OBJECT_DIRECT3DDEVICE,
|
||||||
|
TYPE_OBJECT_GAMMARAMP,
|
||||||
|
TYPE_OBJECT_BASETEXTURE,
|
||||||
|
TYPE_OBJECT_TEXTURE,
|
||||||
|
TYPE_OBJECT_3DSURFACE,
|
||||||
|
TYPE_OBJECT_VIEWPORT };
|
||||||
|
|
||||||
|
static HRESULT WINAPI QueryInterfaceD3D(int d3dversion, QueryInterface_Type pQueryInterfaceD3D, void *obj, REFIID riid, void** ppvObj)
|
||||||
|
{
|
||||||
|
HRESULT res;
|
||||||
|
int iObjectType;
|
||||||
|
int iObjectVersion;
|
||||||
|
BOOL bEx = FALSE;
|
||||||
|
|
||||||
|
iObjectVersion = 0;
|
||||||
|
iObjectType = TYPE_OBJECT_UNKNOWN;
|
||||||
|
|
||||||
|
OutTraceD3D("D3D::QueryInterface(%d): d3d=%x riid=%x(%s)\n", d3dversion, obj, riid.Data1, ExplainGUID((GUID *)&riid));
|
||||||
|
|
||||||
|
switch(riid.Data1){
|
||||||
|
// DirectDraw
|
||||||
|
case 0x1dd9e8da: //IID_IDirect3D8
|
||||||
|
iObjectType=TYPE_OBJECT_DIRECT3D; iObjectVersion=8; break;
|
||||||
|
case 0x81bdcbca: // IID_IDirect3D9
|
||||||
|
iObjectType=TYPE_OBJECT_DIRECT3D; iObjectVersion=9; break;
|
||||||
|
case 0x02177241: // IID_IDirect3D9Ex
|
||||||
|
iObjectType=TYPE_OBJECT_DIRECT3D; iObjectVersion=9; bEx=TRUE; break;
|
||||||
|
case 0x7385e5df: // IID_IDirect3DDevice8
|
||||||
|
iObjectType=TYPE_OBJECT_DIRECT3DDEVICE; iObjectVersion=8; break;
|
||||||
|
case 0xd0223b96: // IID_IDirect3DDevice9
|
||||||
|
iObjectType=TYPE_OBJECT_DIRECT3DDEVICE; iObjectVersion=9; break;
|
||||||
|
case 0xb18b10ce: // IID_IDirect3DDevice9Ex
|
||||||
|
iObjectType=TYPE_OBJECT_DIRECT3DDEVICE; iObjectVersion=9; bEx=TRUE; break; // !!!!
|
||||||
|
case 0xb4211cfa: // IID_IDirect3DBaseTexture8
|
||||||
|
iObjectType=TYPE_OBJECT_BASETEXTURE; iObjectVersion=8; break;
|
||||||
|
case 0xe4cdd575: // IID_IDirect3DTexture8
|
||||||
|
iObjectType=TYPE_OBJECT_TEXTURE; iObjectVersion=8; break;
|
||||||
|
case 0x580ca87e: // IID_IDirect3DBaseTexture9
|
||||||
|
iObjectType=TYPE_OBJECT_BASETEXTURE; iObjectVersion=9; break;
|
||||||
|
case 0x85c31227: // IID_IDirect3DTexture9
|
||||||
|
iObjectType=TYPE_OBJECT_TEXTURE; iObjectVersion=9; break;
|
||||||
|
case 0xb96eebca: // IID_IDirect3DSurface8
|
||||||
|
iObjectType=TYPE_OBJECT_3DSURFACE; iObjectVersion=8; break;
|
||||||
|
case 0x0cfbaf3a: // IID_IDirect3DSurface9
|
||||||
|
iObjectType=TYPE_OBJECT_3DSURFACE; iObjectVersion=9; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* IID_IDirect3DDevice9Video */
|
||||||
|
// {26DC4561-A1EE-4ae7-96DA-118A36C0EC95}
|
||||||
|
// DEFINE_GUID(IID_IDirect3DDevice9Video, 0x26dc4561, 0xa1ee, 0x4ae7, 0x96, 0xda, 0x11, 0x8a, 0x36, 0xc0, 0xec, 0x95);
|
||||||
|
|
||||||
|
char *sLabel;
|
||||||
|
switch(iObjectType){
|
||||||
|
case TYPE_OBJECT_DIRECT3D: sLabel = "IID_IDirect3D"; break;
|
||||||
|
case TYPE_OBJECT_DIRECT3DDEVICE: sLabel = "IID_IDirect3DDevice"; break;
|
||||||
|
case TYPE_OBJECT_BASETEXTURE: sLabel = "IID_IDirect3DBaseTexture"; break;
|
||||||
|
case TYPE_OBJECT_TEXTURE: sLabel = "IID_IDirect3DTexture"; break;
|
||||||
|
case TYPE_OBJECT_3DSURFACE: sLabel = "IID_IDirect3DSurface"; break;
|
||||||
|
case TYPE_OBJECT_UNKNOWN:
|
||||||
|
default: sLabel = "(unknown)"; break;
|
||||||
|
}
|
||||||
|
OutTraceDW("D3D::QueryInterface: Got interface for %s version %d\n", sLabel, iObjectVersion);
|
||||||
|
|
||||||
|
res=pQueryInterfaceD3D(obj, riid, ppvObj);
|
||||||
|
if(res) {
|
||||||
|
OutTraceDW("D3D::QueryInterface ERROR: obj=%x REFIID=%x obp=%x ret=%x(%s)\n",
|
||||||
|
obj, riid.Data1, *ppvObj, res, ExplainDDError(res));
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! *ppvObj) {
|
||||||
|
OutTraceDW("D3D::QueryInterface: Interface for object %x not found\n", riid.Data1);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
// added trace
|
||||||
|
OutTraceDW("D3D::QueryInterface: obj=%x REFIID=%x obp=%x obj=%s version=%d ret=0\n",
|
||||||
|
obj, riid.Data1, *ppvObj, sLabel, iObjectVersion);
|
||||||
|
|
||||||
|
if(iObjectVersion == 8){
|
||||||
|
switch(iObjectType){
|
||||||
|
case TYPE_OBJECT_DIRECT3D: HookDirect3D8(ppvObj); break;
|
||||||
|
case TYPE_OBJECT_DIRECT3DDEVICE: HookD3DDevice8(ppvObj); break;
|
||||||
|
case TYPE_OBJECT_TEXTURE: HookD3DTexture8(ppvObj); break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{ // 9!
|
||||||
|
switch(iObjectType){
|
||||||
|
case TYPE_OBJECT_DIRECT3D: HookDirect3D9(ppvObj, bEx); break;
|
||||||
|
case TYPE_OBJECT_DIRECT3DDEVICE: HookD3DDevice9(ppvObj); break;
|
||||||
|
case TYPE_OBJECT_TEXTURE: HookD3DTexture9(ppvObj); break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
OutTraceD3D("D3D::QueryInterface: obp=%x\n", *ppvObj);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT WINAPI extQueryInterfaceD3D8(void *obj, REFIID riid, void** ppvObj)
|
||||||
|
{ return QueryInterfaceD3D(8, pQueryInterfaceD3D8, obj, riid, ppvObj); }
|
||||||
|
HRESULT WINAPI extQueryInterfaceDev8(void *obj, REFIID riid, void** ppvObj)
|
||||||
|
{ return QueryInterfaceD3D(8, pQueryInterfaceDev8, obj, riid, ppvObj); }
|
||||||
|
HRESULT WINAPI extQueryInterfaceD3D9(void *obj, REFIID riid, void** ppvObj)
|
||||||
|
{ return QueryInterfaceD3D(9, pQueryInterfaceD3D9, obj, riid, ppvObj); }
|
||||||
|
HRESULT WINAPI extQueryInterfaceDev9(void *obj, REFIID riid, void** ppvObj)
|
||||||
|
{ return QueryInterfaceD3D(9, pQueryInterfaceDev9, obj, riid, ppvObj); }
|
||||||
|
|
||||||
BOOL WINAPI extDisableD3DSpy(void)
|
BOOL WINAPI extDisableD3DSpy(void)
|
||||||
{
|
{
|
||||||
if(TRUE) return FALSE;
|
if(TRUE) return FALSE;
|
||||||
@ -611,21 +736,6 @@ void* WINAPI extDirect3DCreate8(UINT sdkversion)
|
|||||||
return lpd3d;
|
return lpd3d;
|
||||||
}
|
}
|
||||||
|
|
||||||
void HookDirect3D9(void *lpd3d, BOOL ex)
|
|
||||||
{
|
|
||||||
SetHook((void *)(*(DWORD *)lpd3d + 0), extQueryInterfaceD3D9, (void **)&pQueryInterfaceD3D9, "QueryInterface(D9)");
|
|
||||||
SetHook((void *)(*(DWORD *)lpd3d + 16), extGetAdapterCount9, (void **)&pGetAdapterCount9, "GetAdapterCount(D9)");
|
|
||||||
SetHook((void *)(*(DWORD *)lpd3d + 20), extGetAdapterIdentifier9, (void **)&pGetAdapterIdentifier9, "GetAdapterIdentifier(D9)");
|
|
||||||
SetHook((void *)(*(DWORD *)lpd3d + 24), extGetAdapterModeCount9, (void **)&pGetAdapterModeCount9, "GetAdapterGetAdapterModeCount(D9)");
|
|
||||||
SetHook((void *)(*(DWORD *)lpd3d + 28), extEnumAdapterModes9, (void **)&pEnumAdapterModes9, "EnumAdapterModes(D9)");
|
|
||||||
SetHook((void *)(*(DWORD *)lpd3d + 32), extGetAdapterDisplayMode9, (void **)&pGetAdapterDisplayMode9, "GetAdapterDisplayMode(D9)");
|
|
||||||
SetHook((void *)(*(DWORD *)lpd3d + 36), extCheckDeviceType9, (void **)&pCheckDeviceType9, "CheckDeviceType(D9)");
|
|
||||||
SetHook((void *)(*(DWORD *)lpd3d + 56), extD3DGetDeviceCaps9, (void **)&pD3DGetDeviceCaps9, "GetDeviceCaps(D9)");
|
|
||||||
SetHook((void *)(*(DWORD *)lpd3d + 60), extGetAdapterMonitor9, (void **)&pGetAdapterMonitor9, "GetAdapterMonitor(D9)");
|
|
||||||
SetHook((void *)(*(DWORD *)lpd3d + 64), extCreateDevice9, (void **)&pCreateDevice9, "CreateDevice(D9)");
|
|
||||||
if(ex) SetHook((void *)(*(DWORD *)lpd3d + 80), extCreateDeviceEx, (void **)&pCreateDeviceEx, "CreateDeviceEx(D9)");
|
|
||||||
}
|
|
||||||
|
|
||||||
static char *ExplainD3DBehaviourFlags(DWORD c)
|
static char *ExplainD3DBehaviourFlags(DWORD c)
|
||||||
{
|
{
|
||||||
static char eb[256];
|
static char eb[256];
|
||||||
@ -1373,6 +1483,10 @@ static HRESULT WINAPI extSetRenderState(SetRenderState_Type pSetRenderState, voi
|
|||||||
OutTraceD3D("SetRenderState: FIXED State=FOGENABLE Value=%x->FALSE\n", Value);
|
OutTraceD3D("SetRenderState: FIXED State=FOGENABLE Value=%x->FALSE\n", Value);
|
||||||
Value = FALSE;
|
Value = FALSE;
|
||||||
}
|
}
|
||||||
|
if((dxw.dwFlags5 & TEXTURETRANSP) && (State == D3DRS_ALPHABLENDENABLE)){
|
||||||
|
OutTraceD3D("SetRenderState: FIXED State=ALPHABLENDENABLE Value=%x->TRUE\n", Value);
|
||||||
|
Value = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
res=(*pSetRenderState)(pd3dd, State, Value);
|
res=(*pSetRenderState)(pd3dd, State, Value);
|
||||||
if(res) OutTraceE("SetRenderState: res=%x(%s)\n", res, ExplainDDError(res));
|
if(res) OutTraceE("SetRenderState: res=%x(%s)\n", res, ExplainDDError(res));
|
||||||
@ -1697,76 +1811,6 @@ void WINAPI extRSSetViewports11(ID3D11DeviceContext *This, UINT NumViewports, D3
|
|||||||
(*pRSSetViewports11)(This, NumViewports, pViewports);
|
(*pRSSetViewports11)(This, NumViewports, pViewports);
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI extQueryInterfaceD3D8(void *obj, REFIID riid, void** ppvObj)
|
|
||||||
{
|
|
||||||
HRESULT res;
|
|
||||||
OutTraceD3D("D3D::QueryInterface(8): d3d=%x riid=%x\n", obj, riid.Data1);
|
|
||||||
res=pQueryInterfaceD3D8(obj, riid, ppvObj);
|
|
||||||
if(res)
|
|
||||||
OutTraceE("D3D::QueryInterface(8): ERROR ret=%x(%s)\n", res, ExplainDDError(res));
|
|
||||||
else
|
|
||||||
OutTraceD3D("D3D::QueryInterface(8): obp=%x\n", *ppvObj);
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
HRESULT WINAPI extQueryInterfaceDev8(void *obj, REFIID riid, void** ppvObj)
|
|
||||||
{
|
|
||||||
HRESULT res;
|
|
||||||
OutTraceD3D("Device::QueryInterface(8): d3d=%x riid=%x\n", obj, riid.Data1);
|
|
||||||
res=pQueryInterfaceDev8(obj, riid, ppvObj);
|
|
||||||
if(res){
|
|
||||||
OutTraceE("Device::QueryInterface(8): ERROR ret=%x(%s)\n", res, ExplainDDError(res));
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
OutTraceD3D("Device::QueryInterface(8): obp=%x\n", *ppvObj);
|
|
||||||
|
|
||||||
switch(*(DWORD *)&riid){
|
|
||||||
case 0x7385E5DF: // IID_IDirect3DDevice8
|
|
||||||
HookD3DDevice8(ppvObj);
|
|
||||||
break;
|
|
||||||
case 0xD0223B96: // IID_IDirect3DDevice9
|
|
||||||
HookD3DDevice9(ppvObj);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
HRESULT WINAPI extQueryInterfaceD3D9(void *obj, REFIID riid, void** ppvObj)
|
|
||||||
{
|
|
||||||
HRESULT res;
|
|
||||||
OutTraceD3D("D3D::QueryInterface(9): d3d=%x riid=%x\n", obj, riid.Data1);
|
|
||||||
res=pQueryInterfaceD3D9(obj, riid, ppvObj);
|
|
||||||
if(res)
|
|
||||||
OutTraceE("D3D::QueryInterface(9): ERROR ret=%x(%s)\n", res, ExplainDDError(res));
|
|
||||||
else
|
|
||||||
OutTraceD3D("D3D::QueryInterface(9): obp=%x\n", *ppvObj);
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
HRESULT WINAPI extQueryInterfaceDev9(void *obj, REFIID riid, void** ppvObj)
|
|
||||||
{
|
|
||||||
HRESULT res;
|
|
||||||
|
|
||||||
OutTraceD3D("Device::QueryInterface(9): d3d=%x riid=%x\n", obj, riid.Data1);
|
|
||||||
res=pQueryInterfaceDev9(obj, riid, ppvObj);
|
|
||||||
if(res){
|
|
||||||
OutTraceD3D("Device::QueryInterface(9): ERROR ret=%x\n", res);
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
OutTraceD3D("Device::QueryInterface(9): ppvObj=%x\n", *ppvObj);
|
|
||||||
|
|
||||||
switch(*(DWORD *)&riid){
|
|
||||||
case 0x7385E5DF: // IID_IDirect3DDevice8
|
|
||||||
HookD3DDevice8(ppvObj);
|
|
||||||
break;
|
|
||||||
case 0xD0223B96: // IID_IDirect3DDevice9
|
|
||||||
HookD3DDevice9(ppvObj);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
static ULONG WINAPI ReleaseDev(int d3dversion, ReleaseDev_Type pReleaseDev, void *lpdd)
|
static ULONG WINAPI ReleaseDev(int d3dversion, ReleaseDev_Type pReleaseDev, void *lpdd)
|
||||||
{
|
{
|
||||||
ULONG ActualRef;
|
ULONG ActualRef;
|
||||||
@ -1789,7 +1833,7 @@ HRESULT WINAPI extGetDirect3D8(void *lpdd3dd, void **ppD3D8)
|
|||||||
OutTraceE("Device::GetDirect3D ERROR: d3dd=%x ret=%x\n", lpdd3dd, res);
|
OutTraceE("Device::GetDirect3D ERROR: d3dd=%x ret=%x\n", lpdd3dd, res);
|
||||||
else{
|
else{
|
||||||
OutTraceD3D("Device::GetDirect3D: d3dd=%x d3d=%x\n", lpdd3dd, *ppD3D8);
|
OutTraceD3D("Device::GetDirect3D: d3dd=%x d3d=%x\n", lpdd3dd, *ppD3D8);
|
||||||
HookDirect3D8(*ppD3D8);
|
// HookDirect3D8(*ppD3D8);
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
@ -1804,7 +1848,8 @@ HRESULT WINAPI extGetDirect3D9(void *lpdd3dd, void **ppD3D9)
|
|||||||
else{
|
else{
|
||||||
OutTraceD3D("Device::GetDirect3D: d3dd=%x d3d=%x\n", lpdd3dd, *ppD3D9);
|
OutTraceD3D("Device::GetDirect3D: d3dd=%x d3d=%x\n", lpdd3dd, *ppD3D9);
|
||||||
// re-hook d3d session: neeeded for Need for Speed Underground
|
// re-hook d3d session: neeeded for Need for Speed Underground
|
||||||
HookDirect3D9(*ppD3D9, FALSE);
|
// commented out: NFSU works also without it ....
|
||||||
|
// HookDirect3D9(*ppD3D9, FALSE);
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
@ -1880,6 +1925,8 @@ ULONG WINAPI extBeginScene8(void *lpdd3dd)
|
|||||||
OutTraceB("Device::BeginScene(8): d3dd=%x\n", lpdd3dd);
|
OutTraceB("Device::BeginScene(8): d3dd=%x\n", lpdd3dd);
|
||||||
res=(*pBeginScene8)(lpdd3dd);
|
res=(*pBeginScene8)(lpdd3dd);
|
||||||
if (res) OutTraceE("Device::BeginScene(8) ERROR: err=%x\n", res);
|
if (res) OutTraceE("Device::BeginScene(8) ERROR: err=%x\n", res);
|
||||||
|
|
||||||
|
//if(dxw.dwFlags5 & TEXTURETRANSP) (*pSetRenderState8)(lpdd3dd, D3DRS_ALPHABLENDENABLE, TRUE);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1889,6 +1936,8 @@ ULONG WINAPI extBeginScene9(void *lpdd3dd)
|
|||||||
OutTraceB("Device::BeginScene(9): d3dd=%x\n", lpdd3dd);
|
OutTraceB("Device::BeginScene(9): d3dd=%x\n", lpdd3dd);
|
||||||
res=(*pBeginScene9)(lpdd3dd);
|
res=(*pBeginScene9)(lpdd3dd);
|
||||||
if (res) OutTraceE("Device::BeginScene(9) ERROR: err=%x\n", res);
|
if (res) OutTraceE("Device::BeginScene(9) ERROR: err=%x\n", res);
|
||||||
|
|
||||||
|
//if(dxw.dwFlags5 & TEXTURETRANSP) (*pSetRenderState9)(lpdd3dd, D3DRS_ALPHABLENDENABLE, TRUE);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1175,6 +1175,10 @@ HRESULT WINAPI extSetRenderState(int version, SetRenderState3_Type pSetRenderSta
|
|||||||
OutTraceD3D("SetRenderState: FIXED State=FOGENABLE Value=%x->FALSE\n", Value);
|
OutTraceD3D("SetRenderState: FIXED State=FOGENABLE Value=%x->FALSE\n", Value);
|
||||||
Value = FALSE;
|
Value = FALSE;
|
||||||
}
|
}
|
||||||
|
if((dxw.dwFlags5 & TEXTURETRANSP) && (State == D3DRENDERSTATE_ALPHABLENDENABLE)){
|
||||||
|
OutTraceD3D("SetRenderState: FIXED State=ALPHABLENDENABLE Value=%x->TRUE\n", Value);
|
||||||
|
Value = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
// beware!!! likely this code would work for interface version 3 only !!!
|
// beware!!! likely this code would work for interface version 3 only !!!
|
||||||
if((State==D3DRENDERSTATE_ZWRITEENABLE) && (Value==TRUE) && (dxw.dwFlags8 & DYNAMICZCLEAN)){
|
if((State==D3DRENDERSTATE_ZWRITEENABLE) && (Value==TRUE) && (dxw.dwFlags8 & DYNAMICZCLEAN)){
|
||||||
|
@ -47,15 +47,20 @@ void D3D8TextureHandling(void *arg, int Level)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
pSurfaceLevel->Release();
|
pSurfaceLevel->Release();
|
||||||
|
OutTraceB("D3D8TextureHandling: level=%d type=%x usage=%x\n", Level, Desc.Type, Desc.Usage);
|
||||||
switch(Desc.Type){
|
switch(Desc.Type){
|
||||||
case D3DRTYPE_SURFACE:
|
case D3DRTYPE_SURFACE:
|
||||||
case D3DRTYPE_TEXTURE:
|
case D3DRTYPE_TEXTURE:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
OutTraceB("D3D88TextureHandling: SKIP type=%x\n", Desc.Type);
|
||||||
return;
|
return;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if(Desc.Usage == D3DUSAGE_RENDERTARGET)return;
|
if(Desc.Usage == D3DUSAGE_RENDERTARGET){
|
||||||
|
OutTraceB("D3D8TextureHandling: SKIP usage=%x\n", Desc.Usage);
|
||||||
|
return;
|
||||||
|
}
|
||||||
//pSurfaceLevel->GetRenderTargetData(&pRenderTarget, &pDestSurface);
|
//pSurfaceLevel->GetRenderTargetData(&pRenderTarget, &pDestSurface);
|
||||||
res=(*pLockRect8)(lpd3dtex, Level, &LockedRect, NULL, 0);
|
res=(*pLockRect8)(lpd3dtex, Level, &LockedRect, NULL, 0);
|
||||||
OutTrace("D3D8TextureHandling: lpd3dtex=%x level=%d format=0x%x(%s) size=(%dx%d) bits=%x pitch=%d\n",
|
OutTrace("D3D8TextureHandling: lpd3dtex=%x level=%d format=0x%x(%s) size=(%dx%d) bits=%x pitch=%d\n",
|
||||||
|
@ -39,15 +39,20 @@ void D3D9TextureHandling(void *arg, int Level)
|
|||||||
OutTraceE("Texture::GetLevelDesc ERROR: res=%d(%s)\n", res, ExplainDDError(res));
|
OutTraceE("Texture::GetLevelDesc ERROR: res=%d(%s)\n", res, ExplainDDError(res));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
OutTraceB("D3D9TextureHandling: level=%d type=%x usage=%x\n", Level, Desc.Type, Desc.Usage);
|
||||||
switch(Desc.Type){
|
switch(Desc.Type){
|
||||||
case D3DRTYPE_SURFACE:
|
case D3DRTYPE_SURFACE:
|
||||||
case D3DRTYPE_TEXTURE:
|
case D3DRTYPE_TEXTURE:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
OutTraceB("D3D9TextureHandling: SKIP type=%x usage=%x\n", Desc.Type);
|
||||||
return;
|
return;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if(Desc.Usage == D3DUSAGE_RENDERTARGET)return;
|
if(Desc.Usage == D3DUSAGE_RENDERTARGET){
|
||||||
|
OutTraceB("D3D9TextureHandling: SKIP usage=%x\n", Desc.Usage);
|
||||||
|
return;
|
||||||
|
}
|
||||||
//pSurfaceLevel->GetRenderTargetData(&pRenderTarget, &pDestSurface);
|
//pSurfaceLevel->GetRenderTargetData(&pRenderTarget, &pDestSurface);
|
||||||
res=(*pLockRect9)(lpd3dtex, Level, &LockedRect, NULL, D3DLOCK_READONLY);
|
res=(*pLockRect9)(lpd3dtex, Level, &LockedRect, NULL, D3DLOCK_READONLY);
|
||||||
OutTrace("D3D9TextureHandling: lpd3dtex=%x level=%d format=0x%x(%s) size=(%dx%d) bits=%x pitch=%d\n",
|
OutTrace("D3D9TextureHandling: lpd3dtex=%x level=%d format=0x%x(%s) size=(%dx%d) bits=%x pitch=%d\n",
|
||||||
|
@ -631,6 +631,10 @@ 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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(dxw.IsRealDesktop(hwnd)){
|
||||||
|
hwnd = dxw.GethWnd();
|
||||||
|
}
|
||||||
|
|
||||||
RECT ScaledRect;
|
RECT ScaledRect;
|
||||||
if(dxw.IsFullScreen()) {
|
if(dxw.IsFullScreen()) {
|
||||||
switch(dxw.GDIEmulationMode){
|
switch(dxw.GDIEmulationMode){
|
||||||
@ -2513,6 +2517,7 @@ BOOL WINAPI extEndPaint(HWND hwnd, const PAINTSTRUCT *lpPaint)
|
|||||||
HWND WINAPI extCreateDialogIndirectParam(HINSTANCE hInstance, LPCDLGTEMPLATE lpTemplate, HWND hWndParent, DLGPROC lpDialogFunc, LPARAM lParamInit)
|
HWND WINAPI extCreateDialogIndirectParam(HINSTANCE hInstance, LPCDLGTEMPLATE lpTemplate, HWND hWndParent, DLGPROC lpDialogFunc, LPARAM lParamInit)
|
||||||
{
|
{
|
||||||
HWND RetHWND;
|
HWND RetHWND;
|
||||||
|
|
||||||
OutTraceDW("CreateDialogIndirectParam: hInstance=%x lpTemplate=(style=%x extstyle=%x items=%d pos=(%d,%d) size=(%dx%d)) hWndParent=%x lpDialogFunc=%x lParamInit=%x\n",
|
OutTraceDW("CreateDialogIndirectParam: hInstance=%x lpTemplate=(style=%x extstyle=%x items=%d pos=(%d,%d) size=(%dx%d)) hWndParent=%x lpDialogFunc=%x lParamInit=%x\n",
|
||||||
hInstance,
|
hInstance,
|
||||||
lpTemplate->style, lpTemplate->dwExtendedStyle, lpTemplate->cdit, lpTemplate->x, lpTemplate->y, lpTemplate->cx, lpTemplate->cy,
|
lpTemplate->style, lpTemplate->dwExtendedStyle, lpTemplate->cdit, lpTemplate->x, lpTemplate->y, lpTemplate->cx, lpTemplate->cy,
|
||||||
|
73
host/ViewFlagsDialog.cpp
Normal file
73
host/ViewFlagsDialog.cpp
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
// ViewFlagsDialog.cpp : implementation file
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "stdafx.h"
|
||||||
|
#include "dxwndhost.h"
|
||||||
|
#include "ViewFlagsDialog.h"
|
||||||
|
|
||||||
|
// CViewFlagsDialog dialog
|
||||||
|
|
||||||
|
IMPLEMENT_DYNAMIC(CViewFlagsDialog, CDialog)
|
||||||
|
|
||||||
|
CViewFlagsDialog::CViewFlagsDialog(CWnd* pParent /*=NULL*/)
|
||||||
|
: CDialog(CViewFlagsDialog::IDD, pParent)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
CViewFlagsDialog::~CViewFlagsDialog()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void CViewFlagsDialog::DoDataExchange(CDataExchange* pDX)
|
||||||
|
{
|
||||||
|
CDialog::DoDataExchange(pDX);
|
||||||
|
}
|
||||||
|
|
||||||
|
BEGIN_MESSAGE_MAP(CViewFlagsDialog, CDialog)
|
||||||
|
END_MESSAGE_MAP()
|
||||||
|
|
||||||
|
// CViewFlagsDialog message handlers
|
||||||
|
|
||||||
|
BOOL CViewFlagsDialog::OnInitDialog()
|
||||||
|
{
|
||||||
|
CDialog::OnInitDialog();
|
||||||
|
|
||||||
|
// TODO: Add extra initialization here
|
||||||
|
CString sflags;
|
||||||
|
extern TARGETMAP *ViewTarget; // dirty !!!!
|
||||||
|
int i;
|
||||||
|
TARGETMAP *t;
|
||||||
|
DWORD dword;
|
||||||
|
t = ViewTarget;
|
||||||
|
sflags.Append("Flags1: ");
|
||||||
|
for(i=0, dword = t->flags ; i<32; i++, dword>>=1) if(dword & 0x1) sflags.AppendFormat("%s ", GetFlagCaption(0,i));
|
||||||
|
sflags.Append("\nFlags2: ");
|
||||||
|
for(i=0, dword = t->flags2; i<32; i++, dword>>=1) if(dword & 0x1) sflags.AppendFormat("%s ", GetFlagCaption(1,i));
|
||||||
|
sflags.Append("\nFlags3: ");
|
||||||
|
for(i=0, dword = t->flags3; i<32; i++, dword>>=1) if(dword & 0x1) sflags.AppendFormat("%s ", GetFlagCaption(2,i));
|
||||||
|
sflags.Append("\nFlags4: ");
|
||||||
|
for(i=0, dword = t->flags4; i<32; i++, dword>>=1) if(dword & 0x1) sflags.AppendFormat("%s ", GetFlagCaption(3,i));
|
||||||
|
sflags.Append("\nFlags5: ");
|
||||||
|
for(i=0, dword = t->flags5; i<32; i++, dword>>=1) if(dword & 0x1) sflags.AppendFormat("%s ", GetFlagCaption(4,i));
|
||||||
|
sflags.Append("\nFlags6: ");
|
||||||
|
for(i=0, dword = t->flags6; i<32; i++, dword>>=1) if(dword & 0x1) sflags.AppendFormat("%s ", GetFlagCaption(5,i));
|
||||||
|
sflags.Append("\nFlags7: ");
|
||||||
|
for(i=0, dword = t->flags7; i<32; i++, dword>>=1) if(dword & 0x1) sflags.AppendFormat("%s ", GetFlagCaption(6,i));
|
||||||
|
sflags.Append("\nFlags8: ");
|
||||||
|
for(i=0, dword = t->flags8; i<32; i++, dword>>=1) if(dword & 0x1) sflags.AppendFormat("%s ", GetFlagCaption(7,i));
|
||||||
|
sflags.Append("\nTFlags: ");
|
||||||
|
for(i=0, dword = t->tflags; i<32; i++, dword>>=1) if(dword & 0x1) sflags.AppendFormat("%s ", GetFlagCaption(8,i));
|
||||||
|
|
||||||
|
this->SetDlgItemTextA(IDC_DESKTOPINFO, sflags);
|
||||||
|
this->SetWindowTextA(t->path);
|
||||||
|
|
||||||
|
return TRUE; // return TRUE unless you set the focus to a control
|
||||||
|
// EXCEPTION: OCX Property Pages should return FALSE
|
||||||
|
}
|
||||||
|
|
||||||
|
void CViewFlagsDialog::OnOK()
|
||||||
|
{
|
||||||
|
// TODO: Add your specialized code here and/or call the base class
|
||||||
|
|
||||||
|
CDialog::OnOK();
|
||||||
|
}
|
26
host/ViewFlagsDialog.h
Normal file
26
host/ViewFlagsDialog.h
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
|
||||||
|
// CViewFlagsDialog dialog
|
||||||
|
|
||||||
|
class CViewFlagsDialog : public CDialog
|
||||||
|
{
|
||||||
|
DECLARE_DYNAMIC(CViewFlagsDialog)
|
||||||
|
|
||||||
|
public:
|
||||||
|
CViewFlagsDialog(CWnd* pParent = NULL); // standard constructor
|
||||||
|
virtual ~CViewFlagsDialog();
|
||||||
|
|
||||||
|
// Dialog Data
|
||||||
|
enum { IDD = IDD_VIEWFLAGS };
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
|
||||||
|
|
||||||
|
DECLARE_MESSAGE_MAP()
|
||||||
|
public:
|
||||||
|
public:
|
||||||
|
virtual BOOL OnInitDialog();
|
||||||
|
protected:
|
||||||
|
virtual void OnOK();
|
||||||
|
};
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -507,6 +507,10 @@
|
|||||||
RelativePath=".\TimeSliderDlg.cpp"
|
RelativePath=".\TimeSliderDlg.cpp"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\ViewFlagsDialog.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
</Filter>
|
</Filter>
|
||||||
<Filter
|
<Filter
|
||||||
Name="Header Files"
|
Name="Header Files"
|
||||||
@ -640,6 +644,10 @@
|
|||||||
RelativePath=".\TimeSliderDialog.h"
|
RelativePath=".\TimeSliderDialog.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\ViewFlagsDialog.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
</Filter>
|
</Filter>
|
||||||
<Filter
|
<Filter
|
||||||
Name="Resource Files"
|
Name="Resource Files"
|
||||||
@ -742,22 +750,22 @@
|
|||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
</Filter>
|
</Filter>
|
||||||
<File
|
|
||||||
RelativePath=".\res\alt-ctrl-shift.png"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
<File
|
||||||
RelativePath=".\alt-ctrl-shift.png"
|
RelativePath=".\alt-ctrl-shift.png"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\alt.png"
|
RelativePath=".\res\alt-ctrl-shift.png"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\res\alt.png"
|
RelativePath=".\res\alt.png"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\alt.png"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\resource"
|
RelativePath=".\resource"
|
||||||
>
|
>
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
#include "PaletteDialog.h"
|
#include "PaletteDialog.h"
|
||||||
#include "TimeSliderDialog.h"
|
#include "TimeSliderDialog.h"
|
||||||
#include "ShimsDialog.h"
|
#include "ShimsDialog.h"
|
||||||
|
#include "ViewFlagsDialog.h"
|
||||||
#include "CGlobalSettings.h"
|
#include "CGlobalSettings.h"
|
||||||
|
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
@ -153,6 +154,7 @@ BEGIN_MESSAGE_MAP(CDxwndhostView, CListView)
|
|||||||
ON_COMMAND(ID_MOVE_UP, OnMoveUp)
|
ON_COMMAND(ID_MOVE_UP, OnMoveUp)
|
||||||
ON_COMMAND(ID_MOVE_DOWN, OnMoveDown)
|
ON_COMMAND(ID_MOVE_DOWN, OnMoveDown)
|
||||||
ON_COMMAND(ID_MOVE_BOTTOM, OnMoveBottom)
|
ON_COMMAND(ID_MOVE_BOTTOM, OnMoveBottom)
|
||||||
|
ON_COMMAND(ID_VIEW_FLAGS, OnViewFlags)
|
||||||
ON_WM_RBUTTONDOWN()
|
ON_WM_RBUTTONDOWN()
|
||||||
ON_WM_HOTKEY()
|
ON_WM_HOTKEY()
|
||||||
ON_WM_DROPFILES()
|
ON_WM_DROPFILES()
|
||||||
@ -293,6 +295,7 @@ void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg)
|
|||||||
case 1: t->flags5 |= TEXTUREHIGHLIGHT; break;
|
case 1: t->flags5 |= TEXTUREHIGHLIGHT; break;
|
||||||
case 2: t->flags5 |= TEXTUREDUMP; break;
|
case 2: t->flags5 |= TEXTUREDUMP; break;
|
||||||
case 3: t->flags5 |= TEXTUREHACK; break;
|
case 3: t->flags5 |= TEXTUREHACK; break;
|
||||||
|
case 4: t->flags5 |= TEXTURETRANSP; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch(dlg->m_SonProcessMode){
|
switch(dlg->m_SonProcessMode){
|
||||||
@ -628,6 +631,7 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg)
|
|||||||
if(t->flags5 & TEXTUREHIGHLIGHT) dlg->m_TextureHandling = 1;
|
if(t->flags5 & TEXTUREHIGHLIGHT) dlg->m_TextureHandling = 1;
|
||||||
if(t->flags5 & TEXTUREDUMP) dlg->m_TextureHandling = 2;
|
if(t->flags5 & TEXTUREDUMP) dlg->m_TextureHandling = 2;
|
||||||
if(t->flags5 & TEXTUREHACK) dlg->m_TextureHandling = 3;
|
if(t->flags5 & TEXTUREHACK) dlg->m_TextureHandling = 3;
|
||||||
|
if(t->flags5 & TEXTURETRANSP) dlg->m_TextureHandling = 4;
|
||||||
|
|
||||||
dlg->m_SonProcessMode = 0;
|
dlg->m_SonProcessMode = 0;
|
||||||
if(t->flags4 & SUPPRESSCHILD) dlg->m_SonProcessMode = 1;
|
if(t->flags4 & SUPPRESSCHILD) dlg->m_SonProcessMode = 1;
|
||||||
@ -2527,6 +2531,26 @@ void CDxwndhostView::OnViewShims()
|
|||||||
pDlg->ShowWindow(SW_SHOW);
|
pDlg->ShowWindow(SW_SHOW);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TARGETMAP *ViewTarget; // dirty !!!!
|
||||||
|
|
||||||
|
void CDxwndhostView::OnViewFlags()
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
CTargetDlg dlg;
|
||||||
|
POSITION pos;
|
||||||
|
CListCtrl& listctrl = GetListCtrl();
|
||||||
|
|
||||||
|
if(!listctrl.GetSelectedCount()) return;
|
||||||
|
pos = listctrl.GetFirstSelectedItemPosition();
|
||||||
|
i = listctrl.GetNextSelectedItem(pos);
|
||||||
|
ViewTarget = &TargetMaps[i];
|
||||||
|
|
||||||
|
CViewFlagsDialog *pDlg = new CViewFlagsDialog();
|
||||||
|
|
||||||
|
BOOL ret = pDlg->Create(CViewFlagsDialog::IDD, this);
|
||||||
|
pDlg->ShowWindow(SW_SHOW);
|
||||||
|
}
|
||||||
|
|
||||||
void CDxwndhostView::OnViewDesktop()
|
void CDxwndhostView::OnViewDesktop()
|
||||||
{
|
{
|
||||||
CDesktopDialog *pDlg = new CDesktopDialog();
|
CDesktopDialog *pDlg = new CDesktopDialog();
|
||||||
@ -2680,6 +2704,9 @@ void CDxwndhostView::OnRButtonDown(UINT nFlags, CPoint point)
|
|||||||
case ID_MOVE_BOTTOM:
|
case ID_MOVE_BOTTOM:
|
||||||
OnMoveBottom();
|
OnMoveBottom();
|
||||||
break;
|
break;
|
||||||
|
case ID_VIEW_FLAGS:
|
||||||
|
OnViewFlags();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
CListView::OnRButtonDown(nFlags, point);
|
CListView::OnRButtonDown(nFlags, point);
|
||||||
}
|
}
|
||||||
|
@ -116,6 +116,7 @@ protected:
|
|||||||
afx_msg void OnMoveDown();
|
afx_msg void OnMoveDown();
|
||||||
afx_msg void OnMoveBottom();
|
afx_msg void OnMoveBottom();
|
||||||
afx_msg void OnDropFiles(HDROP hDropInfo);
|
afx_msg void OnDropFiles(HDROP hDropInfo);
|
||||||
|
afx_msg void OnViewFlags();
|
||||||
//}}AFX_MSG
|
//}}AFX_MSG
|
||||||
DECLARE_MESSAGE_MAP()
|
DECLARE_MESSAGE_MAP()
|
||||||
};
|
};
|
||||||
|
BIN
host/resource
BIN
host/resource
Binary file not shown.
77
proxy/wing32.cpp
Normal file
77
proxy/wing32.cpp
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// Tiny WinG32 Proxy DLL v1.0 [30.01.2017]
|
||||||
|
// Copyright 2010 Evgeny Vrublevsky <veg@tut.by>, 2017 GHO
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
#define APP_NAME "Tiny WinG32 Proxy"
|
||||||
|
#define APP_VERSION "1.0 [28.05.2010]"
|
||||||
|
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#include <windows.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
|
||||||
|
void InitDxWnd(void);
|
||||||
|
void DxWndEndHook(void);
|
||||||
|
|
||||||
|
struct wing32_dll
|
||||||
|
{
|
||||||
|
HMODULE dll;
|
||||||
|
FARPROC WinGCreateDC;
|
||||||
|
FARPROC WinGCreateBitmap;
|
||||||
|
FARPROC WinGBitBlt;
|
||||||
|
FARPROC WinGStretchBlt;
|
||||||
|
FARPROC WinGRecommendDIBFormat;
|
||||||
|
FARPROC WinGGetDIBPointer;
|
||||||
|
FARPROC WinGSetDIBColorTable;
|
||||||
|
FARPROC WinGGetDIBColorTable;
|
||||||
|
FARPROC WinGCreateHalftonePalette;
|
||||||
|
FARPROC WinGCreateHalftoneBrush;
|
||||||
|
} wing32;
|
||||||
|
|
||||||
|
__declspec(naked) void FakeWinGCreateDC() { _asm { jmp [wing32.WinGCreateDC] } }
|
||||||
|
__declspec(naked) void FakeWinGCreateBitmap() { _asm { jmp [wing32.WinGCreateBitmap] } }
|
||||||
|
__declspec(naked) void FakeWinGBitBlt() { _asm { jmp [wing32.WinGBitBlt] } }
|
||||||
|
__declspec(naked) void FakeWinGStretchBlt() { _asm { jmp [wing32.WinGStretchBlt] } }
|
||||||
|
__declspec(naked) void FakeWinGRecommendDIBFormat() { _asm { jmp [wing32.WinGRecommendDIBFormat] } }
|
||||||
|
__declspec(naked) void FakeWinGGetDIBPointer() { _asm { jmp [wing32.WinGGetDIBPointer] } }
|
||||||
|
__declspec(naked) void FakeWinGSetDIBColorTable() { _asm { jmp [wing32.WinGSetDIBColorTable] } }
|
||||||
|
__declspec(naked) void FakeWinGGetDIBColorTable() { _asm { jmp [wing32.WinGGetDIBColorTable] } }
|
||||||
|
__declspec(naked) void FakeWinGCreateHalftonePalette() { _asm { jmp [wing32.WinGCreateHalftonePalette] } }
|
||||||
|
__declspec(naked) void FakeWinGCreateHalftoneBrush() { _asm { jmp [wing32.WinGCreateHalftoneBrush] } }
|
||||||
|
|
||||||
|
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
|
||||||
|
{
|
||||||
|
char path[MAX_PATH];
|
||||||
|
switch (ul_reason_for_call)
|
||||||
|
{
|
||||||
|
case DLL_PROCESS_ATTACH:
|
||||||
|
{
|
||||||
|
CopyMemory(path+GetSystemDirectory(path,MAX_PATH-10), "\\wing32.dll",11);
|
||||||
|
wing32.dll = LoadLibrary(path);
|
||||||
|
if (wing32.dll == false)
|
||||||
|
{
|
||||||
|
MessageBox(0, "Cannot load original wing32.dll library", APP_NAME, MB_ICONERROR);
|
||||||
|
ExitProcess(0);
|
||||||
|
}
|
||||||
|
wing32.WinGCreateDC = GetProcAddress(wing32.dll, "WinGCreateDC");
|
||||||
|
wing32.WinGCreateBitmap = GetProcAddress(wing32.dll, "WinGCreateBitmap");
|
||||||
|
wing32.WinGBitBlt = GetProcAddress(wing32.dll, "WinGBitBlt");
|
||||||
|
wing32.WinGStretchBlt = GetProcAddress(wing32.dll, "WinGStretchBlt");
|
||||||
|
wing32.WinGRecommendDIBFormat = GetProcAddress(wing32.dll, "WinGRecommendDIBFormat");
|
||||||
|
wing32.WinGGetDIBPointer = GetProcAddress(wing32.dll, "WinGGetDIBPointer");
|
||||||
|
wing32.WinGSetDIBColorTable = GetProcAddress(wing32.dll, "WinGSetDIBColorTable");
|
||||||
|
wing32.WinGGetDIBColorTable = GetProcAddress(wing32.dll, "WinGGetDIBColorTable");
|
||||||
|
wing32.WinGCreateHalftonePalette = GetProcAddress(wing32.dll, "WinGCreateHalftonePalette");
|
||||||
|
wing32.WinGCreateHalftoneBrush = GetProcAddress(wing32.dll, "WinGCreateHalftoneBrush");
|
||||||
|
|
||||||
|
InitDxWnd();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case DLL_PROCESS_DETACH:
|
||||||
|
{
|
||||||
|
DxWndEndHook();
|
||||||
|
FreeLibrary(wing32.dll);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
12
proxy/wing32.def
Normal file
12
proxy/wing32.def
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
LIBRARY "wing32"
|
||||||
|
EXPORTS
|
||||||
|
WinGCreateDC = FakeWinGCreateDC @1
|
||||||
|
WinGCreateBitmap = FakeWinGCreateBitmap @2
|
||||||
|
WinGBitBlt = FakeWinGBitBlt @3
|
||||||
|
WinGStretchBlt = FakeWinGStretchBlt @4
|
||||||
|
WinGRecommendDIBFormat = FakeWinGRecommendDIBFormat @5
|
||||||
|
WinGGetDIBPointer = FakeWinGGetDIBPointer @6
|
||||||
|
WinGSetDIBColorTable = FakeWinGSetDIBColorTable @7
|
||||||
|
WinGGetDIBColorTable = FakeWinGGetDIBColorTable @8
|
||||||
|
WinGCreateHalftonePalette = FakeWinGCreateHalftonePalette @9
|
||||||
|
WinGCreateHalftoneBrush = FakeWinGCreateHalftoneBrush @10
|
20
proxy/wing32.sln
Normal file
20
proxy/wing32.sln
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 10.00
|
||||||
|
# Visual Studio 2008
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wing32", "wing32.vcproj", "{579E7FE7-2745-4100-A802-23511711FCDF}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Win32 = Debug|Win32
|
||||||
|
Release|Win32 = Release|Win32
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{579E7FE7-2745-4100-A802-23511711FCDF}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{579E7FE7-2745-4100-A802-23511711FCDF}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{579E7FE7-2745-4100-A802-23511711FCDF}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{579E7FE7-2745-4100-A802-23511711FCDF}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
BIN
proxy/wing32.suo
Normal file
BIN
proxy/wing32.suo
Normal file
Binary file not shown.
253
proxy/wing32.vcproj
Normal file
253
proxy/wing32.vcproj
Normal file
@ -0,0 +1,253 @@
|
|||||||
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
|
<VisualStudioProject
|
||||||
|
ProjectType="Visual C++"
|
||||||
|
Version="9.00"
|
||||||
|
Name="wing32"
|
||||||
|
ProjectGUID="{579E7FE7-2745-4100-A802-23511711FCDF}"
|
||||||
|
RootNamespace="dxwnd"
|
||||||
|
TargetFrameworkVersion="131072"
|
||||||
|
>
|
||||||
|
<Platforms>
|
||||||
|
<Platform
|
||||||
|
Name="Win32"
|
||||||
|
/>
|
||||||
|
</Platforms>
|
||||||
|
<ToolFiles>
|
||||||
|
</ToolFiles>
|
||||||
|
<Configurations>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
OutputDirectory=".\Debug"
|
||||||
|
IntermediateDirectory=".\Debug"
|
||||||
|
ConfigurationType="2"
|
||||||
|
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
|
||||||
|
UseOfMFC="0"
|
||||||
|
ATLMinimizesCRunTimeLibraryUsage="false"
|
||||||
|
CharacterSet="2"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
PreprocessorDefinitions="_DEBUG"
|
||||||
|
MkTypLibCompatible="true"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
TargetEnvironment="1"
|
||||||
|
TypeLibraryName=".\Debug/dxwnd.tlb"
|
||||||
|
HeaderFileName=""
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AdditionalOptions="/IInclude"
|
||||||
|
Optimization="0"
|
||||||
|
AdditionalIncludeDirectories=".;../Include"
|
||||||
|
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;DXWND_EXPORTS"
|
||||||
|
MinimalRebuild="true"
|
||||||
|
ExceptionHandling="2"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="1"
|
||||||
|
PrecompiledHeaderFile=".\Debug/dxwnd.pch"
|
||||||
|
AssemblerListingLocation=".\Debug/"
|
||||||
|
ObjectFile=".\Debug/"
|
||||||
|
ProgramDataBaseFileName=".\Debug/"
|
||||||
|
WarningLevel="3"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
DebugInformationFormat="4"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
PreprocessorDefinitions="_DEBUG"
|
||||||
|
Culture="0"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
AdditionalDependencies="shlwapi.lib odbc32.lib odbccp32.lib"
|
||||||
|
OutputFile="../Debug/wing32.dll"
|
||||||
|
LinkIncremental="2"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
AdditionalLibraryDirectories=""
|
||||||
|
IgnoreAllDefaultLibraries="false"
|
||||||
|
IgnoreDefaultLibraryNames=""
|
||||||
|
ModuleDefinitionFile=".\wing32.def"
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
ProgramDatabaseFile=".\Debug/dxwnd.pdb"
|
||||||
|
RandomizedBaseAddress="1"
|
||||||
|
DataExecutionPrevention="0"
|
||||||
|
ImportLibrary=".\Debug/dxwnd.lib"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
OutputFile=".\Debug/dxwnd.bsc"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|Win32"
|
||||||
|
OutputDirectory=".\Release"
|
||||||
|
IntermediateDirectory=".\Release"
|
||||||
|
ConfigurationType="2"
|
||||||
|
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
|
||||||
|
UseOfMFC="0"
|
||||||
|
ATLMinimizesCRunTimeLibraryUsage="false"
|
||||||
|
CharacterSet="2"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
PreprocessorDefinitions="NDEBUG"
|
||||||
|
MkTypLibCompatible="true"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
TargetEnvironment="1"
|
||||||
|
TypeLibraryName=".\Release/dxwnd.tlb"
|
||||||
|
HeaderFileName=""
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="2"
|
||||||
|
InlineFunctionExpansion="1"
|
||||||
|
AdditionalIncludeDirectories="../Include"
|
||||||
|
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;DXWND_EXPORTS"
|
||||||
|
StringPooling="true"
|
||||||
|
ExceptionHandling="2"
|
||||||
|
RuntimeLibrary="0"
|
||||||
|
EnableFunctionLevelLinking="true"
|
||||||
|
OpenMP="true"
|
||||||
|
PrecompiledHeaderFile=".\Release/dxwnd.pch"
|
||||||
|
AssemblerListingLocation=".\Release/"
|
||||||
|
ObjectFile=".\Release/"
|
||||||
|
ProgramDataBaseFileName=".\Release/"
|
||||||
|
WarningLevel="3"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
PreprocessorDefinitions="NDEBUG"
|
||||||
|
Culture="1041"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
OutputFile="../Release/wing32.dll"
|
||||||
|
LinkIncremental="1"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
ModuleDefinitionFile=".\wing32.def"
|
||||||
|
ProgramDatabaseFile=".\Release/dxwnd.pdb"
|
||||||
|
RandomizedBaseAddress="1"
|
||||||
|
DataExecutionPrevention="0"
|
||||||
|
ImportLibrary=".\Release/dxwnd.lib"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
OutputFile=".\Release/dxwnd.bsc"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
</Configurations>
|
||||||
|
<References>
|
||||||
|
</References>
|
||||||
|
<Files>
|
||||||
|
<Filter
|
||||||
|
Name="Source Files"
|
||||||
|
Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
||||||
|
>
|
||||||
|
<File
|
||||||
|
RelativePath=".\wing32.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\init.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
<Filter
|
||||||
|
Name="Header Files"
|
||||||
|
Filter="h;hpp;hxx;hm;inl"
|
||||||
|
>
|
||||||
|
<File
|
||||||
|
RelativePath="..\Include\dxwnd.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\ini.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
<Filter
|
||||||
|
Name="Resource Files"
|
||||||
|
Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
|
||||||
|
>
|
||||||
|
</Filter>
|
||||||
|
</Files>
|
||||||
|
<Globals>
|
||||||
|
</Globals>
|
||||||
|
</VisualStudioProject>
|
BIN
wing/wing32.suo
BIN
wing/wing32.suo
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user