mirror of
https://github.com/DxWnd/DxWnd.reloaded
synced 2024-12-30 09:25:35 +01:00
v2_02_56_src
Former-commit-id: 16e07a99fe0abe0e86093aae9c3f5d93ab530aa2
This commit is contained in:
parent
7adb204c0f
commit
0d1d1fc6b8
@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:204b88153c343d4bd1b32eadbb4f2c0267ad6f3147cf813cf591084e27893061
|
oid sha256:0ab0518cd95cd490131b9ba49cc94686af2bdc129622f112e8499bc5c386cc42
|
||||||
size 450048
|
size 458240
|
||||||
|
961
build/dxwnd.ini
961
build/dxwnd.ini
File diff suppressed because it is too large
Load Diff
26
build/exports/Affari Tuoi.dxw
Normal file
26
build/exports/Affari Tuoi.dxw
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
[target]
|
||||||
|
title0=Affari Tuoi
|
||||||
|
path0=D:\Games\affari tuoi\Affari Tuoi\DOND.exe
|
||||||
|
module0=
|
||||||
|
opengllib0=
|
||||||
|
ver0=9
|
||||||
|
coord0=0
|
||||||
|
flag0=536870914
|
||||||
|
flagg0=1207959568
|
||||||
|
flagh0=16
|
||||||
|
flagi0=4
|
||||||
|
tflag0=0
|
||||||
|
initx0=0
|
||||||
|
inity0=0
|
||||||
|
minx0=0
|
||||||
|
miny0=0
|
||||||
|
maxx0=0
|
||||||
|
maxy0=0
|
||||||
|
posx0=50
|
||||||
|
posy0=50
|
||||||
|
sizx0=800
|
||||||
|
sizy0=600
|
||||||
|
maxfps0=0
|
||||||
|
initts0=0
|
||||||
|
winver0=0
|
||||||
|
maxres0=4
|
26
build/exports/Agassi Tennis Generation.dxw
Normal file
26
build/exports/Agassi Tennis Generation.dxw
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
[target]
|
||||||
|
title0=Agassi Tennis Generation
|
||||||
|
path0=D:\Games\Agassi Tennis Generation\AGASSI.exe
|
||||||
|
module0=
|
||||||
|
opengllib0=
|
||||||
|
ver0=0
|
||||||
|
coord0=0
|
||||||
|
flag0=671096866
|
||||||
|
flagg0=1207959552
|
||||||
|
flagh0=65556
|
||||||
|
flagi0=4
|
||||||
|
tflag0=6147
|
||||||
|
initx0=0
|
||||||
|
inity0=0
|
||||||
|
minx0=0
|
||||||
|
miny0=0
|
||||||
|
maxx0=0
|
||||||
|
maxy0=0
|
||||||
|
posx0=50
|
||||||
|
posy0=50
|
||||||
|
sizx0=800
|
||||||
|
sizy0=600
|
||||||
|
maxfps0=0
|
||||||
|
initts0=0
|
||||||
|
winver0=0
|
||||||
|
maxres0=-1
|
26
build/exports/LEGO Star Wars.dxw
Normal file
26
build/exports/LEGO Star Wars.dxw
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
[target]
|
||||||
|
title0=LEGO Star Wars
|
||||||
|
path0=D:\Games\LEGO Star Wars Game\LegoStarwars.crack.exe
|
||||||
|
module0=
|
||||||
|
opengllib0=
|
||||||
|
ver0=0
|
||||||
|
coord0=0
|
||||||
|
flag0=134217762
|
||||||
|
flagg0=1207959552
|
||||||
|
flagh0=20
|
||||||
|
flagi0=4
|
||||||
|
tflag0=64
|
||||||
|
initx0=0
|
||||||
|
inity0=0
|
||||||
|
minx0=0
|
||||||
|
miny0=0
|
||||||
|
maxx0=0
|
||||||
|
maxy0=0
|
||||||
|
posx0=50
|
||||||
|
posy0=50
|
||||||
|
sizx0=800
|
||||||
|
sizy0=600
|
||||||
|
maxfps0=0
|
||||||
|
initts0=0
|
||||||
|
winver0=0
|
||||||
|
maxres0=-1
|
26
build/exports/Legacy of Kain Soul Reaver (GOG).dxw
Normal file
26
build/exports/Legacy of Kain Soul Reaver (GOG).dxw
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
[target]
|
||||||
|
title0=Legacy of Kain Soul Reaver (GOG)
|
||||||
|
path0=D:\Games\Legacy of Kain Soul Reaver\kain2.exe
|
||||||
|
module0=
|
||||||
|
opengllib0=
|
||||||
|
ver0=7
|
||||||
|
coord0=0
|
||||||
|
flag0=671088672
|
||||||
|
flagg0=134217728
|
||||||
|
flagh0=20
|
||||||
|
flagi0=1028
|
||||||
|
tflag0=0
|
||||||
|
initx0=0
|
||||||
|
inity0=0
|
||||||
|
minx0=0
|
||||||
|
miny0=0
|
||||||
|
maxx0=0
|
||||||
|
maxy0=0
|
||||||
|
posx0=50
|
||||||
|
posy0=50
|
||||||
|
sizx0=800
|
||||||
|
sizy0=600
|
||||||
|
maxfps0=0
|
||||||
|
initts0=0
|
||||||
|
winver0=0
|
||||||
|
maxres0=-1
|
26
build/exports/Syberia 2.dxw
Normal file
26
build/exports/Syberia 2.dxw
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
[target]
|
||||||
|
title0=Syberia 2
|
||||||
|
path0=D:\Games\Syberia 2\Syberia2.exe
|
||||||
|
module0=
|
||||||
|
opengllib0=
|
||||||
|
ver0=0
|
||||||
|
coord0=0
|
||||||
|
flag0=134234147
|
||||||
|
flagg0=1207959552
|
||||||
|
flagh0=20
|
||||||
|
flagi0=4
|
||||||
|
tflag0=64
|
||||||
|
initx0=0
|
||||||
|
inity0=0
|
||||||
|
minx0=0
|
||||||
|
miny0=0
|
||||||
|
maxx0=0
|
||||||
|
maxy0=0
|
||||||
|
posx0=50
|
||||||
|
posy0=50
|
||||||
|
sizx0=800
|
||||||
|
sizy0=600
|
||||||
|
maxfps0=0
|
||||||
|
initts0=0
|
||||||
|
winver0=0
|
||||||
|
maxres0=-1
|
26
build/exports/Syberia.dxw
Normal file
26
build/exports/Syberia.dxw
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
[target]
|
||||||
|
title0=Syberia
|
||||||
|
path0=D:\Games\Syberia\Syberia.exe
|
||||||
|
module0=Syberia ck2_3d ck2
|
||||||
|
opengllib0=
|
||||||
|
ver0=0
|
||||||
|
coord0=2
|
||||||
|
flag0=1610694673
|
||||||
|
flagg0=1207959576
|
||||||
|
flagh0=20
|
||||||
|
flagi0=4
|
||||||
|
tflag0=6418
|
||||||
|
initx0=300
|
||||||
|
inity0=300
|
||||||
|
minx0=0
|
||||||
|
miny0=0
|
||||||
|
maxx0=800
|
||||||
|
maxy0=600
|
||||||
|
posx0=50
|
||||||
|
posy0=50
|
||||||
|
sizx0=800
|
||||||
|
sizy0=600
|
||||||
|
maxfps0=0
|
||||||
|
initts0=0
|
||||||
|
winver0=0
|
||||||
|
maxres0=-1
|
26
build/exports/Thief the Dark Project GOLD (GOG).dxw
Normal file
26
build/exports/Thief the Dark Project GOLD (GOG).dxw
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
[target]
|
||||||
|
title0=Thief the Dark Project GOLD (GOG)
|
||||||
|
path0=D:\Games\Thief Gold (GOG)\THIEF.EXE
|
||||||
|
module0=
|
||||||
|
opengllib0=
|
||||||
|
ver0=0
|
||||||
|
coord0=0
|
||||||
|
flag0=256
|
||||||
|
flagg0=1207959568
|
||||||
|
flagh0=20
|
||||||
|
flagi0=4
|
||||||
|
tflag0=0
|
||||||
|
initx0=0
|
||||||
|
inity0=0
|
||||||
|
minx0=0
|
||||||
|
miny0=0
|
||||||
|
maxx0=0
|
||||||
|
maxy0=0
|
||||||
|
posx0=50
|
||||||
|
posy0=50
|
||||||
|
sizx0=800
|
||||||
|
sizy0=600
|
||||||
|
maxfps0=0
|
||||||
|
initts0=0
|
||||||
|
winver0=0
|
||||||
|
maxres0=-1
|
26
build/exports/Thief the Dark Project GOLD.dxw
Normal file
26
build/exports/Thief the Dark Project GOLD.dxw
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
[target]
|
||||||
|
title0=Thief the Dark Project GOLD
|
||||||
|
path0=D:\Games\Thief Gold\THIEF.EXE
|
||||||
|
module0=
|
||||||
|
opengllib0=
|
||||||
|
ver0=7
|
||||||
|
coord0=0
|
||||||
|
flag0=272
|
||||||
|
flagg0=440401936
|
||||||
|
flagh0=131612
|
||||||
|
flagi0=4
|
||||||
|
tflag0=9
|
||||||
|
initx0=0
|
||||||
|
inity0=0
|
||||||
|
minx0=0
|
||||||
|
miny0=0
|
||||||
|
maxx0=0
|
||||||
|
maxy0=0
|
||||||
|
posx0=50
|
||||||
|
posy0=50
|
||||||
|
sizx0=800
|
||||||
|
sizy0=600
|
||||||
|
maxfps0=0
|
||||||
|
initts0=0
|
||||||
|
winver0=1
|
||||||
|
maxres0=-1
|
26
build/exports/Total Immersion Racing.dxw
Normal file
26
build/exports/Total Immersion Racing.dxw
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
[target]
|
||||||
|
title0=Total Immersion Racing
|
||||||
|
path0=D:\Games\TIR\game\Tir.exe
|
||||||
|
module0=
|
||||||
|
opengllib0=
|
||||||
|
ver0=8
|
||||||
|
coord0=0
|
||||||
|
flag0=134217762
|
||||||
|
flagg0=1207959552
|
||||||
|
flagh0=20
|
||||||
|
flagi0=1028
|
||||||
|
tflag0=6147
|
||||||
|
initx0=0
|
||||||
|
inity0=0
|
||||||
|
minx0=0
|
||||||
|
miny0=0
|
||||||
|
maxx0=0
|
||||||
|
maxy0=0
|
||||||
|
posx0=50
|
||||||
|
posy0=50
|
||||||
|
sizx0=800
|
||||||
|
sizy0=600
|
||||||
|
maxfps0=0
|
||||||
|
initts0=0
|
||||||
|
winver0=0
|
||||||
|
maxres0=-1
|
@ -376,5 +376,14 @@ eliminated "Disable HAL support", no longer necessary
|
|||||||
some incomplete work on gdi game handling
|
some incomplete work on gdi game handling
|
||||||
added preliminary, incomplete (not working) glide handling
|
added preliminary, incomplete (not working) glide handling
|
||||||
|
|
||||||
v2.02.54
|
v2.02.55
|
||||||
added "Hide desktop background" video option
|
added "Hide desktop background" video option
|
||||||
|
|
||||||
|
v2.02.56
|
||||||
|
hooked RegisterClassA API (useless so far...)
|
||||||
|
fixed bug in SendMessageW hooking: caused truncated text in window titles and form captions
|
||||||
|
fixed several d3d1-7 hooks: prevented some d3d games to properly work, i.e. "Thief the Dark Project"
|
||||||
|
fixed d3d GetDisplayMode to return virtual desktop size - fixed "Affari Tuoi", an italian game.
|
||||||
|
fixed some log messages
|
||||||
|
|
||||||
|
|
||||||
|
@ -80,6 +80,7 @@ HRESULT WINAPI extGetPalette(LPDIRECTDRAWSURFACE, LPDIRECTDRAWPALETTE *);
|
|||||||
HRESULT WINAPI extGetPixelFormat(LPDIRECTDRAWSURFACE, LPDDPIXELFORMAT);
|
HRESULT WINAPI extGetPixelFormat(LPDIRECTDRAWSURFACE, LPDDPIXELFORMAT);
|
||||||
HRESULT WINAPI extGetSurfaceDesc1(LPDIRECTDRAWSURFACE lpdds, LPDDSURFACEDESC lpddsd);
|
HRESULT WINAPI extGetSurfaceDesc1(LPDIRECTDRAWSURFACE lpdds, LPDDSURFACEDESC lpddsd);
|
||||||
HRESULT WINAPI extGetSurfaceDesc2(LPDIRECTDRAWSURFACE2 lpdds, LPDDSURFACEDESC2 lpddsd);
|
HRESULT WINAPI extGetSurfaceDesc2(LPDIRECTDRAWSURFACE2 lpdds, LPDDSURFACEDESC2 lpddsd);
|
||||||
|
HRESULT WINAPI extGetSurfaceDesc7(LPDIRECTDRAWSURFACE2 lpdds, LPDDSURFACEDESC2 lpddsd);
|
||||||
// STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, LPDDSURFACEDESC2) PURE;
|
// STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, LPDDSURFACEDESC2) PURE;
|
||||||
HRESULT WINAPI extLock(LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, DWORD, HANDLE);
|
HRESULT WINAPI extLock(LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, DWORD, HANDLE);
|
||||||
HRESULT WINAPI extLockDir(LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, DWORD, HANDLE);
|
HRESULT WINAPI extLockDir(LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, DWORD, HANDLE);
|
||||||
@ -189,6 +190,8 @@ GetPalette_Type pGetPalette;
|
|||||||
GetPixelFormat_Type pGetPixelFormat;
|
GetPixelFormat_Type pGetPixelFormat;
|
||||||
GetSurfaceDesc_Type pGetSurfaceDesc1;
|
GetSurfaceDesc_Type pGetSurfaceDesc1;
|
||||||
GetSurfaceDesc2_Type pGetSurfaceDesc4;
|
GetSurfaceDesc2_Type pGetSurfaceDesc4;
|
||||||
|
GetSurfaceDesc2_Type pGetSurfaceDesc7;
|
||||||
|
|
||||||
//Initialize
|
//Initialize
|
||||||
IsLost_Type pIsLost;
|
IsLost_Type pIsLost;
|
||||||
Lock_Type pLock;
|
Lock_Type pLock;
|
||||||
@ -424,17 +427,30 @@ static void DescribeSurface(LPDIRECTDRAWSURFACE lpdds, int dxversion, char *labe
|
|||||||
int dwSize = (dxversion<4)?sizeof(DDSURFACEDESC):sizeof(DDSURFACEDESC2);
|
int dwSize = (dxversion<4)?sizeof(DDSURFACEDESC):sizeof(DDSURFACEDESC2);
|
||||||
memset(&ddsd, 0, dwSize);
|
memset(&ddsd, 0, dwSize);
|
||||||
ddsd.dwSize = dwSize;
|
ddsd.dwSize = dwSize;
|
||||||
if(dxversion<4){
|
switch (dxversion){
|
||||||
|
case 0:
|
||||||
|
case 1:
|
||||||
|
case 2:
|
||||||
|
case 3:
|
||||||
if (pGetSurfaceDesc1)
|
if (pGetSurfaceDesc1)
|
||||||
res=(*pGetSurfaceDesc1)(lpdds, (LPDDSURFACEDESC)&ddsd);
|
res=(*pGetSurfaceDesc1)(lpdds, (LPDDSURFACEDESC)&ddsd);
|
||||||
else
|
else
|
||||||
res=lpdds->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd);
|
res=lpdds->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd);
|
||||||
}
|
break;
|
||||||
else {
|
case 4:
|
||||||
|
case 5:
|
||||||
|
case 6:
|
||||||
if (pGetSurfaceDesc4)
|
if (pGetSurfaceDesc4)
|
||||||
res=(*pGetSurfaceDesc4)((LPDIRECTDRAWSURFACE2)lpdds, &ddsd);
|
res=(*pGetSurfaceDesc4)((LPDIRECTDRAWSURFACE2)lpdds, &ddsd);
|
||||||
else
|
else
|
||||||
res=lpdds->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd);
|
res=lpdds->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd);
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
if (pGetSurfaceDesc7)
|
||||||
|
res=(*pGetSurfaceDesc7)((LPDIRECTDRAWSURFACE2)lpdds, &ddsd);
|
||||||
|
else
|
||||||
|
res=lpdds->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
if(res)return;
|
if(res)return;
|
||||||
OutTrace("Surface %s: ddsd=%x dxversion=%d ", label, lpdds, dxversion);
|
OutTrace("Surface %s: ddsd=%x dxversion=%d ", label, lpdds, dxversion);
|
||||||
@ -1071,9 +1087,12 @@ static void HookDDSurfacePrim(LPDIRECTDRAWSURFACE *lplpdds, int dxversion)
|
|||||||
if (dxversion < 4) {
|
if (dxversion < 4) {
|
||||||
SetHook((void *)(**(DWORD **)lplpdds + 88), extGetSurfaceDesc1, (void **)&pGetSurfaceDesc1, "GetSurfaceDesc(S1)");
|
SetHook((void *)(**(DWORD **)lplpdds + 88), extGetSurfaceDesc1, (void **)&pGetSurfaceDesc1, "GetSurfaceDesc(S1)");
|
||||||
}
|
}
|
||||||
else {
|
if((dxversion >= 4) && (dxversion < 7)) {
|
||||||
SetHook((void *)(**(DWORD **)lplpdds + 88), extGetSurfaceDesc2, (void **)&pGetSurfaceDesc4, "GetSurfaceDesc(S4)");
|
SetHook((void *)(**(DWORD **)lplpdds + 88), extGetSurfaceDesc2, (void **)&pGetSurfaceDesc4, "GetSurfaceDesc(S4)");
|
||||||
}
|
}
|
||||||
|
if(dxversion == 7) {
|
||||||
|
SetHook((void *)(**(DWORD **)lplpdds + 88), extGetSurfaceDesc7, (void **)&pGetSurfaceDesc7, "GetSurfaceDesc(S7)");
|
||||||
|
}
|
||||||
// IDirectDrawSurface::SetClipper
|
// IDirectDrawSurface::SetClipper
|
||||||
SetHook((void *)(**(DWORD **)lplpdds + 112), extSetClipper, (void **)&pSetClipper, "SetClipper(S)");
|
SetHook((void *)(**(DWORD **)lplpdds + 112), extSetClipper, (void **)&pSetClipper, "SetClipper(S)");
|
||||||
// IDirectDrawSurface::SetColorKey
|
// IDirectDrawSurface::SetColorKey
|
||||||
@ -1545,10 +1564,10 @@ HRESULT WINAPI extQueryInterfaceD(void *lpdd, REFIID riid, LPVOID *obp)
|
|||||||
dwLocalD3DVersion = 1;
|
dwLocalD3DVersion = 1;
|
||||||
break;
|
break;
|
||||||
case 0x6aae1ec1: //Direct3D2
|
case 0x6aae1ec1: //Direct3D2
|
||||||
dwLocalD3DVersion = 5;
|
dwLocalD3DVersion = 2;
|
||||||
break;
|
break;
|
||||||
case 0xbb223240: //Direct3D3
|
case 0xbb223240: //Direct3D3
|
||||||
dwLocalD3DVersion = 6;
|
dwLocalD3DVersion = 3;
|
||||||
break;
|
break;
|
||||||
case 0xf5049e77: //Direct3D7
|
case 0xf5049e77: //Direct3D7
|
||||||
dwLocalD3DVersion = 7;
|
dwLocalD3DVersion = 7;
|
||||||
@ -1582,8 +1601,8 @@ HRESULT WINAPI extQueryInterfaceD(void *lpdd, REFIID riid, LPVOID *obp)
|
|||||||
extern void HookDirect3DSession(LPDIRECTDRAW *, int);
|
extern void HookDirect3DSession(LPDIRECTDRAW *, int);
|
||||||
switch (dwLocalD3DVersion){
|
switch (dwLocalD3DVersion){
|
||||||
case 1:
|
case 1:
|
||||||
case 5:
|
case 2:
|
||||||
case 6:
|
case 3:
|
||||||
case 7:
|
case 7:
|
||||||
HookDirect3DSession((LPDIRECTDRAW *)obp, dwLocalD3DVersion);
|
HookDirect3DSession((LPDIRECTDRAW *)obp, dwLocalD3DVersion);
|
||||||
break;
|
break;
|
||||||
@ -1799,7 +1818,7 @@ HRESULT WINAPI extSetDisplayMode1(LPDIRECTDRAW lpdd,
|
|||||||
|
|
||||||
HRESULT WINAPI extGetDisplayMode(LPDIRECTDRAW lpdd, LPDDSURFACEDESC lpddsd)
|
HRESULT WINAPI extGetDisplayMode(LPDIRECTDRAW lpdd, LPDDSURFACEDESC lpddsd)
|
||||||
{
|
{
|
||||||
OutTraceDDRAW("GetDisplayMode: lpdd=%x lpddsd=%s\n", lpdd, lpddsd);
|
OutTraceDDRAW("GetDisplayMode: lpdd=%x lpddsd=%x\n", lpdd, lpddsd);
|
||||||
|
|
||||||
(*pGetDisplayMode)(lpdd, lpddsd);
|
(*pGetDisplayMode)(lpdd, lpddsd);
|
||||||
if(dxw.dwFlags1 & EMULATESURFACE) {
|
if(dxw.dwFlags1 & EMULATESURFACE) {
|
||||||
@ -4391,6 +4410,25 @@ HRESULT WINAPI extGetSurfaceDesc2(LPDIRECTDRAWSURFACE2 lpdds, LPDDSURFACEDESC2 l
|
|||||||
return DDERR_INVALIDOBJECT;
|
return DDERR_INVALIDOBJECT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HRESULT WINAPI extGetSurfaceDesc7(LPDIRECTDRAWSURFACE2 lpdds, LPDDSURFACEDESC2 lpddsd)
|
||||||
|
{
|
||||||
|
if (!lpddsd->dwSize) lpddsd->dwSize = sizeof(DDSURFACEDESC2); // enforce correct dwSize value
|
||||||
|
switch(lpddsd->dwSize){
|
||||||
|
case sizeof(DDSURFACEDESC):
|
||||||
|
if (pGetSurfaceDesc1) return extGetSurfaceDesc(pGetSurfaceDesc1, (LPDIRECTDRAWSURFACE)lpdds, (LPDDSURFACEDESC)lpddsd);
|
||||||
|
break;
|
||||||
|
case sizeof(DDSURFACEDESC2):
|
||||||
|
if (pGetSurfaceDesc7) return extGetSurfaceDesc((GetSurfaceDesc_Type)pGetSurfaceDesc7, (LPDIRECTDRAWSURFACE)lpdds, (LPDDSURFACEDESC)lpddsd);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
OutTraceDW("GetSurfaceDesc: ASSERT - bad dwSize=%d lpdds=%x at %d\n", lpddsd->dwSize, lpdds, __LINE__);
|
||||||
|
return DDERR_INVALIDOBJECT;
|
||||||
|
}
|
||||||
|
OutTraceDW("GetSurfaceDesc: ASSERT - missing hook lpdds=%x dwSize=%d(%s) at %d\n",
|
||||||
|
lpdds, lpddsd->dwSize, lpddsd->dwSize==sizeof(DDSURFACEDESC)?"DDSURFACEDESC":"DDSURFACEDESC2", __LINE__);
|
||||||
|
return DDERR_INVALIDOBJECT;
|
||||||
|
}
|
||||||
|
|
||||||
HRESULT WINAPI extReleaseP(LPDIRECTDRAWPALETTE lpddPalette)
|
HRESULT WINAPI extReleaseP(LPDIRECTDRAWPALETTE lpddPalette)
|
||||||
{
|
{
|
||||||
ULONG ref;
|
ULONG ref;
|
||||||
@ -4479,10 +4517,10 @@ HRESULT WINAPI extDDGetGammaRamp(LPDIRECTDRAWSURFACE lpdds, DWORD dwFlags, LPDDG
|
|||||||
HRESULT WINAPI extDDSetGammaRamp(LPDIRECTDRAWSURFACE lpdds, DWORD dwFlags, LPDDGAMMARAMP lpgr)
|
HRESULT WINAPI extDDSetGammaRamp(LPDIRECTDRAWSURFACE lpdds, DWORD dwFlags, LPDDGAMMARAMP lpgr)
|
||||||
{
|
{
|
||||||
HRESULT ret;
|
HRESULT ret;
|
||||||
OutTraceDDRAW("GetGammaRamp: dds=%x dwFlags=%x RGB=(%x,%x,%x)\n", lpdds, dwFlags, lpgr->red, lpgr->green, lpgr->blue);
|
OutTraceDDRAW("SetGammaRamp: dds=%x dwFlags=%x RGB=(%x,%x,%x)\n", lpdds, dwFlags, lpgr->red, lpgr->green, lpgr->blue);
|
||||||
if (dxw.dwFlags2 & DISABLEGAMMARAMP) return DD_OK;
|
if (dxw.dwFlags2 & DISABLEGAMMARAMP) return DD_OK;
|
||||||
ret=(*pDDSetGammaRamp)(lpdds, dwFlags, lpgr);
|
ret=(*pDDSetGammaRamp)(lpdds, dwFlags, lpgr);
|
||||||
if(ret) OutTraceE("GetGammaRamp: ERROR res=%x(%s)\n", ret, ExplainDDError(ret));
|
if(ret) OutTraceE("SetGammaRamp: ERROR res=%x(%s)\n", ret, ExplainDDError(ret));
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
#include "dxwnd.h"
|
#include "dxwnd.h"
|
||||||
#include "dxwcore.hpp"
|
#include "dxwcore.hpp"
|
||||||
#include "syslibs.h"
|
#include "syslibs.h"
|
||||||
|
#include "dxhelper.h"
|
||||||
|
|
||||||
typedef HRESULT (WINAPI *QueryInterface_Type)(void *, REFIID, LPVOID *);
|
typedef HRESULT (WINAPI *QueryInterface_Type)(void *, REFIID, LPVOID *);
|
||||||
typedef HRESULT (WINAPI *DirectInputCreate_Type)(HINSTANCE, DWORD, LPDIRECTINPUT *, LPUNKNOWN);
|
typedef HRESULT (WINAPI *DirectInputCreate_Type)(HINSTANCE, DWORD, LPDIRECTINPUT *, LPUNKNOWN);
|
||||||
@ -103,7 +104,10 @@ HRESULT WINAPI extDirectInputCreate(HINSTANCE hinst,
|
|||||||
dwversion);
|
dwversion);
|
||||||
|
|
||||||
res = (*pDirectInputCreate)(hinst, dwversion, lplpdi, pu);
|
res = (*pDirectInputCreate)(hinst, dwversion, lplpdi, pu);
|
||||||
if(res) return res;
|
if(res) {
|
||||||
|
OutTraceE("DirectInputCreate: ERROR err=%x(%s)\n", res, ExplainDDError(res));
|
||||||
|
return res;
|
||||||
|
}
|
||||||
SetHook((void *)(**(DWORD **)lplpdi), extQueryInterfaceI, (void **)&pQueryInterfaceI, "QueryInterface(I)");
|
SetHook((void *)(**(DWORD **)lplpdi), extQueryInterfaceI, (void **)&pQueryInterfaceI, "QueryInterface(I)");
|
||||||
SetHook((void *)(**(DWORD **)lplpdi + 12), extDICreateDevice, (void **)&pDICreateDevice, "CreateDevice(I)");
|
SetHook((void *)(**(DWORD **)lplpdi + 12), extDICreateDevice, (void **)&pDICreateDevice, "CreateDevice(I)");
|
||||||
SetHook((void *)(**(DWORD **)lplpdi + 16), extDIEnumDevices, (void **)&pDIEnumDevices, "EnumDevices(I)");
|
SetHook((void *)(**(DWORD **)lplpdi + 16), extDIEnumDevices, (void **)&pDIEnumDevices, "EnumDevices(I)");
|
||||||
@ -119,10 +123,14 @@ HRESULT WINAPI extDirectInputCreateEx(HINSTANCE hinst,
|
|||||||
dwversion, riidltf.Data1);
|
dwversion, riidltf.Data1);
|
||||||
|
|
||||||
res = (*pDirectInputCreateEx)(hinst, dwversion, riidltf, ppvout, pu);
|
res = (*pDirectInputCreateEx)(hinst, dwversion, riidltf, ppvout, pu);
|
||||||
if(res) return res;
|
if(res) {
|
||||||
|
OutTraceE("DirectInputCreateEx: ERROR err=%x(%s)\n", res, ExplainDDError(res));
|
||||||
|
return res;
|
||||||
|
}
|
||||||
SetHook((void *)(**(DWORD **)ppvout + 12), extDICreateDevice, (void **)&pDICreateDevice, "CreateDevice(I)");
|
SetHook((void *)(**(DWORD **)ppvout + 12), extDICreateDevice, (void **)&pDICreateDevice, "CreateDevice(I)");
|
||||||
SetHook((void *)(**(DWORD **)ppvout + 16), extDIEnumDevices, (void **)&pDIEnumDevices, "EnumDevices(I)");
|
SetHook((void *)(**(DWORD **)ppvout + 16), extDIEnumDevices, (void **)&pDIEnumDevices, "EnumDevices(I)");
|
||||||
SetHook((void *)(**(DWORD **)ppvout + 36), extDICreateDeviceEx, (void **)pDICreateDeviceEx, "DICreateDeviceEx(I)");
|
if(dwversion > 700)
|
||||||
|
SetHook((void *)(**(DWORD **)ppvout + 36), extDICreateDeviceEx, (void **)&pDICreateDeviceEx, "DICreateDeviceEx(I)");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -139,7 +147,7 @@ HRESULT WINAPI extQueryInterfaceI(void * lpdi, REFIID riid, LPVOID *obp)
|
|||||||
switch(riid.Data1){
|
switch(riid.Data1){
|
||||||
case 0x5944E662: //DirectInput2A
|
case 0x5944E662: //DirectInput2A
|
||||||
case 0x5944E663: //DirectInput2W
|
case 0x5944E663: //DirectInput2W
|
||||||
SetHook((void *)(**(DWORD **)obp + 12), extDICreateDevice, (void **)pDICreateDevice, "CreateDevice(I)");
|
SetHook((void *)(**(DWORD **)obp + 12), extDICreateDevice, (void **)&pDICreateDevice, "CreateDevice(I)");
|
||||||
SetHook((void *)(**(DWORD **)obp + 16), extDIEnumDevices, (void **)&pDIEnumDevices, "EnumDevices(I)");
|
SetHook((void *)(**(DWORD **)obp + 16), extDIEnumDevices, (void **)&pDIEnumDevices, "EnumDevices(I)");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Binary file not shown.
57
dll/hd3d.cpp
57
dll/hd3d.cpp
@ -165,7 +165,7 @@ void dxwCopyProxyLib9()
|
|||||||
GetModuleFileName(GetModuleHandle("dxwnd"), sSourcePath, MAX_FILE_PATH);
|
GetModuleFileName(GetModuleHandle("dxwnd"), sSourcePath, MAX_FILE_PATH);
|
||||||
p=&sSourcePath[strlen(sSourcePath)-strlen("dxwnd.dll")];
|
p=&sSourcePath[strlen(sSourcePath)-strlen("dxwnd.dll")];
|
||||||
strcpy(p, "d3d9.dll");
|
strcpy(p, "d3d9.dll");
|
||||||
OutTraceDW("HookInit: copy %s -> d3d9.dll\n", sSourcePath);
|
OutTraceD3D("HookInit: copy %s -> d3d9.dll\n", sSourcePath);
|
||||||
CopyFile(sSourcePath, "d3d9.dll", FALSE);
|
CopyFile(sSourcePath, "d3d9.dll", FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -198,7 +198,7 @@ void WINAPI voidDebugSetMute(void)
|
|||||||
|
|
||||||
BOOL WINAPI voidDisableD3DSpy(void)
|
BOOL WINAPI voidDisableD3DSpy(void)
|
||||||
{
|
{
|
||||||
OutTraceD3D("DisableD3DSpy: SUPPRESSED\n");
|
OutTraceDW("DisableD3DSpy: SUPPRESSED\n");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -512,7 +512,7 @@ void* WINAPI extDirect3DCreate8(UINT sdkversion)
|
|||||||
OutTraceD3D("Direct3DCreate8: sdkversion=%x\n", sdkversion);
|
OutTraceD3D("Direct3DCreate8: sdkversion=%x\n", sdkversion);
|
||||||
lpd3d = (*pDirect3DCreate8)(sdkversion);
|
lpd3d = (*pDirect3DCreate8)(sdkversion);
|
||||||
if(!lpd3d) {
|
if(!lpd3d) {
|
||||||
OutTraceD3D("Direct3DCreate8: ERROR err=%d\n", GetLastError());
|
OutTraceE("Direct3DCreate8: ERROR err=%d\n", GetLastError());
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
dwD3DVersion = 8;
|
dwD3DVersion = 8;
|
||||||
@ -534,7 +534,7 @@ void* WINAPI extDirect3DCreate9(UINT sdkversion)
|
|||||||
OutTraceD3D("Direct3DCreate9: sdkversion=%x\n", sdkversion);
|
OutTraceD3D("Direct3DCreate9: sdkversion=%x\n", sdkversion);
|
||||||
lpd3d = (*pDirect3DCreate9)(sdkversion);
|
lpd3d = (*pDirect3DCreate9)(sdkversion);
|
||||||
if(!lpd3d) {
|
if(!lpd3d) {
|
||||||
OutTraceD3D("Direct3DCreate9: ERROR err=%d\n", GetLastError());
|
OutTraceE("Direct3DCreate9: ERROR err=%d\n", GetLastError());
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -558,7 +558,7 @@ HRESULT WINAPI extDirect3DCreate9Ex(UINT sdkversion, IDirect3D9Ex **ppD3D)
|
|||||||
OutTraceD3D("Direct3DCreate9Ex: sdkversion=%x\n", sdkversion);
|
OutTraceD3D("Direct3DCreate9Ex: sdkversion=%x\n", sdkversion);
|
||||||
res = (*pDirect3DCreate9Ex)(sdkversion, ppD3D);
|
res = (*pDirect3DCreate9Ex)(sdkversion, ppD3D);
|
||||||
if(res) {
|
if(res) {
|
||||||
OutTraceD3D("Direct3DCreate9Ex: ERROR res=%x(%s)\n", res, ExplainDDError(res));
|
OutTraceE("Direct3DCreate9Ex: ERROR res=%x(%s)\n", res, ExplainDDError(res));
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
dwD3DVersion = 9;
|
dwD3DVersion = 9;
|
||||||
@ -578,7 +578,7 @@ UINT WINAPI extGetAdapterCount8(void *lpd3d)
|
|||||||
{
|
{
|
||||||
UINT res;
|
UINT res;
|
||||||
res=(*pGetAdapterCount8)(lpd3d);
|
res=(*pGetAdapterCount8)(lpd3d);
|
||||||
OutTraceDW("GetAdapterCount(8): count=%d\n", res);
|
OutTraceD3D("GetAdapterCount(8): count=%d\n", res);
|
||||||
if(dxw.dwFlags2 & HIDEMULTIMONITOR) {
|
if(dxw.dwFlags2 & HIDEMULTIMONITOR) {
|
||||||
OutTraceDW("GetAdapterCount: HIDEMULTIMONITOR count=1\n");
|
OutTraceDW("GetAdapterCount: HIDEMULTIMONITOR count=1\n");
|
||||||
res=1;
|
res=1;
|
||||||
@ -590,7 +590,7 @@ UINT WINAPI extGetAdapterCount9(void *lpd3d)
|
|||||||
{
|
{
|
||||||
UINT res;
|
UINT res;
|
||||||
res=(*pGetAdapterCount9)(lpd3d);
|
res=(*pGetAdapterCount9)(lpd3d);
|
||||||
OutTraceDW("GetAdapterCount(9): count=%d\n", res);
|
OutTraceD3D("GetAdapterCount(9): count=%d\n", res);
|
||||||
if(dxw.dwFlags2 & HIDEMULTIMONITOR) {
|
if(dxw.dwFlags2 & HIDEMULTIMONITOR) {
|
||||||
OutTraceDW("GetAdapterCount: HIDEMULTIMONITOR count=1\n");
|
OutTraceDW("GetAdapterCount: HIDEMULTIMONITOR count=1\n");
|
||||||
res=1;
|
res=1;
|
||||||
@ -638,13 +638,17 @@ HRESULT WINAPI extGetDisplayMode8(void *lpd3d, D3DDISPLAYMODE *pMode)
|
|||||||
{
|
{
|
||||||
HRESULT res;
|
HRESULT res;
|
||||||
res=(*pGetDisplayMode8)(lpd3d, pMode);
|
res=(*pGetDisplayMode8)(lpd3d, pMode);
|
||||||
OutTraceD3D("DEBUG: GetDisplayMode(8): size=(%dx%d) RefreshRate=%d Format=%d\n",
|
OutTraceD3D("GetDisplayMode(8): size=(%dx%d) RefreshRate=%d Format=%d\n",
|
||||||
pMode->Width, pMode->Height, pMode->RefreshRate, pMode->Format);
|
pMode->Width, pMode->Height, pMode->RefreshRate, pMode->Format);
|
||||||
if(dxw.dwFlags2 & KEEPASPECTRATIO){
|
if(dxw.dwFlags2 & KEEPASPECTRATIO){
|
||||||
pMode->Width=dxw.iSizX;
|
pMode->Width=dxw.iSizX;
|
||||||
pMode->Height=dxw.iSizY;
|
pMode->Height=dxw.iSizY;
|
||||||
OutTraceD3D("DEBUG: GetDisplayMode(8): fixed size=(%dx%d)\n", pMode->Width, pMode->Height);
|
|
||||||
}
|
}
|
||||||
|
else{
|
||||||
|
pMode->Width = dxw.GetScreenWidth();
|
||||||
|
pMode->Height = dxw.GetScreenHeight();
|
||||||
|
}
|
||||||
|
OutTraceDW("GetDisplayMode(8): fixed size=(%dx%d)\n", pMode->Width, pMode->Height);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -652,13 +656,17 @@ HRESULT WINAPI extGetDisplayMode9(void *lpd3d, UINT iSwapChain, D3DDISPLAYMODE *
|
|||||||
{
|
{
|
||||||
HRESULT res;
|
HRESULT res;
|
||||||
res=(*pGetDisplayMode9)(lpd3d, iSwapChain, pMode);
|
res=(*pGetDisplayMode9)(lpd3d, iSwapChain, pMode);
|
||||||
OutTraceD3D("DEBUG: GetDisplayMode(9): SwapChain=%d size=(%dx%d) RefreshRate=%d Format=%d\n",
|
OutTraceD3D("GetDisplayMode(9): SwapChain=%d size=(%dx%d) RefreshRate=%d Format=%d\n",
|
||||||
iSwapChain, pMode->Width, pMode->Height, pMode->RefreshRate, pMode->Format);
|
iSwapChain, pMode->Width, pMode->Height, pMode->RefreshRate, pMode->Format);
|
||||||
if(dxw.dwFlags2 & KEEPASPECTRATIO){
|
if(dxw.dwFlags2 & KEEPASPECTRATIO){
|
||||||
pMode->Width=dxw.iSizX;
|
pMode->Width=dxw.iSizX;
|
||||||
pMode->Height=dxw.iSizY;
|
pMode->Height=dxw.iSizY;
|
||||||
OutTraceD3D("DEBUG: GetDisplayMode(9): fixed size=(%dx%d)\n", pMode->Width, pMode->Height);
|
|
||||||
}
|
}
|
||||||
|
else{
|
||||||
|
pMode->Width = dxw.GetScreenWidth();
|
||||||
|
pMode->Height = dxw.GetScreenHeight();
|
||||||
|
}
|
||||||
|
OutTraceDW("GetDisplayMode(9): fixed size=(%dx%d)\n", pMode->Width, pMode->Height);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -684,13 +692,17 @@ HRESULT WINAPI extGetAdapterDisplayMode8(void *lpd3d, UINT Adapter, D3DDISPLAYMO
|
|||||||
{
|
{
|
||||||
HRESULT res;
|
HRESULT res;
|
||||||
res=(*pGetAdapterDisplayMode8)(lpd3d, Adapter, pMode);
|
res=(*pGetAdapterDisplayMode8)(lpd3d, Adapter, pMode);
|
||||||
OutTraceD3D("DEBUG: GetAdapterDisplayMode(8): size=(%dx%d) RefreshRate=%d Format=%d\n",
|
OutTraceD3D("GetAdapterDisplayMode(8): size=(%dx%d) RefreshRate=%d Format=%d\n",
|
||||||
pMode->Width, pMode->Height, pMode->RefreshRate, pMode->Format);
|
pMode->Width, pMode->Height, pMode->RefreshRate, pMode->Format);
|
||||||
if(dxw.dwFlags2 & KEEPASPECTRATIO){
|
if(dxw.dwFlags2 & KEEPASPECTRATIO){
|
||||||
pMode->Width=dxw.iSizX;
|
pMode->Width=dxw.iSizX;
|
||||||
pMode->Height=dxw.iSizY;
|
pMode->Height=dxw.iSizY;
|
||||||
OutTraceDW("DEBUG: GetAdapterDisplayMode(8): fixed size=(%dx%d)\n", pMode->Width, pMode->Height);
|
|
||||||
}
|
}
|
||||||
|
else{
|
||||||
|
pMode->Width = dxw.GetScreenWidth();
|
||||||
|
pMode->Height = dxw.GetScreenHeight();
|
||||||
|
}
|
||||||
|
OutTraceDW("GetAdapterDisplayMode(8): fixed size=(%dx%d)\n", pMode->Width, pMode->Height);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -698,13 +710,17 @@ HRESULT WINAPI extGetAdapterDisplayMode9(void *lpd3d, UINT Adapter, D3DDISPLAYMO
|
|||||||
{
|
{
|
||||||
HRESULT res;
|
HRESULT res;
|
||||||
res=(*pGetAdapterDisplayMode9)(lpd3d, Adapter, pMode);
|
res=(*pGetAdapterDisplayMode9)(lpd3d, Adapter, pMode);
|
||||||
OutTraceD3D("DEBUG: GetAdapterDisplayMode(9): size=(%dx%d) RefreshRate=%d Format=%d\n",
|
OutTraceD3D("GetAdapterDisplayMode(9): size=(%dx%d) RefreshRate=%d Format=%d\n",
|
||||||
pMode->Width, pMode->Height, pMode->RefreshRate, pMode->Format);
|
pMode->Width, pMode->Height, pMode->RefreshRate, pMode->Format);
|
||||||
if(dxw.dwFlags2 & KEEPASPECTRATIO){
|
if(dxw.dwFlags2 & KEEPASPECTRATIO){
|
||||||
pMode->Width=dxw.iSizX;
|
pMode->Width=dxw.iSizX;
|
||||||
pMode->Height=dxw.iSizY;
|
pMode->Height=dxw.iSizY;
|
||||||
OutTraceDW("DEBUG: GetAdapterDisplayMode(9): fixed size=(%dx%d)\n", pMode->Width, pMode->Height);
|
|
||||||
}
|
}
|
||||||
|
else{
|
||||||
|
pMode->Width = dxw.GetScreenWidth();
|
||||||
|
pMode->Height = dxw.GetScreenHeight();
|
||||||
|
}
|
||||||
|
OutTraceDW("GetAdapterDisplayMode(9): fixed size=(%dx%d)\n", pMode->Width, pMode->Height);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -726,7 +742,7 @@ HRESULT WINAPI extGetAdapterDisplayMode9(void *lpd3d, UINT Adapter, D3DDISPLAYMO
|
|||||||
//}
|
//}
|
||||||
HRESULT WINAPI extProbe(void *lpd3dd)
|
HRESULT WINAPI extProbe(void *lpd3dd)
|
||||||
{
|
{
|
||||||
OutTrace("Probe: %x\n", lpd3dd);
|
OutTraceD3D("Probe: d3dd=%x\n", lpd3dd);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -762,7 +778,7 @@ HRESULT WINAPI extCreateDevice(void *lpd3d, UINT adapter, D3DDEVTYPE devicetype,
|
|||||||
OutTraceDW("CreateDevice: updated hfocuswindow=%x pos=(%d,%d) size=(%d,%d)\n",
|
OutTraceDW("CreateDevice: updated hfocuswindow=%x pos=(%d,%d) size=(%d,%d)\n",
|
||||||
hfocuswindow, workarea.left, workarea.top, workarea.right-workarea.left, workarea.bottom-workarea.top);
|
hfocuswindow, workarea.left, workarea.top, workarea.right-workarea.left, workarea.bottom-workarea.top);
|
||||||
else
|
else
|
||||||
OutTraceDW("CreateDevice: CreateWindowEx ERROR err=%d\n", GetLastError());
|
OutTraceE("CreateDevice: CreateWindowEx ERROR err=%d\n", GetLastError());
|
||||||
dxw.SethWnd(hfocuswindow, dxw.GethWnd());
|
dxw.SethWnd(hfocuswindow, dxw.GethWnd());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -848,6 +864,9 @@ HRESULT WINAPI extCreateDeviceEx(void *lpd3d, UINT adapter, D3DDEVTYPE devicetyp
|
|||||||
D3DDISPLAYMODE mode;
|
D3DDISPLAYMODE mode;
|
||||||
int Windowed;
|
int Windowed;
|
||||||
|
|
||||||
|
OutTraceD3D("CreateDeviceEx: D3DVersion=%d lpd3d=%x adapter=%x hFocusWnd=%x behavior=%x, size=(%d,%d)\n",
|
||||||
|
dwD3DVersion, lpd3d, adapter, hfocuswindow, behaviorflags, ppresentparam->BackBufferWidth, ppresentparam->BackBufferHeight);
|
||||||
|
|
||||||
memcpy(param, ppresentparam, 56);
|
memcpy(param, ppresentparam, 56);
|
||||||
dxw.SethWnd(hfocuswindow);
|
dxw.SethWnd(hfocuswindow);
|
||||||
dxw.SetScreenSize(param[0], param[1]);
|
dxw.SetScreenSize(param[0], param[1]);
|
||||||
@ -947,6 +966,8 @@ HRESULT WINAPI extCreateAdditionalSwapChain(void *lpd3d, D3DPRESENT_PARAMETERS *
|
|||||||
D3DDISPLAYMODE mode;
|
D3DDISPLAYMODE mode;
|
||||||
int Windowed;
|
int Windowed;
|
||||||
|
|
||||||
|
OutTraceD3D("CreateAdditionalSwapChain: d3d=%x\n", lpd3d);
|
||||||
|
|
||||||
memcpy(param, pPresentationParameters, (dwD3DVersion == 9)?56:52);
|
memcpy(param, pPresentationParameters, (dwD3DVersion == 9)?56:52);
|
||||||
dxw.SetScreenSize(param[0], param[1]);
|
dxw.SetScreenSize(param[0], param[1]);
|
||||||
AdjustWindowFrame(dxw.GethWnd(), dxw.GetScreenWidth(), dxw.GetScreenHeight());
|
AdjustWindowFrame(dxw.GethWnd(), dxw.GetScreenWidth(), dxw.GetScreenHeight());
|
||||||
@ -1103,7 +1124,7 @@ HRESULT WINAPI extD3D11CreateDevice(
|
|||||||
//return 0x887a0004;
|
//return 0x887a0004;
|
||||||
res=(*pD3D11CreateDevice)(pAdapter, DriverType, Software, Flags, pFeatureLevels, FeatureLevels, SDKVersion, ppDevice, pFeatureLevel, ppImmediateContext);
|
res=(*pD3D11CreateDevice)(pAdapter, DriverType, Software, Flags, pFeatureLevels, FeatureLevels, SDKVersion, ppDevice, pFeatureLevel, ppImmediateContext);
|
||||||
if(res){
|
if(res){
|
||||||
OutTraceD3D("D3D11CreateDevice: ret=%x\n", res);
|
OutTraceE("D3D11CreateDevice: ret=%x\n", res);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
SetHook((void *)(*(DWORD *)ppImmediateContext + 148), extRSSetViewports, (void **)&pRSSetViewports, "RSSetViewports(D11)");
|
SetHook((void *)(*(DWORD *)ppImmediateContext + 148), extRSSetViewports, (void **)&pRSSetViewports, "RSSetViewports(D11)");
|
||||||
|
744
dll/hd3d7.cpp
744
dll/hd3d7.cpp
@ -8,9 +8,8 @@
|
|||||||
|
|
||||||
// exported API
|
// exported API
|
||||||
|
|
||||||
DWORD gD3DVersion; // quick & dirty ....
|
//#undef OutTraceD3D
|
||||||
//#undef OutTraceDW
|
//#define OutTraceD3D OutTrace
|
||||||
//#define OutTraceDW OutTrace
|
|
||||||
|
|
||||||
typedef HRESULT (WINAPI *Direct3DCreateDevice_Type)(GUID FAR *, LPDIRECT3D, LPDIRECTDRAWSURFACE, LPDIRECT3D *, LPUNKNOWN);
|
typedef HRESULT (WINAPI *Direct3DCreateDevice_Type)(GUID FAR *, LPDIRECT3D, LPDIRECTDRAWSURFACE, LPDIRECT3D *, LPUNKNOWN);
|
||||||
typedef HRESULT (WINAPI *Direct3DCreate_Type)(UINT, LPDIRECT3D *, LPUNKNOWN);
|
typedef HRESULT (WINAPI *Direct3DCreate_Type)(UINT, LPDIRECT3D *, LPUNKNOWN);
|
||||||
@ -21,68 +20,125 @@ Direct3DCreate_Type pDirect3DCreate = NULL;
|
|||||||
HRESULT WINAPI extDirect3DCreateDevice(GUID FAR *, LPDIRECT3D, LPDIRECTDRAWSURFACE, LPDIRECT3D *, LPUNKNOWN);
|
HRESULT WINAPI extDirect3DCreateDevice(GUID FAR *, LPDIRECT3D, LPDIRECTDRAWSURFACE, LPDIRECT3D *, LPUNKNOWN);
|
||||||
HRESULT WINAPI extDirect3DCreate(UINT, LPDIRECT3D *, LPUNKNOWN);
|
HRESULT WINAPI extDirect3DCreate(UINT, LPDIRECT3D *, LPUNKNOWN);
|
||||||
|
|
||||||
// IDirect3D interfaces
|
// IDirect3D-n interfaces
|
||||||
|
|
||||||
|
typedef HRESULT (WINAPI *QueryInterfaceD3_Type)(void *, REFIID, LPVOID *);
|
||||||
typedef HRESULT (WINAPI *Initialize_Type)(void *);
|
typedef HRESULT (WINAPI *Initialize_Type)(void *);
|
||||||
typedef HRESULT (WINAPI *EnumDevices_Type)(void *, LPD3DENUMDEVICESCALLBACK, LPVOID);
|
typedef HRESULT (WINAPI *EnumDevices_Type)(void *, LPD3DENUMDEVICESCALLBACK, LPVOID);
|
||||||
|
typedef HRESULT (WINAPI *EnumDevices7_Type)(void *, LPD3DENUMDEVICESCALLBACK7, LPVOID);
|
||||||
typedef HRESULT (WINAPI *CreateLight_Type)(void *, LPDIRECT3DLIGHT *, IUnknown *);
|
typedef HRESULT (WINAPI *CreateLight_Type)(void *, LPDIRECT3DLIGHT *, IUnknown *);
|
||||||
typedef HRESULT (WINAPI *CreateMaterial_Type)(void *, LPDIRECT3DMATERIAL *, IUnknown *);
|
typedef HRESULT (WINAPI *CreateMaterial_Type)(void *, LPDIRECT3DMATERIAL *, IUnknown *);
|
||||||
typedef HRESULT (WINAPI *CreateViewport_Type)(void *, LPDIRECT3DVIEWPORT *, IUnknown *);
|
typedef HRESULT (WINAPI *CreateViewport1_Type)(void *, LPDIRECT3DVIEWPORT *, IUnknown *);
|
||||||
|
typedef HRESULT (WINAPI *CreateViewport2_Type)(void *, LPDIRECT3DVIEWPORT2 *, IUnknown *);
|
||||||
|
typedef HRESULT (WINAPI *CreateViewport3_Type)(void *, LPDIRECT3DVIEWPORT3 *, IUnknown *);
|
||||||
typedef HRESULT (WINAPI *FindDevice_Type)(void *, LPD3DFINDDEVICESEARCH, LPD3DFINDDEVICERESULT);
|
typedef HRESULT (WINAPI *FindDevice_Type)(void *, LPD3DFINDDEVICESEARCH, LPD3DFINDDEVICERESULT);
|
||||||
typedef HRESULT (WINAPI *CreateDevice2_Type)(void *, REFCLSID, LPDIRECTDRAWSURFACE, LPDIRECT3DDEVICE2 *);
|
typedef HRESULT (WINAPI *CreateDevice2_Type)(void *, REFCLSID, LPDIRECTDRAWSURFACE, LPDIRECT3DDEVICE2 *);
|
||||||
typedef HRESULT (WINAPI *CreateDevice3_Type)(void *, REFCLSID, LPDIRECTDRAWSURFACE4, LPDIRECT3DDEVICE3 *, LPUNKNOWN);
|
typedef HRESULT (WINAPI *CreateDevice3_Type)(void *, REFCLSID, LPDIRECTDRAWSURFACE4, LPDIRECT3DDEVICE3 *, LPUNKNOWN);
|
||||||
|
typedef HRESULT (WINAPI *CreateDevice7_Type)(void *, REFCLSID, LPDIRECTDRAWSURFACE7, LPDIRECT3DDEVICE7 *);
|
||||||
|
|
||||||
typedef HRESULT (WINAPI *InitializeVP_Type)(void *, LPDIRECT3D);
|
QueryInterfaceD3_Type pQueryInterfaceD3 = NULL;
|
||||||
typedef HRESULT (WINAPI *SetViewport_Type)(void *, LPD3DVIEWPORT);
|
|
||||||
typedef HRESULT (WINAPI *GetViewport_Type)(void *, LPD3DVIEWPORT);
|
|
||||||
typedef HRESULT (WINAPI *QueryInterfaceD3_Type)(void *, REFIID, LPVOID *);
|
|
||||||
|
|
||||||
typedef HRESULT (WINAPI *D3DInitialize_Type)(void *, LPDIRECT3D , LPGUID, LPD3DDEVICEDESC);
|
|
||||||
typedef HRESULT (WINAPI *D3DGetCaps_Type)(void *, LPD3DDEVICEDESC ,LPD3DDEVICEDESC);
|
|
||||||
|
|
||||||
typedef HRESULT (WINAPI *SetRenderState3_Type)(void *, D3DRENDERSTATETYPE, DWORD);
|
|
||||||
typedef HRESULT (WINAPI *Scene3_Type)(void *);
|
|
||||||
typedef HRESULT (WINAPI *GetCaps3_Type)(void *, LPD3DDEVICEDESC, LPD3DDEVICEDESC);
|
|
||||||
typedef HRESULT (WINAPI *SetLightState_Type)(void *, D3DLIGHTSTATETYPE, DWORD);
|
|
||||||
|
|
||||||
Initialize_Type pInitialize = NULL;
|
Initialize_Type pInitialize = NULL;
|
||||||
EnumDevices_Type pEnumDevices = NULL;
|
EnumDevices_Type pEnumDevices = NULL;
|
||||||
|
EnumDevices7_Type pEnumDevices7 = NULL;
|
||||||
CreateLight_Type pCreateLight = NULL;
|
CreateLight_Type pCreateLight = NULL;
|
||||||
CreateMaterial_Type pCreateMaterial = NULL;
|
CreateMaterial_Type pCreateMaterial = NULL;
|
||||||
CreateViewport_Type pCreateViewport = NULL;
|
CreateViewport1_Type pCreateViewport1 = NULL;
|
||||||
|
CreateViewport2_Type pCreateViewport2 = NULL;
|
||||||
|
CreateViewport3_Type pCreateViewport3 = NULL;
|
||||||
FindDevice_Type pFindDevice = NULL;
|
FindDevice_Type pFindDevice = NULL;
|
||||||
CreateDevice2_Type pCreateDevice2 = NULL;
|
CreateDevice2_Type pCreateDevice2 = NULL;
|
||||||
CreateDevice3_Type pCreateDevice3 = NULL;
|
CreateDevice3_Type pCreateDevice3 = NULL;
|
||||||
|
CreateDevice7_Type pCreateDevice7 = NULL;
|
||||||
|
|
||||||
InitializeVP_Type pInitializeVP = NULL;
|
// Direct3DDevice-n interfaces
|
||||||
SetViewport_Type pSetViewport = NULL;
|
|
||||||
GetViewport_Type pGetViewport = NULL;
|
|
||||||
QueryInterfaceD3_Type pQueryInterfaceD3 = NULL;
|
|
||||||
|
|
||||||
SetRenderState3_Type pSetRenderState2 = NULL;
|
typedef HRESULT (WINAPI *D3DInitialize_Type)(void *, LPDIRECT3D , LPGUID, LPD3DDEVICEDESC);
|
||||||
SetRenderState3_Type pSetRenderState3 = NULL;
|
typedef HRESULT (WINAPI *D3DGetCaps_Type)(void *, LPD3DDEVICEDESC ,LPD3DDEVICEDESC);
|
||||||
|
typedef HRESULT (WINAPI *D3DGetCaps3_Type)(void *, LPD3DDEVICEDESC, LPD3DDEVICEDESC);
|
||||||
|
typedef HRESULT (WINAPI *AddViewport1_Type)(void *, LPDIRECT3DVIEWPORT);
|
||||||
|
typedef HRESULT (WINAPI *AddViewport2_Type)(void *, LPDIRECT3DVIEWPORT2);
|
||||||
|
typedef HRESULT (WINAPI *AddViewport3_Type)(void *, LPDIRECT3DVIEWPORT3);
|
||||||
|
typedef HRESULT (WINAPI *Scene3_Type)(void *); // BeginScene, EndScene
|
||||||
|
typedef HRESULT (WINAPI *SetRenderState3_Type)(void *, D3DRENDERSTATETYPE, DWORD);
|
||||||
|
typedef HRESULT (WINAPI *GetViewport7_Type)(void *, LPD3DVIEWPORT7);
|
||||||
|
typedef HRESULT (WINAPI *SetViewport7_Type)(void *, LPD3DVIEWPORT7);
|
||||||
|
typedef HRESULT (WINAPI *SetLightState_Type)(void *, D3DLIGHTSTATETYPE, DWORD);
|
||||||
|
typedef HRESULT (WINAPI *GetCurrentViewport2_Type)(void *, LPDIRECT3DVIEWPORT2 *);
|
||||||
|
typedef HRESULT (WINAPI *SetCurrentViewport2_Type)(void *, LPDIRECT3DVIEWPORT2);
|
||||||
|
typedef HRESULT (WINAPI *GetCurrentViewport3_Type)(void *, LPDIRECT3DVIEWPORT3 *);
|
||||||
|
typedef HRESULT (WINAPI *SetCurrentViewport3_Type)(void *, LPDIRECT3DVIEWPORT3);
|
||||||
|
|
||||||
|
D3DInitialize_Type pD3DInitialize = NULL;
|
||||||
|
D3DGetCaps_Type pD3DGetCaps = NULL;
|
||||||
|
D3DGetCaps3_Type pGetCaps3 = NULL;
|
||||||
|
AddViewport1_Type pAddViewport1 = NULL;
|
||||||
|
AddViewport2_Type pAddViewport2 = NULL;
|
||||||
|
AddViewport3_Type pAddViewport3 = NULL;
|
||||||
Scene3_Type pBeginScene1 = NULL;
|
Scene3_Type pBeginScene1 = NULL;
|
||||||
Scene3_Type pBeginScene2 = NULL;
|
Scene3_Type pBeginScene2 = NULL;
|
||||||
Scene3_Type pBeginScene3 = NULL;
|
Scene3_Type pBeginScene3 = NULL;
|
||||||
Scene3_Type pEndScene1 = NULL;
|
Scene3_Type pEndScene1 = NULL;
|
||||||
Scene3_Type pEndScene2 = NULL;
|
Scene3_Type pEndScene2 = NULL;
|
||||||
Scene3_Type pEndScene3 = NULL;
|
Scene3_Type pEndScene3 = NULL;
|
||||||
|
SetRenderState3_Type pSetRenderState2 = NULL;
|
||||||
GetCaps3_Type pGetCaps3 = NULL;
|
SetRenderState3_Type pSetRenderState3 = NULL;
|
||||||
|
GetViewport7_Type pGetViewport7 = NULL;
|
||||||
|
SetViewport7_Type pSetViewport7 = NULL;
|
||||||
SetLightState_Type pSetLightState3 = NULL;
|
SetLightState_Type pSetLightState3 = NULL;
|
||||||
|
GetCurrentViewport2_Type pGetCurrentViewport2 = NULL;
|
||||||
|
SetCurrentViewport2_Type pSetCurrentViewport2 = NULL;
|
||||||
|
GetCurrentViewport3_Type pGetCurrentViewport3 = NULL;
|
||||||
|
SetCurrentViewport3_Type pSetCurrentViewport3 = NULL;
|
||||||
|
|
||||||
|
// IDirect3DViewport-n interfaces
|
||||||
|
|
||||||
|
typedef HRESULT (WINAPI *InitializeVP_Type)(void *, LPDIRECT3D);
|
||||||
|
typedef HRESULT (WINAPI *SetViewport_Type)(void *, LPD3DVIEWPORT);
|
||||||
|
typedef HRESULT (WINAPI *GetViewport_Type)(void *, LPD3DVIEWPORT);
|
||||||
|
typedef HRESULT (WINAPI *GetViewport2_Type)(void *, LPD3DVIEWPORT);
|
||||||
|
typedef HRESULT (WINAPI *SetViewport2_Type)(void *, LPD3DVIEWPORT);
|
||||||
|
typedef HRESULT (WINAPI *GetViewport3_Type)(void *, LPD3DVIEWPORT);
|
||||||
|
typedef HRESULT (WINAPI *SetViewport3_Type)(void *, LPD3DVIEWPORT);
|
||||||
|
typedef HRESULT (WINAPI *GetViewport2_3_Type)(void *, LPD3DVIEWPORT2);
|
||||||
|
typedef HRESULT (WINAPI *SetViewport2_3_Type)(void *, LPD3DVIEWPORT2);
|
||||||
|
typedef HRESULT (WINAPI *DeleteViewport1_Type)(void *, LPDIRECT3DVIEWPORT);
|
||||||
|
typedef HRESULT (WINAPI *NextViewport1_Type)(void *, LPDIRECT3DVIEWPORT, LPDIRECT3DVIEWPORT *, DWORD);
|
||||||
|
typedef HRESULT (WINAPI *DeleteViewport2_Type)(void *, LPDIRECT3DVIEWPORT2);
|
||||||
|
typedef HRESULT (WINAPI *NextViewport2_Type)(void *, LPDIRECT3DVIEWPORT2, LPDIRECT3DVIEWPORT2 *, DWORD);
|
||||||
|
|
||||||
|
InitializeVP_Type pInitializeVP = NULL;
|
||||||
|
SetViewport_Type pSetViewport = NULL;
|
||||||
|
GetViewport_Type pGetViewport = NULL;
|
||||||
|
GetViewport2_Type pGetViewport2 = NULL;
|
||||||
|
SetViewport2_Type pSetViewport2 = NULL;
|
||||||
|
GetViewport2_3_Type pGetViewport2_3 = NULL;
|
||||||
|
SetViewport2_3_Type pSetViewport2_3 = NULL;
|
||||||
|
GetViewport3_Type pGetViewport3 = NULL;
|
||||||
|
SetViewport3_Type pSetViewport3 = NULL;
|
||||||
|
DeleteViewport1_Type pDeleteViewport1 = NULL;
|
||||||
|
NextViewport1_Type pNextViewport1 = NULL;
|
||||||
|
DeleteViewport2_Type pDeleteViewport2 = NULL;
|
||||||
|
NextViewport2_Type pNextViewport2 = NULL;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
D3DInitialize_Type pD3DInitialize = NULL;
|
|
||||||
D3DGetCaps_Type pD3DGetCaps = NULL;
|
|
||||||
|
|
||||||
HRESULT WINAPI extInitialize(void *);
|
HRESULT WINAPI extInitialize(void *);
|
||||||
HRESULT WINAPI extEnumDevices(void *, LPD3DENUMDEVICESCALLBACK, LPVOID);
|
HRESULT WINAPI extEnumDevices(void *, LPD3DENUMDEVICESCALLBACK, LPVOID);
|
||||||
|
HRESULT WINAPI extEnumDevices7(void *, LPD3DENUMDEVICESCALLBACK7, LPVOID);
|
||||||
HRESULT WINAPI extCreateLight(void *, LPDIRECT3DLIGHT *, IUnknown *);
|
HRESULT WINAPI extCreateLight(void *, LPDIRECT3DLIGHT *, IUnknown *);
|
||||||
HRESULT WINAPI extCreateMaterial(void *, LPDIRECT3DMATERIAL *, IUnknown *);
|
HRESULT WINAPI extCreateMaterial(void *, LPDIRECT3DMATERIAL *, IUnknown *);
|
||||||
HRESULT WINAPI extCreateViewport(void *, LPDIRECT3DVIEWPORT *, IUnknown *);
|
HRESULT WINAPI extCreateViewport1(void *, LPDIRECT3DVIEWPORT *, IUnknown *);
|
||||||
|
HRESULT WINAPI extCreateViewport2(void *, LPDIRECT3DVIEWPORT2 *, IUnknown *);
|
||||||
|
HRESULT WINAPI extCreateViewport3(void *, LPDIRECT3DVIEWPORT3 *, IUnknown *);
|
||||||
HRESULT WINAPI extFindDevice(void *, LPD3DFINDDEVICESEARCH, LPD3DFINDDEVICERESULT);
|
HRESULT WINAPI extFindDevice(void *, LPD3DFINDDEVICESEARCH, LPD3DFINDDEVICERESULT);
|
||||||
HRESULT WINAPI extCreateDevice2(void *, REFCLSID, LPDIRECTDRAWSURFACE, LPDIRECT3DDEVICE2 *);
|
HRESULT WINAPI extCreateDevice2(void *, REFCLSID, LPDIRECTDRAWSURFACE, LPDIRECT3DDEVICE2 *);
|
||||||
HRESULT WINAPI extCreateDevice3(void *, REFCLSID, LPDIRECTDRAWSURFACE4, LPDIRECT3DDEVICE3 *, LPUNKNOWN);
|
HRESULT WINAPI extCreateDevice3(void *, REFCLSID, LPDIRECTDRAWSURFACE4, LPDIRECT3DDEVICE3 *, LPUNKNOWN);
|
||||||
|
HRESULT WINAPI extCreateDevice7(void *, REFCLSID, LPDIRECTDRAWSURFACE7, LPDIRECT3DDEVICE7 *);
|
||||||
|
HRESULT WINAPI extDeleteViewport1(void *, LPDIRECT3DVIEWPORT);
|
||||||
|
HRESULT WINAPI extNextViewport1(void *, LPDIRECT3DVIEWPORT, LPDIRECT3DVIEWPORT *, DWORD);
|
||||||
|
HRESULT WINAPI extDeleteViewport2(void *, LPDIRECT3DVIEWPORT2);
|
||||||
|
HRESULT WINAPI extNextViewport2(void *, LPDIRECT3DVIEWPORT2, LPDIRECT3DVIEWPORT2 *, DWORD);
|
||||||
|
|
||||||
HRESULT WINAPI extInitializeVP(void *, LPDIRECT3D);
|
HRESULT WINAPI extInitializeVP(void *, LPDIRECT3D);
|
||||||
HRESULT WINAPI extSetViewport(void *, LPD3DVIEWPORT);
|
HRESULT WINAPI extSetViewport(void *, LPD3DVIEWPORT);
|
||||||
@ -102,6 +158,21 @@ HRESULT WINAPI extBeginScene3(void *);
|
|||||||
HRESULT WINAPI extEndScene3(void *);
|
HRESULT WINAPI extEndScene3(void *);
|
||||||
HRESULT WINAPI extGetCaps3(void *, LPD3DDEVICEDESC, LPD3DDEVICEDESC);
|
HRESULT WINAPI extGetCaps3(void *, LPD3DDEVICEDESC, LPD3DDEVICEDESC);
|
||||||
HRESULT WINAPI extSetLightState3(void *d3dd, D3DLIGHTSTATETYPE d3dls, DWORD t);
|
HRESULT WINAPI extSetLightState3(void *d3dd, D3DLIGHTSTATETYPE d3dls, DWORD t);
|
||||||
|
HRESULT WINAPI extSetViewport3(void *, LPD3DVIEWPORT);
|
||||||
|
HRESULT WINAPI extGetViewport3(void *, LPD3DVIEWPORT);
|
||||||
|
HRESULT WINAPI extAddViewport1(void *, LPDIRECT3DVIEWPORT);
|
||||||
|
HRESULT WINAPI extAddViewport2(void *, LPDIRECT3DVIEWPORT2);
|
||||||
|
HRESULT WINAPI extAddViewport3(void *, LPDIRECT3DVIEWPORT3);
|
||||||
|
HRESULT WINAPI extGetViewport2(void *, LPD3DVIEWPORT);
|
||||||
|
HRESULT WINAPI extSetViewport2(void *, LPD3DVIEWPORT);
|
||||||
|
HRESULT WINAPI extGetViewport2_3(void *, LPD3DVIEWPORT2);
|
||||||
|
HRESULT WINAPI extSetViewport2_3(void *, LPD3DVIEWPORT2);
|
||||||
|
HRESULT WINAPI extSetCurrentViewport2(void *, LPDIRECT3DVIEWPORT2);
|
||||||
|
HRESULT WINAPI extGetCurrentViewport2(void *, LPDIRECT3DVIEWPORT2 *);
|
||||||
|
HRESULT WINAPI extSetCurrentViewport3(void *, LPDIRECT3DVIEWPORT3);
|
||||||
|
HRESULT WINAPI extGetCurrentViewport3(void *, LPDIRECT3DVIEWPORT3 *);
|
||||||
|
HRESULT WINAPI extSetViewport7(void *, LPD3DVIEWPORT7);
|
||||||
|
HRESULT WINAPI extGetViewport7(void *, LPD3DVIEWPORT7);
|
||||||
|
|
||||||
extern char *ExplainDDError(DWORD);
|
extern char *ExplainDDError(DWORD);
|
||||||
|
|
||||||
@ -111,8 +182,6 @@ int HookDirect3D7(HMODULE module, int version){
|
|||||||
LPDIRECT3D lpd3d=NULL;
|
LPDIRECT3D lpd3d=NULL;
|
||||||
HRESULT res;
|
HRESULT res;
|
||||||
|
|
||||||
gD3DVersion = version;
|
|
||||||
|
|
||||||
switch(version){
|
switch(version){
|
||||||
case 0:
|
case 0:
|
||||||
case 1:
|
case 1:
|
||||||
@ -153,18 +222,131 @@ FARPROC Remap_d3d7_ProcAddress(LPCSTR proc, HMODULE hModule)
|
|||||||
{
|
{
|
||||||
if (!strcmp(proc,"Direct3DCreate") && !pDirect3DCreate){
|
if (!strcmp(proc,"Direct3DCreate") && !pDirect3DCreate){
|
||||||
pDirect3DCreate=(Direct3DCreate_Type)(*pGetProcAddress)(hModule, proc);
|
pDirect3DCreate=(Direct3DCreate_Type)(*pGetProcAddress)(hModule, proc);
|
||||||
OutTraceDW("GetProcAddress: hooking proc=%s at addr=%x\n", ProcToString(proc), pDirect3DCreate);
|
OutTraceD3D("GetProcAddress: hooking proc=%s at addr=%x\n", ProcToString(proc), pDirect3DCreate);
|
||||||
return (FARPROC)extDirect3DCreate;
|
return (FARPROC)extDirect3DCreate;
|
||||||
}
|
}
|
||||||
if (!strcmp(proc,"Direct3DCreateDevice") && !pDirect3DCreateDevice){
|
if (!strcmp(proc,"Direct3DCreateDevice") && !pDirect3DCreateDevice){
|
||||||
pDirect3DCreateDevice=(Direct3DCreateDevice_Type)(*pGetProcAddress)(hModule, proc);
|
pDirect3DCreateDevice=(Direct3DCreateDevice_Type)(*pGetProcAddress)(hModule, proc);
|
||||||
OutTraceDW("GetProcAddress: hooking proc=%s at addr=%x\n", ProcToString(proc), pDirect3DCreateDevice);
|
OutTraceD3D("GetProcAddress: hooking proc=%s at addr=%x\n", ProcToString(proc), pDirect3DCreateDevice);
|
||||||
return (FARPROC)extDirect3DCreateDevice;
|
return (FARPROC)extDirect3DCreateDevice;
|
||||||
}
|
}
|
||||||
// NULL -> keep the original call address
|
// NULL -> keep the original call address
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void HookDirect3DSession(LPDIRECTDRAW *lplpdd, int d3dversion)
|
||||||
|
{
|
||||||
|
OutTraceD3D("HookDirect3DSession: d3d=%x d3dversion=%d\n", *lplpdd, d3dversion);
|
||||||
|
|
||||||
|
switch(d3dversion){
|
||||||
|
case 1:
|
||||||
|
SetHook((void *)(**(DWORD **)lplpdd + 0), extQueryInterfaceD3, (void **)&pQueryInterfaceD3, "QueryInterface(D3S)");
|
||||||
|
SetHook((void *)(**(DWORD **)lplpdd + 12), extInitialize, (void **)&pInitialize, "Initialize(1)");
|
||||||
|
SetHook((void *)(**(DWORD **)lplpdd + 16), extEnumDevices, (void **)&pEnumDevices, "EnumDevices");
|
||||||
|
SetHook((void *)(**(DWORD **)lplpdd + 20), extCreateLight, (void **)&pCreateLight, "CreateLight");
|
||||||
|
SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateMaterial, (void **)&pCreateMaterial, "CreateMaterial");
|
||||||
|
SetHook((void *)(**(DWORD **)lplpdd + 28), extCreateViewport1, (void **)&pCreateViewport1, "CreateViewport(1)");
|
||||||
|
SetHook((void *)(**(DWORD **)lplpdd + 32), extFindDevice, (void **)&pFindDevice, "FindDevice");
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
SetHook((void *)(**(DWORD **)lplpdd + 0), extQueryInterfaceD3, (void **)&pQueryInterfaceD3, "QueryInterface(D3S)");
|
||||||
|
SetHook((void *)(**(DWORD **)lplpdd + 12), extEnumDevices, (void **)&pEnumDevices, "EnumDevices(2)");
|
||||||
|
SetHook((void *)(**(DWORD **)lplpdd + 16), extCreateLight, (void **)&pCreateLight, "CreateLight");
|
||||||
|
SetHook((void *)(**(DWORD **)lplpdd + 20), extCreateMaterial, (void **)&pCreateMaterial, "CreateMaterial");
|
||||||
|
SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateViewport2, (void **)&pCreateViewport2, "CreateViewport(2)");
|
||||||
|
SetHook((void *)(**(DWORD **)lplpdd + 28), extFindDevice, (void **)&pFindDevice, "FindDevice");
|
||||||
|
SetHook((void *)(**(DWORD **)lplpdd + 32), extCreateDevice2, (void **)&pCreateDevice2, "CreateDevice(D3D2)");
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
SetHook((void *)(**(DWORD **)lplpdd + 0), extQueryInterfaceD3, (void **)&pQueryInterfaceD3, "QueryInterface(D3S)");
|
||||||
|
SetHook((void *)(**(DWORD **)lplpdd + 12), extEnumDevices, (void **)&pEnumDevices, "EnumDevices(3)");
|
||||||
|
SetHook((void *)(**(DWORD **)lplpdd + 16), extCreateLight, (void **)&pCreateLight, "CreateLight");
|
||||||
|
SetHook((void *)(**(DWORD **)lplpdd + 20), extCreateMaterial, (void **)&pCreateMaterial, "CreateMaterial");
|
||||||
|
SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateViewport3, (void **)&pCreateViewport3, "CreateViewport(3)");
|
||||||
|
SetHook((void *)(**(DWORD **)lplpdd + 28), extFindDevice, (void **)&pFindDevice, "FindDevice");
|
||||||
|
SetHook((void *)(**(DWORD **)lplpdd + 32), extCreateDevice3, (void **)&pCreateDevice3, "CreateDevice(D3D3)");
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
SetHook((void *)(**(DWORD **)lplpdd + 0), extQueryInterfaceD3, (void **)&pQueryInterfaceD3, "QueryInterface(D3S)");
|
||||||
|
SetHook((void *)(**(DWORD **)lplpdd + 12), extEnumDevices7, (void **)&pEnumDevices7, "EnumDevices(7)");
|
||||||
|
SetHook((void *)(**(DWORD **)lplpdd + 32), extCreateDevice7, (void **)&pCreateDevice7, "CreateDevice(D3D7)");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void HookDirect3DDevice(void **lpd3ddev, int d3dversion)
|
||||||
|
{
|
||||||
|
OutTraceD3D("HookDirect3DDevice: d3ddev=%x d3dversion=%d\n", lpd3ddev, d3dversion);
|
||||||
|
|
||||||
|
switch(d3dversion){
|
||||||
|
case 1:
|
||||||
|
//SetHook((void *)(**(DWORD **)lpd3ddev + 16), extGetCaps1, (void **)&pGetCaps1, "GetCaps(1)");
|
||||||
|
SetHook((void *)(**(DWORD **)lpd3ddev + 36), extAddViewport1, (void **)&pAddViewport1, "AddViewport(1)");
|
||||||
|
SetHook((void *)(**(DWORD **)lpd3ddev + 40), extDeleteViewport1, (void **)&pDeleteViewport1, "DeleteViewport(1)");
|
||||||
|
SetHook((void *)(**(DWORD **)lpd3ddev + 44), extNextViewport1, (void **)&pNextViewport1, "NextViewport(1)");
|
||||||
|
SetHook((void *)(**(DWORD **)lpd3ddev + 76), extBeginScene1, (void **)&pBeginScene1, "BeginScene(1)");
|
||||||
|
SetHook((void *)(**(DWORD **)lpd3ddev + 80), extEndScene1, (void **)&pEndScene1, "EndScene(1)");
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
//SetHook((void *)(**(DWORD **)lpd3ddev + 12), extGetCaps2, (void **)&pGetCaps2, "GetCaps(2)");
|
||||||
|
SetHook((void *)(**(DWORD **)lpd3ddev + 24), extAddViewport2, (void **)&pAddViewport2, "AddViewport(2)");
|
||||||
|
SetHook((void *)(**(DWORD **)lpd3ddev + 28), extDeleteViewport2, (void **)&pDeleteViewport2, "DeleteViewport(2)");
|
||||||
|
SetHook((void *)(**(DWORD **)lpd3ddev + 32), extNextViewport2, (void **)&pNextViewport2, "NextViewport(2)");
|
||||||
|
SetHook((void *)(**(DWORD **)lpd3ddev + 40), extBeginScene2, (void **)&pBeginScene2, "BeginScene(2)");
|
||||||
|
SetHook((void *)(**(DWORD **)lpd3ddev + 44), extEndScene2, (void **)&pEndScene2, "EndScene(2)");
|
||||||
|
SetHook((void *)(**(DWORD **)lpd3ddev + 52), extSetCurrentViewport2, (void **)&pSetCurrentViewport2, "SetCurrentViewport(2)");
|
||||||
|
SetHook((void *)(**(DWORD **)lpd3ddev + 56), extGetCurrentViewport2, (void **)&pGetCurrentViewport2, "GetCurrentViewport(2)");
|
||||||
|
SetHook((void *)(**(DWORD **)lpd3ddev + 92), extSetRenderState2, (void **)&pSetRenderState2, "SetRenderState(2)");
|
||||||
|
if(pSetRenderState2){
|
||||||
|
if(dxw.dwFlags2 & WIREFRAME)(*pSetRenderState2)(*lpd3ddev, D3DRENDERSTATE_FILLMODE, D3DFILL_WIREFRAME);
|
||||||
|
if(dxw.dwFlags4 & DISABLEFOGGING) (*pSetRenderState2)(*lpd3ddev, D3DRENDERSTATE_FOGENABLE, FALSE);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
SetHook((void *)(**(DWORD **)lpd3ddev + 12), extGetCaps3, (void **)&pGetCaps3, "GetCaps(3)");
|
||||||
|
SetHook((void *)(**(DWORD **)lpd3ddev + 20), extAddViewport3, (void **)&pAddViewport3, "AddViewport(3)");
|
||||||
|
SetHook((void *)(**(DWORD **)lpd3ddev + 36), extBeginScene3, (void **)&pBeginScene3, "BeginScene(3)");
|
||||||
|
SetHook((void *)(**(DWORD **)lpd3ddev + 40), extEndScene3, (void **)&pEndScene3, "EndScene(3)");
|
||||||
|
SetHook((void *)(**(DWORD **)lpd3ddev + 48), extSetCurrentViewport3, (void **)&pSetCurrentViewport3, "SetCurrentViewport(3)");
|
||||||
|
SetHook((void *)(**(DWORD **)lpd3ddev + 52), extGetCurrentViewport3, (void **)&pGetCurrentViewport3, "GetCurrentViewport(3)");
|
||||||
|
SetHook((void *)(**(DWORD **)lpd3ddev + 88), extSetRenderState3, (void **)&pSetRenderState3, "SetRenderState(3)");
|
||||||
|
SetHook((void *)(**(DWORD **)lpd3ddev + 96), extSetLightState3, (void **)&pSetLightState3, "SetLightState(3)");
|
||||||
|
if(pSetRenderState3){
|
||||||
|
if(dxw.dwFlags2 & WIREFRAME)(*pSetRenderState3)(*lpd3ddev, D3DRENDERSTATE_FILLMODE, D3DFILL_WIREFRAME);
|
||||||
|
if(dxw.dwFlags4 & DISABLEFOGGING) (*pSetRenderState3)(*lpd3ddev, D3DRENDERSTATE_FOGENABLE, FALSE);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
SetHook((void *)(**(DWORD **)lpd3ddev + 52), extSetViewport7, (void **)&pSetViewport7, "SetViewport(7)");
|
||||||
|
SetHook((void *)(**(DWORD **)lpd3ddev + 60), extGetViewport7, (void **)&pGetViewport7, "GetViewport(7)");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT WINAPI extDirect3DCreate(UINT SDKVersion, LPDIRECT3D *lplpd3d, LPUNKNOWN pUnkOuter)
|
||||||
|
{
|
||||||
|
HRESULT res;
|
||||||
|
UINT d3dversion;
|
||||||
|
|
||||||
|
OutTraceD3D("Direct3DCreate: SDKVersion=%x UnkOuter=%x\n", SDKVersion, pUnkOuter);
|
||||||
|
res=(*pDirect3DCreate)(SDKVersion, lplpd3d, pUnkOuter);
|
||||||
|
|
||||||
|
if(res) {
|
||||||
|
OutTraceE("Direct3DCreate ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
d3dversion = 1;
|
||||||
|
if(SDKVersion >= 0x0500) d3dversion = 2;
|
||||||
|
if(SDKVersion >= 0x0600) d3dversion = 3;
|
||||||
|
if(SDKVersion >= 0x0700) d3dversion = 7;
|
||||||
|
|
||||||
|
HookDirect3DSession((LPDIRECTDRAW *)lplpd3d, d3dversion);
|
||||||
|
OutTraceD3D("Direct3DCreate: d3d=%x\n", *lplpd3d);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
HRESULT WINAPI extDirect3DCreateDevice(GUID FAR *lpGUID, LPDIRECT3D lpd3ddevice, LPDIRECTDRAWSURFACE surf, LPDIRECT3D *lplpd3ddevice, LPUNKNOWN pUnkOuter)
|
HRESULT WINAPI extDirect3DCreateDevice(GUID FAR *lpGUID, LPDIRECT3D lpd3ddevice, LPDIRECTDRAWSURFACE surf, LPDIRECT3D *lplpd3ddevice, LPUNKNOWN pUnkOuter)
|
||||||
{
|
{
|
||||||
HRESULT res;
|
HRESULT res;
|
||||||
@ -174,112 +356,49 @@ HRESULT WINAPI extDirect3DCreateDevice(GUID FAR *lpGUID, LPDIRECT3D lpd3ddevice,
|
|||||||
res=(*pDirect3DCreateDevice)(lpGUID, lpd3ddevice, surf, lplpd3ddevice, pUnkOuter);
|
res=(*pDirect3DCreateDevice)(lpGUID, lpd3ddevice, surf, lplpd3ddevice, pUnkOuter);
|
||||||
if(res) OutTraceE("Direct3DCreateDevice ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
|
if(res) OutTraceE("Direct3DCreateDevice ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
|
||||||
else OutTraceD3D("Direct3DCreateDevice: d3ddevice=%x\n", *lplpd3ddevice);
|
else OutTraceD3D("Direct3DCreateDevice: d3ddevice=%x\n", *lplpd3ddevice);
|
||||||
|
|
||||||
|
switch(lpGUID->Data1){
|
||||||
|
case 0x64108800: // IID_IDirect3DDevice
|
||||||
|
HookDirect3DDevice((void **)lplpd3ddevice, 1);
|
||||||
|
break;
|
||||||
|
case 0x93281501: // IID_IDirect3DDevice2
|
||||||
|
HookDirect3DDevice((void **)lplpd3ddevice, 2);
|
||||||
|
break;
|
||||||
|
case 0xb0ab3b60: // IID_IDirect3DDevice3
|
||||||
|
HookDirect3DDevice((void **)lplpd3ddevice, 3);
|
||||||
|
break;
|
||||||
|
case 0xf5049e79: // IID_IDirect3DDevice7
|
||||||
|
HookDirect3DDevice((void **)lplpd3ddevice, 7);
|
||||||
|
break;
|
||||||
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
void HookDirect3DSession(LPDIRECTDRAW *lplpdd, int dxversion)
|
void HookViewport(LPDIRECT3DVIEWPORT *lpViewport, int d3dversion)
|
||||||
{
|
{
|
||||||
OutTraceDW("HookDirect3DSession: d3d=%x d3dversion=%d\n", *lplpdd, dxversion);
|
OutTraceD3D("HookViewport: Viewport=%x d3dversion=%d\n", *lpViewport, d3dversion);
|
||||||
|
|
||||||
gD3DVersion = dxversion;
|
switch(d3dversion){
|
||||||
|
|
||||||
switch(dxversion){
|
|
||||||
case 1:
|
case 1:
|
||||||
SetHook((void *)(**(DWORD **)lplpdd + 0), extQueryInterfaceD3, (void **)&pQueryInterfaceD3, "QueryInterface(D3S)");
|
SetHook((void *)(**(DWORD **)lpViewport + 12), extInitializeVP, (void **)&pInitializeVP, "Initialize(VP1)");
|
||||||
SetHook((void *)(**(DWORD **)lplpdd + 12), extInitialize, (void **)&pInitialize, "Initialize");
|
SetHook((void *)(**(DWORD **)lpViewport + 16), extGetViewport, (void **)&pGetViewport, "GetViewport(1)");
|
||||||
SetHook((void *)(**(DWORD **)lplpdd + 16), extEnumDevices, (void **)&pEnumDevices, "EnumDevices");
|
SetHook((void *)(**(DWORD **)lpViewport + 20), extSetViewport, (void **)&pSetViewport, "SetViewport(1)");
|
||||||
SetHook((void *)(**(DWORD **)lplpdd + 20), extCreateLight, (void **)&pCreateLight, "CreateLight");
|
|
||||||
SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateMaterial, (void **)&pCreateMaterial, "CreateMaterial");
|
|
||||||
SetHook((void *)(**(DWORD **)lplpdd + 28), extCreateViewport, (void **)&pCreateViewport, "CreateViewport");
|
|
||||||
SetHook((void *)(**(DWORD **)lplpdd + 32), extFindDevice, (void **)&pFindDevice, "FindDevice");
|
|
||||||
break;
|
|
||||||
case 5:
|
|
||||||
SetHook((void *)(**(DWORD **)lplpdd + 0), extQueryInterfaceD3, (void **)&pQueryInterfaceD3, "QueryInterface(D3S)");
|
|
||||||
SetHook((void *)(**(DWORD **)lplpdd + 12), extEnumDevices, (void **)&pEnumDevices, "EnumDevices");
|
|
||||||
SetHook((void *)(**(DWORD **)lplpdd + 16), extCreateLight, (void **)&pCreateLight, "CreateLight");
|
|
||||||
SetHook((void *)(**(DWORD **)lplpdd + 20), extCreateMaterial, (void **)&pCreateMaterial, "CreateMaterial");
|
|
||||||
SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateViewport, (void **)&pCreateViewport, "CreateViewport");
|
|
||||||
SetHook((void *)(**(DWORD **)lplpdd + 28), extFindDevice, (void **)&pFindDevice, "FindDevice");
|
|
||||||
SetHook((void *)(**(DWORD **)lplpdd + 32), extCreateDevice2, (void **)&pCreateDevice2, "CreateDevice(D3D2)");
|
|
||||||
break;
|
|
||||||
case 6:
|
|
||||||
SetHook((void *)(**(DWORD **)lplpdd + 0), extQueryInterfaceD3, (void **)&pQueryInterfaceD3, "QueryInterface(D3S)");
|
|
||||||
SetHook((void *)(**(DWORD **)lplpdd + 12), extEnumDevices, (void **)&pEnumDevices, "EnumDevices");
|
|
||||||
SetHook((void *)(**(DWORD **)lplpdd + 16), extCreateLight, (void **)&pCreateLight, "CreateLight");
|
|
||||||
SetHook((void *)(**(DWORD **)lplpdd + 20), extCreateMaterial, (void **)&pCreateMaterial, "CreateMaterial");
|
|
||||||
SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateViewport, (void **)&pCreateViewport, "CreateViewport");
|
|
||||||
SetHook((void *)(**(DWORD **)lplpdd + 28), extFindDevice, (void **)&pFindDevice, "FindDevice");
|
|
||||||
SetHook((void *)(**(DWORD **)lplpdd + 32), extCreateDevice3, (void **)&pCreateDevice3, "CreateDevice(D3D3)");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void HookDirect3DDevice(void **lpd3ddev, int dxversion)
|
|
||||||
{
|
|
||||||
OutTraceDW("HookDirect3DDevice: d3ddev=%x d3dversion=%d\n", lpd3ddev, dxversion);
|
|
||||||
|
|
||||||
gD3DVersion = dxversion;
|
|
||||||
|
|
||||||
switch(dxversion){
|
|
||||||
case 1:
|
|
||||||
//SetHook((void *)(**(DWORD **)lpd3ddev + 16), extGetCaps1, (void **)&pGetCaps1, "GetCaps(1)");
|
|
||||||
SetHook((void *)(**(DWORD **)lpd3ddev + 76), extBeginScene1, (void **)&pBeginScene1, "BeginScene(1)");
|
|
||||||
SetHook((void *)(**(DWORD **)lpd3ddev + 80), extEndScene1, (void **)&pEndScene1, "EndScene(1)");
|
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
//SetHook((void *)(**(DWORD **)lpd3ddev + 12), extGetCaps2, (void **)&pGetCaps2, "GetCaps(2)");
|
SetHook((void *)(**(DWORD **)lpViewport + 12), extInitializeVP, (void **)&pInitializeVP, "Initialize(VP2)");
|
||||||
SetHook((void *)(**(DWORD **)lpd3ddev + 40), extBeginScene2, (void **)&pBeginScene2, "BeginScene(2)");
|
SetHook((void *)(**(DWORD **)lpViewport + 16), extGetViewport, (void **)&pGetViewport, "GetViewport(2)");
|
||||||
SetHook((void *)(**(DWORD **)lpd3ddev + 44), extEndScene2, (void **)&pEndScene2, "EndScene(2)");
|
SetHook((void *)(**(DWORD **)lpViewport + 20), extSetViewport, (void **)&pSetViewport, "SetViewport(2)");
|
||||||
SetHook((void *)(**(DWORD **)lpd3ddev + 92), extSetRenderState2, (void **)&pSetRenderState2, "SetRenderState(2)");
|
SetHook((void *)(**(DWORD **)lpViewport + 64), extGetViewport2_3, (void **)&pGetViewport2_3, "GetViewport2(2)");
|
||||||
if(pSetRenderState2){
|
SetHook((void *)(**(DWORD **)lpViewport + 68), extSetViewport2_3, (void **)&pSetViewport2_3, "SetViewport2(2)");
|
||||||
if(dxw.dwFlags2 & WIREFRAME)(*pSetRenderState2)(*lpd3ddev, D3DRENDERSTATE_FILLMODE, D3DFILL_WIREFRAME);
|
|
||||||
if(dxw.dwFlags4 & DISABLEFOGGING) (*pSetRenderState2)(*lpd3ddev, D3DRENDERSTATE_FOGENABLE, FALSE);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
SetHook((void *)(**(DWORD **)lpd3ddev + 12), extGetCaps3, (void **)&pGetCaps3, "GetCaps(3)");
|
SetHook((void *)(**(DWORD **)lpViewport + 12), extInitializeVP, (void **)&pInitializeVP, "Initialize(VP3)");
|
||||||
SetHook((void *)(**(DWORD **)lpd3ddev + 36), extBeginScene3, (void **)&pBeginScene3, "BeginScene(3)");
|
SetHook((void *)(**(DWORD **)lpViewport + 16), extGetViewport, (void **)&pGetViewport, "GetViewport(3)");
|
||||||
SetHook((void *)(**(DWORD **)lpd3ddev + 40), extEndScene3, (void **)&pEndScene3, "EndScene(3)");
|
SetHook((void *)(**(DWORD **)lpViewport + 20), extSetViewport, (void **)&pSetViewport, "SetViewport(3)");
|
||||||
SetHook((void *)(**(DWORD **)lpd3ddev + 88), extSetRenderState3, (void **)&pSetRenderState3, "SetRenderState(3)");
|
SetHook((void *)(**(DWORD **)lpViewport + 64), extGetViewport2_3, (void **)&pGetViewport2_3, "GetViewport2(3)");
|
||||||
SetHook((void *)(**(DWORD **)lpd3ddev + 96), extSetLightState3, (void **)&pSetLightState3, "SetLightState(3)");
|
SetHook((void *)(**(DWORD **)lpViewport + 68), extSetViewport2_3, (void **)&pSetViewport2_3, "SetViewport2(3)");
|
||||||
if(pSetRenderState3){
|
|
||||||
if(dxw.dwFlags2 & WIREFRAME)(*pSetRenderState3)(*lpd3ddev, D3DRENDERSTATE_FILLMODE, D3DFILL_WIREFRAME);
|
|
||||||
if(dxw.dwFlags4 & DISABLEFOGGING) (*pSetRenderState3)(*lpd3ddev, D3DRENDERSTATE_FOGENABLE, FALSE);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
HRESULT WINAPI extDirect3DCreate(UINT SDKVersion, LPDIRECT3D *lplpd3d, LPUNKNOWN pUnkOuter)
|
|
||||||
{
|
|
||||||
HRESULT res;
|
|
||||||
|
|
||||||
OutTraceD3D("Direct3DCreate: SDKVersion=%x UnkOuter=%x\n", SDKVersion, pUnkOuter);
|
|
||||||
res=(*pDirect3DCreate)(SDKVersion, lplpd3d, pUnkOuter);
|
|
||||||
|
|
||||||
if(res) {
|
|
||||||
OutTraceE("Direct3DCreate ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
HookDirect3DSession((LPDIRECTDRAW *)lplpd3d, SDKVersion);
|
|
||||||
OutTraceD3D("Direct3DCreate: d3d=%x\n", *lplpd3d);
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
void HookViewport(LPDIRECT3DVIEWPORT *lpViewport, int dxversion)
|
|
||||||
{
|
|
||||||
OutTraceDW("HookViewport: Viewport=%x d3dversion=%d\n", *lpViewport, dxversion);
|
|
||||||
|
|
||||||
switch(dxversion){
|
|
||||||
case 1:
|
|
||||||
case 5:
|
|
||||||
case 6:
|
|
||||||
case 7:
|
case 7:
|
||||||
SetHook((void *)(**(DWORD **)lpViewport + 12), extInitializeVP, (void **)&pInitializeVP, "Initialize(VP)");
|
|
||||||
SetHook((void *)(**(DWORD **)lpViewport + 16), extGetViewport, (void **)&pGetViewport, "GetViewport");
|
|
||||||
SetHook((void *)(**(DWORD **)lpViewport + 20), extSetViewport, (void **)&pSetViewport, "SetViewport");
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -294,28 +413,38 @@ HRESULT WINAPI extQueryInterfaceD3(void *lpd3d, REFIID riid, LPVOID *ppvObj)
|
|||||||
res=(*pQueryInterfaceD3)(lpd3d, riid, ppvObj);
|
res=(*pQueryInterfaceD3)(lpd3d, riid, ppvObj);
|
||||||
switch(riid.Data1){
|
switch(riid.Data1){
|
||||||
case 0x3BBA0080: d3dversion=1; break;
|
case 0x3BBA0080: d3dversion=1; break;
|
||||||
case 0x6aae1ec1: d3dversion=5; break;
|
case 0x6aae1ec1: d3dversion=2; break;
|
||||||
case 0xbb223240: d3dversion=6; break;
|
case 0xbb223240: d3dversion=3; break;
|
||||||
case 0xf5049e77: d3dversion=7; break;
|
case 0xf5049e77: d3dversion=7; break;
|
||||||
}
|
}
|
||||||
if(d3dversion) OutTraceDW("QueryInterface(D3): hooking version=%d\n", d3dversion);
|
if(d3dversion) OutTraceD3D("QueryInterface(D3): hooking version=%d\n", d3dversion);
|
||||||
switch(d3dversion){
|
switch(d3dversion){
|
||||||
case 1:
|
case 1:
|
||||||
SetHook((void *)(**(DWORD **)ppvObj + 12), extInitialize, (void **)&pInitialize, "Initialize");
|
SetHook((void *)(**(DWORD **)ppvObj + 12), extInitialize, (void **)&pInitialize, "Initialize");
|
||||||
SetHook((void *)(**(DWORD **)ppvObj + 16), extEnumDevices, (void **)&pEnumDevices, "EnumDevices");
|
SetHook((void *)(**(DWORD **)ppvObj + 16), extEnumDevices, (void **)&pEnumDevices, "EnumDevices");
|
||||||
SetHook((void *)(**(DWORD **)ppvObj + 20), extCreateLight, (void **)&pCreateLight, "CreateLight");
|
SetHook((void *)(**(DWORD **)ppvObj + 20), extCreateLight, (void **)&pCreateLight, "CreateLight");
|
||||||
SetHook((void *)(**(DWORD **)ppvObj + 24), extCreateMaterial, (void **)&pCreateMaterial, "CreateMaterial");
|
SetHook((void *)(**(DWORD **)ppvObj + 24), extCreateMaterial, (void **)&pCreateMaterial, "CreateMaterial");
|
||||||
SetHook((void *)(**(DWORD **)ppvObj + 28), extCreateViewport, (void **)&pCreateViewport, "CreateViewport");
|
SetHook((void *)(**(DWORD **)ppvObj + 28), extCreateViewport1, (void **)&pCreateViewport1, "CreateViewport(1)");
|
||||||
SetHook((void *)(**(DWORD **)ppvObj + 32), extFindDevice, (void **)&pFindDevice, "FindDevice");
|
SetHook((void *)(**(DWORD **)ppvObj + 32), extFindDevice, (void **)&pFindDevice, "FindDevice");
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 2:
|
||||||
case 6:
|
|
||||||
SetHook((void *)(**(DWORD **)ppvObj + 12), extEnumDevices, (void **)&pEnumDevices, "EnumDevices");
|
SetHook((void *)(**(DWORD **)ppvObj + 12), extEnumDevices, (void **)&pEnumDevices, "EnumDevices");
|
||||||
SetHook((void *)(**(DWORD **)ppvObj + 16), extCreateLight, (void **)&pCreateLight, "CreateLight");
|
SetHook((void *)(**(DWORD **)ppvObj + 16), extCreateLight, (void **)&pCreateLight, "CreateLight");
|
||||||
SetHook((void *)(**(DWORD **)ppvObj + 20), extCreateMaterial, (void **)&pCreateMaterial, "CreateMaterial");
|
SetHook((void *)(**(DWORD **)ppvObj + 20), extCreateMaterial, (void **)&pCreateMaterial, "CreateMaterial");
|
||||||
SetHook((void *)(**(DWORD **)ppvObj + 24), extCreateViewport, (void **)&pCreateViewport, "CreateViewport");
|
SetHook((void *)(**(DWORD **)ppvObj + 24), extCreateViewport2, (void **)&pCreateViewport2, "CreateViewport(2)");
|
||||||
SetHook((void *)(**(DWORD **)ppvObj + 28), extFindDevice, (void **)&pFindDevice, "FindDevice");
|
SetHook((void *)(**(DWORD **)ppvObj + 28), extFindDevice, (void **)&pFindDevice, "FindDevice");
|
||||||
break;
|
break;
|
||||||
|
case 3:
|
||||||
|
SetHook((void *)(**(DWORD **)ppvObj + 12), extEnumDevices, (void **)&pEnumDevices, "EnumDevices");
|
||||||
|
SetHook((void *)(**(DWORD **)ppvObj + 16), extCreateLight, (void **)&pCreateLight, "CreateLight");
|
||||||
|
SetHook((void *)(**(DWORD **)ppvObj + 20), extCreateMaterial, (void **)&pCreateMaterial, "CreateMaterial");
|
||||||
|
SetHook((void *)(**(DWORD **)ppvObj + 24), extCreateViewport3, (void **)&pCreateViewport3, "CreateViewport(3)");
|
||||||
|
SetHook((void *)(**(DWORD **)ppvObj + 28), extFindDevice, (void **)&pFindDevice, "FindDevice");
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
SetHook((void *)(**(DWORD **)ppvObj + 12), extEnumDevices7, (void **)&pEnumDevices7, "EnumDevices(7)");
|
||||||
|
SetHook((void *)(**(DWORD **)ppvObj + 32), extCreateDevice7, (void **)&pCreateDevice7, "CreateDevice(D3D7)");
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
@ -336,29 +465,38 @@ typedef struct {
|
|||||||
LPVOID arg;
|
LPVOID arg;
|
||||||
} CallbackArg;
|
} CallbackArg;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
LPD3DENUMDEVICESCALLBACK7 *cb;
|
||||||
|
LPVOID arg;
|
||||||
|
} CallbackArg7;
|
||||||
|
|
||||||
static void DumpD3DDevideDesc(LPD3DDEVICEDESC d3, char *label)
|
static void DumpD3DDevideDesc(LPD3DDEVICEDESC d3, char *label)
|
||||||
{
|
{
|
||||||
if(IsTraceD3D){
|
if(IsTraceD3D){
|
||||||
OutTrace("EnumDevices: CALLBACK dev=%s Size=%d Flags=%x ", label, d3->dwSize, d3->dwFlags);
|
if(d3){
|
||||||
if(d3->dwFlags & D3DDD_COLORMODEL) OutTrace("ColorModel=%x ", d3->dcmColorModel);
|
OutTrace("EnumDevices: CALLBACK dev=%s Size=%d Flags=%x ", label, d3->dwSize, d3->dwFlags);
|
||||||
if(d3->dwFlags & D3DDD_DEVCAPS) OutTrace("DevCaps=%x ", d3->dwDevCaps);
|
if(d3->dwFlags & D3DDD_COLORMODEL) OutTrace("ColorModel=%x ", d3->dcmColorModel);
|
||||||
if(d3->dwFlags & D3DDD_TRANSFORMCAPS) OutTrace("TransformCaps=%x ", d3->dtcTransformCaps.dwCaps);
|
if(d3->dwFlags & D3DDD_DEVCAPS) OutTrace("DevCaps=%x ", d3->dwDevCaps);
|
||||||
if(d3->dwFlags & D3DDD_LIGHTINGCAPS) OutTrace("LightingCaps=%x ", d3->dlcLightingCaps);
|
if(d3->dwFlags & D3DDD_TRANSFORMCAPS) OutTrace("TransformCaps=%x ", d3->dtcTransformCaps.dwCaps);
|
||||||
if(d3->dwFlags & D3DDD_BCLIPPING) OutTrace("Clipping=%x ", d3->bClipping);
|
if(d3->dwFlags & D3DDD_LIGHTINGCAPS) OutTrace("LightingCaps=%x ", d3->dlcLightingCaps);
|
||||||
if(d3->dwFlags & D3DDD_LINECAPS) OutTrace("LineCaps=%x ", d3->dpcLineCaps);
|
if(d3->dwFlags & D3DDD_BCLIPPING) OutTrace("Clipping=%x ", d3->bClipping);
|
||||||
if(d3->dwFlags & D3DDD_TRICAPS) OutTrace("TriCaps=%x ", d3->dpcTriCaps);
|
if(d3->dwFlags & D3DDD_LINECAPS) OutTrace("LineCaps=%x ", d3->dpcLineCaps);
|
||||||
if(d3->dwFlags & D3DDD_DEVICERENDERBITDEPTH) OutTrace("DeviceRenderBitDepth=%d ", d3->dwDeviceRenderBitDepth);
|
if(d3->dwFlags & D3DDD_TRICAPS) OutTrace("TriCaps=%x ", d3->dpcTriCaps);
|
||||||
if(d3->dwFlags & D3DDD_DEVICEZBUFFERBITDEPTH) OutTrace("DeviceZBufferBitDepth=%d ", d3->dwDeviceZBufferBitDepth);
|
if(d3->dwFlags & D3DDD_DEVICERENDERBITDEPTH) OutTrace("DeviceRenderBitDepth=%d ", d3->dwDeviceRenderBitDepth);
|
||||||
if(d3->dwFlags & D3DDD_MAXBUFFERSIZE) OutTrace("MaxBufferSize=%d ", d3->dwMaxBufferSize);
|
if(d3->dwFlags & D3DDD_DEVICEZBUFFERBITDEPTH) OutTrace("DeviceZBufferBitDepth=%d ", d3->dwDeviceZBufferBitDepth);
|
||||||
if(d3->dwFlags & D3DDD_MAXVERTEXCOUNT) OutTrace("MaxVertexCount=%d ", d3->dwMaxVertexCount);
|
if(d3->dwFlags & D3DDD_MAXBUFFERSIZE) OutTrace("MaxBufferSize=%d ", d3->dwMaxBufferSize);
|
||||||
OutTrace("\n");
|
if(d3->dwFlags & D3DDD_MAXVERTEXCOUNT) OutTrace("MaxVertexCount=%d ", d3->dwMaxVertexCount);
|
||||||
|
OutTrace("\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
OutTrace("EnumDevices: CALLBACK dev=%s ddesc=NULL\n", label);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI extDeviceProxy(GUID FAR *lpGuid, LPSTR lpDeviceDescription, LPSTR lpDeviceName, LPD3DDEVICEDESC lpd3ddd1, LPD3DDEVICEDESC lpd3ddd2, LPVOID arg)
|
HRESULT WINAPI extDeviceProxy(GUID FAR *lpGuid, LPSTR lpDeviceDescription, LPSTR lpDeviceName, LPD3DDEVICEDESC lpd3ddd1, LPD3DDEVICEDESC lpd3ddd2, LPVOID arg)
|
||||||
{
|
{
|
||||||
HRESULT res;
|
HRESULT res;
|
||||||
OutTraceDW("EnumDevices: CALLBACK GUID=%x(%s) DeviceDescription=\"%s\", DeviceName=\"%s\", arg=%x\n", lpGuid->Data1, ExplainGUID(lpGuid), lpDeviceDescription, lpDeviceName, ((CallbackArg *)arg)->arg);
|
OutTraceD3D("EnumDevices: CALLBACK GUID=%x(%s) DeviceDescription=\"%s\", DeviceName=\"%s\", arg=%x\n", lpGuid->Data1, ExplainGUID(lpGuid), lpDeviceDescription, lpDeviceName, ((CallbackArg *)arg)->arg);
|
||||||
DumpD3DDevideDesc(lpd3ddd1, "HWDEV");
|
DumpD3DDevideDesc(lpd3ddd1, "HWDEV");
|
||||||
DumpD3DDevideDesc(lpd3ddd2, "SWDEV");
|
DumpD3DDevideDesc(lpd3ddd2, "SWDEV");
|
||||||
if(dxw.dwFlags4 & NOPOWER2FIX){
|
if(dxw.dwFlags4 & NOPOWER2FIX){
|
||||||
@ -374,7 +512,26 @@ HRESULT WINAPI extDeviceProxy(GUID FAR *lpGuid, LPSTR lpDeviceDescription, LPSTR
|
|||||||
else {
|
else {
|
||||||
res = (*(((CallbackArg *)arg)->cb))(lpGuid, lpDeviceDescription, lpDeviceName, lpd3ddd1, lpd3ddd2, ((CallbackArg *)arg)->arg);
|
res = (*(((CallbackArg *)arg)->cb))(lpGuid, lpDeviceDescription, lpDeviceName, lpd3ddd1, lpd3ddd2, ((CallbackArg *)arg)->arg);
|
||||||
}
|
}
|
||||||
OutTraceDW("EnumDevices: CALLBACK ret=%x\n", res);
|
OutTraceD3D("EnumDevices: CALLBACK ret=%x\n", res);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT WINAPI extDeviceProxy7(LPSTR lpDeviceDescription, LPSTR lpDeviceName, LPD3DDEVICEDESC7 lpd3ddd, LPVOID arg)
|
||||||
|
{
|
||||||
|
HRESULT res;
|
||||||
|
OutTraceD3D("EnumDevices(D3D7): CALLBACK DeviceDescription=\"%s\", DeviceName=\"%s\", arg=%x\n", lpDeviceDescription, lpDeviceName, ((CallbackArg *)arg)->arg);
|
||||||
|
DumpD3DDevideDesc((LPD3DDEVICEDESC)lpd3ddd, "DEV");
|
||||||
|
if(dxw.dwFlags4 & NOPOWER2FIX){
|
||||||
|
D3DDEVICEDESC7 lpd3dddfix;
|
||||||
|
if(lpd3ddd) memcpy(&lpd3dddfix, lpd3ddd, sizeof(D3DDEVICEDESC7));
|
||||||
|
lpd3dddfix.dpcLineCaps.dwTextureCaps|=D3DPTEXTURECAPS_NONPOW2CONDITIONAL|D3DPTEXTURECAPS_POW2;
|
||||||
|
lpd3dddfix.dpcTriCaps.dwTextureCaps|=D3DPTEXTURECAPS_NONPOW2CONDITIONAL|D3DPTEXTURECAPS_POW2;
|
||||||
|
res = (*(((CallbackArg7 *)arg)->cb))(lpDeviceDescription, lpDeviceName, lpd3ddd?&lpd3dddfix:NULL, ((CallbackArg7 *)arg)->arg);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
res = (*(((CallbackArg7 *)arg)->cb))(lpDeviceDescription, lpDeviceName, lpd3ddd, ((CallbackArg7 *)arg)->arg);
|
||||||
|
}
|
||||||
|
OutTraceD3D("EnumDevices: CALLBACK ret=%x\n", res);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -392,6 +549,20 @@ HRESULT WINAPI extEnumDevices(void *lpd3d, LPD3DENUMDEVICESCALLBACK cb, LPVOID a
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HRESULT WINAPI extEnumDevices7(void *lpd3d, LPD3DENUMDEVICESCALLBACK7 cb, LPVOID arg)
|
||||||
|
{
|
||||||
|
HRESULT res;
|
||||||
|
CallbackArg7 Arg;
|
||||||
|
|
||||||
|
OutTraceD3D("EnumDevices: d3d=%x arg=%x\n", lpd3d, arg);
|
||||||
|
Arg.cb= &cb;
|
||||||
|
Arg.arg=arg;
|
||||||
|
res=(*pEnumDevices7)(lpd3d, (LPD3DENUMDEVICESCALLBACK7)extDeviceProxy7, (LPVOID)&Arg);
|
||||||
|
if(res) OutTraceE("EnumDevices ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
|
||||||
|
else OutTraceD3D("EnumDevices: OK\n");
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
HRESULT WINAPI extCreateLight(void *lpd3d, LPDIRECT3DLIGHT *lpLight, IUnknown *p0)
|
HRESULT WINAPI extCreateLight(void *lpd3d, LPDIRECT3DLIGHT *lpLight, IUnknown *p0)
|
||||||
{
|
{
|
||||||
HRESULT res;
|
HRESULT res;
|
||||||
@ -414,15 +585,39 @@ HRESULT WINAPI extCreateMaterial(void *lpd3d, LPDIRECT3DMATERIAL *lpMaterial, IU
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI extCreateViewport(void *lpd3d, LPDIRECT3DVIEWPORT *lpViewport, IUnknown *p0)
|
HRESULT WINAPI extCreateViewport1(void *lpd3d, LPDIRECT3DVIEWPORT *lpViewport, IUnknown *p0)
|
||||||
{
|
{
|
||||||
HRESULT res;
|
HRESULT res;
|
||||||
|
|
||||||
OutTraceD3D("CreateViewport: d3d=%x\n", lpd3d);
|
OutTraceD3D("CreateViewport(1): d3d=%x\n", lpd3d);
|
||||||
res=(*pCreateViewport)(lpd3d, lpViewport, p0);
|
res=(*pCreateViewport1)(lpd3d, lpViewport, p0);
|
||||||
if(res) OutTraceE("CreateViewport ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
|
if(res) OutTraceE("CreateViewport ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
|
||||||
else OutTraceD3D("CreateViewport: Viewport=%x\n", *lpViewport);
|
else OutTraceD3D("CreateViewport: Viewport=%x\n", *lpViewport);
|
||||||
HookViewport(lpViewport, gD3DVersion);
|
HookViewport(lpViewport, 1);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT WINAPI extCreateViewport2(void *lpd3d, LPDIRECT3DVIEWPORT2 *lpViewport, IUnknown *p0)
|
||||||
|
{
|
||||||
|
HRESULT res;
|
||||||
|
|
||||||
|
OutTraceD3D("CreateViewport(2): d3d=%x\n", lpd3d);
|
||||||
|
res=(*pCreateViewport2)(lpd3d, lpViewport, p0);
|
||||||
|
if(res) OutTraceE("CreateViewport(2) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
|
||||||
|
else OutTraceD3D("CreateViewport(2): Viewport=%x\n", *lpViewport);
|
||||||
|
HookViewport((LPDIRECT3DVIEWPORT *)lpViewport, 2);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT WINAPI extCreateViewport3(void *lpd3d, LPDIRECT3DVIEWPORT3 *lpViewport, IUnknown *p0)
|
||||||
|
{
|
||||||
|
HRESULT res;
|
||||||
|
|
||||||
|
OutTraceD3D("CreateViewport(3): d3d=%x\n", lpd3d);
|
||||||
|
res=(*pCreateViewport3)(lpd3d, lpViewport, p0);
|
||||||
|
if(res) OutTraceE("CreateViewport(3) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
|
||||||
|
else OutTraceD3D("CreateViewport(3): Viewport=%x\n", *lpViewport);
|
||||||
|
HookViewport((LPDIRECT3DVIEWPORT *)lpViewport, 3);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -447,7 +642,7 @@ HRESULT WINAPI extSetViewport(void *lpvp, LPD3DVIEWPORT vpd)
|
|||||||
HRESULT res;
|
HRESULT res;
|
||||||
|
|
||||||
OutTraceD3D("SetViewport: viewport=%x viewportd=%x size=%d pos=(%d,%d) dim=(%dx%d) scale=(%fx%f) maxXYZ=(%f,%f,%f) minZ=%f\n",
|
OutTraceD3D("SetViewport: viewport=%x viewportd=%x size=%d pos=(%d,%d) dim=(%dx%d) scale=(%fx%f) maxXYZ=(%f,%f,%f) minZ=%f\n",
|
||||||
lpvp, vpd, vpd->dwSize, vpd->dwX, vpd->dwY, vpd->dwHeight, vpd->dwWidth, vpd->dvScaleX, vpd->dvScaleY,
|
lpvp, vpd, vpd->dwSize, vpd->dwX, vpd->dwY, vpd->dwWidth, vpd->dwHeight, vpd->dvScaleX, vpd->dvScaleY,
|
||||||
vpd->dvMaxX, vpd->dvMaxY, vpd->dvMaxZ, vpd->dvMinZ);
|
vpd->dvMaxX, vpd->dvMaxY, vpd->dvMaxZ, vpd->dvMinZ);
|
||||||
res=(*pSetViewport)(lpvp, vpd);
|
res=(*pSetViewport)(lpvp, vpd);
|
||||||
if(res) OutTraceE("SetViewport ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
|
if(res) OutTraceE("SetViewport ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
|
||||||
@ -463,7 +658,7 @@ HRESULT WINAPI extGetViewport(void *lpvp, LPD3DVIEWPORT vpd)
|
|||||||
res=(*pGetViewport)(lpvp, vpd);
|
res=(*pGetViewport)(lpvp, vpd);
|
||||||
if(res) OutTraceE("GetViewport ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
|
if(res) OutTraceE("GetViewport ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
|
||||||
else OutTraceD3D("GetViewport: OK size=%d pos=(%d,%d) dim=(%dx%d) scale=(%fx%f) maxXYZ=(%f,%f,%f) minZ=%f\n",
|
else OutTraceD3D("GetViewport: OK size=%d pos=(%d,%d) dim=(%dx%d) scale=(%fx%f) maxXYZ=(%f,%f,%f) minZ=%f\n",
|
||||||
vpd->dwSize, vpd->dwX, vpd->dwY, vpd->dwHeight, vpd->dwWidth, vpd->dvScaleX, vpd->dvScaleY,
|
vpd->dwSize, vpd->dwX, vpd->dwY, vpd->dwWidth, vpd->dwHeight, vpd->dvScaleX, vpd->dvScaleY,
|
||||||
vpd->dvMaxX, vpd->dvMaxY, vpd->dvMaxZ, vpd->dvMinZ);
|
vpd->dvMaxX, vpd->dvMaxY, vpd->dvMaxZ, vpd->dvMinZ);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
@ -530,6 +725,22 @@ HRESULT WINAPI extCreateDevice3(void *lpd3d, REFCLSID Guid, LPDIRECTDRAWSURFACE4
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HRESULT WINAPI extCreateDevice7(void *lpd3d, REFCLSID Guid, LPDIRECTDRAWSURFACE7 lpdds, LPDIRECT3DDEVICE7 *lplpd3dd)
|
||||||
|
{
|
||||||
|
HRESULT res;
|
||||||
|
|
||||||
|
OutTraceD3D("CreateDevice(D3D7): d3d=%x GUID=%x(%s) lpdds=%x\n", lpd3d, Guid.Data1, ExplainGUID((GUID *)&Guid), lpdds);
|
||||||
|
res=(*pCreateDevice7)(lpd3d, Guid, lpdds, lplpd3dd);
|
||||||
|
if(res) {
|
||||||
|
OutTraceE("CreateDevice(D3D7) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
HookDirect3DDevice((void **)lplpd3dd, 7);
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
HRESULT WINAPI extD3DInitialize(void *d3dd, LPDIRECT3D lpd3d, LPGUID lpGuid, LPD3DDEVICEDESC lpd3dd)
|
HRESULT WINAPI extD3DInitialize(void *d3dd, LPDIRECT3D lpd3d, LPGUID lpGuid, LPD3DDEVICEDESC lpd3dd)
|
||||||
{
|
{
|
||||||
HRESULT res;
|
HRESULT res;
|
||||||
@ -596,11 +807,11 @@ HRESULT WINAPI extSetRenderState2(void *d3dd, D3DRENDERSTATETYPE State, DWORD Va
|
|||||||
DWORD OldValue;
|
DWORD OldValue;
|
||||||
OldValue = Value;
|
OldValue = Value;
|
||||||
Value = D3DCMP_ALWAYS;
|
Value = D3DCMP_ALWAYS;
|
||||||
OutTraceDW("SetRenderState: FIXED State=ZFUNC Value=%s->D3DCMP_ALWAYS\n", ExplainRenderstateValue(OldValue));
|
OutTraceD3D("SetRenderState: FIXED State=ZFUNC Value=%s->D3DCMP_ALWAYS\n", ExplainRenderstateValue(OldValue));
|
||||||
}
|
}
|
||||||
if((dxw.dwFlags2 & WIREFRAME) && (State == D3DRENDERSTATE_FILLMODE)){
|
if((dxw.dwFlags2 & WIREFRAME) && (State == D3DRENDERSTATE_FILLMODE)){
|
||||||
Value = D3DFILL_WIREFRAME;
|
Value = D3DFILL_WIREFRAME;
|
||||||
OutTraceDW("SetRenderState: FIXED State=FILLMODE Value=D3DFILL_WIREFRAME\n");
|
OutTraceD3D("SetRenderState: FIXED State=FILLMODE Value=D3DFILL_WIREFRAME\n");
|
||||||
}
|
}
|
||||||
res=(*pSetRenderState2)(d3dd, State, Value);
|
res=(*pSetRenderState2)(d3dd, State, Value);
|
||||||
if(res) OutTraceE("SetRenderState(2): res=%x(%s)\n", res, ExplainDDError(res));
|
if(res) OutTraceE("SetRenderState(2): res=%x(%s)\n", res, ExplainDDError(res));
|
||||||
@ -615,14 +826,14 @@ HRESULT WINAPI extSetRenderState3(void *d3dd, D3DRENDERSTATETYPE State, DWORD Va
|
|||||||
DWORD OldValue;
|
DWORD OldValue;
|
||||||
OldValue = Value;
|
OldValue = Value;
|
||||||
Value = D3DCMP_ALWAYS;
|
Value = D3DCMP_ALWAYS;
|
||||||
OutTraceDW("SetRenderState: FIXED State=ZFUNC Value=%s->D3DCMP_ALWAYS\n", ExplainRenderstateValue(OldValue));
|
OutTraceD3D("SetRenderState: FIXED State=ZFUNC Value=%s->D3DCMP_ALWAYS\n", ExplainRenderstateValue(OldValue));
|
||||||
}
|
}
|
||||||
if((dxw.dwFlags2 & WIREFRAME) && (State == D3DRENDERSTATE_FILLMODE)){
|
if((dxw.dwFlags2 & WIREFRAME) && (State == D3DRENDERSTATE_FILLMODE)){
|
||||||
Value = D3DFILL_WIREFRAME;
|
Value = D3DFILL_WIREFRAME;
|
||||||
OutTraceDW("SetRenderState: FIXED State=FILLMODE Value=D3DFILL_WIREFRAME\n");
|
OutTraceD3D("SetRenderState: FIXED State=FILLMODE Value=D3DFILL_WIREFRAME\n");
|
||||||
}
|
}
|
||||||
if((dxw.dwFlags4 & DISABLEFOGGING) && (State == D3DRENDERSTATE_FOGENABLE)){
|
if((dxw.dwFlags4 & DISABLEFOGGING) && (State == D3DRENDERSTATE_FOGENABLE)){
|
||||||
OutTraceDW("SetRenderState: FIXED State=FOGENABLE Value=FALSE\n");
|
OutTraceD3D("SetRenderState: FIXED State=FOGENABLE Value=FALSE\n");
|
||||||
Value = FALSE;
|
Value = FALSE;
|
||||||
}
|
}
|
||||||
res=(*pSetRenderState3)(d3dd, State, Value);
|
res=(*pSetRenderState3)(d3dd, State, Value);
|
||||||
@ -656,7 +867,7 @@ HRESULT WINAPI extBeginScene2(void *d3dd)
|
|||||||
d3dRect.y1 = vpd.dwY;
|
d3dRect.y1 = vpd.dwY;
|
||||||
d3dRect.x2 = vpd.dwX + vpd.dwWidth;
|
d3dRect.x2 = vpd.dwX + vpd.dwWidth;
|
||||||
d3dRect.y2 = vpd.dwY + vpd.dwHeight;
|
d3dRect.y2 = vpd.dwY + vpd.dwHeight;
|
||||||
OutTraceDW("d3dRect=(%d,%d)-(%d,%d)\n", d3dRect.x1, d3dRect.y1, d3dRect.x2, d3dRect.y2);
|
OutTraceD3D("d3dRect=(%d,%d)-(%d,%d)\n", d3dRect.x1, d3dRect.y1, d3dRect.x2, d3dRect.y2);
|
||||||
vp->Clear(1, &d3dRect, D3DCLEAR_ZBUFFER);
|
vp->Clear(1, &d3dRect, D3DCLEAR_ZBUFFER);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -682,7 +893,7 @@ HRESULT WINAPI extBeginScene3(void *d3dd)
|
|||||||
d3dRect.y1 = vpd.dwY;
|
d3dRect.y1 = vpd.dwY;
|
||||||
d3dRect.x2 = vpd.dwX + vpd.dwWidth;
|
d3dRect.x2 = vpd.dwX + vpd.dwWidth;
|
||||||
d3dRect.y2 = vpd.dwY + vpd.dwHeight;
|
d3dRect.y2 = vpd.dwY + vpd.dwHeight;
|
||||||
OutTraceDW("d3dRect=(%d,%d)-(%d,%d)\n", d3dRect.x1, d3dRect.y1, d3dRect.x2, d3dRect.y2);
|
OutTraceD3D("d3dRect=(%d,%d)-(%d,%d)\n", d3dRect.x1, d3dRect.y1, d3dRect.x2, d3dRect.y2);
|
||||||
if(dxw.dwFlags4 & ZBUFFERCLEAN )vp->Clear2(1, &d3dRect, D3DCLEAR_ZBUFFER, 0, 1.0, 0);
|
if(dxw.dwFlags4 & ZBUFFERCLEAN )vp->Clear2(1, &d3dRect, D3DCLEAR_ZBUFFER, 0, 1.0, 0);
|
||||||
if(dxw.dwFlags4 & ZBUFFER0CLEAN)vp->Clear2(1, &d3dRect, D3DCLEAR_ZBUFFER, 0, 0.0, 0);
|
if(dxw.dwFlags4 & ZBUFFER0CLEAN)vp->Clear2(1, &d3dRect, D3DCLEAR_ZBUFFER, 0, 0.0, 0);
|
||||||
}
|
}
|
||||||
@ -752,3 +963,208 @@ HRESULT WINAPI extSetLightState3(void *d3dd, D3DLIGHTSTATETYPE d3dls, DWORD t)
|
|||||||
if(res) OutTraceE("SetLightState(3): ERROR res=%x(%s)\n", res, ExplainDDError(res));
|
if(res) OutTraceE("SetLightState(3): ERROR res=%x(%s)\n", res, ExplainDDError(res));
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HRESULT WINAPI extSetViewport2(void *d3dd, LPD3DVIEWPORT lpd3dvp)
|
||||||
|
{
|
||||||
|
HRESULT res;
|
||||||
|
OutTraceD3D("SetViewport(2): d3d=%x d3dvp=%x\n", d3dd, lpd3dvp);
|
||||||
|
res=(*pSetViewport2)(d3dd, lpd3dvp);
|
||||||
|
if(res) OutTraceE("SetViewport(2): ERROR res=%x(%s)\n", res, ExplainDDError(res));
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT WINAPI extGetViewport2(void *d3dd, LPD3DVIEWPORT lpd3dvp)
|
||||||
|
{
|
||||||
|
HRESULT res;
|
||||||
|
OutTraceD3D("GetViewport(2): d3d=%x d3dvp=%x\n", d3dd, lpd3dvp);
|
||||||
|
res=(*pGetViewport2)(d3dd, lpd3dvp);
|
||||||
|
if(res) OutTraceE("GetViewport(2): ERROR res=%x(%s)\n", res, ExplainDDError(res));
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT WINAPI extSetViewport3(void *d3dd, LPD3DVIEWPORT lpd3dvp)
|
||||||
|
{
|
||||||
|
HRESULT res;
|
||||||
|
OutTraceD3D("SetViewport(3): d3d=%x d3dvp=%x\n", d3dd, lpd3dvp);
|
||||||
|
res=(*pSetViewport3)(d3dd, lpd3dvp);
|
||||||
|
if(res) OutTraceE("SetViewport(3): ERROR res=%x(%s)\n", res, ExplainDDError(res));
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT WINAPI extGetViewport3(void *d3dd, LPD3DVIEWPORT lpd3dvp)
|
||||||
|
{
|
||||||
|
HRESULT res;
|
||||||
|
OutTraceD3D("GetViewport(3): d3d=%x d3dvp=%x\n", d3dd, lpd3dvp);
|
||||||
|
res=(*pGetViewport3)(d3dd, lpd3dvp);
|
||||||
|
if(res) OutTraceE("GetViewport(3): ERROR res=%x(%s)\n", res, ExplainDDError(res));
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT WINAPI extSetViewport7(void *d3dd, LPD3DVIEWPORT7 lpd3dvp)
|
||||||
|
{
|
||||||
|
HRESULT res;
|
||||||
|
OutTraceD3D("SetViewport(7): d3d=%x d3dvp=%x\n", d3dd, lpd3dvp);
|
||||||
|
res=(*pSetViewport7)(d3dd, lpd3dvp);
|
||||||
|
if(res) OutTraceE("SetViewport(7): ERROR res=%x(%s)\n", res, ExplainDDError(res));
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT WINAPI extGetViewport7(void *d3dd, LPD3DVIEWPORT7 lpd3dvp)
|
||||||
|
{
|
||||||
|
HRESULT res;
|
||||||
|
OutTraceD3D("GetViewport(7): d3d=%x d3dvp=%x\n", d3dd, lpd3dvp);
|
||||||
|
res=(*pGetViewport7)(d3dd, lpd3dvp);
|
||||||
|
if(res) OutTraceE("GetViewport(7): ERROR res=%x(%s)\n", res, ExplainDDError(res));
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT WINAPI extAddViewport1(void *d3dd, LPDIRECT3DVIEWPORT lpd3dvp)
|
||||||
|
{
|
||||||
|
HRESULT res;
|
||||||
|
OutTraceD3D("AddViewport(1): d3d=%x d3dvp=%x\n", d3dd, lpd3dvp);
|
||||||
|
res=(*pAddViewport1)(d3dd, lpd3dvp);
|
||||||
|
if(res) {
|
||||||
|
OutTraceE("AddViewport(1): ERROR res=%x(%s)\n", res, ExplainDDError(res));
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
HookViewport(&lpd3dvp, 1);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT WINAPI extAddViewport2(void *d3dd, LPDIRECT3DVIEWPORT2 lpd3dvp)
|
||||||
|
{
|
||||||
|
HRESULT res;
|
||||||
|
OutTraceD3D("AddViewport(2): d3d=%x d3dvp=%x\n", d3dd, lpd3dvp);
|
||||||
|
res=(*pAddViewport2)(d3dd, lpd3dvp);
|
||||||
|
if(res) {
|
||||||
|
OutTraceE("AddViewport(2): ERROR res=%x(%s)\n", res, ExplainDDError(res));
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
HookViewport((LPDIRECT3DVIEWPORT *)&lpd3dvp, 2);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT WINAPI extAddViewport3(void *d3dd, LPDIRECT3DVIEWPORT3 lpd3dvp)
|
||||||
|
{
|
||||||
|
HRESULT res;
|
||||||
|
OutTraceD3D("AddViewport(3): d3d=%x d3dvp=%x\n", d3dd, lpd3dvp);
|
||||||
|
res=(*pAddViewport3)(d3dd, lpd3dvp);
|
||||||
|
if(res) {
|
||||||
|
OutTraceE("AddViewport(3): ERROR res=%x(%s)\n", res, ExplainDDError(res));
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
HookViewport((LPDIRECT3DVIEWPORT *)&lpd3dvp, 3);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT WINAPI extSetViewport2_3(void *lpvp, LPD3DVIEWPORT2 vpd)
|
||||||
|
{
|
||||||
|
HRESULT res;
|
||||||
|
|
||||||
|
OutTraceD3D("SetViewport2(VP3): viewport=%x viewportd=%x size=%d pos=(%d,%d) dim=(%dx%d)\n",
|
||||||
|
lpvp, vpd, vpd->dwSize, vpd->dwX, vpd->dwY, vpd->dwWidth, vpd->dwHeight);
|
||||||
|
res=(*pSetViewport2_3)(lpvp, vpd);
|
||||||
|
if(res) OutTraceE("SetViewport2(VP3) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
|
||||||
|
else OutTraceD3D("SetViewport2(VP3): OK\n");
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT WINAPI extGetViewport2_3(void *lpvp, LPD3DVIEWPORT2 vpd)
|
||||||
|
{
|
||||||
|
HRESULT res;
|
||||||
|
|
||||||
|
OutTraceD3D("GetViewport2(VP3): viewport=%x viewportd=%x\n", lpvp, vpd);
|
||||||
|
res=(*pGetViewport2_3)(lpvp, vpd);
|
||||||
|
if(res) OutTraceE("GetViewport2(VP3) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
|
||||||
|
else OutTraceD3D("GetViewport2(VP3): OK size=%d pos=(%d,%d) dim=(%dx%d)\n",
|
||||||
|
vpd->dwSize, vpd->dwX, vpd->dwY, vpd->dwWidth, vpd->dwHeight);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT WINAPI extGetCurrentViewport2(void *d3dd, LPDIRECT3DVIEWPORT2 *lpd3dvp)
|
||||||
|
{
|
||||||
|
HRESULT res;
|
||||||
|
OutTraceD3D("GetCurrentViewport(D3DD2): d3dd=%x viewportd=%x\n", d3dd, lpd3dvp);
|
||||||
|
res=(*pGetCurrentViewport2)(d3dd, lpd3dvp);
|
||||||
|
if(res) {
|
||||||
|
OutTraceE("GetCurrentViewport(D3DD2) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
HookViewport((LPDIRECT3DVIEWPORT *)lpd3dvp, 2);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT WINAPI extSetCurrentViewport2(void *d3dd, LPDIRECT3DVIEWPORT2 lpd3dvp)
|
||||||
|
{
|
||||||
|
HRESULT res;
|
||||||
|
|
||||||
|
OutTraceD3D("SetCurrentViewport(D3DD2): d3dd=%x viewportd=%x\n", d3dd, lpd3dvp);
|
||||||
|
res=(*pSetCurrentViewport2)(d3dd, lpd3dvp);
|
||||||
|
if(res) OutTraceE("SetCurrentViewport(D3DD2) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
|
||||||
|
else OutTraceD3D("SetCurrentViewport(D3DD2): OK\n");
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT WINAPI extGetCurrentViewport3(void *d3dd, LPDIRECT3DVIEWPORT3 *lpd3dvp)
|
||||||
|
{
|
||||||
|
HRESULT res;
|
||||||
|
OutTraceD3D("GetCurrentViewport(D3DD3): d3dd=%x viewportd=%x\n", d3dd, lpd3dvp);
|
||||||
|
res=(*pGetCurrentViewport3)(d3dd, lpd3dvp);
|
||||||
|
if(res) {
|
||||||
|
OutTraceE("GetCurrentViewport(D3DD3) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
HookViewport((LPDIRECT3DVIEWPORT *)lpd3dvp, 3);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT WINAPI extSetCurrentViewport3(void *lpvp, LPDIRECT3DVIEWPORT3 vpd)
|
||||||
|
{
|
||||||
|
HRESULT res;
|
||||||
|
|
||||||
|
OutTraceD3D("SetCurrentViewport(D3DD3): viewport=%x\n", lpvp, vpd);
|
||||||
|
res=(*pSetCurrentViewport3)(lpvp, vpd);
|
||||||
|
if(res) OutTraceE("SetCurrentViewport(D3DD3) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
|
||||||
|
else OutTraceD3D("SetCurrentViewport(D3DD3): OK\n");
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT WINAPI extDeleteViewport1(void *d3dd, LPDIRECT3DVIEWPORT lpd3dvp)
|
||||||
|
{
|
||||||
|
HRESULT res;
|
||||||
|
OutTraceD3D("DeletetViewport(D3DD1): d3dd=%x viewport=%x\n", d3dd, lpd3dvp);
|
||||||
|
res=(*pDeleteViewport1)(d3dd, lpd3dvp);
|
||||||
|
if(res) OutTraceE("DeletetViewport(D3DD1) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
|
||||||
|
else OutTraceD3D("DeletetViewport(D3DD1): OK\n");
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT WINAPI extNextViewport1(void *d3dd, LPDIRECT3DVIEWPORT lpd3dvp, LPDIRECT3DVIEWPORT *vpnext, DWORD dw)
|
||||||
|
{
|
||||||
|
HRESULT res;
|
||||||
|
OutTraceD3D("NextViewport(D3DD1): d3dd=%x viewport=%x dw=%x\n", d3dd, lpd3dvp);
|
||||||
|
res=(*pNextViewport1)(d3dd, lpd3dvp, vpnext, dw);
|
||||||
|
if(res) OutTraceE("NextViewport(D3DD1) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
|
||||||
|
else OutTraceD3D("NextViewport(D3DD1): next=%x\n", *vpnext);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT WINAPI extDeleteViewport2(void *d3dd, LPDIRECT3DVIEWPORT2 lpd3dvp)
|
||||||
|
{
|
||||||
|
HRESULT res;
|
||||||
|
OutTraceD3D("DeletetViewport(D3DD2): d3dd=%x viewport=%x\n", d3dd, lpd3dvp);
|
||||||
|
res=(*pDeleteViewport2)(d3dd, lpd3dvp);
|
||||||
|
if(res) OutTraceE("DeletetViewport(D3DD2) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
|
||||||
|
else OutTraceD3D("DeletetViewport(D3DD2): OK\n");
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT WINAPI extNextViewport2(void *d3dd, LPDIRECT3DVIEWPORT2 lpd3dvp, LPDIRECT3DVIEWPORT2 *vpnext, DWORD dw)
|
||||||
|
{
|
||||||
|
HRESULT res;
|
||||||
|
OutTraceD3D("NextViewport(D3DD2): d3dd=%x viewport=%x dw=%x\n", d3dd, lpd3dvp);
|
||||||
|
res=(*pNextViewport2)(d3dd, lpd3dvp, vpnext, dw);
|
||||||
|
if(res) OutTraceE("NextViewport(D3DD2) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
|
||||||
|
else OutTraceD3D("NextViewport(D3DD2): next=%x\n", *vpnext);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
@ -168,6 +168,7 @@ typedef int (WINAPI *MapWindowPoints_Type)(HWND, HWND, LPPOINT, UINT);
|
|||||||
typedef BOOL (WINAPI *MoveWindow_Type)(HWND, int, int, int, int, BOOL);
|
typedef BOOL (WINAPI *MoveWindow_Type)(HWND, int, int, int, int, BOOL);
|
||||||
typedef BOOL (WINAPI *PeekMessage_Type)(LPMSG, HWND, UINT, UINT, UINT);
|
typedef BOOL (WINAPI *PeekMessage_Type)(LPMSG, HWND, UINT, UINT, UINT);
|
||||||
typedef ATOM (WINAPI *RegisterClassExA_Type)(WNDCLASSEX *);
|
typedef ATOM (WINAPI *RegisterClassExA_Type)(WNDCLASSEX *);
|
||||||
|
typedef ATOM (WINAPI *RegisterClassA_Type)(WNDCLASS *);
|
||||||
typedef int (WINAPI *GDIReleaseDC_Type)(HWND, HDC);
|
typedef int (WINAPI *GDIReleaseDC_Type)(HWND, HDC);
|
||||||
typedef BOOL (WINAPI *ScreenToClient_Type)(HWND, LPPOINT);
|
typedef BOOL (WINAPI *ScreenToClient_Type)(HWND, LPPOINT);
|
||||||
typedef LRESULT (WINAPI *SendMessage_Type)(HWND, UINT, WPARAM, LPARAM);
|
typedef LRESULT (WINAPI *SendMessage_Type)(HWND, UINT, WPARAM, LPARAM);
|
||||||
@ -365,6 +366,7 @@ DXWEXTERN MapWindowPoints_Type pMapWindowPoints DXWINITIALIZED;
|
|||||||
DXWEXTERN MoveWindow_Type pMoveWindow DXWINITIALIZED;
|
DXWEXTERN MoveWindow_Type pMoveWindow DXWINITIALIZED;
|
||||||
DXWEXTERN PeekMessage_Type pPeekMessage DXWINITIALIZED;
|
DXWEXTERN PeekMessage_Type pPeekMessage DXWINITIALIZED;
|
||||||
DXWEXTERN RegisterClassExA_Type pRegisterClassExA DXWINITIALIZED;
|
DXWEXTERN RegisterClassExA_Type pRegisterClassExA DXWINITIALIZED;
|
||||||
|
DXWEXTERN RegisterClassA_Type pRegisterClassA DXWINITIALIZED;
|
||||||
DXWEXTERN GDIReleaseDC_Type pGDIReleaseDC DXWINITIALIZED;
|
DXWEXTERN GDIReleaseDC_Type pGDIReleaseDC DXWINITIALIZED;
|
||||||
DXWEXTERN ScreenToClient_Type pScreenToClient DXWINITIALIZED;
|
DXWEXTERN ScreenToClient_Type pScreenToClient DXWINITIALIZED;
|
||||||
DXWEXTERN SendMessage_Type pSendMessageA DXWINITIALIZED;
|
DXWEXTERN SendMessage_Type pSendMessageA DXWINITIALIZED;
|
||||||
@ -564,10 +566,12 @@ extern int WINAPI extMapWindowPoints(HWND, HWND, LPPOINT, UINT);
|
|||||||
extern BOOL WINAPI extMoveWindow(HWND, int, int, int, int, BOOL);
|
extern BOOL WINAPI extMoveWindow(HWND, int, int, int, int, BOOL);
|
||||||
extern BOOL WINAPI extPeekMessage(LPMSG, HWND, UINT, UINT, UINT);
|
extern BOOL WINAPI extPeekMessage(LPMSG, HWND, UINT, UINT, UINT);
|
||||||
extern ATOM WINAPI extRegisterClassExA(WNDCLASSEXA *);
|
extern ATOM WINAPI extRegisterClassExA(WNDCLASSEXA *);
|
||||||
|
extern ATOM WINAPI extRegisterClassA(WNDCLASSA *);
|
||||||
extern int WINAPI extDDReleaseDC(HWND, HDC);
|
extern int WINAPI extDDReleaseDC(HWND, HDC);
|
||||||
extern int WINAPI extGDIReleaseDC(HWND, HDC);
|
extern int WINAPI extGDIReleaseDC(HWND, HDC);
|
||||||
extern BOOL WINAPI extScreenToClient(HWND, LPPOINT);
|
extern BOOL WINAPI extScreenToClient(HWND, LPPOINT);
|
||||||
extern LRESULT WINAPI extSendMessage(HWND, UINT, WPARAM, LPARAM);
|
extern LRESULT WINAPI extSendMessageA(HWND, UINT, WPARAM, LPARAM);
|
||||||
|
extern LRESULT WINAPI extSendMessageW(HWND, UINT, WPARAM, LPARAM);
|
||||||
extern HCURSOR WINAPI extSetCursor(HCURSOR);
|
extern HCURSOR WINAPI extSetCursor(HCURSOR);
|
||||||
extern BOOL WINAPI extSetCursorPos(int, int);
|
extern BOOL WINAPI extSetCursorPos(int, int);
|
||||||
extern UINT_PTR WINAPI extSetTimer(HWND, UINT_PTR, UINT, TIMERPROC);
|
extern UINT_PTR WINAPI extSetTimer(HWND, UINT_PTR, UINT, TIMERPROC);
|
||||||
|
@ -32,6 +32,7 @@ static HookEntry_Type Hooks[]={
|
|||||||
{"CreateWindowExA", (FARPROC)CreateWindowExA, (FARPROC *)&pCreateWindowExA, (FARPROC)extCreateWindowExA},
|
{"CreateWindowExA", (FARPROC)CreateWindowExA, (FARPROC *)&pCreateWindowExA, (FARPROC)extCreateWindowExA},
|
||||||
{"CreateWindowExW", (FARPROC)CreateWindowExW, (FARPROC *)&pCreateWindowExW, (FARPROC)extCreateWindowExW},
|
{"CreateWindowExW", (FARPROC)CreateWindowExW, (FARPROC *)&pCreateWindowExW, (FARPROC)extCreateWindowExW},
|
||||||
{"RegisterClassExA", (FARPROC)RegisterClassExA, (FARPROC *)&pRegisterClassExA, (FARPROC)extRegisterClassExA},
|
{"RegisterClassExA", (FARPROC)RegisterClassExA, (FARPROC *)&pRegisterClassExA, (FARPROC)extRegisterClassExA},
|
||||||
|
{"RegisterClassA", (FARPROC)RegisterClassA, (FARPROC *)&pRegisterClassA, (FARPROC)extRegisterClassA},
|
||||||
{"GetSystemMetrics", (FARPROC)GetSystemMetrics, (FARPROC *)&pGetSystemMetrics, (FARPROC)extGetSystemMetrics},
|
{"GetSystemMetrics", (FARPROC)GetSystemMetrics, (FARPROC *)&pGetSystemMetrics, (FARPROC)extGetSystemMetrics},
|
||||||
{"GetDesktopWindow", (FARPROC)GetDesktopWindow, (FARPROC *)&pGetDesktopWindow, (FARPROC)extGetDesktopWindow},
|
{"GetDesktopWindow", (FARPROC)GetDesktopWindow, (FARPROC *)&pGetDesktopWindow, (FARPROC)extGetDesktopWindow},
|
||||||
{"TabbedTextOutA", (FARPROC)TabbedTextOutA, (FARPROC *)&pTabbedTextOutA, (FARPROC)extTabbedTextOutA},
|
{"TabbedTextOutA", (FARPROC)TabbedTextOutA, (FARPROC *)&pTabbedTextOutA, (FARPROC)extTabbedTextOutA},
|
||||||
@ -102,8 +103,8 @@ static HookEntry_Type PeekAllHooks[]={
|
|||||||
static HookEntry_Type MouseHooks[]={
|
static HookEntry_Type MouseHooks[]={
|
||||||
{"GetCursorPos", (FARPROC)GetCursorPos, (FARPROC *)&pGetCursorPos, (FARPROC)extGetCursorPos},
|
{"GetCursorPos", (FARPROC)GetCursorPos, (FARPROC *)&pGetCursorPos, (FARPROC)extGetCursorPos},
|
||||||
{"SetCursor", (FARPROC)SetCursor, (FARPROC *)&pSetCursor, (FARPROC)extSetCursor},
|
{"SetCursor", (FARPROC)SetCursor, (FARPROC *)&pSetCursor, (FARPROC)extSetCursor},
|
||||||
{"SendMessageA", (FARPROC)SendMessageA, (FARPROC *)&pSendMessageA, (FARPROC)extSendMessage}, // ???
|
{"SendMessageA", (FARPROC)SendMessageA, (FARPROC *)&pSendMessageA, (FARPROC)extSendMessageA},
|
||||||
{"SendMessageW", (FARPROC)SendMessageW, (FARPROC *)&pSendMessageW, (FARPROC)extSendMessage}, // ???
|
{"SendMessageW", (FARPROC)SendMessageW, (FARPROC *)&pSendMessageW, (FARPROC)extSendMessageW},
|
||||||
//{"SetPhysicalCursorPos", NULL, (FARPROC *)&pSetCursor, (FARPROC)extSetCursor}, // ???
|
//{"SetPhysicalCursorPos", NULL, (FARPROC *)&pSetCursor, (FARPROC)extSetCursor}, // ???
|
||||||
{0, NULL, 0, 0} // terminator
|
{0, NULL, 0, 0} // terminator
|
||||||
};
|
};
|
||||||
@ -677,7 +678,7 @@ HDWP WINAPI extDeferWindowPos(HDWP hWinPosInfo, HWND hwnd, HWND hWndInsertAfter,
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
LRESULT WINAPI extSendMessage(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam)
|
LRESULT WINAPI extSendMessage(SendMessage_Type pSendMessage, HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
LRESULT ret;
|
LRESULT ret;
|
||||||
OutTraceW("SendMessage: hwnd=%x WinMsg=[0x%x]%s(%x,%x)\n",
|
OutTraceW("SendMessage: hwnd=%x WinMsg=[0x%x]%s(%x,%x)\n",
|
||||||
@ -718,11 +719,21 @@ LRESULT WINAPI extSendMessage(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ret=(*pSendMessageA)(hwnd, Msg, wParam, lParam);
|
ret=(*pSendMessage)(hwnd, Msg, wParam, lParam);
|
||||||
OutTraceW("SendMessage: lresult=%x\n", ret);
|
OutTraceW("SendMessage: lresult=%x\n", ret);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LRESULT WINAPI extSendMessageA(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
return extSendMessage(pSendMessageA, hwnd, Msg, wParam, lParam);
|
||||||
|
}
|
||||||
|
|
||||||
|
LRESULT WINAPI extSendMessageW(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
return extSendMessage(pSendMessageW, hwnd, Msg, wParam, lParam);
|
||||||
|
}
|
||||||
|
|
||||||
HCURSOR WINAPI extSetCursor(HCURSOR hCursor)
|
HCURSOR WINAPI extSetCursor(HCURSOR hCursor)
|
||||||
{
|
{
|
||||||
HCURSOR ret;
|
HCURSOR ret;
|
||||||
@ -1030,11 +1041,19 @@ int WINAPI extGetSystemMetrics(int nindex)
|
|||||||
|
|
||||||
ATOM WINAPI extRegisterClassExA(WNDCLASSEX *lpwcx)
|
ATOM WINAPI extRegisterClassExA(WNDCLASSEX *lpwcx)
|
||||||
{
|
{
|
||||||
OutTraceDW("RegisterClassEx: PROXED ClassName=%s style=%x(%s)\n",
|
OutTraceDW("RegisterClassEx: PROXED ClassName=%s style=%x(%s) WndProc=%x cbClsExtra=%d cbWndExtra=%d hInstance=%x\n",
|
||||||
lpwcx->lpszClassName, lpwcx->style, ExplainStyle(lpwcx->style));
|
lpwcx->lpszClassName, lpwcx->style, ExplainStyle(lpwcx->style), lpwcx->lpfnWndProc, lpwcx->cbClsExtra, lpwcx->cbWndExtra, lpwcx->hInstance);
|
||||||
return (*pRegisterClassExA)(lpwcx);
|
return (*pRegisterClassExA)(lpwcx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ATOM WINAPI extRegisterClassA(WNDCLASS *lpwcx)
|
||||||
|
{
|
||||||
|
// referenced by Syberia, together with RegisterClassExA
|
||||||
|
OutTraceDW("RegisterClass: PROXED ClassName=%s style=%x(%s) WndProc=%x cbClsExtra=%d cbWndExtra=%d hInstance=%x\n",
|
||||||
|
lpwcx->lpszClassName, lpwcx->style, ExplainStyle(lpwcx->style), lpwcx->lpfnWndProc, lpwcx->cbClsExtra, lpwcx->cbWndExtra, lpwcx->hInstance);
|
||||||
|
return (*pRegisterClassA)(lpwcx);
|
||||||
|
}
|
||||||
|
|
||||||
static HWND WINAPI extCreateWindowCommon(
|
static HWND WINAPI extCreateWindowCommon(
|
||||||
LPCTSTR ApiName,
|
LPCTSTR ApiName,
|
||||||
BOOL WideChar,
|
BOOL WideChar,
|
||||||
|
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user