1
0
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:
gho tik 2017-02-02 11:50:00 -05:00 committed by Refael ACkermann
parent 4b8141b136
commit 13872ca16f
39 changed files with 1090 additions and 352 deletions

View File

@ -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 *);

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:5fc4cf8ef5a8514260d213b7d89caebe950a9dcfc43e948b25bb835c57e2df28
size 782848
oid sha256:f56c6024dad175adc0c6a62555e71669b86c0f56e010de59375d88049230b5e3
size 785920

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:0478367b7c87124f807b20c7a3f5e3c6337815e9f8d63619ae023702f0efd817
size 673792
oid sha256:0229b0055c3941f91b315ef934a7e335fdfc62799b6ef489883c3beecace2971
size 675840

View 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

View 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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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)
{
}

View File

@ -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
}

View File

@ -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;
}
}

View File

@ -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;

View File

@ -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);

View File

@ -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__);

Binary file not shown.

View File

@ -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];
}

View File

@ -8,3 +8,4 @@ EXPORTS
GetHookInfo @6
Inject @7
GetThreadStartAddress @8
GetFlagCaption @9

Binary file not shown.

View File

@ -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;
}

View File

@ -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)){

View File

@ -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",

View File

@ -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",

View File

@ -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
View 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
View 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.

View File

@ -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"
>

View File

@ -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);
}

View File

@ -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()
};

Binary file not shown.

77
proxy/wing32.cpp Normal file
View 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
View 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
View 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

Binary file not shown.

253
proxy/wing32.vcproj Normal file
View 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>

Binary file not shown.