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

v2_03_52_src

Former-commit-id: 0078cbd5b18cc119951e8d62151f2172f45dfcd8
This commit is contained in:
gho tik 2016-01-19 11:42:45 -05:00 committed by Refael ACkermann
parent c9137306ce
commit dd3b8535bf
38 changed files with 449 additions and 2615 deletions

View File

@ -14,7 +14,7 @@
#define UNNOTIFY 0x00000001
#define EMULATESURFACE 0x00000002
#define CLIPCURSOR 0x00000004 // Force cursor clipping within window
#define RESETPRIMARY 0x00000008 // reset emulated primary surface when reopening DDRaw object
//#define RESETPRIMARY 0x00000008 // reset emulated primary surface when reopening DDRaw object
#define HOOKDI 0x00000010
#define MODIFYMOUSE 0x00000020
#define HANDLEEXCEPTIONS 0x00000040 // Handles exceptions: Div by 0 ....
@ -55,7 +55,7 @@
#define INIT16BPP 0x00000080 // simulate a 16BPP initial desktop setting (in GetDeviceCaps API)
#define KEEPCURSORFIXED 0x00000100 // inhibit SetCursorPos operation
#define DISABLEGAMMARAMP 0x00000200 // let the application retrieve the desktop DC (for capability queries)
#define DIFFERENTIALMOUSE 0x00000400 // emulates the 360-degrees-free-running mouse style....
//#define DIFFERENTIALMOUSE 0x00000400 // emulates the 360-degrees-free-running mouse style....
#define FIXNCHITTEST 0x00000800 // fixes WM_NCHITTEST message X,Y coordinates
#define LIMITFPS 0x00001000 // delays primary blit operations to limit FPS
#define SKIPFPS 0x00002000 // skips primary blit operations up to limit
@ -97,8 +97,8 @@
#define GDIEMULATEDC 0x00008000 // Map GDI/user32 calls to primary to a memory surface to be stretch-blitted to the primary
#define FULLSCREENONLY 0x00010000 // assume that the program is always in fullscreen mode
#define FONTBYPASS 0x00020000 // bypass font unsupported API
#define YUV2RGB 0x00040000 // Simulate YUV to RGB color conversion
#define RGB2YUV 0x00080000 // Simulate RGB to YUV color conversion
//#define YUV2RGB 0x00040000 // Simulate YUV to RGB color conversion
//#define RGB2YUV 0x00080000 // Simulate RGB to YUV color conversion
#define BUFFEREDIOFIX 0x00100000 // fix buffered IO incompatibilities between pre-Win98 and post-WinNT
#define FILTERMESSAGES 0x00200000 // ignore offending messages that are typical of a window and are hot handled by a fullscreeen app
#define PEEKALLMESSAGES 0x00400000 // force Peek-ing all sort of messages to avoid Win7 message queue saturation that leads to program halt
@ -215,6 +215,8 @@
#define EMULATERELMOUSE 0x80000000 // Emulates the dinput detection of relative mouse position by keeping the mouse at the center of window and looking for movements
// seventh flags DWORD dxw.dwFlags7:
#define LIMITDDRAW 0x00000001 // Limit the maximum available ddraw object version
// eighth flags DWORD dxw.dwFlags8:
// logging Tflags DWORD:
@ -222,8 +224,8 @@
#define OUTDDRAWTRACE 0x00000002 // traces DxWnd directdraw screen handling
#define OUTWINMESSAGES 0x00000004 // traces windows messages
#define OUTCURSORTRACE 0x00000008 // traces cursor positions & operations
#define OUTPROXYTRACE 0x00000010 // enables all operations through proxy functions
#define DXPROXED 0x00000020 // hook DX proxy methods to log each call in original behaviour
//#define OUTPROXYTRACE 0x00000010 // enables all operations through proxy functions
//#define DXPROXED 0x00000020 // hook DX proxy methods to log each call in original behaviour
#define ASSERTDIALOG 0x00000040 // show assert messages in Dialog Box
#define OUTIMPORTTABLE 0x00000080 // dump import table contents
#define OUTDEBUG 0x00000100 // detailed debugging indormation
@ -267,6 +269,7 @@ typedef struct TARGETMAP
short FakeVersionId;
short MaxScreenRes;
short SwapEffect;
short MaxDdrawInterface;
}TARGETMAP;
typedef struct
@ -314,7 +317,7 @@ LRESULT CALLBACK extDialogWindowProc(HWND, UINT, WPARAM, LPARAM);
// defines below to condition debug message handling
#define OutTraceW if(dxw.dwTFlags & OUTWINMESSAGES) OutTrace
#define OutTraceX if(dxw.dwTFlags & OUTPROXYTRACE) OutTrace
//#define OutTraceX if(dxw.dwTFlags & OUTPROXYTRACE) OutTrace
#define OutTraceDW if(dxw.dwTFlags & OUTDXWINTRACE) OutTrace
#define OutTraceDDRAW if(dxw.dwTFlags & OUTDDRAWTRACE) OutTrace
#define OutTraceD3D if(dxw.dwTFlags & OUTD3DTRACE) OutTrace
@ -326,7 +329,7 @@ LRESULT CALLBACK extDialogWindowProc(HWND, UINT, WPARAM, LPARAM);
#define OutTraceE OutTrace
#define IsTraceW (dxw.dwTFlags & OUTWINMESSAGES)
#define IsTraceX (dxw.dwTFlags & OUTPROXYTRACE)
//#define IsTraceX (dxw.dwTFlags & OUTPROXYTRACE)
#define IsTraceDW (dxw.dwTFlags & OUTDXWINTRACE)
#define IsTraceDDRAW (dxw.dwTFlags & OUTDDRAWTRACE)
#define IsTraceD3D (dxw.dwTFlags & OUTD3DTRACE)
@ -361,3 +364,14 @@ typedef enum {
TIMER_TYPE_USER32,
TIMER_TYPE_WINMM
} Timer_Types;
typedef struct {
int w;
int h;
} SupportedRes_Type;
extern SupportedRes_Type SupportedSVGARes[];
extern SupportedRes_Type SupportedHDTVRes[];
extern int SupportedDepths[];
#define SUPPORTED_DEPTHS_NUMBER 4

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:fced667458c73b82bde02efd8d316628a878f1b006dc783b0e806309c0ff8d32
size 626176
oid sha256:935f85ba0560e2c0a319ea4a007c0f24de314cc7207710fdcd4d41e6a4fbb39a
size 593920

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:45425fed1d12c6c8a93df12b38a6ec3a17b875c00b2851c1031963973e4a8c67
oid sha256:82bd1f60071207b5033f2deade63c46438a048357e3cb0e4d5aa5b379da92186
size 545792

View File

@ -5,11 +5,11 @@ module0=
opengllib0=
ver0=0
coord0=0
flag0=1753358370
flag0=-394124766
flagg0=134217728
flagh0=20
flagi0=0
tflag0=3
flagi0=4194304
tflag0=0
initx0=0
inity0=0
minx0=0
@ -22,3 +22,14 @@ sizx0=800
sizy0=600
maxfps0=0
initts0=0
launchpath0=
notes0=
registry0=
flagj0=0
flagk0=0
flagl0=0
flagm0=0
winver0=0
maxres0=0
swapeffect0=0
maxddinterface0=7

View File

@ -6,7 +6,7 @@ module0=
opengllib0=
ver0=0
coord0=0
flag0=679477792
flag0=679477794
flagg0=1207959552
flagh0=20
flagi0=205520900
@ -26,3 +26,10 @@ initts0=0
winver0=0
maxres0=-1
flagj0=128
notes0=
registry0=
flagk0=65536
flagl0=0
flagm0=0
swapeffect0=0
maxddinterface0=7

View File

@ -0,0 +1,29 @@
[target]
title0=Dark Colony (16 bit)
path0=D:\Games\DarkColony\DCOLONY\DC16.EXE
launchpath0=
module0=
opengllib0=
notes0=
registry0=
ver0=0
coord0=0
flag0=134234166
flagg0=1207959552
flagh0=20
flagi0=4194308
flagj0=67108992
flagk0=0
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

View File

@ -5,7 +5,7 @@ module0=
opengllib0=
ver0=0
coord0=0
flag0=134218274
flag0=134234166
flagg0=1207959552
flagh0=20
flagi0=4194308
@ -30,3 +30,6 @@ notes0=
registry0=
flagk0=0
swapeffect0=0
flagl0=0
flagm0=0
maxddinterface0=7

View File

@ -0,0 +1,28 @@
[target]
title0=Nox (GOG)
path0=D:\Games\Nox GOG\Game.exe
launchpath0=
module0=
opengllib0=
notes0=
registry0=
ver0=0
coord0=0
flag0=681574434
flagg0=1207959552
flagh0=20
flagi0=134217732
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

View File

@ -0,0 +1,28 @@
[target]
title0=Nox (RIP)
path0=D:\Games\Nox RIP\GAME.EXE
launchpath0=
module0=
opengllib0=
notes0=
registry0=
ver0=0
coord0=2
flag0=681574434
flagg0=1207959568
flagh0=20
flagi0=138412036
flagj0=5248
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

View File

@ -1010,3 +1010,16 @@ add: DirectInput / "Emulate mouse relative movement". Eliminates the fake clippe
fix: directinput mouse mode (absolute vs. relative) now correctly checked using the mouse device
fix: attempt to fix FIXMOVIESCOLOR flag for 32BPP target color depth, but it doesn't still work on Win10
fix: directinput RELEASEMOUSE flag applied to mouse device only
v2.03.52
add: added Win NT 4.0 to the list of detected OS
fix: DirectInput SetCooperativeLevel: should not change window handle - fix startup error in "Storm Angel"
fix: fixed GetWindowRect to replace real desktop with virtual one - fix startup error in "Storm Angel"
fix: ddraw hookers keep different original pointers for each interface: fixes several ddraw UNKNOWN_ERROR
fix: eliminated the ddraw full log functionality, because of the increased complexity
add: added several supported fake screen resolutions - needed for "Last resort" SWAT3 mod
fix: used fake resolutions also in USER32 EnumDisplaySettings
fix: avoid hooking directinput dlls if not requested when loaded dynamically
fix: added recovery of lost device in DirectInput GetDeviceData method
fix: changed SetHook so that it can get function pointers without necessarily replacing them
add: option "Limit ddraw interface" to exclude support for IDirectDrawInterface greater than limit (range 1-7)

File diff suppressed because it is too large Load Diff

View File

@ -1,101 +0,0 @@
// DirectDraw Proxed APIs
extern HRESULT WINAPI extDirectDrawCreateProxy(GUID FAR *lpguid, LPDIRECTDRAW FAR *lplpdd, IUnknown FAR *pu);
extern HRESULT WINAPI extDirectDrawCreateExProxy(GUID FAR *lpguid, LPDIRECTDRAW FAR *lplpdd, REFIID RefIid, IUnknown FAR *pu);
extern HRESULT WINAPI extDirectDrawEnumerateProxy(LPDDENUMCALLBACK, LPVOID);
extern HRESULT WINAPI extDirectDrawEnumerateExProxy(LPDDENUMCALLBACKEX, LPVOID, DWORD);
// DirectDraw Surface Proxed methods
extern HRESULT WINAPI extQueryInterfaceSProxy(void *, REFIID, LPVOID *);
extern ULONG WINAPI extAddRefSProxy(LPDIRECTDRAWSURFACE);
extern HRESULT WINAPI extReleaseSProxy(LPDIRECTDRAWSURFACE);
extern HRESULT WINAPI extAddOverlayDirtyRectProxy(LPDIRECTDRAWSURFACE, LPRECT);
extern HRESULT WINAPI extBltBatchProxy(LPDIRECTDRAWSURFACE, LPDDBLTBATCH, DWORD, DWORD);
extern HRESULT WINAPI extEnumOverlayZOrdersProxy(LPDIRECTDRAWSURFACE, DWORD, LPVOID, LPDDENUMSURFACESCALLBACK);
extern HRESULT WINAPI extFlipProxy(LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE, DWORD);
extern HRESULT WINAPI extGetBltStatusProxy(LPDIRECTDRAWSURFACE , DWORD);
extern HRESULT WINAPI extGetClipperProxy(LPDIRECTDRAWSURFACE, LPDIRECTDRAWCLIPPER FAR*);
extern HRESULT WINAPI extGetFlipStatusProxy(LPDIRECTDRAWSURFACE, DWORD);
extern HRESULT WINAPI extGetOverlayPositionProxy(LPDIRECTDRAWSURFACE, LPLONG, LPLONG);
extern HRESULT WINAPI extIsLostProxy(LPDIRECTDRAWSURFACE);
extern HRESULT WINAPI extLockProxy(LPDIRECTDRAWSURFACE, LPRECT, LPDDSURFACEDESC, DWORD, HANDLE);
extern HRESULT WINAPI extRestoreProxy(LPDIRECTDRAWSURFACE);
extern HRESULT WINAPI extSetOverlayPositionProxy(LPDIRECTDRAWSURFACE, LONG, LONG);
extern HRESULT WINAPI extUnlock1Proxy(LPDIRECTDRAWSURFACE, LPVOID);
extern HRESULT WINAPI extUnlock4Proxy(LPDIRECTDRAWSURFACE, LPRECT);
extern HRESULT WINAPI extUpdateOverlayProxy(LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT, DWORD, LPDDOVERLAYFX);
extern HRESULT WINAPI extUpdateOverlayDisplayProxy(LPDIRECTDRAWSURFACE, DWORD);
extern HRESULT WINAPI extUpdateOverlayZOrderProxy(LPDIRECTDRAWSURFACE, DWORD, LPDIRECTDRAWSURFACE);
extern HRESULT WINAPI extFlipProxy(LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE, DWORD);
extern HRESULT WINAPI extBltBatchProxy(LPDIRECTDRAWSURFACE, LPDDBLTBATCH, DWORD, DWORD);
extern HRESULT WINAPI extGetAttachedSurface1Proxy(LPDIRECTDRAWSURFACE, LPDDSCAPS, LPDIRECTDRAWSURFACE *);
extern HRESULT WINAPI extGetAttachedSurface3Proxy(LPDIRECTDRAWSURFACE, LPDDSCAPS, LPDIRECTDRAWSURFACE *);
extern HRESULT WINAPI extGetAttachedSurface4Proxy(LPDIRECTDRAWSURFACE, LPDDSCAPS, LPDIRECTDRAWSURFACE *);
extern HRESULT WINAPI extGetAttachedSurface7Proxy(LPDIRECTDRAWSURFACE, LPDDSCAPS, LPDIRECTDRAWSURFACE *);
extern HRESULT WINAPI extAddAttachedSurfaceProxy(LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE);
extern HRESULT WINAPI extBltProxy(LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT, DWORD, LPDDBLTFX);
extern HRESULT WINAPI extBltFastProxy(LPDIRECTDRAWSURFACE, DWORD, DWORD, LPDIRECTDRAWSURFACE, LPRECT, DWORD);
extern HRESULT WINAPI extDeleteAttachedSurfaceProxy(LPDIRECTDRAWSURFACE, DWORD, LPDIRECTDRAWSURFACE);
extern HRESULT WINAPI extEnumAttachedSurfacesProxy(LPDIRECTDRAWSURFACE, LPVOID, LPDDENUMSURFACESCALLBACK);
extern HRESULT WINAPI extGetCaps1SProxy(LPDIRECTDRAWSURFACE, LPDDSCAPS);
extern HRESULT WINAPI extGetCaps2SProxy(LPDIRECTDRAWSURFACE, LPDDSCAPS);
extern HRESULT WINAPI extGetCaps3SProxy(LPDIRECTDRAWSURFACE, LPDDSCAPS);
extern HRESULT WINAPI extGetCaps4SProxy(LPDIRECTDRAWSURFACE, LPDDSCAPS2);
extern HRESULT WINAPI extGetCaps7SProxy(LPDIRECTDRAWSURFACE, LPDDSCAPS2);
extern HRESULT WINAPI extGetColorKeyProxy(LPDIRECTDRAWSURFACE, DWORD, LPDDCOLORKEY);
extern HRESULT WINAPI extGetDCProxy(LPDIRECTDRAWSURFACE, HDC FAR *);
extern HRESULT WINAPI extGetPaletteProxy(LPDIRECTDRAWSURFACE, LPDIRECTDRAWPALETTE *);
extern HRESULT WINAPI extGetPixelFormatProxy(LPDIRECTDRAWSURFACE, LPDDPIXELFORMAT);
extern HRESULT WINAPI extReleaseDCProxy(LPDIRECTDRAWSURFACE, HDC FAR);
extern HRESULT WINAPI extSetClipperProxy(LPDIRECTDRAWSURFACE, LPDIRECTDRAWCLIPPER);
extern HRESULT WINAPI extSetColorKeyProxy(LPDIRECTDRAWSURFACE, DWORD, LPDDCOLORKEY);
extern HRESULT WINAPI extSetPaletteProxy(LPDIRECTDRAWSURFACE, LPDIRECTDRAWPALETTE);
extern HRESULT WINAPI extGetSurfaceDesc1Proxy(LPDIRECTDRAWSURFACE, LPDDSURFACEDESC);
extern HRESULT WINAPI extGetSurfaceDesc4Proxy(LPDIRECTDRAWSURFACE2, LPDDSURFACEDESC2);
// DirectDraw Proxed methods
extern ULONG WINAPI extAddRefDProxy(LPDIRECTDRAW);
extern ULONG WINAPI extCompactProxy(LPDIRECTDRAW);
extern HRESULT WINAPI extEnumDisplayModesProxy(LPDIRECTDRAW, DWORD, LPDDSURFACEDESC, LPVOID, LPDDENUMMODESCALLBACK);
extern HRESULT WINAPI extGetCaps1D(LPDIRECTDRAW, LPDDCAPS, LPDDCAPS);
extern HRESULT WINAPI extGetCaps2D(LPDIRECTDRAW, LPDDCAPS, LPDDCAPS);
extern HRESULT WINAPI extGetCaps4D(LPDIRECTDRAW, LPDDCAPS, LPDDCAPS);
extern HRESULT WINAPI extGetCaps7D(LPDIRECTDRAW, LPDDCAPS, LPDDCAPS);
extern HRESULT WINAPI extGetFourCCCodesProxy(LPDIRECTDRAW, LPDWORD, LPDWORD);
extern HRESULT WINAPI extGetMonitorFrequencyProxy(LPDIRECTDRAW, LPDWORD);
extern HRESULT WINAPI extGetScanLineProxy(LPDIRECTDRAW, LPDWORD);
extern HRESULT WINAPI extGetVerticalBlankStatusProxy(LPDIRECTDRAW, LPBOOL);
extern HRESULT WINAPI extRestoreDisplayModeProxy(LPDIRECTDRAW);
extern HRESULT WINAPI extGetAvailableVidMemProxy(LPDIRECTDRAW, LPDDSCAPS, LPDWORD, LPDWORD);
extern HRESULT WINAPI extGetSurfaceFromDCProxy(LPDIRECTDRAW, HDC, LPDIRECTDRAWSURFACE*);
extern HRESULT WINAPI extRestoreAllSurfacesProxy(LPDIRECTDRAW);
extern HRESULT WINAPI extGetDeviceIdentifierProxy(LPDIRECTDRAW, LPDDDEVICEIDENTIFIER, DWORD);
extern HRESULT WINAPI extGetFourCCCodesProxy(LPDIRECTDRAW, LPDWORD, LPDWORD);
extern HRESULT WINAPI extTestCooperativeLevelProxy(LPDIRECTDRAW);
extern HRESULT WINAPI extEnumSurfacesProxy1(LPDIRECTDRAW, DWORD, LPDDSURFACEDESC, LPVOID, LPDDENUMSURFACESCALLBACK);
extern HRESULT WINAPI extEnumSurfacesProxy4(LPDIRECTDRAW, DWORD, LPDDSURFACEDESC2, LPVOID, LPDDENUMSURFACESCALLBACK2);
extern HRESULT WINAPI extInitializeProxy(LPDIRECTDRAW, GUID FAR *);
// DirectDraw Clipper Proxed methods
extern HRESULT WINAPI extQueryInterfaceCProxy(void *, REFIID, LPVOID *);
extern HRESULT WINAPI extAddRefCProxy(LPDIRECTDRAWCLIPPER);
extern HRESULT WINAPI extReleaseCProxy(LPDIRECTDRAWCLIPPER);
extern HRESULT WINAPI extGetClipListProxy(LPDIRECTDRAWCLIPPER, LPRECT, LPRGNDATA, LPDWORD);
extern HRESULT WINAPI extGetHWndProxy(LPDIRECTDRAWCLIPPER, HWND FAR *);
extern HRESULT WINAPI extInitializeCProxy(LPDIRECTDRAWCLIPPER, LPDIRECTDRAW, DWORD);
extern HRESULT WINAPI extIsClipListChangedProxy(LPDIRECTDRAWCLIPPER, BOOL FAR *);
extern HRESULT WINAPI extSetClipListProxy(LPDIRECTDRAWCLIPPER, LPRGNDATA, DWORD);
extern HRESULT WINAPI extSetHWndProxy(LPDIRECTDRAWCLIPPER, DWORD, HWND);
// DirectDraw Palette Proxed methods
extern HRESULT WINAPI extQueryInterfacePProxy(void *, REFIID, LPVOID *);
extern HRESULT WINAPI extAddRefPProxy(LPDIRECTDRAWPALETTE);
extern HRESULT WINAPI extReleasePProxy(LPDIRECTDRAWPALETTE);
extern HRESULT WINAPI extGetCapsPProxy(LPDIRECTDRAWPALETTE, LPDWORD);
extern HRESULT WINAPI extGetEntriesProxy(LPDIRECTDRAWPALETTE, DWORD, DWORD, DWORD, LPPALETTEENTRY);
extern HRESULT WINAPI extSetEntriesProxy(LPDIRECTDRAWPALETTE, DWORD, DWORD, DWORD, LPPALETTEENTRY);

View File

@ -13,7 +13,6 @@
#include "dxwcore.hpp"
#include "stdio.h"
#include "hddraw.h"
#include "ddproxy.h"
#include "dxhelper.h"
#include "syslibs.h"
@ -35,13 +34,20 @@ HRESULT WINAPI extDirectDrawEnumerateEx(LPDDENUMCALLBACKEX, LPVOID, DWORD);
HRESULT WINAPI extDirectDrawCreateClipper(DWORD, LPDIRECTDRAWCLIPPER *, IUnknown *);
// DirectDraw
HRESULT WINAPI extQueryInterfaceD(void *, REFIID, LPVOID *);
ULONG WINAPI extReleaseD(LPDIRECTDRAW);
HRESULT WINAPI extQueryInterfaceD1(void *, REFIID, LPVOID *);
HRESULT WINAPI extQueryInterfaceD2(void *, REFIID, LPVOID *);
HRESULT WINAPI extQueryInterfaceD4(void *, REFIID, LPVOID *);
HRESULT WINAPI extQueryInterfaceD7(void *, REFIID, LPVOID *);
ULONG WINAPI extReleaseD1(LPDIRECTDRAW);
ULONG WINAPI extReleaseD2(LPDIRECTDRAW);
ULONG WINAPI extReleaseD4(LPDIRECTDRAW);
ULONG WINAPI extReleaseD7(LPDIRECTDRAW);
/*** IDirectDraw methods ***/
HRESULT WINAPI extCreateClipper(LPDIRECTDRAW, DWORD, LPDIRECTDRAWCLIPPER FAR* , IUnknown FAR*);
HRESULT WINAPI extCreatePalette(LPDIRECTDRAW, DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE *, IUnknown *);
HRESULT WINAPI extCreateSurface1(LPDIRECTDRAW, DDSURFACEDESC *, LPDIRECTDRAWSURFACE *, void *);
HRESULT WINAPI extCreateSurface2(LPDIRECTDRAW, DDSURFACEDESC *, LPDIRECTDRAWSURFACE *, void *);
HRESULT WINAPI extCreateSurface3(LPDIRECTDRAW, DDSURFACEDESC *, LPDIRECTDRAWSURFACE *, void *);
HRESULT WINAPI extCreateSurface4(LPDIRECTDRAW, DDSURFACEDESC2 *, LPDIRECTDRAWSURFACE *, void *);
HRESULT WINAPI extCreateSurface7(LPDIRECTDRAW, DDSURFACEDESC2 *, LPDIRECTDRAWSURFACE *, void *);
HRESULT WINAPI extDuplicateSurface(LPDIRECTDRAW, LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE *);
@ -120,6 +126,7 @@ HRESULT WINAPI extSetSurfaceDesc(LPDIRECTDRAWSURFACE, LPDDSURFACEDESC, DWORD);
// DirectDrawClipper
HRESULT WINAPI extReleaseC(LPDIRECTDRAWCLIPPER);
HRESULT WINAPI extGetClipList(LPDIRECTDRAWCLIPPER, LPRECT, LPRGNDATA, LPDWORD);
HRESULT WINAPI extSetHWnd(LPDIRECTDRAWCLIPPER, DWORD, HWND);
// DirectDrawPalette
HRESULT WINAPI extReleaseP(LPDIRECTDRAWPALETTE);
@ -143,9 +150,15 @@ DirectDrawEnumerateEx_Type pDirectDrawEnumerateEx = NULL;
DirectDrawCreateClipper_Type pDirectDrawCreateClipper = NULL;
/* DirectDraw hook pointers */
QueryInterface_Type pQueryInterfaceD;
QueryInterface_Type pQueryInterfaceD1;
QueryInterface_Type pQueryInterfaceD2;
QueryInterface_Type pQueryInterfaceD4;
QueryInterface_Type pQueryInterfaceD7;
AddRefD_Type pAddRefD;
ReleaseD_Type pReleaseD;
ReleaseD_Type pReleaseD1 = NULL;
ReleaseD_Type pReleaseD2 = NULL;
ReleaseD_Type pReleaseD4 = NULL;
ReleaseD_Type pReleaseD7 = NULL;
Compact_Type pCompact;
CreateClipper_Type pCreateClipper=NULL;
CreatePalette_Type pCreatePalette;
@ -1016,26 +1029,33 @@ void HookDDSession(LPDIRECTDRAW *lplpdd, int dxversion)
OutTraceDW("Hooking directdraw session dd=%x dxversion=%d thread_id=%x\n",
*lplpdd, dxversion, GetCurrentThreadId());
// IDIrectDraw::QueryInterface
SetHook((void *)(**(DWORD **)lplpdd), extQueryInterfaceD, (void **)&pQueryInterfaceD, "QueryInterface(D)");
// IDIrectDraw::Release
SetHook((void *)(**(DWORD **)lplpdd + 8), extReleaseD, (void **)&pReleaseD, "Release(D)");
// IDIrectDraw::CreateClipper
SetHook((void *)(**(DWORD **)lplpdd + 16), extCreateClipper, (void **)&pCreateClipper, "CreateClipper(D)");
// IDIrectDraw::CreatePalette
SetHook((void *)(**(DWORD **)lplpdd + 20), extCreatePalette, (void **)&pCreatePalette, "CreatePalette(D)");
// IDIrectDraw::QueryInterface
// IDIrectDraw::CreateSurface
// IDIrectDraw::Release
switch(dxversion) {
default:
case 1:
SetHook((void *)(**(DWORD **)lplpdd), extQueryInterfaceD1, (void **)&pQueryInterfaceD1, "QueryInterface(D1)");
SetHook((void *)(**(DWORD **)lplpdd + 8), extReleaseD1, (void **)&pReleaseD1, "Release(D1)");
SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateSurface1, (void **)&pCreateSurface1, "CreateSurface(S1)");
break;
case 2:
SetHook((void *)(**(DWORD **)lplpdd), extQueryInterfaceD2, (void **)&pQueryInterfaceD2, "QueryInterface(D2)");
SetHook((void *)(**(DWORD **)lplpdd + 8), extReleaseD2, (void **)&pReleaseD2, "Release(D2)");
SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateSurface2, (void **)&pCreateSurface2, "CreateSurface(S2)");
break;
case 4:
SetHook((void *)(**(DWORD **)lplpdd), extQueryInterfaceD4, (void **)&pQueryInterfaceD4, "QueryInterface(D4)");
SetHook((void *)(**(DWORD **)lplpdd + 8), extReleaseD4, (void **)&pReleaseD4, "Release(D4)");
SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateSurface4, (void **)&pCreateSurface4, "CreateSurface(S4)");
break;
case 7:
SetHook((void *)(**(DWORD **)lplpdd), extQueryInterfaceD7, (void **)&pQueryInterfaceD7, "QueryInterface(D7)");
SetHook((void *)(**(DWORD **)lplpdd + 8), extReleaseD7, (void **)&pReleaseD7, "Release(D7)");
SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateSurface7, (void **)&pCreateSurface7, "CreateSurface(S7)");
break;
}
@ -1099,37 +1119,6 @@ void HookDDSession(LPDIRECTDRAW *lplpdd, int dxversion)
// IDIrectDraw::TestCooperativeLevel
SetHook((void *)(**(DWORD **)lplpdd + 104), extTestCooperativeLevel, (void **)&pTestCooperativeLevel, "TestCooperativeLevel(D)");
}
if (!(dxw.dwTFlags & OUTPROXYTRACE)) return;
// Just proxed ...
// IDIrectDraw::AddRef
SetHook((void *)(**(DWORD **)lplpdd + 4), extAddRefDProxy, (void **)&pAddRefD, "AddRef(D)");
// IDIrectDraw::Compact
SetHook((void *)(**(DWORD **)lplpdd + 12), extCompactProxy, (void **)&pCompact, "Compact(D)");
// IDIrectDraw::EnumSurfaces
if (dxversion < 4)
SetHook((void *)(**(DWORD **)lplpdd + 36), extEnumSurfacesProxy1, (void **)&pEnumSurfaces1, "EnumSurfaces(D1)");
else
SetHook((void *)(**(DWORD **)lplpdd + 36), extEnumSurfacesProxy4, (void **)&pEnumSurfaces4, "EnumSurfaces(D4)");
// IDIrectDraw::GetFourCCCodes
SetHook((void *)(**(DWORD **)lplpdd + 52), extGetFourCCCodesProxy, (void **)&pGetFourCCCodes, "GetFourCCCodes(D)");
// IDIrectDraw::GetMonitorFrequency
SetHook((void *)(**(DWORD **)lplpdd + 60), extGetMonitorFrequencyProxy, (void **)&pGetMonitorFrequency, "GetMonitorFrequency(D)");
// IDIrectDraw::GetScanLine
SetHook((void *)(**(DWORD **)lplpdd + 64), extGetScanLineProxy, (void **)&pGetScanLine, "GetScanLine(D)");
// IDIrectDraw::GetVerticalBlankStatus
SetHook((void *)(**(DWORD **)lplpdd + 68), extGetVerticalBlankStatusProxy, (void **)&pGetVerticalBlankStatus, "GetVerticalBlankStatus(D)");
// IDIrectDraw::RestoreDisplayMode
SetHook((void *)(**(DWORD **)lplpdd + 76), extRestoreDisplayModeProxy, (void **)&pRestoreDisplayMode, "RestoreDisplayMode(D)");
if (dxversion >= 4){
// IDIrectDraw::GetSurfaceFromDC
SetHook((void *)(**(DWORD **)lplpdd + 96), extGetSurfaceFromDCProxy, (void **)&pGetSurfaceFromDC, "GetSurfaceFromDC(D)");
// IDIrectDraw::RestoreAllSurfaces
SetHook((void *)(**(DWORD **)lplpdd + 100), extRestoreAllSurfacesProxy, (void **)&pRestoreAllSurfaces, "RestoreAllSurfaces(D)");
// IDIrectDraw::GetDeviceIdentifier
SetHook((void *)(**(DWORD **)lplpdd + 108), extGetDeviceIdentifierProxy, (void **)&pGetDeviceIdentifier, "GetDeviceIdentifier(D)");
}
}
static void HookDDClipper(LPDIRECTDRAWCLIPPER FAR* lplpDDClipper)
@ -1141,25 +1130,7 @@ static void HookDDClipper(LPDIRECTDRAWCLIPPER FAR* lplpDDClipper)
// IDirectDrawClipper::GetClipList
SetHook((void *)(**(DWORD **)lplpDDClipper + 12), extGetClipList, (void **)&pGetClipList, "GetClipList(C)");
// IDirectDrawClipper::SetHWnd
SetHook((void *)(**(DWORD **)lplpDDClipper + 32), extSetHWndProxy, (void **)&pSetHWnd, "SetHWnd(C)");
if (!(dxw.dwTFlags & OUTPROXYTRACE)) return;
// Just proxed ...
// IDirectDrawClipper::QueryInterface
SetHook((void *)(**(DWORD **)lplpDDClipper), extQueryInterfaceCProxy, (void **)&pQueryInterfaceC, "QueryInterface(C)");
// IDirectDrawClipper::AddRef
SetHook((void *)(**(DWORD **)lplpDDClipper + 4), extAddRefCProxy, (void **)&pAddRefC, "AddRef(C)");
// IDirectDrawClipper::GetHWnd
SetHook((void *)(**(DWORD **)lplpDDClipper + 16), extGetHWndProxy, (void **)&pGetHWnd, "GetHWnd(C)");
// IDirectDrawClipper::Initialize
SetHook((void *)(**(DWORD **)lplpDDClipper + 20), extInitializeCProxy, (void **)&pInitializeC, "Initialize(C)");
// IDirectDrawClipper::IsClipListChanged
SetHook((void *)(**(DWORD **)lplpDDClipper + 24), extIsClipListChangedProxy, (void **)&pIsClipListChanged, "IsClipListChanged(C)");
// IDirectDrawClipper::SetClipList
SetHook((void *)(**(DWORD **)lplpDDClipper + 28), extSetClipListProxy, (void **)&pSetClipList, "SetClipList(C)");
return;
SetHook((void *)(**(DWORD **)lplpDDClipper + 32), extSetHWnd, (void **)&pSetHWnd, "SetHWnd(C)");
}
static void HookDDPalette(LPDIRECTDRAWPALETTE FAR* lplpDDPalette)
@ -1171,19 +1142,6 @@ static void HookDDPalette(LPDIRECTDRAWPALETTE FAR* lplpDDPalette)
SetHook((void *)(**(DWORD **)lplpDDPalette + 8), extReleaseP, (void **)&pReleaseP, "Release(P)");
// IDirectDrawPalette::SetEntries
SetHook((void *)(**(DWORD **)lplpDDPalette + 24), extSetEntries, (void **)&pSetEntries, "SetEntries(P)");
if (!(dxw.dwTFlags & OUTPROXYTRACE)) return;
// IDirectDrawPalette::QueryInterface
SetHook((void *)(**(DWORD **)lplpDDPalette), extQueryInterfacePProxy, (void **)&pQueryInterfaceP, "QueryInterface(P)");
// IDirectDrawPalette::AddRef
SetHook((void *)(**(DWORD **)lplpDDPalette + 4), extAddRefPProxy, (void **)&pAddRefP, "AddRef(P)");
// IDirectDrawPalette::GetCaps
SetHook((void *)(**(DWORD **)lplpDDPalette + 12), extGetCapsPProxy, (void **)&pGetCapsP, "GetCaps(P)");
// IDirectDrawPalette::GetEntries
SetHook((void *)(**(DWORD **)lplpDDPalette + 16), extGetEntriesProxy, (void **)&pGetEntries, "GetEntries(P)");
return;
}
static void HookDDSurfacePrim(LPDIRECTDRAWSURFACE *lplpdds, int dxversion)
@ -1285,39 +1243,6 @@ static void HookDDSurfacePrim(LPDIRECTDRAWSURFACE *lplpdds, int dxversion)
else
SetHook((void *)(**(DWORD **)lplpdds + 128), extUnlockDir4, (void **)&pUnlock4, "Unlock(S4)");
}
if (!(dxw.dwTFlags & OUTPROXYTRACE)) return;
// Just proxed ...
// IDirectDrawSurface::AddRef
SetHook((void *)(**(DWORD **)lplpdds + 4), extAddRefSProxy, (void **)&pAddRefS, "AddRef(S)");
// IDirectDrawSurface::AddOverlayDirtyRect
SetHook((void *)(**(DWORD **)lplpdds + 16), extAddOverlayDirtyRectProxy, (void **)&pAddOverlayDirtyRect, "AddOverlayDirtyRect(S)");
// IDirectDrawSurface::BltBatch
SetHook((void *)(**(DWORD **)lplpdds + 24), extBltBatchProxy, (void **)&pBltBatch, "BltBatch(S)");
// IDirectDrawSurface::EnumOverlayZOrders
SetHook((void *)(**(DWORD **)lplpdds + 40), extEnumOverlayZOrdersProxy, (void **)&pEnumOverlayZOrders, "EnumOverlayZOrders(S)");
// IDirectDrawSurface::GetBltStatus
SetHook((void *)(**(DWORD **)lplpdds + 52), extGetBltStatusProxy, (void **)&pGetBltStatus, "GetBltStatus(S)");
// IDirectDrawSurface::GetClipper
SetHook((void *)(**(DWORD **)lplpdds + 60), extGetClipperProxy, (void **)&pGetClipper, "GetClipper(S)");
// IDirectDrawSurface::GetFlipStatus
SetHook((void *)(**(DWORD **)lplpdds + 72), extGetFlipStatusProxy, (void **)&pGetFlipStatus, "GetFlipStatus(S)");
// IDirectDrawSurface::GetOverlayPosition
SetHook((void *)(**(DWORD **)lplpdds + 76), extGetOverlayPositionProxy, (void **)&pGetOverlayPosition, "GetOverlayPosition(S)");
// IDirectDrawSurface::IsLost
SetHook((void *)(**(DWORD **)lplpdds + 96), extIsLostProxy, (void **)&pIsLost, "IsLost(S)");
// IDirectDrawSurface::Restore
SetHook((void *)(**(DWORD **)lplpdds + 108), extRestoreProxy, (void **)&pRestore, "Restore(S)");
// IDirectDrawSurface::SetOverlayPosition
SetHook((void *)(**(DWORD **)lplpdds + 120), extSetOverlayPositionProxy, (void **)&pSetOverlayPosition, "SetOverlayPosition(S)");
// IDirectDrawSurface::UpdateOverlay
SetHook((void *)(**(DWORD **)lplpdds + 132), extUpdateOverlayProxy, (void **)&pUpdateOverlay, "UpdateOverlay(S)");
// IDirectDrawSurface::UpdateOverlayDisplay
SetHook((void *)(**(DWORD **)lplpdds + 136), extUpdateOverlayDisplayProxy, (void **)&pUpdateOverlayDisplay, "UpdateOverlayDisplay(S)");
// IDirectDrawSurface::UpdateOverlayZOrder
SetHook((void *)(**(DWORD **)lplpdds + 140), extUpdateOverlayZOrderProxy, (void **)&pUpdateOverlayZOrder, "UpdateOverlayZOrder(S)");
}
static void HookDDSurfaceGeneric(LPDIRECTDRAWSURFACE *lplpdds, int dxversion)
@ -1403,48 +1328,6 @@ static void HookDDSurfaceGeneric(LPDIRECTDRAWSURFACE *lplpdds, int dxversion)
else
SetHook((void *)(**(DWORD **)lplpdds + 128), extUnlockDir4, (void **)&pUnlock4, "Unlock(S4)");
}
if (!(dxw.dwTFlags & OUTPROXYTRACE)) return;
// just proxed ....
// IDirectDrawSurface::AddRef
SetHook((void *)(**(DWORD **)lplpdds + 4), extAddRefSProxy, (void **)&pAddRefS, "AddRef(S)");
// IDirectDrawSurface::AddOverlayDirtyRect
SetHook((void *)(**(DWORD **)lplpdds + 16), extAddOverlayDirtyRectProxy, (void **)&pAddOverlayDirtyRect, "AddOverlayDirtyRect(S)");
// IDirectDrawSurface::BltBatch
SetHook((void *)(**(DWORD **)lplpdds + 24), extBltBatchProxy, (void **)&pBltBatch, "BltBatch(S)");
// IDirectDrawSurface::EnumAttachedSurfaces
SetHook((void *)(**(DWORD **)lplpdds + 36), extEnumAttachedSurfaces, (void **)&pEnumAttachedSurfaces, "EnumAttachedSurfaces(S)");
// IDirectDrawSurface::EnumOverlayZOrders
SetHook((void *)(**(DWORD **)lplpdds + 40), extEnumOverlayZOrdersProxy, (void **)&pEnumOverlayZOrders, "EnumOverlayZOrders(S)");
// IDirectDrawSurface::GetBltStatus
SetHook((void *)(**(DWORD **)lplpdds + 52), extGetBltStatusProxy, (void **)&pGetBltStatus, "GetBltStatus(S)");
// IDirectDrawSurface::GetClipper
SetHook((void *)(**(DWORD **)lplpdds + 60), extGetClipperProxy, (void **)&pGetClipper, "GetClipper(S)");
// IDirectDrawSurface::GetFlipStatus
SetHook((void *)(**(DWORD **)lplpdds + 72), extGetFlipStatusProxy, (void **)&pGetFlipStatus, "GetFlipStatus(S)");
// IDirectDrawSurface::GetOverlayPosition
SetHook((void *)(**(DWORD **)lplpdds + 76), extGetOverlayPositionProxy, (void **)&pGetOverlayPosition, "GetOverlayPosition(S)");
// IDirectDrawSurface::IsLost
SetHook((void *)(**(DWORD **)lplpdds + 96), extIsLostProxy, (void **)&pIsLost, "IsLost(S)");
// IDirectDrawSurface::Lock
SetHook((void *)(**(DWORD **)lplpdds + 100), extLock, (void **)&pLock, "Lock(S)");
// IDirectDrawSurface::Restore
SetHook((void *)(**(DWORD **)lplpdds + 108), extRestoreProxy, (void **)&pRestore, "Restore(S)");
// IDirectDrawSurface::SetOverlayPosition
SetHook((void *)(**(DWORD **)lplpdds + 120), extSetOverlayPositionProxy, (void **)&pSetOverlayPosition, "SetOverlayPosition(S)");
// IDirectDrawSurface::Unlock
if (dxversion < 4)
SetHook((void *)(**(DWORD **)lplpdds + 128), extUnlock1, (void **)&pUnlock1, "Unlock(S1)");
else
SetHook((void *)(**(DWORD **)lplpdds + 128), extUnlock4, (void **)&pUnlock4, "Unlock(S4)");
// IDirectDrawSurface::UpdateOverlay
SetHook((void *)(**(DWORD **)lplpdds + 132), extUpdateOverlayProxy, (void **)&pUpdateOverlay, "UpdateOverlay(S)");
// IDirectDrawSurface::UpdateOverlayDisplay
SetHook((void *)(**(DWORD **)lplpdds + 136), extUpdateOverlayDisplayProxy, (void **)&pUpdateOverlayDisplay, "UpdateOverlayDisplay(S)");
// IDirectDrawSurface::UpdateOverlayZOrder
SetHook((void *)(**(DWORD **)lplpdds + 140), extUpdateOverlayZOrderProxy, (void **)&pUpdateOverlayZOrder, "UpdateOverlayZOrder(S)");
if (dxversion == 7)
SetHook((void *)(**(DWORD **)lplpdds + 156), extSetSurfaceDesc, (void **)&pSetSurfaceDesc, "SetSurfaceDesc(S3)");
@ -1693,7 +1576,7 @@ HRESULT WINAPI extDirectDrawCreate(GUID FAR *lpguid, LPDIRECTDRAW FAR *lplpdd, I
//if(dxw.dwDDVersion==1) (*lplpdd)->AddRef(); // seems to fix problems in "Warhammer 40K Rites Of War"
if(IsDebug && (dxw.dwTFlags & OUTPROXYTRACE)){
if(IsDebug){
DDCAPS DriverCaps, EmulCaps;
memset(&DriverCaps, 0, sizeof(DriverCaps));
DriverCaps.dwSize=sizeof(DriverCaps);
@ -1766,7 +1649,7 @@ HRESULT WINAPI extDirectDrawCreateEx(GUID FAR *lpguid,
HookDDSession(lplpdd, dxw.dwDDVersion);
if(IsDebug && (dxw.dwTFlags & OUTPROXYTRACE)){
if(IsDebug){
DDCAPS DriverCaps, EmulCaps;
memset(&DriverCaps, 0, sizeof(DriverCaps));
DriverCaps.dwSize=sizeof(DriverCaps);
@ -1799,7 +1682,7 @@ HRESULT WINAPI extInitialize(LPDIRECTDRAW lpdd, GUID FAR *lpguid)
return res;
}
HRESULT WINAPI extQueryInterfaceD(void *lpdd, REFIID riid, LPVOID *obp)
HRESULT WINAPI extQueryInterfaceD(QueryInterface_Type pQueryInterfaceD, void *lpdd, REFIID riid, LPVOID *obp)
{
HRESULT res;
unsigned int dwLocalDDVersion;
@ -1880,6 +1763,18 @@ HRESULT WINAPI extQueryInterfaceD(void *lpdd, REFIID riid, LPVOID *obp)
return 0;
}
HRESULT WINAPI extQueryInterfaceD1(void *lpdd, REFIID riid, LPVOID *obp)
{ return extQueryInterfaceD(pQueryInterfaceD1, lpdd, riid, obp); }
HRESULT WINAPI extQueryInterfaceD2(void *lpdd, REFIID riid, LPVOID *obp)
{ return extQueryInterfaceD(pQueryInterfaceD2, lpdd, riid, obp); }
HRESULT WINAPI extQueryInterfaceD4(void *lpdd, REFIID riid, LPVOID *obp)
{ return extQueryInterfaceD(pQueryInterfaceD4, lpdd, riid, obp); }
HRESULT WINAPI extQueryInterfaceD7(void *lpdd, REFIID riid, LPVOID *obp)
{ return extQueryInterfaceD(pQueryInterfaceD7, lpdd, riid, obp); }
// some unhandled interfaces in emulation mode:
// REFIID={84e63de0-46aa-11cf-816f-0000c020156e}: IID_IDirect3DHALDevice
@ -2438,7 +2333,7 @@ static void BuildRealSurfaces(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurfa
OutTraceDW("CreateSurface: created new DDSEmu_Back=%x\n", lpDDSEmu_Back);
if(IsDebug) DescribeSurface(lpDDSEmu_Back, dxversion, "DDSEmu_Back", __LINE__);
dxwss.PopSurface(lpDDSEmu_Back);
if (dxw.dwTFlags & OUTPROXYTRACE) HookDDSurfaceGeneric(&lpDDSEmu_Back, dxversion);
//if (dxw.dwTFlags & OUTPROXYTRACE) HookDDSurfaceGeneric(&lpDDSEmu_Back, dxversion);
}
}
@ -3175,24 +3070,19 @@ static HRESULT WINAPI extCreateSurface(int dxversion, CreateSurface_Type pCreate
HRESULT WINAPI extCreateSurface1(LPDIRECTDRAW lpdd, DDSURFACEDESC *lpddsd, LPDIRECTDRAWSURFACE *lplpdds, void *pu)
{
return extCreateSurface(1, (CreateSurface_Type)pCreateSurface1, lpdd, (DDSURFACEDESC2 *)lpddsd, lplpdds, pu);
}
{ return extCreateSurface(1, (CreateSurface_Type)pCreateSurface1, lpdd, (DDSURFACEDESC2 *)lpddsd, lplpdds, pu); }
HRESULT WINAPI extCreateSurface2(LPDIRECTDRAW lpdd, DDSURFACEDESC *lpddsd, LPDIRECTDRAWSURFACE *lplpdds, void *pu)
{
return extCreateSurface(2, (CreateSurface_Type)pCreateSurface2, lpdd, (DDSURFACEDESC2 *)lpddsd, lplpdds, pu);
}
{ return extCreateSurface(2, (CreateSurface_Type)pCreateSurface2, lpdd, (DDSURFACEDESC2 *)lpddsd, lplpdds, pu); }
HRESULT WINAPI extCreateSurface3(LPDIRECTDRAW lpdd, DDSURFACEDESC *lpddsd, LPDIRECTDRAWSURFACE *lplpdds, void *pu)
{ return extCreateSurface(3, (CreateSurface_Type)pCreateSurface3, lpdd, (DDSURFACEDESC2 *)lpddsd, lplpdds, pu); }
HRESULT WINAPI extCreateSurface4(LPDIRECTDRAW lpdd, DDSURFACEDESC2 *lpddsd, LPDIRECTDRAWSURFACE *lplpdds, void *pu)
{
return extCreateSurface(4, (CreateSurface_Type)pCreateSurface4, lpdd, (DDSURFACEDESC2 *)lpddsd, lplpdds, pu);
}
{ return extCreateSurface(4, (CreateSurface_Type)pCreateSurface4, lpdd, (DDSURFACEDESC2 *)lpddsd, lplpdds, pu); }
HRESULT WINAPI extCreateSurface7(LPDIRECTDRAW lpdd, DDSURFACEDESC2 *lpddsd, LPDIRECTDRAWSURFACE *lplpdds, void *pu)
{
return extCreateSurface(7, (CreateSurface_Type)pCreateSurface7, lpdd, (DDSURFACEDESC2 *)lpddsd, lplpdds, pu);
}
{ return extCreateSurface(7, (CreateSurface_Type)pCreateSurface7, lpdd, (DDSURFACEDESC2 *)lpddsd, lplpdds, pu); }
HRESULT WINAPI extGetAttachedSurface(int dxversion, GetAttachedSurface_Type pGetAttachedSurface,
@ -4465,38 +4355,6 @@ typedef struct {
DWORD dwHeight;
} NewContext_Type;
typedef struct {
int w;
int h;
} SupportedRes_Type;
static SupportedRes_Type SupportedSVGARes[11]= {
{320,200},
{320,240},
{512,384}, // needed by "Outcast" loading screen
{640,400},
{640,480},
{720,480},
{800,600},
{1024,768}, // XGA
{1280,800}, // WXGA
{1600,1200}, // UXGA, needed by "LEGO Star Wars" in high res mode
{0,0}
};
static SupportedRes_Type SupportedHDTVRes[10]= {
{640,360}, // nHD
{720,480}, // DVD
{720,576}, // DV-PAL
{960,540}, // qHD
{1176,1000},
{1280,720}, // HD
{1440,960},
{1600,900}, // HD+
{1920,1080}, // FHD
{0,0}
};
static BOOL CheckResolutionLimit(LPDDSURFACEDESC lpDDSurfaceDesc)
{
#define HUGE 100000
@ -4986,14 +4844,13 @@ HRESULT WINAPI extGetCaps7S(LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS2 caps)
return extGetCapsS(7, (GetCapsS_Type)pGetCaps7S, lpdds, (LPDDSCAPS)caps);
}
ULONG WINAPI extReleaseD(LPDIRECTDRAW lpdd)
ULONG WINAPI extReleaseD(int dxversion, ReleaseD_Type pReleaseD, LPDIRECTDRAW lpdd)
{
ULONG ActualRef;
LONG VirtualRef;
int dxversion;
dxversion=lpddHookedVersion(lpdd); // must be called BEFORE releasing the session!!
OutTraceDDRAW("Release(D): lpdd=%x dxversion=%d\n", lpdd, dxversion);
OutTraceDDRAW("Release(D%d): lpdd=%x\n", dxversion, lpdd);
if((ReleaseD_Type)extReleaseD == pReleaseD) return 0;
ActualRef=(*pReleaseD)(lpdd);
VirtualRef=(LONG)ActualRef;
@ -5032,6 +4889,18 @@ ULONG WINAPI extReleaseD(LPDIRECTDRAW lpdd)
return (ULONG)VirtualRef;
}
ULONG WINAPI extReleaseD1(LPDIRECTDRAW lpdd)
{ return extReleaseD(1, pReleaseD1, lpdd); }
ULONG WINAPI extReleaseD2(LPDIRECTDRAW lpdd)
{ return extReleaseD(2, pReleaseD2, lpdd); }
ULONG WINAPI extReleaseD4(LPDIRECTDRAW lpdd)
{ return extReleaseD(4, pReleaseD4, lpdd); }
ULONG WINAPI extReleaseD7(LPDIRECTDRAW lpdd)
{ return extReleaseD(7, pReleaseD7, lpdd); }
HRESULT WINAPI extCreateClipper(LPDIRECTDRAW lpdd, DWORD dwflags,
LPDIRECTDRAWCLIPPER FAR* lplpDDClipper, IUnknown FAR* pUnkOuter)
{
@ -5109,6 +4978,15 @@ HRESULT WINAPI extGetClipList(LPDIRECTDRAWCLIPPER lpddClip, LPRECT lpRect, LPRGN
return res;
}
HRESULT WINAPI extSetHWnd(LPDIRECTDRAWCLIPPER lpddClip, DWORD w, HWND hwnd)
{
HRESULT res;
OutTraceP("SetHWnd(C): lpddClip=%x w=%x hwnd=%x\n", lpddClip, w, hwnd);
res=(*pSetHWnd)(lpddClip, w, hwnd);
if(res) OutTraceP("SetHWnd(C): ERROR err=%x(%s)\n", res, ExplainDDError(res));
return res;
}
HRESULT WINAPI extGetSurfaceDesc(GetSurfaceDesc_Type pGetSurfaceDesc, LPDIRECTDRAWSURFACE lpdds, LPDDSURFACEDESC lpddsd)
{
HRESULT res;
@ -5453,4 +5331,4 @@ HRESULT WINAPI extDirectDrawCreateClipper(DWORD dwFlags, LPDIRECTDRAWCLIPPER *lp
}
HookDDClipper(lplpDDClipper);
return res;
}
}

View File

@ -147,14 +147,14 @@ void HookDirectInput8(HMODULE module)
FARPROC Remap_DInput_ProcAddress(LPCSTR proc, HMODULE hModule)
{
FARPROC addr;
if (addr=RemapLibrary(proc, hModule, diHooks)) return addr;
if ((dxw.dwFlags1 & HOOKDI) && (addr=RemapLibrary(proc, hModule, diHooks))) return addr;
return NULL;
}
FARPROC Remap_DInput8_ProcAddress(LPCSTR proc, HMODULE hModule)
{
FARPROC addr;
if (addr=RemapLibrary(proc, hModule, di8Hooks)) return addr;
if ((dxw.dwFlags1 & HOOKDI8) && (addr=RemapLibrary(proc, hModule, di8Hooks))) return addr;
return NULL;
}
@ -294,6 +294,7 @@ HRESULT WINAPI extDICreateDevice(LPDIRECTINPUT lpdi, REFGUID rguid, LPDIRECTINPU
OutTraceE("CreateDevice(I): ERROR res=%x\n", res);
return res;
}
OutTraceDW("CreateDevice(I): did=%x\n", *lplpdid);
SetHook((void *)(**(DWORD **)lplpdid + 28), extAcquire, (void **)&pAcquire, "Acquire(I)");
SetHook((void *)(**(DWORD **)lplpdid + 32), extUnacquire, (void **)&pUnacquire, "Unacquire(I)");
@ -370,6 +371,19 @@ HRESULT WINAPI extGetDeviceData(LPDIRECTINPUTDEVICE lpdid, DWORD cbdata, LPVOID
lpdid, sDevice(lpdid), cbdata, rgdod, *pdwinout, dwflags);
res = (*pGetDeviceData)(lpdid, cbdata, rgdod, pdwinout, dwflags);
if (((res == DIERR_INPUTLOST) || (res == DIERR_NOTACQUIRED)) && RECOVERINPUTLOST){
OutTraceE("GetDeviceState(I) recovering DIERR_INPUTLOST\n");
if(lpdid == lpDIDSysMouse) {
res = (*pDISetCooperativeLevel)(lpdid, dxw.GethWnd(), DISCL_NONEXCLUSIVE | DISCL_FOREGROUND);
if(res) OutTraceE("GetDeviceState(I): SetCooperativeLevel ERROR: err=%x(%s)\n", res, ExplainDDError(res));
if(dxw.dwFlags1 & CLIPCURSOR) dxw.SetClipCursor();
}
res = (*pAcquire)(lpdid);
if(res) OutTraceE("GetDeviceState(I): Acquire ERROR: err=%x(%s)\n", res, ExplainDDError(res));
res = (*pGetDeviceData)(lpdid, cbdata, rgdod, pdwinout, dwflags);
}
switch(res){
case DI_OK:
break;
@ -419,7 +433,7 @@ HRESULT WINAPI extGetDeviceData(LPDIRECTINPUTDEVICE lpdid, DWORD cbdata, LPVOID
for(i = 0; i < *pdwinout; i ++){
if(((LPDIDEVICEOBJECTDATA)tmp)->dwOfs == DIMOFS_X) OutTraceB("GetDeviceData(I): REL mousedata X=%d\n", ((LPDIDEVICEOBJECTDATA)tmp)->dwData);
if(((LPDIDEVICEOBJECTDATA)tmp)->dwOfs == DIMOFS_Y) OutTraceB("GetDeviceData(I): REL mousedata Y=%d\n", ((LPDIDEVICEOBJECTDATA)tmp)->dwData);
tmp += cbdata;
tmp += cbdata;
}
}
}
@ -428,20 +442,22 @@ HRESULT WINAPI extGetDeviceData(LPDIRECTINPUTDEVICE lpdid, DWORD cbdata, LPVOID
HRESULT WINAPI extGetDeviceState(LPDIRECTINPUTDEVICE lpdid, DWORD cbdata, LPDIMOUSESTATE lpvdata)
{
HRESULT res;
HRESULT res;
POINT p = {0, 0};
OutTraceDW("GetDeviceState(I): did=%x(%s) cbData=%i,%i\n", lpdid, sDevice(lpdid), cbdata, dxw.bActive);
res = (*pGetDeviceState)(lpdid, cbdata, lpvdata);
if ((res == DIERR_INPUTLOST) && RECOVERINPUTLOST){
if (((res == DIERR_INPUTLOST) || (res == DIERR_NOTACQUIRED)) && RECOVERINPUTLOST){
OutTraceE("GetDeviceState(I) recovering DIERR_INPUTLOST\n");
res = (*pDISetCooperativeLevel)(lpdid, dxw.GethWnd(), DISCL_NONEXCLUSIVE | DISCL_FOREGROUND);
if(res) OutTraceE("GetDeviceState(I): SetCooperativeLevel ERROR: err=%x(%s)\n", res, ExplainDDError(res));
if(lpdid == lpDIDSysMouse) {
res = (*pDISetCooperativeLevel)(lpdid, dxw.GethWnd(), DISCL_NONEXCLUSIVE | DISCL_FOREGROUND);
if(res) OutTraceE("GetDeviceState(I): SetCooperativeLevel ERROR: err=%x(%s)\n", res, ExplainDDError(res));
if(dxw.dwFlags1 & CLIPCURSOR) dxw.SetClipCursor();
}
res = (*pAcquire)(lpdid);
if(res) OutTraceE("GetDeviceState(I): Acquire ERROR: err=%x(%s)\n", res, ExplainDDError(res));
if(dxw.dwFlags1 & CLIPCURSOR) dxw.SetClipCursor();
res = (*pGetDeviceState)(lpdid, cbdata, lpvdata);
}
@ -569,10 +585,9 @@ HRESULT WINAPI extDISetCooperativeLevel(LPDIRECTINPUTDEVICE lpdid, HWND hwnd, DW
lpdid, sDevice(lpdid), hwnd, dwflags, ExplainDICooperativeFlags(dwflags));
if(dxw.IsRealDesktop(hwnd)) hwnd=dxw.GethWnd();
//dwflags = DISCL_NONEXCLUSIVE | DISCL_BACKGROUND;
dwflags = DISCL_NONEXCLUSIVE | DISCL_FOREGROUND;
hwnd=dxw.GethWnd();
if(lpdid == lpDIDSysMouse) dwflags = (DISCL_NONEXCLUSIVE | DISCL_FOREGROUND);
res = (*pDISetCooperativeLevel)(lpdid, hwnd, dwflags);
if(res != DD_OK){
OutTraceE("SetCooperativeLevel(I) ERROR: err=%x(%s)\n", res, ExplainDDError(res));

View File

@ -53,7 +53,7 @@ extern HANDLE hTraceMutex;
CRITICAL_SECTION TraceCS;
static char *FlagNames[32]={
"UNNOTIFY", "EMULATESURFACE", "CLIPCURSOR", "RESETPRIMARY",
"UNNOTIFY", "EMULATESURFACE", "CLIPCURSOR", "**",
"HOOKDI", "MODIFYMOUSE", "HANDLEEXCEPTIONS", "SAVELOAD",
"EMULATEBUFFER", "HOOKDI8", "BLITFROMBACKBUFFER", "SUPPRESSCLIPPING",
"AUTOREFRESH", "FIXWINFRAME", "HIDEHWCURSOR", "SLOWDOWN",
@ -66,7 +66,7 @@ static char *FlagNames[32]={
static char *Flag2Names[32]={
"RECOVERSCREENMODE", "REFRESHONRESIZE", "BACKBUFATTACH", "MODALSTYLE",
"KEEPASPECTRATIO", "INIT8BPP", "FORCEWINRESIZE", "INIT16BPP",
"KEEPCURSORFIXED", "DISABLEGAMMARAMP", "DIFFERENTIALMOUSE", "FIXNCHITTEST",
"KEEPCURSORFIXED", "DISABLEGAMMARAMP", "**", "FIXNCHITTEST",
"LIMITFPS", "SKIPFPS", "SHOWFPS", "HIDEMULTIMONITOR",
"TIMESTRETCH", "HOOKOPENGL", "WALLPAPERMODE", "SHOWHWCURSOR",
"GDISTRETCHED", "SHOWFPSOVERLAY", "FAKEVERSION", "FULLRECTBLT",
@ -78,8 +78,8 @@ static char *Flag3Names[32]={
"FORCEHOOKOPENGL", "MARKBLIT", "HOOKDLLS", "SUPPRESSD3DEXT",
"HOOKENABLED", "FIXD3DFRAME", "FORCE16BPP", "BLACKWHITE",
"MARKLOCK", "SINGLEPROCAFFINITY", "EMULATEREGISTRY", "CDROMDRIVETYPE",
"NOWINDOWMOVE", "--DISABLEHAL--", "LOCKSYSCOLORS", "GDIEMULATEDC",
"FULLSCREENONLY", "FONTBYPASS", "YUV2RGB", "RGB2YUV",
"NOWINDOWMOVE", "**", "LOCKSYSCOLORS", "GDIEMULATEDC",
"FULLSCREENONLY", "FONTBYPASS", "**", "**",
"BUFFEREDIOFIX", "FILTERMESSAGES", "PEEKALLMESSAGES", "SURFACEWARN",
"ANALYTICMODE", "FORCESHEL", "CAPMASK", "COLORFIX",
"NODDRAWBLT", "NODDRAWFLIP", "NOGDIBLT", "NOPIXELFORMAT",
@ -98,7 +98,7 @@ static char *Flag4Names[32]={
static char *Flag5Names[32]={
"DIABLOTWEAK", "CLEARTARGET", "NOWINPOSCHANGES", "--NOSYSTEMMEMORY--",
"NOBLT", "--NOSYSTEMEMULATED--", "DOFASTBLT", "AEROBOOST",
"NOBLT", "**", "DOFASTBLT", "AEROBOOST",
"QUARTERBLT", "NOIMAGEHLP", "BILINEARFILTER", "REPLACEPRIVOPS",
"REMAPMCI", "TEXTUREHIGHLIGHT", "TEXTUREDUMP", "TEXTUREHACK",
"TEXTURETRANSP", "NORMALIZEPERFCOUNT", "HYBRIDMODE", "GDICOLORCONV",
@ -115,12 +115,34 @@ static char *Flag6Names[32]={
"FLIPEMULATION", "SETZBUFFERBITDEPTHS", "SHAREDDC", "WOW32REGISTRY",
"STRETCHMOVIES", "BYPASSMCI", "FIXPIXELZOOM", "REUSEEMULATEDDC",
"CREATEDESKTOP", "NOWINDOWHOOKS", "SYNCPALETTE", "VIRTUALJOYSTICK",
"UNACQUIRE", "HOOKGOGLIBS", "BYPASSGOGLIBS", "",
"UNACQUIRE", "HOOKGOGLIBS", "BYPASSGOGLIBS", "EMULATERELMOUSE",
};
static char *Flag7Names[32]={
"LIMITDDRAW", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
};
static char *Flag8Names[32]={
"", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
"", "", "", "",
};
static char *TFlagNames[32]={
"OUTTRACE", "OUTDDRAWTRACE", "OUTWINMESSAGES", "OUTCURSORTRACE",
"OUTPROXYTRACE", "DXPROXED", "ASSERTDIALOG", "OUTIMPORTTABLE",
"**", "**", "ASSERTDIALOG", "OUTIMPORTTABLE",
"OUTDEBUG", "OUTREGISTRY", "TRACEHOOKS", "OUTD3DTRACE",
"OUTDXWINTRACE", "ADDTIMESTAMP", "OUTDEBUGSTRING", "ERASELOGFILE",
"", "", "", "",
@ -166,6 +188,8 @@ static void OutTraceHeader(FILE *fp)
for(i=0, dword=dxw.dwFlags4; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", Flag4Names[i]);
for(i=0, dword=dxw.dwFlags5; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", Flag5Names[i]);
for(i=0, dword=dxw.dwFlags6; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", Flag6Names[i]);
for(i=0, dword=dxw.dwFlags7; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", Flag6Names[i]);
for(i=0, dword=dxw.dwFlags8; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", Flag6Names[i]);
for(i=0, dword=dxw.dwTFlags; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", TFlagNames[i]);
fprintf(fp, "***\n");
}
@ -456,6 +480,7 @@ void SetHook(void *target, void *hookproc, void **hookedproc, char *hookname)
sprintf(msg,"SetHook: proc=%s oldhook=%x->%x newhook=%x\n", hookname, hookedproc, *(DWORD *)hookedproc, tmp);
OutTraceDW(msg);
if (IsAssertEnabled) MessageBox(0, msg, "SetHook", MB_OK | MB_ICONEXCLAMATION);
tmp = *hookedproc;
}
*hookedproc = tmp;
}
@ -1235,6 +1260,7 @@ void HookInit(TARGETMAP *target, HWND hwnd)
osinfo.dwMajorVersion, osinfo.dwMinorVersion, osinfo.dwPlatformId, osinfo.dwPlatformId, osinfo.szCSDVersion);
}
if (dxw.dwFlags4 & LIMITSCREENRES) OutTrace("HookInit: max resolution=%s\n", (dxw.MaxScreenRes<6)?Resolutions[dxw.MaxScreenRes]:"unknown");
if (dxw.dwFlags7 & LIMITDDRAW) OutTrace("HookInit: max supported IDidrectDrawInterface=%d\n", dxw.MaxDdrawInterface);
}
{
@ -1304,11 +1330,6 @@ void HookInit(TARGETMAP *target, HWND hwnd)
if (dxw.dwFlags4 & INTERCEPTRDTSC) ReplaceRDTSC();
if (dxw.dwFlags5 & REPLACEPRIVOPS) ReplacePrivilegedOps();
if (dxw.dwTFlags & DXPROXED){
HookDDProxy(base, dxw.dwTargetDDVersion);
return;
}
// make InitPosition used for both DInput and DDraw
if(dxw.Windowize) dxw.InitWindowPos(target->posx, target->posy, target->sizx, target->sizy);

View File

@ -1,5 +1,4 @@
extern int HookDirectDraw(HMODULE, int);
extern int HookDDProxy(HMODULE, int);
extern int HookDirect3D(HMODULE, int);
extern int HookDirect3D7(HMODULE, int);
extern void HookOle32(HMODULE);

View File

@ -84,6 +84,8 @@ void dxwCore::InitTarget(TARGETMAP *target)
dwFlags4 = target->flags4;
dwFlags5 = target->flags5;
dwFlags6 = target->flags6;
dwFlags7 = target->flags7;
dwFlags8 = target->flags8;
dwTFlags = target->tflags;
Windowize = (dwFlags2 & WINDOWIZE) ? TRUE : FALSE;
if(dwFlags3 & FULLSCREENONLY) FullScreen=TRUE;
@ -93,6 +95,7 @@ void dxwCore::InitTarget(TARGETMAP *target)
if(!strlen(CustomOpenGLLib)) CustomOpenGLLib=NULL;
// bounds control
dwTargetDDVersion = target->dxversion;
MaxDdrawInterface = target->MaxDdrawInterface;
if(dwTargetDDVersion<0) dwTargetDDVersion=0;
if(dwTargetDDVersion>12) dwTargetDDVersion=12;
TimeShift = target->InitTS;

View File

@ -140,12 +140,15 @@ public: // simple data variables
DWORD dwDDVersion;
DWORD dwTargetDDVersion;
DWORD dwMaxDDVersion;
DWORD MaxDdrawInterface;
DWORD dwFlags1;
DWORD dwFlags2;
DWORD dwFlags3;
DWORD dwFlags4;
DWORD dwFlags5;
DWORD dwFlags6;
DWORD dwFlags7;
DWORD dwFlags8;
DWORD dwTFlags;
HWND hParentWnd;
HWND hChildWnd;

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.51"
#define VERSION "2.03.52"
#define DDTHREADLOCK 1
//#define LOCKTHREADS

Binary file not shown.

View File

@ -241,10 +241,6 @@
RelativePath=".\ddblit.cpp"
>
</File>
<File
RelativePath=".\ddproxy.cpp"
>
</File>
<File
RelativePath=".\ddraw.cpp"
>
@ -465,6 +461,10 @@
RelativePath=".\smack.cpp"
>
</File>
<File
RelativePath=".\supmodes.cpp"
>
</File>
<File
RelativePath=".\user32.cpp"
>
@ -486,10 +486,6 @@
Name="Header Files"
Filter="h;hpp;hxx;hm;inl"
>
<File
RelativePath=".\ddproxy.h"
>
</File>
<File
RelativePath=".\dxhelper.h"
>
@ -518,6 +514,10 @@
RelativePath=".\hd3d.doc.hpp"
>
</File>
<File
RelativePath=".\hddraw.h"
>
</File>
<File
RelativePath=".\msvfwhook.h"
>

View File

@ -10,7 +10,6 @@
#include "dxwcore.hpp"
#include "stdio.h"
#include "hddraw.h"
#include "ddproxy.h"
#include "dxhelper.h"
#include "syslibs.h"

View File

@ -557,9 +557,9 @@ void HookD3DDevice9(void** ppD3Ddev9)
if((dxw.dwFlags5 & TEXTUREMASK) || (dxw.dwFlags4 & NOTEXTURES)){
SetHook((void *)(**(DWORD **)ppD3Ddev9 + 260), extSetTexture9, (void **)&pSetTexture9, "SetTexture(D9)");
}
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)");
//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)");
}
// WIP
@ -626,15 +626,15 @@ void HookDirect3D9(void *lpd3d, BOOL ex)
SetHook((void *)(*(DWORD *)lpd3d + 56), extD3DGetDeviceCaps9, (void **)&pD3DGetDeviceCaps, "GetDeviceCaps(D9)");
SetHook((void *)(*(DWORD *)lpd3d + 64), extCreateDevice, (void **)&pCreateDevice9, "CreateDevice(D9)");
if(ex) SetHook((void *)(*(DWORD *)lpd3d + 80), extCreateDeviceEx, (void **)&pCreateDeviceEx, "CreateDeviceEx(D9)");
if (!(dxw.dwTFlags & OUTPROXYTRACE)) return;
SetHook((void *)(*(DWORD *)lpd3d + 12), extRegisterSoftwareDevice, (void **)&pRegisterSoftwareDevice, "RegisterSoftwareDevice(D9)");
SetHook((void *)(*(DWORD *)lpd3d + 24), extGetAdapterModeCount, (void **)&pGetAdapterModeCount, "GetAdapterModeCount(D9)");
SetHook((void *)(*(DWORD *)lpd3d + 36), extCheckDeviceType, (void **)&pCheckDeviceType, "CheckDeviceType(D9)");
SetHook((void *)(*(DWORD *)lpd3d + 40), extCheckDeviceFormat, (void **)&pCheckDeviceFormat, "CheckDeviceFormat(D9)");
SetHook((void *)(*(DWORD *)lpd3d + 44), extCheckDeviceMultiSampleType, (void **)&pCheckDeviceMultiSampleType, "CheckDeviceMultiSampleType(D9)");
SetHook((void *)(*(DWORD *)lpd3d + 48), extCheckDepthStencilMatch, (void **)&pCheckDepthStencilMatch, "CheckDepthStencilMatch(D9)");
SetHook((void *)(*(DWORD *)lpd3d + 52), extCheckDeviceFormatConversion, (void **)&pCheckDeviceFormatConversion, "CheckDeviceFormatConversion(D9)");
SetHook((void *)(*(DWORD *)lpd3d + 60), extGetAdapterMonitor, (void **)&pGetAdapterMonitor, "GetAdapterMonitor(D9)");
//if (!(dxw.dwTFlags & OUTPROXYTRACE)) return;
//SetHook((void *)(*(DWORD *)lpd3d + 12), extRegisterSoftwareDevice, (void **)&pRegisterSoftwareDevice, "RegisterSoftwareDevice(D9)");
//SetHook((void *)(*(DWORD *)lpd3d + 24), extGetAdapterModeCount, (void **)&pGetAdapterModeCount, "GetAdapterModeCount(D9)");
//SetHook((void *)(*(DWORD *)lpd3d + 36), extCheckDeviceType, (void **)&pCheckDeviceType, "CheckDeviceType(D9)");
//SetHook((void *)(*(DWORD *)lpd3d + 40), extCheckDeviceFormat, (void **)&pCheckDeviceFormat, "CheckDeviceFormat(D9)");
//SetHook((void *)(*(DWORD *)lpd3d + 44), extCheckDeviceMultiSampleType, (void **)&pCheckDeviceMultiSampleType, "CheckDeviceMultiSampleType(D9)");
//SetHook((void *)(*(DWORD *)lpd3d + 48), extCheckDepthStencilMatch, (void **)&pCheckDepthStencilMatch, "CheckDepthStencilMatch(D9)");
//SetHook((void *)(*(DWORD *)lpd3d + 52), extCheckDeviceFormatConversion, (void **)&pCheckDeviceFormatConversion, "CheckDeviceFormatConversion(D9)");
//SetHook((void *)(*(DWORD *)lpd3d + 60), extGetAdapterMonitor, (void **)&pGetAdapterMonitor, "GetAdapterMonitor(D9)");
}
void* WINAPI extDirect3DCreate9(UINT sdkversion)

View File

@ -4,7 +4,6 @@
#include "dxhook.h"
#include "dxhelper.h"
#include "hddraw.h"
#include "ddproxy.h"
#include "stdio.h"
//#undef IsTraceDW
@ -15,6 +14,9 @@ BOOL WINAPI extCheckRemoteDebuggerPresent(HANDLE, PBOOL);
LPVOID WINAPI extVirtualAlloc(LPVOID, SIZE_T, DWORD, DWORD);
UINT WINAPI extWinExec(LPCSTR, UINT);
extern HRESULT WINAPI extDirectDrawEnumerate(LPDDENUMCALLBACK, LPVOID);
extern HRESULT WINAPI extDirectDrawEnumerateEx(LPDDENUMCALLBACKEX, LPVOID, DWORD);
typedef LPVOID (WINAPI *VirtualAlloc_Type)(LPVOID, SIZE_T, DWORD, DWORD);
typedef BOOL (WINAPI *CreateProcessA_Type)(LPCTSTR, LPTSTR, LPSECURITY_ATTRIBUTES, LPSECURITY_ATTRIBUTES,
BOOL, DWORD, LPVOID, LPCTSTR, LPSTARTUPINFO, LPPROCESS_INFORMATION);
@ -676,12 +678,12 @@ FARPROC WINAPI extGetProcAddress(HMODULE hModule, LPCSTR proc)
case 0x000B: // DirectDrawEnumerateA
pDirectDrawEnumerate=(DirectDrawEnumerate_Type)(*pGetProcAddress)(hModule, proc);
OutTraceP("GetProcAddress: hooking proc=%s at addr=%x\n", proc, pDirectDrawEnumerate);
return (FARPROC)extDirectDrawEnumerateProxy;
return (FARPROC)extDirectDrawEnumerate;
break;
case 0x000C: // DirectDrawEnumerateExA
pDirectDrawEnumerateEx=(DirectDrawEnumerateEx_Type)(*pGetProcAddress)(hModule, proc);
OutTraceP("GetProcAddress: hooking proc=%s at addr=%x\n", proc, pDirectDrawEnumerateEx);
return (FARPROC)extDirectDrawEnumerateExProxy;
return (FARPROC)extDirectDrawEnumerateEx;
break;
}
break;

32
dll/supmodes.cpp Normal file
View File

@ -0,0 +1,32 @@
#include "dxwnd.h"
SupportedRes_Type SupportedSVGARes[12]= {
{320,200},
{320,240},
{512,384}, // needed by "Outcast" loading screen
{640,400},
{640,480},
{720,480},
{800,600},
{1024,768}, // XGA
{1280,800}, // WXGA
{1280,1024},
{1600,1200}, // UXGA, needed by "LEGO Star Wars" in high res mode
{0,0}
};
SupportedRes_Type SupportedHDTVRes[11]= {
{640,360}, // nHD
{720,480}, // DVD
{720,576}, // DV-PAL
{960,540}, // qHD
{1176,1000},
{1280,720}, // HD
{1440,900}, // Swat 3 hack
{1440,960},
{1600,900}, // HD+
{1920,1080}, // FHD
{0,0}
};
int SupportedDepths[5]={8,16,24,32,0};

View File

@ -90,7 +90,7 @@ static HookEntry_Type Hooks[]={
{HOOK_IAT_CANDIDATE, "CreateDialogIndirectParamA", (FARPROC)CreateDialogIndirectParamA, (FARPROC *)&pCreateDialogIndirectParam, (FARPROC)extCreateDialogIndirectParam},
{HOOK_IAT_CANDIDATE, "CreateDialogParamA", (FARPROC)CreateDialogParamA, (FARPROC *)&pCreateDialogParam, (FARPROC)extCreateDialogParam},
{HOOK_IAT_CANDIDATE, "MoveWindow", (FARPROC)MoveWindow, (FARPROC *)&pMoveWindow, (FARPROC)extMoveWindow},
{HOOK_IAT_CANDIDATE, "EnumDisplaySettingsA", (FARPROC)EnumDisplaySettingsA, (FARPROC *)&pEnumDisplaySettings, (FARPROC)extEnumDisplaySettings},
{HOOK_HOT_CANDIDATE, "EnumDisplaySettingsA", (FARPROC)EnumDisplaySettingsA, (FARPROC *)&pEnumDisplaySettings, (FARPROC)extEnumDisplaySettings},
{HOOK_IAT_CANDIDATE, "GetClipCursor", (FARPROC)GetClipCursor, (FARPROC*)&pGetClipCursor, (FARPROC)extGetClipCursor},
{HOOK_IAT_CANDIDATE, "ClipCursor", (FARPROC)ClipCursor, (FARPROC *)&pClipCursor, (FARPROC)extClipCursor},
{HOOK_IAT_CANDIDATE, "DefWindowProcA", (FARPROC)DefWindowProcA, (FARPROC *)&pDefWindowProcA, (FARPROC)extDefWindowProcA},
@ -1116,6 +1116,9 @@ BOOL WINAPI extGetWindowRect(HWND hwnd, LPRECT lpRect)
{
BOOL ret;
OutTraceB("GetWindowRect: hwnd=%x hWnd=%x FullScreen=%x\n", hwnd, dxw.GethWnd(), dxw.IsFullScreen());
if(dxw.IsRealDesktop(hwnd)) hwnd = dxw.GethWnd(); // v2.03.52: fix for "Storm Angel"
ret=(*pGetWindowRect)(hwnd, lpRect);
if(!ret) {
OutTraceE("GetWindowRect: GetWindowRect hwnd=%x error %d at %d\n", hwnd, GetLastError(), __LINE__);
@ -1377,7 +1380,7 @@ static HWND WINAPI extCreateWindowCommon(
// main win was 640x480 only!
// v2.02.13: if it's a WS_CHILD window, don't reposition the x,y, placement for BIG win.
// v2.02.30: fix (Fable - lost chapters) Fable creates a bigger win with negative x,y coordinates.
if (
if (
(
((x<=0)&&(y<=0))
||
@ -1629,7 +1632,7 @@ HWND WINAPI extCreateWindowExA(
dwStyle, ExplainStyle(dwStyle), dwExStyle, ExplainExStyle(dwExStyle),
hWndParent, hWndParent==HWND_MESSAGE?"(HWND_MESSAGE)":"", hMenu);
}
OutTraceB("CreateWindowExW: DEBUG fullscreen=%x mainwin=%x screen=(%d,%d)\n",
OutTraceB("CreateWindowExA: DEBUG fullscreen=%x mainwin=%x screen=(%d,%d)\n",
dxw.IsFullScreen(), dxw.GethWnd(), dxw.GetScreenWidth(), dxw.GetScreenHeight());
if((dxw.dwFlags6 & STRETCHMOVIES) && !strcmp(lpWindowName, "ActiveMovie Window")){
@ -1839,8 +1842,56 @@ BOOL WINAPI extGetClipCursor(LPRECT lpRect)
LONG WINAPI extEnumDisplaySettings(LPCTSTR lpszDeviceName, DWORD iModeNum, DEVMODE *lpDevMode)
{
LONG res;
OutTraceDW("EnumDisplaySettings: Devicename=%s ModeNum=%x\n", lpszDeviceName, iModeNum);
res=(*pEnumDisplaySettings)(lpszDeviceName, iModeNum, lpDevMode);
OSVERSIONINFO osinfo;
osinfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
(*pGetVersionExA)(&osinfo);
OutTraceDW("EnumDisplaySettings: Devicename=%s ModeNum=%x OS=%d.%d\n", lpszDeviceName, iModeNum, osinfo.dwMajorVersion, osinfo.dwMinorVersion);
if(dxw.dwFlags4 & NATIVERES){
// lists video card native resolutions, though faking emulated color resolutions
if((osinfo.dwMajorVersion >= 6) && (dxw.dwFlags1 & EMULATESURFACE)){
switch(iModeNum){
case ENUM_CURRENT_SETTINGS:
case ENUM_REGISTRY_SETTINGS: // lie ...
res=(*pEnumDisplaySettings)(lpszDeviceName, iModeNum, lpDevMode);
if(dxw.dwFlags2 & INIT8BPP) lpDevMode->dmBitsPerPel = 8;
if(dxw.dwFlags2 & INIT16BPP) lpDevMode->dmBitsPerPel = 16;
if(dxw.dwFlags3 & FORCE16BPP) lpDevMode->dmBitsPerPel = 16;
break;
default:
res=(*pEnumDisplaySettings)(lpszDeviceName, iModeNum / SUPPORTED_DEPTHS_NUMBER, lpDevMode);
lpDevMode->dmBitsPerPel = (DWORD)SupportedDepths[iModeNum % SUPPORTED_DEPTHS_NUMBER];
break;
}
}
else
res=(*pEnumDisplaySettings)(lpszDeviceName, iModeNum, lpDevMode);
}
else { // simulated modes: VGA or HDTV
//int SupportedDepths[5]={8,16,24,32,0};
SupportedRes_Type *SupportedRes;
SupportedRes = (dxw.dwFlags4 & SUPPORTHDTV) ? &SupportedHDTVRes[0] : &SupportedSVGARes[0];
res=(*pEnumDisplaySettings)(lpszDeviceName, ENUM_CURRENT_SETTINGS, lpDevMode);
switch(iModeNum){
case ENUM_CURRENT_SETTINGS:
case ENUM_REGISTRY_SETTINGS: // lie ...
lpDevMode->dmPelsHeight = 600;
lpDevMode->dmPelsWidth = 800;
if(dxw.dwFlags2 & INIT8BPP) lpDevMode->dmBitsPerPel = 8;
if(dxw.dwFlags2 & INIT16BPP) lpDevMode->dmBitsPerPel = 16;
if(dxw.dwFlags3 & FORCE16BPP) lpDevMode->dmBitsPerPel = 16;
break;
default:
lpDevMode->dmPelsHeight = SupportedRes[iModeNum / 4].h;
lpDevMode->dmPelsWidth = SupportedRes[iModeNum / 4].w;
lpDevMode->dmBitsPerPel = SupportedDepths[iModeNum % 4];
if(lpDevMode->dmPelsHeight == 0) res = 0; // end of list
break;
}
}
if(dxw.dwFlags4 & LIMITSCREENRES){
#define HUGE 100000
DWORD maxw, maxh;
@ -1859,6 +1910,9 @@ LONG WINAPI extEnumDisplaySettings(LPCTSTR lpszDeviceName, DWORD iModeNum, DEVMO
lpDevMode->dmPelsHeight = maxh;
}
}
OutTraceDW("EnumDisplaySettings: color=%dBPP size=(%dx%d) refresh=%dHz\n",
lpDevMode->dmBitsPerPel, lpDevMode->dmPelsWidth, lpDevMode->dmPelsHeight, lpDevMode->dmDisplayFrequency);
return res;
}

View File

@ -22,6 +22,7 @@ void gShowHideTaskBar(BOOL bHide /*=FALSE*/)
CWnd *pWnd = CWnd::FindWindow("Shell_TrayWnd", "");
//CWnd *pDesktopWnd = CWnd::GetDesktopWindow();
CWnd *pStart;
pStart = NULL;
if( bHide )
{
@ -44,8 +45,9 @@ void gShowHideTaskBar(BOOL bHide /*=FALSE*/)
//This will retrieve the Handle of Start Button using the above
// handle and class name of start Button.
// v2.03.52 fix: Win10 has no such a button!
pStart = pWnd->FindWindow("Button", NULL);
pStart->ShowWindow(SW_HIDE);
if(pStart) pStart->ShowWindow(SW_HIDE);
}
}
else
@ -68,8 +70,9 @@ void gShowHideTaskBar(BOOL bHide /*=FALSE*/)
//This will retrieve the Handle of Start Button using the above
// handle and class name of start Button.
// v2.03.52 fix: Win10 has no such a button!
pStart = pWnd->FindWindow("Button", NULL);
pStart->ShowWindow(SW_SHOW);
if(pStart) pStart->ShowWindow(SW_SHOW);
}
}
}

View File

@ -27,9 +27,9 @@ void CTabDebug::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
CTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent()));
DDX_Check(pDX, IDC_RGB2YUV, cTarget->m_ForceRGBtoYUV);
DDX_Check(pDX, IDC_YUV2RGB, cTarget->m_ForceYUVtoRGB);
DDX_Check(pDX, IDC_DXPROXED, cTarget->m_DXProxed);
//DDX_Check(pDX, IDC_RGB2YUV, cTarget->m_ForceRGBtoYUV);
//DDX_Check(pDX, IDC_YUV2RGB, cTarget->m_ForceYUVtoRGB);
//DDX_Check(pDX, IDC_DXPROXED, cTarget->m_DXProxed);
DDX_Check(pDX, IDC_ASSERT, cTarget->m_AssertDialog);
DDX_Check(pDX, IDC_MARKBLIT, cTarget->m_MarkBlit);
DDX_Check(pDX, IDC_MARKLOCK, cTarget->m_MarkLock);

View File

@ -46,6 +46,8 @@ void CTabDirect3D::DoDataExchange(CDataExchange* pDX)
DDX_Check(pDX, IDC_FULLRECTBLT, cTarget->m_FullRectBlt);
DDX_Check(pDX, IDC_CENTERTOWIN, cTarget->m_CenterToWin);
DDX_Check(pDX, IDC_DEINTERLACE, cTarget->m_Deinterlace);
DDX_Check(pDX, IDC_LIMITDDRAW, cTarget->m_LimitDdraw);
DDX_CBIndex(pDX, IDC_DDWAWLIMITCOMBO, cTarget->m_MaxDdrawInterface);
// Texture management
DDX_Radio(pDX, IDC_TEXTURENONE, cTarget->m_TextureHandling);

View File

@ -36,7 +36,6 @@ void CTabLogs::DoDataExchange(CDataExchange* pDX)
CDialog::DoDataExchange(pDX);
CTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent()));
//extern BOOL gbDebug;
DDX_Check(pDX, IDC_OUTPROXYTRACE, cTarget->m_OutProxyTrace);
DDX_Check(pDX, IDC_OUTD3DTRACE, cTarget->m_OutD3DTrace);
DDX_Check(pDX, IDC_OUTDDRAWTRACE, cTarget->m_OutDDRAWTrace);
DDX_Check(pDX, IDC_OUTDEBUG, cTarget->m_OutDebug);

View File

@ -21,6 +21,7 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/)
{
//{{AFX_DATA_INIT(CTargetDlg)
m_DXVersion = 0;
m_MaxDdrawInterface = 6;
m_Coordinates = 0;
m_DxEmulationMode = 3; // default: emulated
m_DxFilterMode = 0; // default: ddraw filtering
@ -34,7 +35,6 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/)
m_VirtualJoystick = FALSE;
m_Unacquire = FALSE;
m_LogEnabled = FALSE;
m_OutProxyTrace = FALSE;
m_OutDebug = FALSE;
m_RegistryOp = FALSE;
m_CursorTrace = FALSE;
@ -48,7 +48,7 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/)
m_AddRelativeTime = FALSE;
m_ImportTable = FALSE;
m_TraceHooks = FALSE;
m_DXProxed = FALSE;
//m_DXProxed = FALSE;
//m_HandleDC = FALSE;
m_HandleExceptions = FALSE;
m_SuppressIME = FALSE;
@ -77,8 +77,8 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/)
m_NoDestroyWindow = FALSE;
m_LockSysColors = FALSE;
m_LockReservedPalette = FALSE;
m_ForceYUVtoRGB = FALSE;
m_ForceRGBtoYUV = FALSE;
//m_ForceYUVtoRGB = FALSE;
//m_ForceRGBtoYUV = FALSE;
m_LimitScreenRes = FALSE;
m_SingleProcAffinity = FALSE;
m_LimitResources = FALSE;
@ -198,6 +198,7 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/)
m_FullRectBlt = FALSE;
m_CenterToWin = FALSE;
m_Deinterlace = FALSE;
m_LimitDdraw = FALSE;
m_SurfaceWarn = FALSE;
m_CapMask = FALSE;
m_NoWindowHooks = FALSE;

View File

@ -32,13 +32,13 @@ public:
int m_MouseVisibility;
int m_TextureHandling;
int m_SonProcessMode;
int m_MaxDdrawInterface;
BOOL m_HookDI;
BOOL m_HookDI8;
BOOL m_EmulateRelMouse;
BOOL m_ModifyMouse;
BOOL m_VirtualJoystick;
BOOL m_Unacquire;
BOOL m_OutProxyTrace;
BOOL m_OutDebug;
BOOL m_CursorTrace;
BOOL m_LogEnabled;
@ -50,7 +50,7 @@ public:
BOOL m_OutDWTrace;
BOOL m_OutD3DTrace;
BOOL m_OutDDRAWTrace;
BOOL m_DXProxed;
//BOOL m_DXProxed;
BOOL m_AssertDialog;
BOOL m_ImportTable;
BOOL m_RegistryOp;
@ -160,6 +160,7 @@ public:
BOOL m_FullRectBlt;
BOOL m_CenterToWin;
BOOL m_Deinterlace;
BOOL m_LimitDdraw;
BOOL m_SurfaceWarn;
BOOL m_CapMask;
BOOL m_NoWindowHooks;
@ -221,8 +222,8 @@ public:
BOOL m_BlackWhite;
BOOL m_SuppressD3DExt;
BOOL m_Force16BPP;
BOOL m_ForceYUVtoRGB;
BOOL m_ForceRGBtoYUV;
//BOOL m_ForceYUVtoRGB;
//BOOL m_ForceRGBtoYUV;
BOOL m_LimitScreenRes;
int m_PosX;
int m_PosY;

View File

@ -1,38 +0,0 @@
[window]
exportpath=D:\DxWnd\exports.wip\
posx=880
posy=437
sizx=320
sizy=200
[target]
title0=Star Trek Armada
path0=D:\Games\armada_demo\Armada.exe
launchpath0=
module0=
opengllib0=
notes0=
registry0=ciao\n
ver0=0
coord0=0
flag0=-2011168669
flagg0=1543503872
flagh0=98320
flagi0=136314884
flagj0=4224
flagk0=327680
tflag0=0
initx0=0
inity0=0
minx0=0
miny0=0
maxx0=0
maxy0=0
posx0=100
posy0=100
sizx0=800
sizy0=600
maxfps0=0
initts0=0
winver0=0
maxres0=-1
swapeffect0=0

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -170,6 +170,7 @@ static void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg)
strcpy_s(t->OpenGLLib, sizeof(t->OpenGLLib), dlg->m_OpenGLLib);
if(dlg->m_DXVersion > 1) dlg->m_DXVersion += 5;
t->dxversion = dlg->m_DXVersion;
t->MaxDdrawInterface = dlg->m_MaxDdrawInterface+1;
t->coordinates = dlg->m_Coordinates;
t->flags = 0;
t->flags2 = 0;
@ -255,7 +256,6 @@ static void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg)
if(dlg->m_ModifyMouse) t->flags |= MODIFYMOUSE;
if(dlg->m_VirtualJoystick) t->flags6 |= VIRTUALJOYSTICK;
if(dlg->m_Unacquire) t->flags6 |= UNACQUIRE;
if(dlg->m_OutProxyTrace) t->tflags |= OUTPROXYTRACE;
if(dlg->m_OutDebug) t->tflags |= OUTDEBUG;
if(dlg->m_CursorTrace) t->tflags |= OUTCURSORTRACE;
if(dlg->m_LogEnabled) t->tflags |= OUTTRACE;
@ -267,7 +267,7 @@ static void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg)
if(dlg->m_OutDWTrace) t->tflags |= OUTDXWINTRACE;
if(dlg->m_OutDDRAWTrace) t->tflags |= OUTDDRAWTRACE;
if(dlg->m_OutD3DTrace) t->tflags |= OUTD3DTRACE;
if(dlg->m_DXProxed) t->tflags |= DXPROXED;
//if(dlg->m_DXProxed) t->tflags |= DXPROXED;
if(dlg->m_AssertDialog) t->tflags |= ASSERTDIALOG;
if(dlg->m_ImportTable) t->tflags |= OUTIMPORTTABLE;
if(dlg->m_RegistryOp) t->tflags |= OUTREGISTRY;
@ -317,8 +317,8 @@ static void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg)
if(dlg->m_NoDestroyWindow) t->flags6 |= NODESTROYWINDOW;
if(dlg->m_LockSysColors) t->flags3 |= LOCKSYSCOLORS;
if(dlg->m_LockReservedPalette) t->flags5 |= LOCKRESERVEDPALETTE;
if(dlg->m_ForceYUVtoRGB) t->flags3 |= YUV2RGB;
if(dlg->m_ForceRGBtoYUV) t->flags3 |= RGB2YUV;
//if(dlg->m_ForceYUVtoRGB) t->flags3 |= YUV2RGB;
//if(dlg->m_ForceRGBtoYUV) t->flags3 |= RGB2YUV;
if(dlg->m_LimitScreenRes) t->flags4 |= LIMITSCREENRES;
if(dlg->m_SingleProcAffinity) t->flags3 |= SINGLEPROCAFFINITY;
if(dlg->m_SaveLoad) t->flags |= SAVELOAD;
@ -402,6 +402,7 @@ static void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg)
if(dlg->m_FullRectBlt) t->flags2 |= FULLRECTBLT;
if(dlg->m_CenterToWin) t->flags5 |= CENTERTOWIN;
if(dlg->m_Deinterlace) t->flags5 |= DEINTERLACE;
if(dlg->m_LimitDdraw) t->flags7 |= LIMITDDRAW;
if(dlg->m_NoPaletteUpdate) t->flags2 |= NOPALETTEUPDATE;
if(dlg->m_SurfaceWarn) t->flags3 |= SURFACEWARN;
if(dlg->m_CapMask) t->flags3 |= CAPMASK;
@ -431,6 +432,7 @@ static void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg)
static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg)
{
dlg->m_DXVersion = t->dxversion;
dlg->m_MaxDdrawInterface = t->MaxDdrawInterface-1;
if(dlg->m_DXVersion > 6) dlg->m_DXVersion -= 5;
dlg->m_Coordinates = t->coordinates;
dlg->m_FilePath = t->path;
@ -497,7 +499,6 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg)
dlg->m_ModifyMouse = t->flags & MODIFYMOUSE ? 1 : 0;
dlg->m_VirtualJoystick = t->flags6 & VIRTUALJOYSTICK ? 1 : 0;
dlg->m_Unacquire = t->flags6 & UNACQUIRE ? 1 : 0;
dlg->m_OutProxyTrace = t->tflags & OUTPROXYTRACE ? 1 : 0;
dlg->m_OutDebug = t->tflags & OUTDEBUG ? 1 : 0;
dlg->m_CursorTrace = t->tflags & OUTCURSORTRACE ? 1 : 0;
dlg->m_LogEnabled = t->tflags & OUTTRACE ? 1 : 0;
@ -509,7 +510,7 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg)
dlg->m_OutDWTrace = t->tflags & OUTDXWINTRACE ? 1 : 0;
dlg->m_OutD3DTrace = t->tflags & OUTD3DTRACE ? 1 : 0;
dlg->m_OutDDRAWTrace = t->tflags & OUTDDRAWTRACE ? 1 : 0;
dlg->m_DXProxed = t->tflags & DXPROXED ? 1 : 0;
//dlg->m_DXProxed = t->tflags & DXPROXED ? 1 : 0;
dlg->m_AssertDialog = t->tflags & ASSERTDIALOG ? 1 : 0;
dlg->m_ImportTable = t->tflags & OUTIMPORTTABLE ? 1 : 0;
dlg->m_RegistryOp = t->tflags & OUTREGISTRY ? 1 : 0;
@ -541,8 +542,8 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg)
dlg->m_NoDestroyWindow = t->flags6 & NODESTROYWINDOW ? 1 : 0;
dlg->m_LockSysColors = t->flags3 & LOCKSYSCOLORS ? 1 : 0;
dlg->m_LockReservedPalette = t->flags5 & LOCKRESERVEDPALETTE ? 1 : 0;
dlg->m_ForceRGBtoYUV = t->flags3 & RGB2YUV ? 1 : 0;
dlg->m_ForceYUVtoRGB = t->flags3 & YUV2RGB ? 1 : 0;
//dlg->m_ForceRGBtoYUV = t->flags3 & RGB2YUV ? 1 : 0;
//dlg->m_ForceYUVtoRGB = t->flags3 & YUV2RGB ? 1 : 0;
dlg->m_LimitScreenRes = t->flags4 & LIMITSCREENRES ? 1 : 0;
dlg->m_SingleProcAffinity = t->flags3 & SINGLEPROCAFFINITY ? 1 : 0;
dlg->m_LimitResources = t->flags2 & LIMITRESOURCES ? 1 : 0;
@ -645,6 +646,7 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg)
dlg->m_FullRectBlt = t->flags2 & FULLRECTBLT ? 1 : 0;
dlg->m_CenterToWin = t->flags5 & CENTERTOWIN ? 1 : 0;
dlg->m_Deinterlace = t->flags5 & DEINTERLACE ? 1 : 0;
dlg->m_LimitDdraw = t->flags7 & LIMITDDRAW ? 1 : 0;
dlg->m_NoPaletteUpdate = t->flags2 & NOPALETTEUPDATE ? 1 : 0;
dlg->m_SurfaceWarn = t->flags3 & SURFACEWARN ? 1 : 0;
dlg->m_CapMask = t->flags3 & CAPMASK ? 1 : 0;
@ -754,6 +756,9 @@ static void SaveConfigItem(TARGETMAP *TargetMap, PRIVATEMAP *PrivateMap, int i,
sprintf_s(key, sizeof(key), "swapeffect%i", i);
sprintf_s(val, sizeof(val), "%i", TargetMap->SwapEffect);
WritePrivateProfileString("target", key, val, InitPath);
sprintf_s(key, sizeof(key), "maxddinterface%i", i);
sprintf_s(val, sizeof(val), "%i", TargetMap->MaxDdrawInterface);
WritePrivateProfileString("target", key, val, InitPath);
free(EscBuf);
EscBuf = NULL;
@ -823,6 +828,8 @@ static void ClearTarget(int i, char *InitPath)
WritePrivateProfileString("target", key, 0, InitPath);
sprintf_s(key, sizeof(key), "registry%i", i);
WritePrivateProfileString("target", key, 0, InitPath);
sprintf_s(key, sizeof(key), "maxddinterface%i", i);
WritePrivateProfileString("target", key, 0, InitPath);
}
static int LoadConfigItem(TARGETMAP *TargetMap, PRIVATEMAP *PrivateMap, int i, char *InitPath)
@ -920,11 +927,14 @@ static int LoadConfigItem(TARGETMAP *TargetMap, PRIVATEMAP *PrivateMap, int i, c
// -------
sprintf_s(key, sizeof(key), "maxres%i", i);
TargetMap->MaxScreenRes = GetPrivateProfileInt("target", key, 0, InitPath);
// -------
sprintf_s(key, sizeof(key), "maxddinterface%i", i);
TargetMap->MaxDdrawInterface = GetPrivateProfileInt("target", key, 7, InitPath);
if (!gbDebug){
// clear debug flags
TargetMap->flags &= ~(0);
TargetMap->flags3 &= ~(YUV2RGB|RGB2YUV|SURFACEWARN|ANALYTICMODE|NODDRAWBLT|NODDRAWFLIP|NOGDIBLT);
TargetMap->flags3 &= ~(SURFACEWARN|ANALYTICMODE|NODDRAWBLT|NODDRAWFLIP|NOGDIBLT);
}
free(EscBuf);
EscBuf = NULL;
@ -1119,7 +1129,7 @@ void CDxwndhostView::OnExport()
// XP fix:
if(strlen(path)>4){
char *p;
p = &path[strlen(path-4)];
p = &path[strlen(path)-4];
if(strcasecmp(p, ".dxw")) strcat(path, ".dxw");
}
else

Binary file not shown.