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

v2_03_54_src_fix2

Former-commit-id: 14102b5daf581632f28c9ab056624dda6c7d31ac
This commit is contained in:
gho tik 2016-06-03 12:45:08 -04:00 committed by Refael ACkermann
parent 6778f01eb9
commit c095fc7c57
12 changed files with 359 additions and 33 deletions

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:b9f75f7b545dbfc03a38bf99d8260cbbe4dee01c82b7955c61769a126c643b82
size 622080
oid sha256:6ca8e1fa67ffd8ece8ce4dd729b0eec753da49cad2b29f93f9560f96a1105d18
size 620544

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:91dd24684d705c58f1e0bb5870715a997c93b285d02075571f0f8ef87068adec
oid sha256:4ee938187a007d36fb26816ecd7ce09990a0990c9c071881fa1a95dc2c4da831
size 548352

176
build/dxwnd.ini Normal file
View File

@ -0,0 +1,176 @@
[window]
exepath=D:\Games\Dark Earth\
exportpath=D:\DxWnd\exports\
posx=1087
posy=286
sizx=320
sizy=200
[target]
title0=Warlords Battlecry 3 (GOG)
path0=D:\Games\Warlords Battlecry 3 (GOG)\Battlecry III.exe
launchpath0=
module0=
opengllib0=
notes0=
registry0=
ver0=0
coord0=2
flag0=136314914
flagg0=1207959568
flagh0=20
flagi0=138543108
flagj0=4224
flagk0=65536
flagl0=0
flagm0=0
tflag0=0
posx0=50
posy0=50
sizx0=800
sizy0=600
maxfps0=0
initts0=0
winver0=0
maxres0=-1
swapeffect0=0
maxddinterface0=7
title1=Galapagos
path1=D:\Games\Galapagos\GALA.EXE
launchpath1=
module1=
opengllib1=
notes1=
registry1=
ver1=7
coord1=0
flag1=681623718
flagg1=1207959556
flagh1=20
flagi1=203423748
flagj1=128
flagk1=65536
flagl1=0
flagm1=0
tflag1=-2147477245
posx1=50
posy1=50
sizx1=800
sizy1=600
maxfps1=0
initts1=0
winver1=0
maxres1=-1
swapeffect1=0
maxddinterface1=7
title2=Warlords Battlecry III
path2=D:\Games\Warlords Battlecry III\Battlecry III.exe
launchpath2=
module2=
opengllib2=
notes2=
registry2=
ver2=0
coord2=0
flag2=136314914
flagg2=1207959568
flagh2=20
flagi2=-2009071612
flagj2=4224
flagk2=65536
flagl2=0
flagm2=0
tflag2=-2147477245
posx2=50
posy2=50
sizx2=880
sizy2=660
maxfps2=0
initts2=0
winver2=0
maxres2=-1
swapeffect2=0
maxddinterface2=7
title3=Close Combat 2: a bridge too far
path3=D:\Games\Close Combat 2\CC2.EXE
launchpath3=
module3=
opengllib3=
notes3=
registry3=[HKEY_LOCAL_MACHINE\SOFTWARE]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games\Close Combat]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games\Close Combat\2.00]\n"PID"="00000-000-0000000-00000"\n"InstalledTo"="C:\\GAMES\\CC2"\n"ScreenX"="800"\n"ScreenY"="600"\n"Version"="2.0"\n"IType"=hex:01,00,00,00\n"GameSpeed"=hex:01,00,00,00\n"ShowDSAlert"=hex:01,00,00,00\n"ShowQuickHelp"=hex:01,00,00,00\n"PlaySounds"=hex:01,00,00,00\n"PlayMusic"=hex:01,00,00,00\n"PlayVideos"=hex:00,00,00,00\n"FCopy"=hex:00,00,00,00\n"SMethod"=hex:00,00,00,00\n"Save"=hex:00,00,00,00\n"ShowTrees"=hex:01,00,00,00\n"StaticFPS"=hex:0a,00,00,00\n"InstalledFrom"=".\\"\n"Launched"="1"\n"VersionType"="RetailVersion"\n\n[HKEY_LOCAL_MACHINE\SOFTWARE]\n[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft]\n[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft Games]\n[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft Games\Close Combat]\n[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft Games\Close Combat\2.00]\n"PID"="00000-000-0000000-00000"\n"InstalledTo"="C:\\GAMES\\CC2"\n"ScreenX"="800"\n"ScreenY"="600"\n"Version"="2.0"\n"IType"=hex:01,00,00,00\n"GameSpeed"=hex:01,00,00,00\n"ShowDSAlert"=hex:01,00,00,00\n"ShowQuickHelp"=hex:01,00,00,00\n"PlaySounds"=hex:01,00,00,00\n"PlayMusic"=hex:01,00,00,00\n"PlayVideos"=hex:00,00,00,00\n"FCopy"=hex:00,00,00,00\n"SMethod"=hex:00,00,00,00\n"Save"=hex:00,00,00,00\n"ShowTrees"=hex:01,00,00,00\n"StaticFPS"=hex:0a,00,00,00\n"InstalledFrom"=".\\"\n"Launched"="1"\n"VersionType"="RetailVersion"\n\n
ver3=0
coord3=0
flag3=134225952
flagg3=1744830464
flagh3=1044
flagi3=1279262724
flagj3=8392832
flagk3=0
flagl3=0
flagm3=0
tflag3=0
posx3=50
posy3=50
sizx3=0
sizy3=0
maxfps3=0
initts3=0
winver3=0
maxres3=-1
swapeffect3=0
maxddinterface3=7
title4=CyberStrike 2
path4=D:\Games\CyberStrike 2\CS2OG.FUN
launchpath4=
module4=
opengllib4=
notes4=
registry4=
ver4=0
coord4=0
flag4=136314978
flagg4=1476395008
flagh4=20
flagi4=136314884
flagj4=1054848
flagk4=65536
flagl4=0
flagm4=0
tflag4=-2147477245
posx4=50
posy4=50
sizx4=800
sizy4=600
maxfps4=0
initts4=0
winver4=0
maxres4=-1
swapeffect4=0
maxddinterface4=7
title5=Dark Earth
path5=D:\Games\Dark Earth\dkev.exe
launchpath5=
module5=
opengllib5=
notes5=
registry5=
ver5=0
coord5=0
flag5=136331362
flagg5=1476395008
flagh5=20
flagi5=138936324
flagj5=4224
flagk5=65536
flagl5=0
flagm5=0
tflag5=-2147477245
posx5=50
posy5=50
sizx5=800
sizy5=600
maxfps5=0
initts5=0
winver5=0
maxres5=-1
swapeffect5=0
maxddinterface5=7

52
build/dxwnd.reg Normal file
View File

@ -0,0 +1,52 @@
[HKEY_LOCAL_MACHINE\SOFTWARE]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games\Close Combat]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games\Close Combat\2.00]
"PID"="00000-000-0000000-00000"
"InstalledTo"="C:\\GAMES\\CC2"
"ScreenX"="800"
"ScreenY"="600"
"Version"="2.0"
"IType"=hex:01,00,00,00
"GameSpeed"=hex:01,00,00,00
"ShowDSAlert"=hex:01,00,00,00
"ShowQuickHelp"=hex:01,00,00,00
"PlaySounds"=hex:01,00,00,00
"PlayMusic"=hex:01,00,00,00
"PlayVideos"=hex:00,00,00,00
"FCopy"=hex:00,00,00,00
"SMethod"=hex:00,00,00,00
"Save"=hex:00,00,00,00
"ShowTrees"=hex:01,00,00,00
"StaticFPS"=hex:0a,00,00,00
"InstalledFrom"=".\\"
"Launched"="1"
"VersionType"="RetailVersion"
[HKEY_LOCAL_MACHINE\SOFTWARE]
[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft]
[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft Games]
[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft Games\Close Combat]
[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft Games\Close Combat\2.00]
"PID"="00000-000-0000000-00000"
"InstalledTo"="C:\\GAMES\\CC2"
"ScreenX"="800"
"ScreenY"="600"
"Version"="2.0"
"IType"=hex:01,00,00,00
"GameSpeed"=hex:01,00,00,00
"ShowDSAlert"=hex:01,00,00,00
"ShowQuickHelp"=hex:01,00,00,00
"PlaySounds"=hex:01,00,00,00
"PlayMusic"=hex:01,00,00,00
"PlayVideos"=hex:00,00,00,00
"FCopy"=hex:00,00,00,00
"SMethod"=hex:00,00,00,00
"Save"=hex:00,00,00,00
"ShowTrees"=hex:01,00,00,00
"StaticFPS"=hex:0a,00,00,00
"InstalledFrom"=".\\"
"Launched"="1"
"VersionType"="RetailVersion"

View File

@ -1025,8 +1025,9 @@ fix: changed SetHook so that it can get function pointers without necessarily re
add: option "Limit ddraw interface" to exclude support for IDirectDrawInterface greater than limit (range 1-7)
v2.03.53(skipped)
v2.03.54
v2.03.54 (fix1+2)
add: syslib shared dc mode preliminary implementation, thank to Narzoul's ideas. Works for "MS Golf 98" and "Deadlock II rel. 1.2"
fix: handling of cursor hide/show for programs that don't go through the message window ("Deadlock II rel. 1.2")
add: /R:n command line option to automatically start DxWnd in icon tray, run the n-th program in configuration and terminate.
add: option to disable the disabling of Alt-Tab key through SetWindowHooks through WH_KEYBOARD_LL event. Mae it posssible to use Alt-Tab key on "Dungeon Kepper II".
add: option to disable the disabling of Alt-Tab key through SetWindowHooks through WH_KEYBOARD_LL event. Make it posssible to use Alt-Tab key on "Dungeon Kepper II".
fix: palette object reference count decremented from extra references and zeroed by the "Return 0 refcount" flag: make it possible to run "Dark Earth" that makes a check on the palette reerence counter before starting the game.

View File

@ -295,6 +295,7 @@ LPDIRECTDRAWSURFACE lpDDZBuffer=NULL;
LPDIRECTDRAW lpPrimaryDD=NULL;
int iBakBufferVersion;
LPDIRECTDRAWPALETTE lpDDP=NULL;
int iDDPExtraRefCounter=0;
// v2.02.37: globals to store requested main surface capabilities
DDSURFACEDESC2 DDSD_Prim;
DWORD DDZBufferCaps;
@ -2392,7 +2393,10 @@ static HRESULT BuildPrimaryEmu(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurf
}
// this must be done after hooking - who knows why?
res=(*pSetPalette)(*lplpdds, lpDDP);
if(res) OutTraceE("CreateSurface: SetPalette ERROR err=%x at %d\n", res, __LINE__);
if(res) {
OutTraceE("CreateSurface: SetPalette ERROR err=%x at %d\n", res, __LINE__);
}
else iDDPExtraRefCounter++;
}
// set a global capability value for surfaces that have to blit to primary
@ -2469,7 +2473,10 @@ static HRESULT BuildPrimaryFlippable(LPDIRECTDRAW lpdd, CreateSurface_Type pCrea
}
// this must be done after hooking - who knows why?
res=(*pSetPalette)(*lplpdds, lpDDP);
if(res) OutTraceE("CreateSurface: SetPalette ERROR err=%x at %d\n", res, __LINE__);
if(res) {
OutTraceE("CreateSurface: SetPalette ERROR err=%x at %d\n", res, __LINE__);
}
else iDDPExtraRefCounter++;
}
// set a global capability value for surfaces that have to blit to primary
@ -2590,7 +2597,10 @@ static HRESULT BuildBackBufferEmu(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateS
}
// this must be done after hooking - who knows why?
res=(*pSetPalette)(*lplpdds, lpDDP);
if(res) OutTraceE("CreateSurface: SetPalette ERROR err=%x at %d\n", res, __LINE__);
if(res) {
OutTraceE("CreateSurface: SetPalette ERROR err=%x at %d\n", res, __LINE__);
}
else iDDPExtraRefCounter++;
}
// V2.1.85/V2.2.34: tricky !!!!
@ -2646,7 +2656,10 @@ static HRESULT BuildBackBufferFlippable(LPDIRECTDRAW lpdd, CreateSurface_Type pC
}
// this must be done after hooking - who knows why?
res=(*pSetPalette)(*lplpdds, lpDDP);
if(res) OutTraceE("CreateSurface: SetPalette ERROR err=%x at %d\n", res, __LINE__);
if(res) {
OutTraceE("CreateSurface: SetPalette ERROR err=%x at %d\n", res, __LINE__);
}
else iDDPExtraRefCounter++;
}
return DD_OK;
@ -2798,8 +2811,10 @@ static HRESULT BuildGenericEmu(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurf
res=(*pSetPalette)(*lplpdds, lpDDP);
if(res)
OutTraceE("SetPalette: ERROR on lpdds=%x(Emu_Generic) res=%x(%s) at %d\n", *lplpdds, res, ExplainDDError(res), __LINE__);
else
else {
OutTraceDW("CreateSurface: applied lpddp=%x to lpdds=%x\n", lpDDP, *lplpdds);
iDDPExtraRefCounter++;
}
}
// diagnostic hooks ....
@ -2849,8 +2864,10 @@ static HRESULT BuildGenericFlippable(LPDIRECTDRAW lpdd, CreateSurface_Type pCrea
res=(*pSetPalette)(*lplpdds, lpDDP);
if(res)
OutTraceE("SetPalette: ERROR on lpdds=%x(Emu_Generic) res=%x(%s) at %d\n", *lplpdds, res, ExplainDDError(res), __LINE__);
else
else {
OutTraceDW("CreateSurface: applied lpddp=%x to lpdds=%x\n", lpDDP, *lplpdds);
iDDPExtraRefCounter++;
}
}
// diagnostic hooks ....
@ -3815,6 +3832,7 @@ HRESULT WINAPI extGetPalette(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWPALETTE *lpl
OutTraceDW("GetPalette: retrieve PRIMARY palette for emulated surface lpDDP=%x\n", lpDDP);
*lplpddp = lpDDP;
lpDDP->AddRef();
iDDPExtraRefCounter++;
res=DD_OK;
}
@ -4267,6 +4285,7 @@ HRESULT WINAPI extGetDC(LPDIRECTDRAWSURFACE lpdds, HDC FAR *pHDC)
OutTraceE("GetDC: SetPalette ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
return res;
}
iDDPExtraRefCounter++;
// retry ....
res=(*pGetDC)(lpdds, pHDC);
}
@ -4878,6 +4897,7 @@ ULONG WINAPI extReleaseD(int dxversion, ReleaseD_Type pReleaseD, LPDIRECTDRAW lp
lpDDSEmu_Prim=NULL;
lpDDSEmu_Back=NULL;
lpDDP=NULL;
iDDPExtraRefCounter = 0;
lpPrimaryDD=NULL; // v2.02.31
}
}
@ -5136,12 +5156,19 @@ HRESULT WINAPI extReleaseP(LPDIRECTDRAWPALETTE lpddPalette)
ULONG ref;
ref = (*pReleaseP)(lpddPalette);
OutTraceDDRAW("Release(P): lpddPalette=%x ref=%x\n", lpddPalette, ref);
if(lpddPalette==lpDDP && ref==0){
OutTraceDW("Release(P): clearing lpDDP=%x->NULL\n", lpDDP);
lpDDP=NULL;
if (lpddPalette == lpDDP) {
OutTraceDW("Release(P): lpDDP extrarefcount=%d\n", iDDPExtraRefCounter);
ref -= iDDPExtraRefCounter;
if (ref <= 0) {
ref = 0;
OutTraceDW("Release(P): clearing lpDDP=%x->NULL\n", lpDDP);
lpDDP=NULL;
}
if(dxw.dwFlags4 & RETURNNULLREF) ref = 0;
}
return ref;
}

View File

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

Binary file not shown.

View File

@ -783,6 +783,9 @@ UINT WINAPI extGetSystemPaletteUse(HDC hdc)
UINT res;
OutTraceDW("GDI.GetSystemPaletteUse: hdc=%x\n", hdc);
res=(*pGetSystemPaletteUse)(hdc);
if((res == SYSPAL_ERROR) && (dxw.dwFlags6 & SYNCPALETTE)) res = SYSPAL_NOSTATIC;
OutTraceDW("GetSystemPaletteUse: res=%x(%s)\n", res, ExplainPaletteUse(res));
return res;
}

View File

@ -30,7 +30,11 @@ typedef HRESULT (WINAPI *Initialize_Type)(void *);
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 *CreateMaterial_Type)(void *, LPDIRECT3DMATERIAL *, IUnknown *);
#ifdef TRACEMATERIAL
typedef HRESULT (WINAPI *CreateMaterial1_Type)(void *, LPDIRECT3DMATERIAL *, IUnknown *);
typedef HRESULT (WINAPI *CreateMaterial2_Type)(void *, LPDIRECT3DMATERIAL2 *, IUnknown *);
typedef HRESULT (WINAPI *CreateMaterial3_Type)(void *, LPDIRECT3DMATERIAL3 *, IUnknown *);
#endif
typedef HRESULT (WINAPI *CreateViewport1_Type)(void *, LPDIRECT3DVIEWPORT *, IUnknown *);
typedef HRESULT (WINAPI *CreateViewport2_Type)(void *, LPDIRECT3DVIEWPORT2 *, IUnknown *);
typedef HRESULT (WINAPI *CreateViewport3_Type)(void *, LPDIRECT3DVIEWPORT3 *, IUnknown *);
@ -45,7 +49,11 @@ Initialize_Type pInitialize = NULL;
EnumDevices_Type pEnumDevices = NULL;
EnumDevices7_Type pEnumDevices7 = NULL;
CreateLight_Type pCreateLight = NULL;
CreateMaterial_Type pCreateMaterial = NULL;
#ifdef TRACEMATERIAL
CreateMaterial1_Type pCreateMaterial1 = NULL;
CreateMaterial2_Type pCreateMaterial2 = NULL;
CreateMaterial3_Type pCreateMaterial3 = NULL;
#endif
CreateViewport1_Type pCreateViewport1 = NULL;
CreateViewport2_Type pCreateViewport2 = NULL;
CreateViewport3_Type pCreateViewport3 = NULL;
@ -114,8 +122,6 @@ SwapTextureHandles2_Type pSwapTextureHandles2 = NULL;
typedef HRESULT (WINAPI *InitializeVP_Type)(void *, LPDIRECT3D);
typedef HRESULT (WINAPI *SetViewport_Type)(void *, LPD3DVIEWPORT);
typedef HRESULT (WINAPI *SetMaterial_Type)(void *, LPD3DMATERIAL);
typedef HRESULT (WINAPI *GetMaterial_Type)(void *, LPD3DMATERIAL);
typedef HRESULT (WINAPI *GetViewport_Type)(void *, LPD3DVIEWPORT);
typedef HRESULT (WINAPI *GetViewport2_Type)(void *, LPD3DVIEWPORT);
typedef HRESULT (WINAPI *SetViewport2_Type)(void *, LPD3DVIEWPORT);
@ -129,10 +135,15 @@ typedef HRESULT (WINAPI *DeleteViewport2_Type)(void *, LPDIRECT3DVIEWPORT2);
typedef HRESULT (WINAPI *NextViewport2_Type)(void *, LPDIRECT3DVIEWPORT2, LPDIRECT3DVIEWPORT2 *, DWORD);
typedef HRESULT (WINAPI *ViewportClear_Type)(void *, DWORD, LPD3DRECT, DWORD);
#ifdef TRACEMATERIAL
// IDirect3DMaterial interfaces
typedef HRESULT (WINAPI *SetMaterial_Type)(void *, LPD3DMATERIAL);
typedef HRESULT (WINAPI *GetMaterial_Type)(void *, LPD3DMATERIAL);
#endif
InitializeVP_Type pInitializeVP = NULL;
SetViewport_Type pSetViewport = NULL;
SetMaterial_Type pSetMaterial = NULL;
GetMaterial_Type pGetMaterial = NULL;
GetViewport_Type pGetViewport = NULL;
GetViewport2_Type pGetViewport2 = NULL;
SetViewport2_Type pSetViewport2 = NULL;
@ -146,11 +157,20 @@ DeleteViewport2_Type pDeleteViewport2 = NULL;
NextViewport2_Type pNextViewport2 = NULL;
ViewportClear_Type pViewportClear = NULL;
#ifdef TRACEMATERIAL
SetMaterial_Type pSetMaterial = NULL;
GetMaterial_Type pGetMaterial = NULL;
#endif
HRESULT WINAPI extInitialize(void *);
HRESULT WINAPI extEnumDevices(void *, LPD3DENUMDEVICESCALLBACK, LPVOID);
HRESULT WINAPI extEnumDevices7(void *, LPD3DENUMDEVICESCALLBACK7, LPVOID);
HRESULT WINAPI extCreateLight(void *, LPDIRECT3DLIGHT *, IUnknown *);
HRESULT WINAPI extCreateMaterial(void *, LPDIRECT3DMATERIAL *, IUnknown *);
#ifdef TRACEMATERIAL
HRESULT WINAPI extCreateMaterial1(void *, LPDIRECT3DMATERIAL *, IUnknown *);
HRESULT WINAPI extCreateMaterial2(void *, LPDIRECT3DMATERIAL2 *, IUnknown *);
HRESULT WINAPI extCreateMaterial3(void *, LPDIRECT3DMATERIAL3 *, IUnknown *);
#endif
HRESULT WINAPI extCreateViewport1(void *, LPDIRECT3DVIEWPORT *, IUnknown *);
HRESULT WINAPI extCreateViewport2(void *, LPDIRECT3DVIEWPORT2 *, IUnknown *);
HRESULT WINAPI extCreateViewport3(void *, LPDIRECT3DVIEWPORT3 *, IUnknown *);
@ -167,8 +187,10 @@ HRESULT WINAPI extViewportClear(void *, DWORD, LPD3DRECT, DWORD);
HRESULT WINAPI extInitializeVP(void *, LPDIRECT3D);
HRESULT WINAPI extSetViewport(void *, LPD3DVIEWPORT);
HRESULT WINAPI extGetViewport(void *, LPD3DVIEWPORT);
#ifdef TRACEMATERIAL
HRESULT WINAPI extSetMaterial(void *, LPD3DMATERIAL);
HRESULT WINAPI extGetMaterial(void *, LPD3DMATERIAL);
#endif
HRESULT WINAPI extQueryInterfaceD3(void *, REFIID, LPVOID *);
HRESULT WINAPI extQueryInterfaceD3D(void *, REFIID, LPVOID *);
@ -382,7 +404,9 @@ void HookDirect3DSession(LPDIRECTDRAW *lplpdd, int d3dversion)
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");
#ifdef TRACEMATERIAL
SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateMaterial1, (void **)&pCreateMaterial1, "CreateMaterial(1)");
#endif
SetHook((void *)(**(DWORD **)lplpdd + 28), extCreateViewport1, (void **)&pCreateViewport1, "CreateViewport(1)");
SetHook((void *)(**(DWORD **)lplpdd + 32), extFindDevice, (void **)&pFindDevice, "FindDevice");
break;
@ -390,7 +414,9 @@ void HookDirect3DSession(LPDIRECTDRAW *lplpdd, int d3dversion)
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");
#ifdef TRACEMATERIAL
SetHook((void *)(**(DWORD **)lplpdd + 20), extCreateMaterial2, (void **)&pCreateMaterial2, "CreateMaterial(2)");
#endif
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)");
@ -399,7 +425,9 @@ void HookDirect3DSession(LPDIRECTDRAW *lplpdd, int d3dversion)
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");
#ifdef TRACEMATERIAL
SetHook((void *)(**(DWORD **)lplpdd + 20), extCreateMaterial3, (void **)&pCreateMaterial3, "CreateMaterial(3)");
#endif
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)");
@ -563,6 +591,7 @@ void HookViewport(LPDIRECT3DVIEWPORT *lpViewport, int d3dversion)
}
}
#ifdef TRACEMATERIAL
void HookMaterial(LPDIRECT3DMATERIAL *lpMaterial, int d3dversion)
{
OutTraceD3D("HookMaterial: Material=%x d3dversion=%d\n", *lpMaterial, d3dversion);
@ -578,6 +607,7 @@ void HookMaterial(LPDIRECT3DMATERIAL *lpMaterial, int d3dversion)
break;
}
}
#endif
void HookTexture(LPVOID *lpTexture, int version)
{
@ -618,21 +648,27 @@ HRESULT WINAPI extQueryInterfaceD3(void *lpd3d, REFIID riid, LPVOID *ppvObj)
SetHook((void *)(**(DWORD **)ppvObj + 12), extInitialize, (void **)&pInitialize, "Initialize");
SetHook((void *)(**(DWORD **)ppvObj + 16), extEnumDevices, (void **)&pEnumDevices, "EnumDevices");
SetHook((void *)(**(DWORD **)ppvObj + 20), extCreateLight, (void **)&pCreateLight, "CreateLight");
SetHook((void *)(**(DWORD **)ppvObj + 24), extCreateMaterial, (void **)&pCreateMaterial, "CreateMaterial");
#ifdef TRACEMATERIAL
SetHook((void *)(**(DWORD **)ppvObj + 24), extCreateMaterial1, (void **)&pCreateMaterial1, "CreateMaterial(1)");
#endif
SetHook((void *)(**(DWORD **)ppvObj + 28), extCreateViewport1, (void **)&pCreateViewport1, "CreateViewport(1)");
SetHook((void *)(**(DWORD **)ppvObj + 32), extFindDevice, (void **)&pFindDevice, "FindDevice");
break;
case 2:
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");
#ifdef TRACEMATERIAL
SetHook((void *)(**(DWORD **)ppvObj + 20), extCreateMaterial2, (void **)&pCreateMaterial2, "CreateMaterial(2)");
#endif
SetHook((void *)(**(DWORD **)ppvObj + 24), extCreateViewport2, (void **)&pCreateViewport2, "CreateViewport(2)");
SetHook((void *)(**(DWORD **)ppvObj + 28), extFindDevice, (void **)&pFindDevice, "FindDevice");
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");
#ifdef TRACEMATERIAL
SetHook((void *)(**(DWORD **)ppvObj + 20), extCreateMaterial3, (void **)&pCreateMaterial3, "CreateMaterial(3)");
#endif
SetHook((void *)(**(DWORD **)ppvObj + 24), extCreateViewport3, (void **)&pCreateViewport3, "CreateViewport(3)");
SetHook((void *)(**(DWORD **)ppvObj + 28), extFindDevice, (void **)&pFindDevice, "FindDevice");
break;
@ -778,18 +814,44 @@ HRESULT WINAPI extCreateLight(void *lpd3d, LPDIRECT3DLIGHT *lpLight, IUnknown *p
return res;
}
HRESULT WINAPI extCreateMaterial(void *lpd3d, LPDIRECT3DMATERIAL *lpMaterial, IUnknown *p0)
#ifdef TRACEMATERIAL
HRESULT WINAPI extCreateMaterial1(void *lpd3d, LPDIRECT3DMATERIAL *lpMaterial, IUnknown *p0)
{
HRESULT res;
OutTraceD3D("CreateMaterial: d3d=%x\n", lpd3d);
res=(*pCreateMaterial)(lpd3d, lpMaterial, p0);
OutTraceD3D("CreateMaterial(1): d3d=%x\n", lpd3d);
res=(*pCreateMaterial1)(lpd3d, lpMaterial, p0);
if(res) OutTraceE("CreateMaterial ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
else OutTraceD3D("CreateMaterial: OK\n");
HookMaterial(lpMaterial, GD3DDeviceVersion);
return res;
}
HRESULT WINAPI extCreateMaterial2(void *lpd3d, LPDIRECT3DMATERIAL2 *lpMaterial, IUnknown *p0)
{
HRESULT res;
OutTraceD3D("CreateMaterial(2): d3d=%x\n", lpd3d);
res=(*pCreateMaterial2)(lpd3d, lpMaterial, p0);
if(res) OutTraceE("CreateMaterial ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
else OutTraceD3D("CreateMaterial: OK\n");
//HookMaterial(lpMaterial, GD3DDeviceVersion);
return res;
}
HRESULT WINAPI extCreateMaterial3(void *lpd3d, LPDIRECT3DMATERIAL3 *lpMaterial, IUnknown *p0)
{
HRESULT res;
OutTraceD3D("CreateMaterial(1): d3d=%x\n", lpd3d);
res=(*pCreateMaterial3)(lpd3d, lpMaterial, p0);
if(res) OutTraceE("CreateMaterial ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
else OutTraceD3D("CreateMaterial: OK\n");
//HookMaterial(lpMaterial, GD3DDeviceVersion);
return res;
}
#endif
HRESULT WINAPI extCreateViewport1(void *lpd3d, LPDIRECT3DVIEWPORT *lpViewport, IUnknown *p0)
{
HRESULT res;
@ -1412,6 +1474,7 @@ HRESULT WINAPI extSetTexture7(void *d3dd, DWORD flags, LPDIRECTDRAWSURFACE7 lpte
return res;
}
#ifdef TRACEMATERIAL
HRESULT WINAPI extSetMaterial(void *d3dd, LPD3DMATERIAL lpMaterial)
{
HRESULT res;
@ -1450,6 +1513,7 @@ HRESULT WINAPI extGetMaterial(void *d3dd, LPD3DMATERIAL lpMaterial)
}
return res;
}
#endif
HRESULT WINAPI extSwapTextureHandles(void *d3dd, LPDIRECT3DTEXTURE t1, LPDIRECT3DTEXTURE t2)
{

Binary file not shown.

View File

@ -2166,7 +2166,10 @@ void CDxwndhostView::OnRun()
if(i<0) i=0;
}
else {
if(!listctrl.GetSelectedCount()) return;
if(!listctrl.GetSelectedCount()) {
IsLocked = FALSE;
return;
}
pos = listctrl.GetFirstSelectedItemPosition();
i = listctrl.GetNextSelectedItem(pos);
}