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();
|
||||
void HookInit(TARGETMAP *, HWND);
|
||||
void ShowHint(int);
|
||||
LPCSTR GetFlagCaption(int, int);
|
||||
|
||||
char *GetDxWndPath();
|
||||
void *SetHook(void *, void *);
|
||||
|
@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:5fc4cf8ef5a8514260d213b7d89caebe950a9dcfc43e948b25bb835c57e2df28
|
||||
size 782848
|
||||
oid sha256:f56c6024dad175adc0c6a62555e71669b86c0f56e010de59375d88049230b5e3
|
||||
size 785920
|
||||
|
@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:0478367b7c87124f807b20c7a3f5e3c6337815e9f8d63619ae023702f0efd817
|
||||
size 673792
|
||||
oid sha256:0229b0055c3941f91b315ef934a7e335fdfc62799b6ef489883c3beecace2971
|
||||
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]
|
||||
posx=1165
|
||||
posy=618
|
||||
posx=0
|
||||
posy=472
|
||||
sizx=320
|
||||
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
|
||||
|
@ -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: 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 ...
|
||||
|
||||
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
|
||||
|
||||
void D3DTextureHighlight(D3DSURFACE_DESC Desc, D3DLOCKED_RECT LockedRect)
|
||||
@ -1016,7 +1079,3 @@ void D3DTextureHighlight(D3DSURFACE_DESC Desc, D3DLOCKED_RECT LockedRect)
|
||||
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;
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
char sMsg[81];
|
||||
@ -2316,6 +2350,15 @@ void FixSurfaceCaps(LPDDSURFACEDESC2 lpddsd, int dxversion)
|
||||
lpddsd->ddpfPixelFormat.dwFourCC = 0;
|
||||
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;
|
||||
}
|
||||
|
||||
@ -2335,8 +2378,6 @@ void FixSurfaceCaps(LPDDSURFACEDESC2 lpddsd, int dxversion)
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 3DDEVICE no TEXTURE: enforce PIXELFORMAT
|
||||
// v2.02.90: added for "Zoo Tycoon" textures
|
||||
// v2.03.48 - there are two situations
|
||||
@ -4550,7 +4591,7 @@ static HRESULT WINAPI extAddAttachedSurface(AddAttachedSurface_Type pAddAttached
|
||||
}
|
||||
//else if (IsBack) {
|
||||
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
|
||||
// is set in the game "Options" menu.
|
||||
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));
|
||||
return res;
|
||||
}
|
||||
@ -4644,33 +4719,18 @@ static HRESULT WINAPI extGetCapsS(int dxInterface, GetCapsS_Type pGetCapsS, LPDI
|
||||
while(TRUE){ // fake loop
|
||||
if (IsPrim) {
|
||||
IsFixed=TRUE;
|
||||
caps->dwCaps |= DDSD_Prim.ddsCaps.dwCaps;
|
||||
caps->dwCaps |= DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_FRONTBUFFER|DDSCAPS_VIDEOMEMORY|DDSCAPS_VISIBLE; // primary surfaces must be this way
|
||||
caps->dwCaps &= ~(DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN); // primary surfaces can't be this way
|
||||
if(caps->dwCaps & DDSCAPS_3DDEVICE) caps->dwCaps |= DDSCAPS_LOCALVIDMEM;
|
||||
caps->dwCaps = SetPrimaryCaps(caps->dwCaps);
|
||||
break;
|
||||
}
|
||||
|
||||
if (IsBack) {
|
||||
IsFixed=TRUE;
|
||||
// v2.03.11: added DDSCAPS_FLIP capability to backbuffer surface: "Ignition" checks for it before Flip-ping to primary
|
||||
caps->dwCaps |= (DDSCAPS_BACKBUFFER|DDSCAPS_VIDEOMEMORY|DDSCAPS_FLIP|DDSCAPS_LOCALVIDMEM); // you never know....
|
||||
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);
|
||||
caps->dwCaps = SetBackBufferCaps(caps->dwCaps);
|
||||
break;
|
||||
}
|
||||
|
||||
// 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) {
|
||||
DWORD dwCaps = dxwcdb.GetCaps(lpdds);
|
||||
// beware! the ZBUFFER surface could have never been registered!
|
||||
// in this case better keep the original capabilities (or adapt to the primary/backbuffer ones?)
|
||||
if(dwCaps) {
|
||||
IsFixed=TRUE;
|
||||
sLabel="(REG.ZBUFFER)";
|
||||
caps->dwCaps = dwCaps;
|
||||
}
|
||||
IsFixed=TRUE;
|
||||
caps->dwCaps = SetZBufferCaps(dxwcdb.GetCaps(lpdds));
|
||||
break;
|
||||
}
|
||||
break; // inconditional break;
|
||||
}
|
||||
@ -4738,36 +4798,22 @@ static HRESULT WINAPI extGetSurfaceDesc(int dxversion, GetSurfaceDesc_Type pGetS
|
||||
if (IsPrim) {
|
||||
IsFixed=TRUE;
|
||||
if (dxw.dwFlags1 & EMULATESURFACE) lpddsd->ddpfPixelFormat = dxw.VirtualPixelFormat;
|
||||
lpddsd->ddsCaps.dwCaps |= DDSD_Prim.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->ddsCaps.dwCaps = SetPrimaryCaps(lpddsd->ddsCaps.dwCaps);
|
||||
lpddsd->dwBackBufferCount=DDSD_Prim.dwBackBufferCount;
|
||||
lpddsd->dwHeight=dxw.GetScreenHeight();
|
||||
lpddsd->dwWidth=dxw.GetScreenWidth();
|
||||
break;
|
||||
}
|
||||
|
||||
if (IsBack) {
|
||||
IsFixed=TRUE;
|
||||
// flags that backbuffer surfaces must have set
|
||||
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;
|
||||
lpddsd->ddsCaps.dwCaps = SetBackBufferCaps(lpddsd->ddsCaps.dwCaps);
|
||||
break;
|
||||
}
|
||||
|
||||
// v2.03.82: fixed logic for ZBUFFER capabilities: "The Creed" may have two, in SYSTEMMEMORY or in VIDEOMEMORY ...
|
||||
if(IsZBuf) {
|
||||
DWORD dwCaps = dxwcdb.GetCaps(lpdds);
|
||||
if(dwCaps) {
|
||||
IsFixed=TRUE;
|
||||
sLabel="(REG.ZBUFFER)";
|
||||
lpddsd->ddsCaps.dwCaps = dwCaps;
|
||||
}
|
||||
if (IsZBuf) {
|
||||
IsFixed=TRUE;
|
||||
lpddsd->ddsCaps.dwCaps = SetZBufferCaps(dxwcdb.GetCaps(lpdds));
|
||||
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__);
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
//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);
|
||||
break;
|
||||
case TEXTURETRANSP:
|
||||
//TextureTransp(s);
|
||||
TextureTransp(s, dxversion);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -1031,6 +1031,18 @@ char *ExplainGUID(GUID FAR *lpguid)
|
||||
case 0x54D41080: sguid="IID_IDirectInputDevice8A"; break;
|
||||
case 0x54D41081: sguid="IID_IDirectInputDevice8W"; 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;
|
||||
}
|
||||
return sguid;
|
||||
|
121
dll/dxhook.cpp
121
dll/dxhook.cpp
@ -72,105 +72,6 @@ extern HANDLE hTraceMutex;
|
||||
|
||||
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()
|
||||
{
|
||||
static BOOL DoOnce = TRUE;
|
||||
@ -191,7 +92,7 @@ char *GetDxWndPath()
|
||||
return sFolderPath;
|
||||
}
|
||||
|
||||
static void OutTraceHeader(FILE *fp)
|
||||
static void OutTraceHeader(FILE *fp, DWORD tflags)
|
||||
{
|
||||
SYSTEMTIME Time;
|
||||
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",
|
||||
Version, Time.wDay, Time.wMonth, Time.wYear, Time.wHour, Time.wMinute, Time.wSecond);
|
||||
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.dwFlags2; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", Flag2Names[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.dwFlags4; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", Flag4Names[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.dwFlags6; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", Flag6Names[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.dwFlags8; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", Flag8Names[i]);
|
||||
for(i=0, dword=dxw.dwTFlags; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", TFlagNames[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 ", GetFlagCaption(1,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 ", GetFlagCaption(3,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 ", GetFlagCaption(5,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 ", GetFlagCaption(7,i));
|
||||
for(i=0, dword=tflags ; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", GetFlagCaption(8,i));
|
||||
fprintf(fp, "***\n");
|
||||
}
|
||||
|
||||
@ -259,7 +160,7 @@ void OutTrace(const char *format, ...)
|
||||
if (fp==NULL)
|
||||
return; // last chance: do not log...
|
||||
else
|
||||
OutTraceHeader(fp);
|
||||
OutTraceHeader(fp, tFlags);
|
||||
}
|
||||
va_start(al, format);
|
||||
//vfprintf(fp, format, al);
|
||||
|
@ -462,6 +462,11 @@ void dxwCore::SetClipCursor()
|
||||
Rect.right+=UpLeftCorner.x;
|
||||
Rect.top+=UpLeftCorner.y;
|
||||
Rect.bottom+=UpLeftCorner.y;
|
||||
|
||||
// if(0) {
|
||||
// if(GetMenu(hWnd)) Rect.top -= (*pGetSystemMetrics)(SM_CYMENU);
|
||||
// }
|
||||
|
||||
(*pClipCursor)(NULL);
|
||||
if(!(*pClipCursor)(&Rect))
|
||||
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"
|
||||
|
||||
#define VERSION "2.04.09.fx1"
|
||||
#define VERSION "2.04.10"
|
||||
|
||||
#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
|
||||
Inject @7
|
||||
GetThreadStartAddress @8
|
||||
GetFlagCaption @9
|
||||
|
Binary file not shown.
229
dll/hd3d.cpp
229
dll/hd3d.cpp
@ -17,6 +17,7 @@
|
||||
|
||||
#define HOOKD3D10ANDLATER 1
|
||||
#define TRACEALLMETHODS 1
|
||||
//#define DXWNDDISABLEDHOOKS 1
|
||||
|
||||
extern void D3D9TextureHandling(void *, int);
|
||||
extern void D3D8TextureHandling(void *, int);
|
||||
@ -316,7 +317,6 @@ static HookEntryEx_Type d3d8Hooks[]={
|
||||
{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator
|
||||
};
|
||||
|
||||
|
||||
static HookEntryEx_Type d3d9Hooks[]={
|
||||
{HOOK_HOT_CANDIDATE, 0, "Direct3DCreate9", (FARPROC)NULL, (FARPROC *)&pDirect3DCreate9, (FARPROC)extDirect3DCreate9},
|
||||
{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 + 136), extBeginScene8, (void **)&pBeginScene8, "BeginScene(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 + 204), extGetRenderState8, (void **)&pGetRenderState8, "GetRenderState(D8)");
|
||||
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 +188), extSetViewport, (void **)&pSetViewport, "SetViewport(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 + 232), extGetRenderState9, (void **)&pGetRenderState9, "GetRenderState(D9)");
|
||||
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)");
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
if(TRUE) return FALSE;
|
||||
@ -611,21 +736,6 @@ void* WINAPI extDirect3DCreate8(UINT sdkversion)
|
||||
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 eb[256];
|
||||
@ -1373,6 +1483,10 @@ static HRESULT WINAPI extSetRenderState(SetRenderState_Type pSetRenderState, voi
|
||||
OutTraceD3D("SetRenderState: FIXED State=FOGENABLE Value=%x->FALSE\n", Value);
|
||||
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);
|
||||
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);
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
ULONG ActualRef;
|
||||
@ -1789,7 +1833,7 @@ HRESULT WINAPI extGetDirect3D8(void *lpdd3dd, void **ppD3D8)
|
||||
OutTraceE("Device::GetDirect3D ERROR: d3dd=%x ret=%x\n", lpdd3dd, res);
|
||||
else{
|
||||
OutTraceD3D("Device::GetDirect3D: d3dd=%x d3d=%x\n", lpdd3dd, *ppD3D8);
|
||||
HookDirect3D8(*ppD3D8);
|
||||
// HookDirect3D8(*ppD3D8);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
@ -1804,7 +1848,8 @@ HRESULT WINAPI extGetDirect3D9(void *lpdd3dd, void **ppD3D9)
|
||||
else{
|
||||
OutTraceD3D("Device::GetDirect3D: d3dd=%x d3d=%x\n", lpdd3dd, *ppD3D9);
|
||||
// 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;
|
||||
}
|
||||
@ -1880,6 +1925,8 @@ ULONG WINAPI extBeginScene8(void *lpdd3dd)
|
||||
OutTraceB("Device::BeginScene(8): d3dd=%x\n", lpdd3dd);
|
||||
res=(*pBeginScene8)(lpdd3dd);
|
||||
if (res) OutTraceE("Device::BeginScene(8) ERROR: err=%x\n", res);
|
||||
|
||||
//if(dxw.dwFlags5 & TEXTURETRANSP) (*pSetRenderState8)(lpdd3dd, D3DRS_ALPHABLENDENABLE, TRUE);
|
||||
return res;
|
||||
}
|
||||
|
||||
@ -1889,6 +1936,8 @@ ULONG WINAPI extBeginScene9(void *lpdd3dd)
|
||||
OutTraceB("Device::BeginScene(9): d3dd=%x\n", lpdd3dd);
|
||||
res=(*pBeginScene9)(lpdd3dd);
|
||||
if (res) OutTraceE("Device::BeginScene(9) ERROR: err=%x\n", res);
|
||||
|
||||
//if(dxw.dwFlags5 & TEXTURETRANSP) (*pSetRenderState9)(lpdd3dd, D3DRS_ALPHABLENDENABLE, TRUE);
|
||||
return res;
|
||||
}
|
||||
|
||||
|
@ -1175,6 +1175,10 @@ HRESULT WINAPI extSetRenderState(int version, SetRenderState3_Type pSetRenderSta
|
||||
OutTraceD3D("SetRenderState: FIXED State=FOGENABLE Value=%x->FALSE\n", Value);
|
||||
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 !!!
|
||||
if((State==D3DRENDERSTATE_ZWRITEENABLE) && (Value==TRUE) && (dxw.dwFlags8 & DYNAMICZCLEAN)){
|
||||
|
@ -47,15 +47,20 @@ void D3D8TextureHandling(void *arg, int Level)
|
||||
return;
|
||||
}
|
||||
pSurfaceLevel->Release();
|
||||
OutTraceB("D3D8TextureHandling: level=%d type=%x usage=%x\n", Level, Desc.Type, Desc.Usage);
|
||||
switch(Desc.Type){
|
||||
case D3DRTYPE_SURFACE:
|
||||
case D3DRTYPE_TEXTURE:
|
||||
break;
|
||||
default:
|
||||
OutTraceB("D3D88TextureHandling: SKIP type=%x\n", Desc.Type);
|
||||
return;
|
||||
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);
|
||||
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",
|
||||
|
@ -39,15 +39,20 @@ void D3D9TextureHandling(void *arg, int Level)
|
||||
OutTraceE("Texture::GetLevelDesc ERROR: res=%d(%s)\n", res, ExplainDDError(res));
|
||||
return;
|
||||
}
|
||||
OutTraceB("D3D9TextureHandling: level=%d type=%x usage=%x\n", Level, Desc.Type, Desc.Usage);
|
||||
switch(Desc.Type){
|
||||
case D3DRTYPE_SURFACE:
|
||||
case D3DRTYPE_TEXTURE:
|
||||
break;
|
||||
default:
|
||||
OutTraceB("D3D9TextureHandling: SKIP type=%x usage=%x\n", Desc.Type);
|
||||
return;
|
||||
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);
|
||||
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",
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
if(dxw.IsRealDesktop(hwnd)){
|
||||
hwnd = dxw.GethWnd();
|
||||
}
|
||||
|
||||
RECT ScaledRect;
|
||||
if(dxw.IsFullScreen()) {
|
||||
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 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",
|
||||
hInstance,
|
||||
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"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\ViewFlagsDialog.cpp"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Header Files"
|
||||
@ -640,6 +644,10 @@
|
||||
RelativePath=".\TimeSliderDialog.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\ViewFlagsDialog.h"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Resource Files"
|
||||
@ -742,22 +750,22 @@
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<File
|
||||
RelativePath=".\res\alt-ctrl-shift.png"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\alt-ctrl-shift.png"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\alt.png"
|
||||
RelativePath=".\res\alt-ctrl-shift.png"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\res\alt.png"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\alt.png"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\resource"
|
||||
>
|
||||
|
@ -17,6 +17,7 @@
|
||||
#include "PaletteDialog.h"
|
||||
#include "TimeSliderDialog.h"
|
||||
#include "ShimsDialog.h"
|
||||
#include "ViewFlagsDialog.h"
|
||||
#include "CGlobalSettings.h"
|
||||
|
||||
#ifdef _DEBUG
|
||||
@ -153,6 +154,7 @@ BEGIN_MESSAGE_MAP(CDxwndhostView, CListView)
|
||||
ON_COMMAND(ID_MOVE_UP, OnMoveUp)
|
||||
ON_COMMAND(ID_MOVE_DOWN, OnMoveDown)
|
||||
ON_COMMAND(ID_MOVE_BOTTOM, OnMoveBottom)
|
||||
ON_COMMAND(ID_VIEW_FLAGS, OnViewFlags)
|
||||
ON_WM_RBUTTONDOWN()
|
||||
ON_WM_HOTKEY()
|
||||
ON_WM_DROPFILES()
|
||||
@ -293,6 +295,7 @@ void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg)
|
||||
case 1: t->flags5 |= TEXTUREHIGHLIGHT; break;
|
||||
case 2: t->flags5 |= TEXTUREDUMP; break;
|
||||
case 3: t->flags5 |= TEXTUREHACK; break;
|
||||
case 4: t->flags5 |= TEXTURETRANSP; break;
|
||||
}
|
||||
|
||||
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 & TEXTUREDUMP) dlg->m_TextureHandling = 2;
|
||||
if(t->flags5 & TEXTUREHACK) dlg->m_TextureHandling = 3;
|
||||
if(t->flags5 & TEXTURETRANSP) dlg->m_TextureHandling = 4;
|
||||
|
||||
dlg->m_SonProcessMode = 0;
|
||||
if(t->flags4 & SUPPRESSCHILD) dlg->m_SonProcessMode = 1;
|
||||
@ -2527,6 +2531,26 @@ void CDxwndhostView::OnViewShims()
|
||||
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()
|
||||
{
|
||||
CDesktopDialog *pDlg = new CDesktopDialog();
|
||||
@ -2680,6 +2704,9 @@ void CDxwndhostView::OnRButtonDown(UINT nFlags, CPoint point)
|
||||
case ID_MOVE_BOTTOM:
|
||||
OnMoveBottom();
|
||||
break;
|
||||
case ID_VIEW_FLAGS:
|
||||
OnViewFlags();
|
||||
break;
|
||||
}
|
||||
CListView::OnRButtonDown(nFlags, point);
|
||||
}
|
||||
|
@ -116,6 +116,7 @@ protected:
|
||||
afx_msg void OnMoveDown();
|
||||
afx_msg void OnMoveBottom();
|
||||
afx_msg void OnDropFiles(HDROP hDropInfo);
|
||||
afx_msg void OnViewFlags();
|
||||
//}}AFX_MSG
|
||||
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