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

v2_02_60_src

Former-commit-id: a5e2c09b2a0ff1572739cab6d0a5875912e4962c
This commit is contained in:
gho tik 2014-01-03 11:38:52 -05:00 committed by Refael ACkermann
parent f09fae693b
commit 4faa505efd
19 changed files with 481 additions and 52 deletions

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:7f096da2bcb539a443b930cc06ca3814a98394da357dcc2817a7ffa431bb5faa
size 459776
oid sha256:f6f6dffdd6c64dfb4fca9318b394132c66ec7a1070122c384b78e0a8a52c45e2
size 461824

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:4ccfe97f2a4ee32296cfaae398fe767a22f26d620ba7065c0cbc7a078eb2d459
oid sha256:84004748b9ed3c04e7d2d8101220a505a229bc299211e587a74ffd89cc85e154
size 535552

View File

@ -1181,9 +1181,9 @@ opengllib47=
ver47=0
coord47=0
flag47=134234148
flagg47=-939523840
flagg47=1207959808
flagh47=20
flagi47=16
flagi47=384
tflag47=2
initx47=0
inity47=0
@ -3459,7 +3459,7 @@ flag138=679493664
flagg138=1208025088
flagh138=65556
flagi138=4
tflag138=6147
tflag138=6403
initx138=0
inity138=0
minx138=0
@ -3481,9 +3481,9 @@ opengllib139=
ver139=8
coord139=0
flag139=687867937
flagg139=1208025104
flagg139=134283280
flagh139=65556
flagi139=12
flagi139=204
tflag139=4097
initx139=0
inity139=0
@ -3504,12 +3504,12 @@ path140=D:\Games\Incoming and Incoming Forces\Incoming\incoming.exe
module140=
opengllib140=
ver140=7
coord140=2
coord140=0
flag140=150994976
flagg140=1207959568
flagh140=20
flagi140=4
tflag140=1024
flagg140=1208025104
flagh140=-2147483628
flagi140=67820
tflag140=6163
initx140=0
inity140=0
minx140=0
@ -3549,17 +3549,17 @@ maxfps141=0
initts141=0
winver141=0
maxres141=-1
title142=CIsland.exe
path142=D:\Games\ChaosIsland\CIsland.exe
title142=Armored Fist 3
path142=D:\Games\Armored Fist 3\Af3.exe
module142=
opengllib142=
ver142=0
coord142=0
flag142=134218272
flagg142=1207959552
flagh142=20
flagi142=4
tflag142=6147
flag142=134217763
flagg142=1208025088
flagh142=6291476
flagi142=14
tflag142=64
initx142=0
inity142=0
minx142=0
@ -3574,14 +3574,133 @@ maxfps142=0
initts142=0
winver142=0
maxres142=-1
title143=Incoming (GOG)
title143=Earthworm Jim 3D
module143=
opengllib143=
title144=Incoming Forces (GOG)
title144=Echelon
module144=
opengllib144=
path143=D:\Games\Earthworm Jim 3D\EarthwormJim3D.exe
ver143=0
coord143=0
flag143=134217760
flagg143=1212219392
flagh143=65556
flagi143=12
tflag143=6211
initx143=0
inity143=0
minx143=0
miny143=0
maxx143=0
maxy143=0
posx143=50
posy143=50
sizx143=800
sizy143=600
maxfps143=0
initts143=2
winver143=1
maxres143=-1
path144=D:\Games\echelon\Game.exe
ver144=0
coord144=0
flag144=151011328
flagg144=-2013265920
flagh144=20
flagi144=132
tflag144=0
initx144=0
inity144=0
minx144=0
miny144=0
maxx144=0
maxy144=0
posx144=50
posy144=50
sizx144=800
sizy144=600
maxfps144=0
initts144=0
winver144=0
maxres144=-1
title145=Total Soccer 2000 (DirectX)
path145=D:\Games\Total Soccer 2000\SOCCERDX.EXE
module145=
opengllib145=
ver145=1
coord145=0
flag145=134234146
flagg145=134283520
flagh145=20
flagi145=12
tflag145=5249
initx145=0
inity145=0
minx145=0
miny145=0
maxx145=0
maxy145=0
posx145=50
posy145=50
sizx145=800
sizy145=600
maxfps145=0
initts145=2
winver145=0
maxres145=-1
title146=Total Soccer 2000 (3DFX)
path146=D:\Games\Total Soccer 2000\soccer3dfx.exe
module146=
opengllib146=
ver146=9
coord146=0
flag146=134234657
flagg146=1208025344
flagh146=20
flagi146=12
tflag146=5121
initx146=0
inity146=0
minx146=0
miny146=0
maxx146=0
maxy146=0
posx146=50
posy146=50
sizx146=800
sizy146=600
maxfps146=0
initts146=2
winver146=0
maxres146=-1
title147=Gruntz
path147=D:\Games\gruntz\GRUNTZ.EXE
module147=
opengllib147=
ver147=0
coord147=0
flag147=134235680
flagg147=1207959560
flagh147=67108884
flagi147=4
tflag147=6419
initx147=0
inity147=0
minx147=0
miny147=0
maxx147=0
maxy147=0
posx147=0
posy147=0
sizx147=800
sizy147=600
maxfps147=0
initts147=0
winver147=0
maxres147=-1
[window]
posx=1161
posy=364
posx=1010
posy=145
sizx=638
sizy=618

View File

@ -0,0 +1,26 @@
[target]
title0=Armored Fist 3
path0=D:\Games\Armored Fist 3\Af3.exe
module0=
opengllib0=
ver0=0
coord0=0
flag0=134218272
flagg0=1207959552
flagh0=20
flagi0=6
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

View File

@ -0,0 +1,26 @@
[target]
title0=Dune 2000
path0=D:\Games\Dune 2000\DUNE2000.DAT
module0=
opengllib0=
ver0=0
coord0=0
flag0=671105312
flagg0=1207959568
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

View File

@ -0,0 +1,26 @@
[target]
title0=Earthworm Jim 3D
path0=D:\Games\Earthworm Jim 3D\EarthwormJim3D.exe
module0=
opengllib0=
ver0=0
coord0=0
flag0=134217760
flagg0=1212153856
flagh0=65556
flagi0=4
tflag0=6211
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/Echelon.dxw Normal file
View File

@ -0,0 +1,26 @@
[target]
title0=Echelon
path0=D:\Games\echelon\Game.exe
module0=
opengllib0=
ver0=0
coord0=0
flag0=151011328
flagg0=134217728
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

View File

@ -0,0 +1,26 @@
[target]
title0=Geneforge
path0=d:\games\Geneforge\Geneforge.exe
module0=
opengllib0=
ver0=0
coord0=0
flag0=134234628
flagg0=1207959808
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

View File

@ -0,0 +1,26 @@
[target]
title0=Total Soccer 2000 (3DFX)
path0=D:\Games\Total Soccer 2000\soccer3dfx.exe
module0=
opengllib0=
ver0=9
coord0=0
flag0=134234657
flagg0=1208025344
flagh0=20
flagi0=67596
tflag0=5121
initx0=0
inity0=0
minx0=0
miny0=0
maxx0=0
maxy0=0
posx0=50
posy0=50
sizx0=800
sizy0=600
maxfps0=0
initts0=2
winver0=0
maxres0=-1

View File

@ -0,0 +1,26 @@
[target]
title0=Total Soccer 2000 (DirectX)
path0=D:\Games\Total Soccer 2000\SOCCERDX.EXE
module0=
opengllib0=
ver0=1
coord0=0
flag0=134234656
flagg0=1208025344
flagh0=20
flagi0=12
tflag0=5249
initx0=0
inity0=0
minx0=0
miny0=0
maxx0=0
maxy0=0
posx0=50
posy0=50
sizx0=800
sizy0=600
maxfps0=0
initts0=2
winver0=0
maxres0=-1

View File

@ -398,7 +398,10 @@ minor fixes on logging
v2.02.59
fixed IDIrectDraw reference counter for ddraw release 1 session: fixes "Warhammer 40K Rites Of War" first screen
fixed QueryPerformanceCounter handling: fixes "New Yourk Racer" time stretching problems
fixed QueryPerformanceCounter handling: fixes "New York Racer" time stretching problems
v2.02.60
fixed time stretching to handle Total Soccer 2000
fixed ZBUFFER surface creation to handle GOG Incoming troubles on some cards
fixed handling of special effects (wireframe, no fogging, zbuffer always) to be valid on all d3d versions

View File

@ -1320,19 +1320,36 @@ static void MaskCapsD(LPDDCAPS c1, LPDDCAPS c2)
OutTraceDW("MaskCaps\n");
capfile=fopen("dxwnd.cap", "r");
if(!capfile) return;
while(TRUE){
if(fscanf(capfile, "%s=%x", token, &val)!=2) break;
if(!strcmp(token, "dwCaps")) c1->dwCaps &= val;
if(!strcmp(token, "dwCaps2")) c1->dwCaps2 &= val;
if(!strcmp(token, "dwCKeyCaps")) c1->dwCKeyCaps &= val;
if(!strcmp(token, "dwFXCaps")) c1->dwFXCaps &= val;
if(c1) {
while(TRUE){
if(fscanf(capfile, "%s=%x", token, &val)!=2) break;
if(!strcmp(token, "dwCaps")) c1->dwCaps &= val;
if(!strcmp(token, "dwCaps2")) c1->dwCaps2 &= val;
if(!strcmp(token, "dwCKeyCaps")) c1->dwCKeyCaps &= val;
if(!strcmp(token, "dwFXCaps")) c1->dwFXCaps &= val;
}
OutTraceDW("MaskCaps(D-HW): caps=%x(%s) caps2=%x(%s) fxcaps=%x(%s) fxalphacaps=%x(%s) keycaps=%x(%s)\n",
c1->dwCaps, ExplainDDDCaps(c1->dwCaps),
c1->dwCaps2, ExplainDDDCaps2(c1->dwCaps2),
c1->dwFXCaps, ExplainDDFXCaps(c1->dwFXCaps),
c1->dwFXAlphaCaps, ExplainDDFXALPHACaps(c1->dwFXAlphaCaps),
c1->dwCKeyCaps, ExplainDDCKeyCaps(c1->dwCKeyCaps));
}
OutTraceDW("MaskCaps(D-HW): caps=%x(%s) caps2=%x(%s) fxcaps=%x(%s) fxalphacaps=%x(%s) keycaps=%x(%s)\n",
c1->dwCaps, ExplainDDDCaps(c1->dwCaps),
c1->dwCaps2, ExplainDDDCaps2(c1->dwCaps2),
c1->dwFXCaps, ExplainDDFXCaps(c1->dwFXCaps),
c1->dwFXAlphaCaps, ExplainDDFXALPHACaps(c1->dwFXAlphaCaps),
c1->dwCKeyCaps, ExplainDDCKeyCaps(c1->dwCKeyCaps));
if(c2) {
while(TRUE){
if(fscanf(capfile, "%s=%x", token, &val)!=2) break;
if(!strcmp(token, "dwCaps")) c2->dwCaps &= val;
if(!strcmp(token, "dwCaps2")) c2->dwCaps2 &= val;
if(!strcmp(token, "dwCKeyCaps")) c2->dwCKeyCaps &= val;
if(!strcmp(token, "dwFXCaps")) c2->dwFXCaps &= val;
}
OutTraceDW("MaskCaps(D-HW): caps=%x(%s) caps2=%x(%s) fxcaps=%x(%s) fxalphacaps=%x(%s) keycaps=%x(%s)\n",
c2->dwCaps, ExplainDDDCaps(c2->dwCaps),
c2->dwCaps2, ExplainDDDCaps2(c2->dwCaps2),
c2->dwFXCaps, ExplainDDFXCaps(c2->dwFXCaps),
c2->dwFXAlphaCaps, ExplainDDFXALPHACaps(c2->dwFXAlphaCaps),
c2->dwCKeyCaps, ExplainDDCKeyCaps(c2->dwCKeyCaps));
}
fclose(capfile);
}
@ -1380,7 +1397,7 @@ HRESULT WINAPI extGetCapsD(LPDIRECTDRAW lpdd, LPDDCAPS c1, LPDDCAPS c2)
//c1->dwFXAlphaCaps=AlphaCaps;
}
if((dxw.dwFlags3 & CAPMASK) && c1 && c2) MaskCapsD(c1, c2);
if(dxw.dwFlags3 & CAPMASK) MaskCapsD(c1, c2);
return res;
}
@ -2551,7 +2568,8 @@ static HRESULT BuildGenericDir(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurf
res = (*pCreateSurface)(lpdd, lpddsd, lplpdds, 0);
if(res){
if ((dxw.dwFlags1 & SWITCHVIDEOMEMORY) && (res==DDERR_OUTOFVIDEOMEMORY)){
// v2.02.60: Ref. game Incoming GOG release, post by Marek, error DDERR_UNSUPPORTED while trying to create ZBUFFER surface
if ((dxw.dwFlags1 & SWITCHVIDEOMEMORY) && ((res==DDERR_OUTOFVIDEOMEMORY)||(res==DDERR_UNSUPPORTED))){
OutTraceDW("CreateSurface ERROR: res=%x(%s) at %d, retry\n", res, ExplainDDError(res), __LINE__);
lpddsd->ddsCaps.dwCaps &= ~DDSCAPS_VIDEOMEMORY;
lpddsd->ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY;
@ -4564,9 +4582,17 @@ HRESULT WINAPI extDDGetGammaRamp(LPDIRECTDRAWSURFACE lpdds, DWORD dwFlags, LPDDG
HRESULT WINAPI extGetAvailableVidMem(LPDIRECTDRAW lpdd, LPDDSCAPS lpDDSCaps, LPDWORD lpdwTotal, LPDWORD lpdwFree, GetAvailableVidMem_Type pGetAvailableVidMem)
{
HRESULT res;
const DWORD dwMaxMem = 0x7FFFF000;
OutTraceDDRAW("GetAvailableVidMem(D): lpdd=%x\n", lpdd);
res=(*pGetAvailableVidMem)(lpdd, lpDDSCaps, lpdwTotal, lpdwFree);
if(res){
if((dxw.dwFlags3 & FORCESHEL) && (res==DDERR_NODIRECTDRAWHW)){
// fake some video memory....
OutTraceDW("GetAvailableVidMem(D): FORCESHEL mode Total=Free=%x\n", dwMaxMem);
*lpdwTotal = dwMaxMem;
*lpdwFree = dwMaxMem;
return DD_OK;
}
OutTraceE("GetAvailableVidMem(D): ERROR res=%x(%s)\n", res, ExplainDDError(res));
}
else {
@ -4574,7 +4600,6 @@ HRESULT WINAPI extDDGetGammaRamp(LPDIRECTDRAWSURFACE lpdds, DWORD dwFlags, LPDDG
*lpDDSCaps, ExplainDDSCaps(lpDDSCaps->dwCaps), lpdwTotal?*lpdwTotal:0, lpdwFree?*lpdwFree:0);
if(dxw.dwFlags2 & LIMITRESOURCES){ // check for memory value overflow - see "Mageslayer" and "Take no Prisoners"
DWORD dwLocalTotal;
const DWORD dwMaxMem = 0x7FFFF000;
if(lpdwTotal == NULL) {
lpdwTotal = &dwLocalTotal; // point to usable memory....
res=(*pGetAvailableVidMem)(lpdd, lpDDSCaps, lpdwTotal, lpdwFree); // do it again to get total memory

View File

@ -884,7 +884,13 @@ DWORD dxwCore::GetTickCount(void)
static DWORD dwLastRealTick=0;
static DWORD dwLastFakeTick=0;
DWORD dwNextRealTick;
BOOL FirstTime = TRUE;
if(FirstTime){
dwLastRealTick=(*pGetTickCount)();
dwLastFakeTick=dwLastRealTick;
FirstTime=FALSE;
}
dwNextRealTick=(*pGetTickCount)();
dwTick=(dwNextRealTick-dwLastRealTick);
TimeShift=GetHookInfo()->TimeShift;
@ -910,9 +916,13 @@ DWORD dxwCore::StretchCounter(DWORD dwTimer)
LARGE_INTEGER dxwCore::StretchCounter(LARGE_INTEGER dwTimer)
{
static int Reminder = 0;
LARGE_INTEGER ret;
TimeShift=GetHookInfo()->TimeShift;
dwTimer = TimeShifter64(dwTimer, TimeShift);
return dwTimer;
dwTimer.QuadPart += Reminder;
ret = TimeShifter64(dwTimer, TimeShift);
Reminder = (ret.QuadPart==0) ? dwTimer.LowPart : 0;
return ret;
}
void dxwCore::GetSystemTimeAsFileTime(LPFILETIME lpSystemTimeAsFileTime)

View File

@ -24,7 +24,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "dxwnd.h"
#include "dxwcore.hpp"
#define VERSION "2.02.59"
#define VERSION "2.02.60"
#define DDTHREADLOCK 1

Binary file not shown.

View File

@ -40,6 +40,11 @@ typedef void (WINAPI *GetGammaRamp_Type)(void *, UINT, D3DGAMMARAMP *);
typedef void (WINAPI *SetCursorPosition9_Type)(void *, int, int, DWORD);
typedef void (WINAPI *SetCursorPosition8_Type)(void *, int, int, DWORD);
//typedef ULONG (WINAPI *CreateRenderTarget8_Type)(void *, UINT, UINT, D3DFORMAT, D3DMULTISAMPLE_TYPE, BOOL, IDirect3DSurface8**);
typedef ULONG (WINAPI *CreateRenderTarget8_Type)(void *, UINT, UINT, D3DFORMAT, D3DMULTISAMPLE_TYPE, BOOL, void**);
typedef ULONG (WINAPI *BeginScene_Type)(void *);
typedef ULONG (WINAPI *EndScene_Type)(void *);
typedef HRESULT (WINAPI *D3D10CreateDevice_Type)(IDXGIAdapter *, D3D10_DRIVER_TYPE, HMODULE, UINT, UINT, ID3D10Device **);
typedef HRESULT (WINAPI *D3D10CreateDeviceAndSwapChain_Type)(IDXGIAdapter *, D3D10_DRIVER_TYPE, HMODULE, UINT, UINT, DXGI_SWAP_CHAIN_DESC *, IDXGISwapChain **, ID3D10Device **);
typedef HRESULT (WINAPI *D3D10CreateDevice1_Type)(IDXGIAdapter *, D3D10_DRIVER_TYPE, HMODULE, UINT, D3D10_FEATURE_LEVEL1, UINT, ID3D10Device **);
@ -88,6 +93,13 @@ ULONG WINAPI extAddRef9(void *);
ULONG WINAPI extRelease9(void *);
BOOL WINAPI voidDisableD3DSpy(void);
//ULONG WINAPI extCreateRenderTarget8(void *, UINT, UINT, D3DFORMAT, D3DMULTISAMPLE_TYPE, BOOL, IDirect3DSurface8**);
ULONG WINAPI extCreateRenderTarget8(void *, UINT, UINT, D3DFORMAT, D3DMULTISAMPLE_TYPE, BOOL, void**);
ULONG WINAPI extBeginScene8(void *);
ULONG WINAPI extEndScene8(void *);
ULONG WINAPI extBeginScene9(void *);
ULONG WINAPI extEndScene9(void *);
HRESULT WINAPI extD3D10CreateDevice(IDXGIAdapter *, D3D10_DRIVER_TYPE, HMODULE, UINT, UINT, ID3D10Device **);
@ -135,6 +147,12 @@ GetGammaRamp_Type pGetGammaRamp = 0;
SetCursorPosition9_Type pSetCursorPosition9 = 0;
SetCursorPosition8_Type pSetCursorPosition8 = 0;
CreateRenderTarget8_Type pCreateRenderTarget8 = 0;
BeginScene_Type pBeginScene8 = 0;
EndScene_Type pEndScene8 = 0;
BeginScene_Type pBeginScene9 = 0;
EndScene_Type pEndScene9 = 0;
D3D10CreateDevice_Type pD3D10CreateDevice = 0;
D3D10CreateDeviceAndSwapChain_Type pD3D10CreateDeviceAndSwapChain = 0;
D3D10CreateDevice1_Type pD3D10CreateDevice1 = 0;
@ -468,11 +486,20 @@ void HookD3DDevice8(void** ppD3Ddev8)
SetHook((void *)(**(DWORD **)ppD3Ddev8 + 72), extSetGammaRamp, (void **)&pSetGammaRamp, "SetGammaRamp(D8)");
SetHook((void *)(**(DWORD **)ppD3Ddev8 + 76), extGetGammaRamp, (void **)&pGetGammaRamp, "GetGammaRamp(D8)");
}
if(dxw.dwFlags2 & WIREFRAME){
SetHook((void *)(**(DWORD **)ppD3Ddev8 + 100), extCreateRenderTarget8, (void **)&pCreateRenderTarget8, "CreateRenderTarget(D8)");
SetHook((void *)(**(DWORD **)ppD3Ddev8 + 136), extBeginScene8, (void **)&pBeginScene8, "BeginScene(D8)");
SetHook((void *)(**(DWORD **)ppD3Ddev8 + 140), extEndScene8, (void **)&pEndScene8, "EndScene(D8)");
if((dxw.dwFlags2 & WIREFRAME) || (dxw.dwFlags4 & DISABLEFOGGING) || (dxw.dwFlags4 & ZBUFFERALWAYS)){
SetHook((void *)(**(DWORD **)ppD3Ddev8 + 200), extSetRenderState, (void **)&pSetRenderState, "SetRenderState(D8)");
SetHook((void *)(**(DWORD **)ppD3Ddev8 + 204), extGetRenderState, (void **)&pGetRenderState, "GetRenderState(D8)");
(*pSetRenderState)((void *)*ppD3Ddev8, D3DRS_FILLMODE, D3DFILL_WIREFRAME);
if(dxw.dwFlags2 & WIREFRAME) (*pSetRenderState)((void *)*ppD3Ddev8, D3DRS_FILLMODE, D3DFILL_WIREFRAME);
if(dxw.dwFlags4 & DISABLEFOGGING) (*pSetRenderState)((void *)*ppD3Ddev8, D3DRS_FOGENABLE, FALSE);
if(dxw.dwFlags4 & ZBUFFERALWAYS) (*pSetRenderState)((void *)*ppD3Ddev8, D3DRS_ZFUNC, D3DCMP_ALWAYS);
//if(1) (*pSetRenderState)((void *)*ppD3Ddev8, D3DRS_SPECULARENABLE, TRUE);
}
//if (!(dxw.dwTFlags & OUTPROXYTRACE)) return;
//SetHook((void *)(**(DWORD **)ppD3Ddev8 + 4), extAddRef8, (void **)&pAddRef8, "AddRef(D8)");
//SetHook((void *)(**(DWORD **)ppD3Ddev8 + 8), extRelease8, (void **)&pRelease8, "Release(D8)");
}
void HookD3DDevice9(void** ppD3Ddev9)
@ -491,14 +518,18 @@ void HookD3DDevice9(void** ppD3Ddev9)
SetHook((void *)(**(DWORD **)ppD3Ddev9 + 84), extSetGammaRamp, (void **)&pSetGammaRamp, "SetGammaRamp(D9)");
SetHook((void *)(**(DWORD **)ppD3Ddev9 + 88), extGetGammaRamp, (void **)&pGetGammaRamp, "GetGammaRamp(D9)");
}
SetHook((void *)(**(DWORD **)ppD3Ddev9 + 164), extBeginScene9, (void **)&pBeginScene9, "BeginScene(D9)");
SetHook((void *)(**(DWORD **)ppD3Ddev9 + 168), extEndScene9, (void **)&pEndScene9, "EndScene(D9)");
//SetHook((void *)(**(DWORD **)ppD3Ddev9 +188), extSetViewport, (void **)&pSetViewport, "SetViewport(D9)");
//SetHook((void *)(**(DWORD **)ppD3Ddev9 +192), extGetViewport, (void **)&pGetViewport, "GetViewport(D9)");
if(dxw.dwFlags2 & WIREFRAME){
if((dxw.dwFlags2 & WIREFRAME) || (dxw.dwFlags4 & DISABLEFOGGING) || (dxw.dwFlags4 & ZBUFFERALWAYS)){
SetHook((void *)(**(DWORD **)ppD3Ddev9 + 228), extSetRenderState, (void **)&pSetRenderState, "SetRenderState(D9)");
SetHook((void *)(**(DWORD **)ppD3Ddev9 + 232), extGetRenderState, (void **)&pGetRenderState, "GetRenderState(D9)");
(*pSetRenderState)((void *)*ppD3Ddev9, D3DRS_FILLMODE, D3DFILL_WIREFRAME);
if(dxw.dwFlags2 & WIREFRAME) (*pSetRenderState)((void *)*ppD3Ddev9, D3DRS_FILLMODE, D3DFILL_WIREFRAME);
if(dxw.dwFlags4 & DISABLEFOGGING) (*pSetRenderState)((void *)*ppD3Ddev9, D3DRS_FOGENABLE, FALSE);
if(dxw.dwFlags4 & ZBUFFERALWAYS) (*pSetRenderState)((void *)*ppD3Ddev9, D3DRS_ZFUNC, D3DCMP_ALWAYS);
//if(1) (*pSetRenderState)((void *)*ppD3Ddev9, D3DRS_SPECULARENABLE, TRUE);
}
if (!(dxw.dwTFlags & OUTPROXYTRACE)) return;
SetHook((void *)(**(DWORD **)ppD3Ddev9 + 4), extAddRef9, (void **)&pAddRef9, "AddRef(D9)");
SetHook((void *)(**(DWORD **)ppD3Ddev9 + 8), extRelease9, (void **)&pRelease9, "Release(D9)");
@ -925,9 +956,17 @@ HRESULT WINAPI extCreateDeviceEx(void *lpd3d, UINT adapter, D3DDEVTYPE devicetyp
return 0;
}
extern char *ExplainRenderstateValue(DWORD Value);
HRESULT WINAPI extSetRenderState(void *pd3dd, D3DRENDERSTATETYPE State, DWORD Value)
{
if (State == D3DRS_FILLMODE) Value=D3DFILL_WIREFRAME;
if((dxw.dwFlags4 & ZBUFFERALWAYS) && (State == D3DRS_ZFUNC)) {
OutTraceD3D("SetRenderState: FIXED State=ZFUNC Value=%s->D3DCMP_ALWAYS\n", ExplainRenderstateValue(Value));
Value = D3DCMP_ALWAYS;
}
if((dxw.dwFlags2 & WIREFRAME) && (State == D3DRS_FILLMODE)) Value=D3DFILL_WIREFRAME;
if((dxw.dwFlags4 & DISABLEFOGGING) && (State == D3DRS_FOGENABLE)) Value=FALSE;
//if(1 && (State == D3DRS_SPECULARENABLE)) Value=TRUE;
return (*pSetRenderState)(pd3dd, State, Value);
}
@ -1295,3 +1334,48 @@ ULONG WINAPI extRelease9(void *lpdd3dd)
return res;
}
//ULONG WINAPI extCreateRenderTarget8(void *lpdd3dd, UINT Width, UINT Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, BOOL Lockable, IDirect3DSurface8** ppSurface)
ULONG WINAPI extCreateRenderTarget8(void *lpdd3dd, UINT Width, UINT Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, BOOL Lockable, void** ppSurface)
{
ULONG res;
OutTraceD3D("Device::CreateRenderTarget(8): dd3dd=%x dim=(%dx%d) Format=%x Lockable=%x\n",
lpdd3dd, Width, Height, Format, Lockable);
res=(*pCreateRenderTarget8)(lpdd3dd, Width, Height, Format, MultiSample, Lockable, ppSurface);
OutTraceD3D("Device::CreateRenderTarget(8): res=%x\n", res);
return res;
}
ULONG WINAPI extBeginScene8(void *lpdd3dd)
{
ULONG res;
OutTraceD3D("Device::BeginScene(8): d3dd=%x\n", lpdd3dd);
res=(*pBeginScene8)(lpdd3dd);
if (res) OutTraceE("Device::BeginScene(8) ERROR: err=%x\n", res);
return res;
}
ULONG WINAPI extBeginScene9(void *lpdd3dd)
{
ULONG res;
OutTraceD3D("Device::BeginScene(9): d3dd=%x\n", lpdd3dd);
res=(*pBeginScene9)(lpdd3dd);
if (res) OutTraceE("Device::BeginScene(9) ERROR: err=%x\n", res);
return res;
}
ULONG WINAPI extEndScene8(void *lpdd3dd)
{
ULONG res;
res=(*pEndScene8)(lpdd3dd);
if (res) OutTraceE("Device::EndScene(8) ERROR: err=%x\n", res);
return res;
}
ULONG WINAPI extEndScene9(void *lpdd3dd)
{
ULONG res;
res=(*pEndScene9)(lpdd3dd);
if (res) OutTraceE("Device::EndScene(9) ERROR: err=%x\n", res);
return res;
}

View File

@ -301,6 +301,7 @@ void HookDirect3DDevice(void **lpd3ddev, int d3dversion)
if(pSetRenderState2){
if(dxw.dwFlags2 & WIREFRAME)(*pSetRenderState2)(*lpd3ddev, D3DRENDERSTATE_FILLMODE, D3DFILL_WIREFRAME);
if(dxw.dwFlags4 & DISABLEFOGGING) (*pSetRenderState2)(*lpd3ddev, D3DRENDERSTATE_FOGENABLE, FALSE);
if(dxw.dwFlags4 & ZBUFFERALWAYS) (*pSetRenderState2)(*lpd3ddev, D3DRENDERSTATE_ZFUNC, D3DCMP_ALWAYS);
}
break;
case 3:
@ -315,6 +316,7 @@ void HookDirect3DDevice(void **lpd3ddev, int d3dversion)
if(pSetRenderState3){
if(dxw.dwFlags2 & WIREFRAME)(*pSetRenderState3)(*lpd3ddev, D3DRENDERSTATE_FILLMODE, D3DFILL_WIREFRAME);
if(dxw.dwFlags4 & DISABLEFOGGING) (*pSetRenderState3)(*lpd3ddev, D3DRENDERSTATE_FOGENABLE, FALSE);
if(dxw.dwFlags4 & ZBUFFERALWAYS) (*pSetRenderState3)(*lpd3ddev, D3DRENDERSTATE_ZFUNC, D3DCMP_ALWAYS);
}
break;
case 7:
@ -801,6 +803,10 @@ HRESULT WINAPI extSetRenderState2(void *d3dd, D3DRENDERSTATETYPE State, DWORD Va
if((dxw.dwFlags2 & WIREFRAME) && (State == D3DRENDERSTATE_FILLMODE)){
Value = D3DFILL_WIREFRAME;
OutTraceD3D("SetRenderState: FIXED State=FILLMODE Value=D3DFILL_WIREFRAME\n");
}
if((dxw.dwFlags4 & DISABLEFOGGING) && (State == D3DRENDERSTATE_FOGENABLE)){
OutTraceD3D("SetRenderState: FIXED State=FOGENABLE Value=FALSE\n");
Value = FALSE;
}
res=(*pSetRenderState2)(d3dd, State, Value);
if(res) OutTraceE("SetRenderState(2): res=%x(%s)\n", res, ExplainDDError(res));

View File

@ -41,8 +41,8 @@ static HookEntry_Type TimeHooks[]={
{"GetSystemTimeAsFileTime", (FARPROC)GetSystemTimeAsFileTime, (FARPROC *)&pGetSystemTimeAsFileTime, (FARPROC)extGetSystemTimeAsFileTime},
{"Sleep", (FARPROC)Sleep, (FARPROC *)&pSleep, (FARPROC)extSleep},
{"SleepEx", (FARPROC)SleepEx, (FARPROC *)&pSleepEx, (FARPROC)extSleepEx},
{"QueryPerformanceCounter", (FARPROC)NULL, (FARPROC *)&pQueryPerformanceCounter, (FARPROC)extQueryPerformanceCounter},
{"QueryPerformanceFrequency", (FARPROC)NULL, (FARPROC *)&pQueryPerformanceFrequency, (FARPROC)extQueryPerformanceFrequency},
{"QueryPerformanceCounter", (FARPROC)QueryPerformanceCounter, (FARPROC *)&pQueryPerformanceCounter, (FARPROC)extQueryPerformanceCounter},
{"QueryPerformanceFrequency", (FARPROC)QueryPerformanceFrequency, (FARPROC *)&pQueryPerformanceFrequency, (FARPROC)extQueryPerformanceFrequency},
{0, NULL, 0, 0} // terminator
};

Binary file not shown.