mirror of
https://github.com/DxWnd/DxWnd.reloaded
synced 2024-12-30 09:25:35 +01:00
v2_02_07_src
Former-commit-id: fb4c995685e09cdec938622ea9e024cd87add506
This commit is contained in:
parent
8f3bc994d0
commit
ef5a5afd7a
@ -58,13 +58,14 @@
|
|||||||
#define FIXNCHITTEST 0x00000800 // fixes WM_NCHITTEST message X,Y coordinates
|
#define FIXNCHITTEST 0x00000800 // fixes WM_NCHITTEST message X,Y coordinates
|
||||||
#define LIMITFPS 0x00001000 // delays primary blit operations to limit FPS
|
#define LIMITFPS 0x00001000 // delays primary blit operations to limit FPS
|
||||||
#define SKIPFPS 0x00002000 // skips primary blit operations up to limit
|
#define SKIPFPS 0x00002000 // skips primary blit operations up to limit
|
||||||
#define SHOWFPS 0x00004000 // shows FPS value to status win / log
|
#define SHOWFPS 0x00004000 // shows FPS value to status win / log / title bar
|
||||||
#define HIDEMULTIMONITOR 0x00008000 // hide multimonitor configurations: GetAdapterCount returns 1.
|
#define HIDEMULTIMONITOR 0x00008000 // hide multimonitor configurations: GetAdapterCount returns 1.
|
||||||
#define TIMESTRETCH 0x00010000 // make system time stretchable
|
#define TIMESTRETCH 0x00010000 // make system time stretchable
|
||||||
#define HOOKOPENGL 0x00020000 // Hook OpenGL calls
|
#define HOOKOPENGL 0x00020000 // Hook OpenGL calls
|
||||||
#define WALLPAPERMODE 0x00040000 // mouse events are discarded (good for screensaver-like)
|
#define WALLPAPERMODE 0x00040000 // mouse events are discarded (good for screensaver-like)
|
||||||
#define SHOWHWCURSOR 0x00080000 // mouse events are discarded (good for screensaver-like)
|
#define SHOWHWCURSOR 0x00080000 // mouse events are discarded (good for screensaver-like)
|
||||||
#define HOOKGDI 0x00100000 // Hook GDI functions
|
#define HOOKGDI 0x00100000 // Hook GDI functions
|
||||||
|
#define SHOWFPSOVERLAY 0x00200000 // shows FPS value to status win / log / screen overlay
|
||||||
|
|
||||||
// logging Tflags DWORD:
|
// logging Tflags DWORD:
|
||||||
#define OUTTRACE 0x00000001 // enables tracing to dxwnd.log in general
|
#define OUTTRACE 0x00000001 // enables tracing to dxwnd.log in general
|
||||||
@ -78,6 +79,7 @@
|
|||||||
#define OUTDEBUG 0x00000100 // detailed debugging indormation
|
#define OUTDEBUG 0x00000100 // detailed debugging indormation
|
||||||
|
|
||||||
#define EMULATEFLAGS (EMULATEBUFFER | EMULATESURFACE)
|
#define EMULATEFLAGS (EMULATEBUFFER | EMULATESURFACE)
|
||||||
|
#define HANDLEFPS (SHOWFPS | SHOWFPSOVERLAY | LIMITFPS | SKIPFPS)
|
||||||
|
|
||||||
// DxWnd host app data to be passed to the hook callback
|
// DxWnd host app data to be passed to the hook callback
|
||||||
typedef struct TARGETMAP
|
typedef struct TARGETMAP
|
||||||
@ -115,7 +117,7 @@ typedef struct
|
|||||||
DWORD dwPid;
|
DWORD dwPid;
|
||||||
BOOL isLogging;
|
BOOL isLogging;
|
||||||
DWORD FPSCount;
|
DWORD FPSCount;
|
||||||
int iTimeShift;
|
int TimeShift;
|
||||||
} DXWNDSTATUS;
|
} DXWNDSTATUS;
|
||||||
|
|
||||||
extern DXWNDSTATUS DxWndStatus;
|
extern DXWNDSTATUS DxWndStatus;
|
||||||
@ -125,8 +127,7 @@ int StartHook(void);
|
|||||||
int EndHook(void);
|
int EndHook(void);
|
||||||
void GetDllVersion(char *);
|
void GetDllVersion(char *);
|
||||||
int GetHookStatus(DXWNDSTATUS *);
|
int GetHookStatus(DXWNDSTATUS *);
|
||||||
void SetHookStatus(DXWNDSTATUS *);
|
DXWNDSTATUS *GetHookInfo();
|
||||||
int GetTimeShift();
|
|
||||||
int HookInit(TARGETMAP *, HWND);
|
int HookInit(TARGETMAP *, HWND);
|
||||||
|
|
||||||
void *SetHook(void *, void *);
|
void *SetHook(void *, void *);
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:19d29414d50135080a863b7865dfe2c8685150e1df359c9a5e528a65d5f9a46d
|
oid sha256:b0ffe0f3143b439d28c1b4d7f195991b383f36ed919ba89aab0abf2de7c9481e
|
||||||
size 263168
|
size 271360
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:fcaebaa1f5eaffeb624d13fdb6f6058db5383fcaeadf22df4a641a766127c8d5
|
oid sha256:3d43f746689ac5abcadcfbbb0dbd302cc3d4186ce2df7aa8bd9c24eb1b8694d4
|
||||||
size 488448
|
size 488960
|
||||||
|
@ -22,4 +22,7 @@ added status and time stretching view panels to tray icon menu
|
|||||||
v2.02.06:
|
v2.02.06:
|
||||||
preliminary FPS counter overlapped on game screen, Alt-F7 to toggle display on/off.
|
preliminary FPS counter overlapped on game screen, Alt-F7 to toggle display on/off.
|
||||||
fixed buf on time stretch logging (and possible game crash).
|
fixed buf on time stretch logging (and possible game crash).
|
||||||
revised GetDC handling with 8BPP paletized surfaces: avoided need to emulate reverse-blitting and got an impressive speed improvement for games such as Age of Empires I & II and Hyperblade.
|
revised GetDC handling with 8BPP paletized surfaces: avoided need to emulate reverse-blitting and got an impressive speed improvement for games such as Age of Empires I & II and Hyperblade.
|
||||||
|
|
||||||
|
v2.02.07:
|
||||||
|
many fixes on the FPS and time control features.
|
1983
debug/dxwnd.ini
1983
debug/dxwnd.ini
File diff suppressed because it is too large
Load Diff
@ -117,8 +117,7 @@ static void dx_ToggleLogging()
|
|||||||
dxw.dwTFlags |= OUTTRACE;
|
dxw.dwTFlags |= OUTTRACE;
|
||||||
OutTraceD("Toggle logging ON\n");
|
OutTraceD("Toggle logging ON\n");
|
||||||
}
|
}
|
||||||
DxWndStatus.isLogging=(dxw.dwTFlags & OUTTRACE);
|
GetHookInfo()->isLogging=(dxw.dwTFlags & OUTTRACE);
|
||||||
SetHookStatus(&DxWndStatus);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DumpImportTable(char *module)
|
void DumpImportTable(char *module)
|
||||||
@ -300,7 +299,7 @@ void *HookAPI(const char *module, char *dll, void *apiproc, const char *apiname,
|
|||||||
OutTraceD("HookAPI: FlushInstructionCache error %d at %d\n", GetLastError(), __LINE__);
|
OutTraceD("HookAPI: FlushInstructionCache error %d at %d\n", GetLastError(), __LINE__);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
//OutTraceD("HookAPI hook=%s.%s address=%x->%x\n", module, apiname, org, hookproc);
|
if(IsDebug) OutTrace("HookAPI hook=%s.%s address=%x->%x\n", module, apiname, org, hookproc);
|
||||||
}
|
}
|
||||||
__except(EXCEPTION_EXECUTE_HANDLER)
|
__except(EXCEPTION_EXECUTE_HANDLER)
|
||||||
{
|
{
|
||||||
@ -706,8 +705,7 @@ LRESULT CALLBACK extWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lp
|
|||||||
if (wparam == VK_F5 && (dxw.TimeShift < 8)) dxw.TimeShift++;
|
if (wparam == VK_F5 && (dxw.TimeShift < 8)) dxw.TimeShift++;
|
||||||
if (wparam == VK_F6 && (dxw.TimeShift > -8)) dxw.TimeShift--;
|
if (wparam == VK_F6 && (dxw.TimeShift > -8)) dxw.TimeShift--;
|
||||||
OutTrace("Time Stretch: shift=%d speed=%s\n", dxw.TimeShift, dxw.GetTSCaption());
|
OutTrace("Time Stretch: shift=%d speed=%s\n", dxw.TimeShift, dxw.GetTSCaption());
|
||||||
DxWndStatus.iTimeShift=dxw.TimeShift;
|
GetHookInfo()->TimeShift=dxw.TimeShift;
|
||||||
SetHookStatus(&DxWndStatus);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case VK_F4:
|
case VK_F4:
|
||||||
@ -1026,6 +1024,8 @@ void HookSysLibs(char *module)
|
|||||||
if(tmp) pGetLocalTime = (GetLocalTime_Type)tmp;
|
if(tmp) pGetLocalTime = (GetLocalTime_Type)tmp;
|
||||||
tmp = HookAPI(module, "kernel32.dll", GetSystemTime, "GetSystemTime", extGetSystemTime);
|
tmp = HookAPI(module, "kernel32.dll", GetSystemTime, "GetSystemTime", extGetSystemTime);
|
||||||
if(tmp) pGetSystemTime = (GetSystemTime_Type)tmp;
|
if(tmp) pGetSystemTime = (GetSystemTime_Type)tmp;
|
||||||
|
tmp = HookAPI(module, "kernel32.dll", GetSystemTimeAsFileTime, "GetSystemTimeAsFileTime", extGetSystemTimeAsFileTime);
|
||||||
|
if(tmp) pGetSystemTimeAsFileTime = (GetSystemTimeAsFileTime_Type)tmp;
|
||||||
tmp = HookAPI(module, "kernel32.dll", Sleep, "Sleep", extSleep);
|
tmp = HookAPI(module, "kernel32.dll", Sleep, "Sleep", extSleep);
|
||||||
if(tmp) pSleep = (Sleep_Type)tmp;
|
if(tmp) pSleep = (Sleep_Type)tmp;
|
||||||
tmp = HookAPI(module, "kernel32.dll", SleepEx, "SleepEx", extSleepEx);
|
tmp = HookAPI(module, "kernel32.dll", SleepEx, "SleepEx", extSleepEx);
|
||||||
|
137
dll/dxwcore.cpp
137
dll/dxwcore.cpp
@ -324,19 +324,29 @@ void dxwCore::ScreenRefresh(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void CountFPS()
|
static void CountFPS(HWND hwnd)
|
||||||
{
|
{
|
||||||
static DWORD time = 0xFFFFFFFF;
|
static DWORD time = 0xFFFFFFFF;
|
||||||
static DWORD FPSCount = 0;
|
static DWORD FPSCount = 0;
|
||||||
|
extern void SetFPS(int);
|
||||||
|
//DXWNDSTATUS Status;
|
||||||
DWORD tmp;
|
DWORD tmp;
|
||||||
tmp = GetTickCount();
|
tmp = GetTickCount();
|
||||||
if((tmp - time) > 1000) {
|
if((tmp - time) > 1000) {
|
||||||
|
char sBuf[80+12+1]; // title + fps string + terminator
|
||||||
|
char *fpss;
|
||||||
// log fps count
|
// log fps count
|
||||||
OutTrace("FPSCount=%d\n", FPSCount);
|
OutTrace("FPSCount=%d\n", FPSCount);
|
||||||
// show fps count on status win
|
// show fps count on status win
|
||||||
GetHookStatus(&DxWndStatus);
|
GetHookInfo()->FPSCount = FPSCount; // for overlay display
|
||||||
DxWndStatus.FPSCount = FPSCount;
|
// show fps on win title bar
|
||||||
SetHookStatus(&DxWndStatus);
|
if (dxw.dwFlags2 & SHOWFPS){
|
||||||
|
GetWindowText(hwnd, sBuf, 80);
|
||||||
|
fpss=strstr(sBuf," ~ (");
|
||||||
|
if(fpss==NULL) fpss=&sBuf[strlen(sBuf)];
|
||||||
|
sprintf(fpss, " ~ (%d FPS)", FPSCount);
|
||||||
|
SetWindowText(hwnd, sBuf);
|
||||||
|
}
|
||||||
// reset
|
// reset
|
||||||
FPSCount=0;
|
FPSCount=0;
|
||||||
time = tmp;
|
time = tmp;
|
||||||
@ -346,35 +356,32 @@ static void CountFPS()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void LimitFrameCount(int delay)
|
|
||||||
|
static void LimitFrameCount(DWORD delay)
|
||||||
{
|
{
|
||||||
static DWORD time = 0xFFFFFFFF;
|
static DWORD oldtime=(*pGetTickCount)();
|
||||||
extern void do_slow(int);
|
DWORD newtime;
|
||||||
DWORD tmp;
|
newtime = (*pGetTickCount)();
|
||||||
tmp = GetTickCount();
|
// use '<' and not '<=' to avoid the risk of sleeping forever....
|
||||||
if((tmp - time) > (DWORD)delay) {
|
if(newtime < oldtime+delay) (*pSleep)(oldtime+delay-newtime);
|
||||||
time = tmp;
|
oldtime = newtime;
|
||||||
}
|
|
||||||
else
|
|
||||||
Sleep(tmp - time);
|
|
||||||
//do_sslow(tmp - time);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static BOOL SkipFrameCount(int delay)
|
static BOOL SkipFrameCount(DWORD delay)
|
||||||
{
|
{
|
||||||
static DWORD time = 0xFFFFFFFF;
|
static DWORD oldtime=(*pGetTickCount)();
|
||||||
DWORD tmp;
|
DWORD newtime;
|
||||||
tmp = GetTickCount();
|
newtime = (*pGetTickCount)();
|
||||||
if((tmp - time) > (DWORD)delay) {
|
// use '<' and not '<=' to avoid the risk of sleeping forever....
|
||||||
time = tmp;
|
if(newtime < oldtime+delay) return TRUE;
|
||||||
return FALSE;
|
oldtime = newtime;
|
||||||
}
|
return FALSE;
|
||||||
return TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL dxwCore::HandleFPS()
|
BOOL dxwCore::HandleFPS()
|
||||||
{
|
{
|
||||||
if(dwFlags2 & SHOWFPS) CountFPS();
|
if(dwFlags2 & (SHOWFPS|SHOWFPSOVERLAY)) CountFPS(hWnd);
|
||||||
if(dwFlags2 & LIMITFPS) LimitFrameCount(dxw.MaxFPS);
|
if(dwFlags2 & LIMITFPS) LimitFrameCount(dxw.MaxFPS);
|
||||||
if(dwFlags2 & SKIPFPS) if(SkipFrameCount(dxw.MaxFPS)) return TRUE;
|
if(dwFlags2 & SKIPFPS) if(SkipFrameCount(dxw.MaxFPS)) return TRUE;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@ -407,7 +414,7 @@ DWORD dxwCore::GetTickCount(void)
|
|||||||
|
|
||||||
dwNextRealTick=(*pGetTickCount)();
|
dwNextRealTick=(*pGetTickCount)();
|
||||||
dwTick=(dwNextRealTick-dwLastRealTick);
|
dwTick=(dwNextRealTick-dwLastRealTick);
|
||||||
TimeShift=GetTimeShift();
|
TimeShift=GetHookInfo()->TimeShift;
|
||||||
dwTick = TimeShifter(dwTick, TimeShift);
|
dwTick = TimeShifter(dwTick, TimeShift);
|
||||||
dwLastFakeTick += dwTick;
|
dwLastFakeTick += dwTick;
|
||||||
dwLastRealTick = dwNextRealTick;
|
dwLastRealTick = dwNextRealTick;
|
||||||
@ -416,11 +423,46 @@ DWORD dxwCore::GetTickCount(void)
|
|||||||
|
|
||||||
DWORD dxwCore::StretchTime(DWORD dwTimer)
|
DWORD dxwCore::StretchTime(DWORD dwTimer)
|
||||||
{
|
{
|
||||||
TimeShift=GetTimeShift();
|
TimeShift=GetHookInfo()->TimeShift;
|
||||||
dwTimer = TimeShifter(dwTimer, -TimeShift);
|
dwTimer = TimeShifter(dwTimer, -TimeShift);
|
||||||
return dwTimer;
|
return dwTimer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void dxwCore::GetSystemTimeAsFileTime(LPFILETIME lpSystemTimeAsFileTime)
|
||||||
|
{
|
||||||
|
DWORD dwTick;
|
||||||
|
DWORD dwCurrentTick;
|
||||||
|
FILETIME CurrFileTime;
|
||||||
|
static DWORD dwStartTick=0;
|
||||||
|
static DWORD dwUpdateTick=0;
|
||||||
|
static FILETIME StartFileTime;
|
||||||
|
extern DXWNDSTATUS *pStatus;
|
||||||
|
|
||||||
|
if(dwStartTick==0) {
|
||||||
|
SYSTEMTIME StartingTime;
|
||||||
|
// first time through, initialize & return true time
|
||||||
|
dwStartTick = (*pGetTickCount)();
|
||||||
|
(*pGetSystemTime)(&StartingTime);
|
||||||
|
SystemTimeToFileTime(&StartingTime, &StartFileTime);
|
||||||
|
*lpSystemTimeAsFileTime = StartFileTime;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
dwCurrentTick=(*pGetTickCount)();
|
||||||
|
dwTick=(dwCurrentTick-dwStartTick);
|
||||||
|
TimeShift=GetHookInfo()->TimeShift;
|
||||||
|
dwTick = TimeShifter(dwTick, TimeShift);
|
||||||
|
// From MSDN: Contains a 64-bit value representing the number of
|
||||||
|
// 100-nanosecond intervals since January 1, 1601 (UTC).
|
||||||
|
// So, since 1mSec = 10.000 * 100nSec, you still have to multiply by 10.000.
|
||||||
|
CurrFileTime.dwHighDateTime = StartFileTime.dwHighDateTime; // wrong !!!!
|
||||||
|
CurrFileTime.dwLowDateTime = StartFileTime.dwLowDateTime + (10000 * dwTick); // wrong !!!!
|
||||||
|
*lpSystemTimeAsFileTime=CurrFileTime;
|
||||||
|
// reset to avoid time jumps on TimeShift changes...
|
||||||
|
StartFileTime = CurrFileTime;
|
||||||
|
dwStartTick = dwCurrentTick;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void dxwCore::GetSystemTime(LPSYSTEMTIME lpSystemTime)
|
void dxwCore::GetSystemTime(LPSYSTEMTIME lpSystemTime)
|
||||||
{
|
{
|
||||||
DWORD dwTick;
|
DWORD dwTick;
|
||||||
@ -442,7 +484,7 @@ void dxwCore::GetSystemTime(LPSYSTEMTIME lpSystemTime)
|
|||||||
else {
|
else {
|
||||||
dwCurrentTick=(*pGetTickCount)();
|
dwCurrentTick=(*pGetTickCount)();
|
||||||
dwTick=(dwCurrentTick-dwStartTick);
|
dwTick=(dwCurrentTick-dwStartTick);
|
||||||
TimeShift=GetTimeShift();
|
TimeShift=GetHookInfo()->TimeShift;
|
||||||
dwTick = TimeShifter(dwTick, TimeShift);
|
dwTick = TimeShifter(dwTick, TimeShift);
|
||||||
// From MSDN: Contains a 64-bit value representing the number of
|
// From MSDN: Contains a 64-bit value representing the number of
|
||||||
// 100-nanosecond intervals since January 1, 1601 (UTC).
|
// 100-nanosecond intervals since January 1, 1601 (UTC).
|
||||||
@ -456,6 +498,35 @@ void dxwCore::GetSystemTime(LPSYSTEMTIME lpSystemTime)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void dxwCore::ShowFPS(HDC xdc)
|
||||||
|
{
|
||||||
|
char sBuf[81];
|
||||||
|
static DWORD dwTimer = 0;
|
||||||
|
static int corner = 0;
|
||||||
|
static int x, y;
|
||||||
|
static DWORD color;
|
||||||
|
|
||||||
|
if((*pGetTickCount)()-dwTimer > 4000){
|
||||||
|
RECT rect;
|
||||||
|
dwTimer = (*pGetTickCount)();
|
||||||
|
corner = dwTimer % 4;
|
||||||
|
color=0xFF0000; // blue
|
||||||
|
(*pGetClientRect)(hWnd, &rect);
|
||||||
|
switch (corner) {
|
||||||
|
case 0: x=10; y=10; break;
|
||||||
|
case 1: x=rect.right-60; y=10; break;
|
||||||
|
case 2: x=rect.right-60; y=rect.bottom-20; break;
|
||||||
|
case 3: x=10; y=rect.bottom-20; break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SetTextColor(xdc,color);
|
||||||
|
//SetBkMode(xdc, TRANSPARENT);
|
||||||
|
SetBkMode(xdc, OPAQUE);
|
||||||
|
sprintf(sBuf, "FPS: %d", GetHookInfo()->FPSCount);
|
||||||
|
TextOut(xdc, x, y, sBuf, strlen(sBuf));
|
||||||
|
}
|
||||||
|
|
||||||
void dxwCore::ShowFPS(LPDIRECTDRAWSURFACE lpdds)
|
void dxwCore::ShowFPS(LPDIRECTDRAWSURFACE lpdds)
|
||||||
{
|
{
|
||||||
HDC xdc; // the working dc
|
HDC xdc; // the working dc
|
||||||
@ -466,16 +537,8 @@ void dxwCore::ShowFPS(LPDIRECTDRAWSURFACE lpdds)
|
|||||||
static DWORD color;
|
static DWORD color;
|
||||||
|
|
||||||
if((*pGetTickCount)()-dwTimer > 4000){
|
if((*pGetTickCount)()-dwTimer > 4000){
|
||||||
if(!dwTimer) srand ((*pGetTickCount)());
|
|
||||||
dwTimer = (*pGetTickCount)();
|
dwTimer = (*pGetTickCount)();
|
||||||
//corner = rand() % 4;
|
|
||||||
corner = dwTimer % 4;
|
corner = dwTimer % 4;
|
||||||
//color = ((0x80 + (rand() % 0x80))) +
|
|
||||||
// ((0x80 + (rand() % 0x80))<<8) +
|
|
||||||
// ((0x80 + (rand() % 0x80))<<16);
|
|
||||||
// color = rand() % 0x1000000;
|
|
||||||
//color = RGB(rand()%0x100, rand()%0x100, rand()%0x100);
|
|
||||||
//color = RGB(dwTimer%0x100, dwTimer%0x100, dwTimer%0x100);
|
|
||||||
color=0xFF0000; // blue
|
color=0xFF0000; // blue
|
||||||
switch (corner) {
|
switch (corner) {
|
||||||
case 0: x=10; y=10; break;
|
case 0: x=10; y=10; break;
|
||||||
@ -489,7 +552,7 @@ void dxwCore::ShowFPS(LPDIRECTDRAWSURFACE lpdds)
|
|||||||
SetTextColor(xdc,color);
|
SetTextColor(xdc,color);
|
||||||
//SetBkMode(xdc, TRANSPARENT);
|
//SetBkMode(xdc, TRANSPARENT);
|
||||||
SetBkMode(xdc, OPAQUE);
|
SetBkMode(xdc, OPAQUE);
|
||||||
sprintf(sBuf, "FPS: %d", DxWndStatus.FPSCount);
|
sprintf(sBuf, "FPS: %d", GetHookInfo()->FPSCount);
|
||||||
TextOut(xdc, x, y, sBuf, strlen(sBuf));
|
TextOut(xdc, x, y, sBuf, strlen(sBuf));
|
||||||
lpdds->ReleaseDC(xdc);
|
lpdds->ReleaseDC(xdc);
|
||||||
}
|
}
|
||||||
|
@ -41,8 +41,10 @@ public: // methods
|
|||||||
void SetPrimarySurface(void);
|
void SetPrimarySurface(void);
|
||||||
void ResetPrimarySurface(void);
|
void ResetPrimarySurface(void);
|
||||||
void GetSystemTime(LPSYSTEMTIME lpSystemTime);
|
void GetSystemTime(LPSYSTEMTIME lpSystemTime);
|
||||||
|
void GetSystemTimeAsFileTime(LPFILETIME lpSystemTimeAsFileTime);
|
||||||
DWORD StretchTime(DWORD);
|
DWORD StretchTime(DWORD);
|
||||||
void ShowFPS(LPDIRECTDRAWSURFACE);
|
void ShowFPS(LPDIRECTDRAWSURFACE);
|
||||||
|
void ShowFPS(HDC);
|
||||||
char *GetTSCaption(int);
|
char *GetTSCaption(int);
|
||||||
char *GetTSCaption(void);
|
char *GetTSCaption(void);
|
||||||
|
|
||||||
@ -72,6 +74,9 @@ public: // simple data variables
|
|||||||
//BOOL IsWithinDDraw; // flag to avoid double intervention at ddraw & GDI level
|
//BOOL IsWithinDDraw; // flag to avoid double intervention at ddraw & GDI level
|
||||||
BOOL IsGDIPalette;
|
BOOL IsGDIPalette;
|
||||||
char *CustomOpenGLLib;
|
char *CustomOpenGLLib;
|
||||||
|
WORD palVersion;
|
||||||
|
WORD palNumEntries;
|
||||||
|
PALETTEENTRY palPalEntry[256];
|
||||||
|
|
||||||
// Implementation
|
// Implementation
|
||||||
protected:
|
protected:
|
||||||
|
@ -120,14 +120,14 @@ int GetHookStatus(DXWNDSTATUS *s)
|
|||||||
return HookStatus;
|
return HookStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetHookStatus(DXWNDSTATUS *s)
|
DXWNDSTATUS *GetHookInfo()
|
||||||
{
|
{
|
||||||
*pStatus=*s;
|
return pStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
int GetTimeShift()
|
void SetFPS(int fps)
|
||||||
{
|
{
|
||||||
return pStatus->iTimeShift;
|
pStatus->FPSCount=fps;
|
||||||
}
|
}
|
||||||
|
|
||||||
LRESULT CALLBACK HookProc(int ncode, WPARAM wparam, LPARAM lparam)
|
LRESULT CALLBACK HookProc(int ncode, WPARAM wparam, LPARAM lparam)
|
||||||
@ -171,7 +171,7 @@ LRESULT CALLBACK HookProc(int ncode, WPARAM wparam, LPARAM lparam)
|
|||||||
pStatus->IsFullScreen=FALSE;
|
pStatus->IsFullScreen=FALSE;
|
||||||
pStatus->hWnd=hwnd;
|
pStatus->hWnd=hwnd;
|
||||||
pStatus->dwPid=GetProcessId(GetCurrentProcess());
|
pStatus->dwPid=GetProcessId(GetCurrentProcess());
|
||||||
pStatus->iTimeShift=pMapping[i].InitTS;
|
pStatus->TimeShift=pMapping[i].InitTS;
|
||||||
DxWndStatus = *pStatus;
|
DxWndStatus = *pStatus;
|
||||||
HookInit(&pMapping[i], hwnd);
|
HookInit(&pMapping[i], hwnd);
|
||||||
}
|
}
|
||||||
|
@ -5,4 +5,4 @@ EXPORTS
|
|||||||
EndHook @3
|
EndHook @3
|
||||||
GetDllVersion @4
|
GetDllVersion @4
|
||||||
GetHookStatus @5
|
GetHookStatus @5
|
||||||
SetHookStatus @6
|
GetHookInfo @6
|
||||||
|
Binary file not shown.
103
dll/glhook.cpp
103
dll/glhook.cpp
@ -2,45 +2,10 @@
|
|||||||
#include "dxwcore.hpp"
|
#include "dxwcore.hpp"
|
||||||
#include "syslibs.h"
|
#include "syslibs.h"
|
||||||
#include "dxhook.h"
|
#include "dxhook.h"
|
||||||
|
|
||||||
|
#define DXWDECLARATIONS TRUE
|
||||||
#include "glhook.h"
|
#include "glhook.h"
|
||||||
|
#undef DXWDECLARATIONS
|
||||||
glViewport_Type pglViewport;
|
|
||||||
glScissor_Type pglScissor;
|
|
||||||
glGetIntegerv_Type pglGetIntegerv;
|
|
||||||
|
|
||||||
void WINAPI extglViewport(GLint x, GLint y, GLsizei width, GLsizei height)
|
|
||||||
{
|
|
||||||
RECT client;
|
|
||||||
(*pGetClientRect)(dxw.GethWnd(), &client);
|
|
||||||
OutTraceD("glViewport: declared pos=(%d,%d) size=(%d,%d)\n", x, y, width, height);
|
|
||||||
if(IsDebug) OutTrace("glViewport: DEBUG win=(%d,%d) screen=(%d,%d)\n",
|
|
||||||
client.right, client.bottom, dxw.GetScreenWidth(), dxw.GetScreenHeight());
|
|
||||||
x = (x * (GLint)client.right) / (GLint)dxw.GetScreenWidth();
|
|
||||||
y = (y * (GLint)client.bottom) / (GLint)dxw.GetScreenHeight();
|
|
||||||
width = (width * (GLint)client.right) / (GLint)dxw.GetScreenWidth();
|
|
||||||
height = (height * (GLint)client.bottom) / (GLint)dxw.GetScreenHeight();
|
|
||||||
OutTraceD("glViewport: remapped pos=(%d,%d) size=(%d,%d)\n", x, y, width, height);
|
|
||||||
(*pglViewport)(x, y, width, height);
|
|
||||||
}
|
|
||||||
|
|
||||||
void WINAPI extglScissor(GLint x, GLint y, GLsizei width, GLsizei height)
|
|
||||||
{
|
|
||||||
RECT client;
|
|
||||||
(*pGetClientRect)(dxw.GethWnd(), &client);
|
|
||||||
OutTraceD("glScissor: declared pos=(%d,%d) size=(%d,%d)\n", x, y, width, height);
|
|
||||||
x = (x * (GLint)client.right) / (GLint)dxw.GetScreenWidth();
|
|
||||||
y = (y * (GLint)client.bottom) / (GLint)dxw.GetScreenHeight();
|
|
||||||
width = (width * (GLint)client.right) / (GLint)dxw.GetScreenWidth();
|
|
||||||
height = (height * (GLint)client.bottom) / (GLint)dxw.GetScreenHeight();
|
|
||||||
OutTraceD("glScissor: remapped pos=(%d,%d) size=(%d,%d)\n", x, y, width, height);
|
|
||||||
(*pglScissor)(x, y, width, height);
|
|
||||||
}
|
|
||||||
|
|
||||||
void WINAPI extglGetIntegerv(GLenum pname, GLint *params)
|
|
||||||
{
|
|
||||||
(*pglGetIntegerv)(pname, params);
|
|
||||||
OutTraceD("glGetIntegerv: pname=%d\n", pname);
|
|
||||||
}
|
|
||||||
|
|
||||||
FARPROC Remap_gl_ProcAddress(LPCSTR proc, HMODULE hModule)
|
FARPROC Remap_gl_ProcAddress(LPCSTR proc, HMODULE hModule)
|
||||||
{
|
{
|
||||||
@ -59,6 +24,12 @@ FARPROC Remap_gl_ProcAddress(LPCSTR proc, HMODULE hModule)
|
|||||||
OutTraceD("GetProcAddress: hooking proc=%s at addr=%x\n", ProcToString(proc), pglGetIntegerv);
|
OutTraceD("GetProcAddress: hooking proc=%s at addr=%x\n", ProcToString(proc), pglGetIntegerv);
|
||||||
return (FARPROC)extglGetIntegerv;
|
return (FARPROC)extglGetIntegerv;
|
||||||
}
|
}
|
||||||
|
if (!strcmp(proc,"glDrawBuffer")){
|
||||||
|
pglDrawBuffer=(glDrawBuffer_Type)(*pGetProcAddress)(hModule, proc);
|
||||||
|
OutTraceD("GetProcAddress: hooking proc=%s at addr=%x\n", ProcToString(proc), pglDrawBuffer);
|
||||||
|
return (FARPROC)extglDrawBuffer;
|
||||||
|
}
|
||||||
|
|
||||||
// NULL -> keep the original call address
|
// NULL -> keep the original call address
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -76,7 +47,63 @@ void HookOpenGLLibs(char *module, char *customlib)
|
|||||||
if(tmp) pglScissor = (glScissor_Type)tmp;
|
if(tmp) pglScissor = (glScissor_Type)tmp;
|
||||||
tmp = HookAPI(module, customlib, NULL, "glGetIntegerv", extglGetIntegerv);
|
tmp = HookAPI(module, customlib, NULL, "glGetIntegerv", extglGetIntegerv);
|
||||||
if(tmp) pglGetIntegerv = (glGetIntegerv_Type)tmp;
|
if(tmp) pglGetIntegerv = (glGetIntegerv_Type)tmp;
|
||||||
|
tmp = HookAPI(module, customlib, NULL, "glDrawBuffer", extglDrawBuffer);
|
||||||
|
if(tmp) pglDrawBuffer = (glDrawBuffer_Type)tmp;
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WINAPI extglViewport(GLint x, GLint y, GLsizei width, GLsizei height)
|
||||||
|
{
|
||||||
|
RECT client;
|
||||||
|
//if (dxw.dwFlags2 & HANDLEFPS) if(dxw.HandleFPS()) return;
|
||||||
|
(*pGetClientRect)(dxw.GethWnd(), &client);
|
||||||
|
OutTraceD("glViewport: declared pos=(%d,%d) size=(%d,%d)\n", x, y, width, height);
|
||||||
|
if(IsDebug) OutTrace("glViewport: DEBUG win=(%d,%d) screen=(%d,%d)\n",
|
||||||
|
client.right, client.bottom, dxw.GetScreenWidth(), dxw.GetScreenHeight());
|
||||||
|
x = (x * (GLint)client.right) / (GLint)dxw.GetScreenWidth();
|
||||||
|
y = (y * (GLint)client.bottom) / (GLint)dxw.GetScreenHeight();
|
||||||
|
width = (width * (GLint)client.right) / (GLint)dxw.GetScreenWidth();
|
||||||
|
height = (height * (GLint)client.bottom) / (GLint)dxw.GetScreenHeight();
|
||||||
|
OutTraceD("glViewport: remapped pos=(%d,%d) size=(%d,%d)\n", x, y, width, height);
|
||||||
|
(*pglViewport)(x, y, width, height);
|
||||||
|
}
|
||||||
|
|
||||||
|
void WINAPI extglScissor(GLint x, GLint y, GLsizei width, GLsizei height)
|
||||||
|
{
|
||||||
|
RECT client;
|
||||||
|
//if (dxw.dwFlags2 & HANDLEFPS) if(dxw.HandleFPS()) return;
|
||||||
|
(*pGetClientRect)(dxw.GethWnd(), &client);
|
||||||
|
OutTraceD("glScissor: declared pos=(%d,%d) size=(%d,%d)\n", x, y, width, height);
|
||||||
|
x = (x * (GLint)client.right) / (GLint)dxw.GetScreenWidth();
|
||||||
|
y = (y * (GLint)client.bottom) / (GLint)dxw.GetScreenHeight();
|
||||||
|
width = (width * (GLint)client.right) / (GLint)dxw.GetScreenWidth();
|
||||||
|
height = (height * (GLint)client.bottom) / (GLint)dxw.GetScreenHeight();
|
||||||
|
OutTraceD("glScissor: remapped pos=(%d,%d) size=(%d,%d)\n", x, y, width, height);
|
||||||
|
(*pglScissor)(x, y, width, height);
|
||||||
|
}
|
||||||
|
|
||||||
|
void WINAPI extglGetIntegerv(GLenum pname, GLint *params)
|
||||||
|
{
|
||||||
|
(*pglGetIntegerv)(pname, params);
|
||||||
|
OutTraceD("glGetIntegerv: pname=%d\n", pname);
|
||||||
|
}
|
||||||
|
|
||||||
|
void WINAPI extglDrawBuffer(GLenum mode)
|
||||||
|
{
|
||||||
|
if (IsDebug) OutTrace("glDrawBuffer: mode=%x\n", mode);
|
||||||
|
// handle FPS only to backbuffer updates (if stereo, on left backbuffer...)
|
||||||
|
// using the frontbuffer seems less reliable: Return to Castle Wolfenstein doesn't use it at all!
|
||||||
|
if (dxw.dwFlags2 & HANDLEFPS){
|
||||||
|
switch (mode){
|
||||||
|
//case GL_FRONT_LEFT:
|
||||||
|
case GL_BACK_LEFT:
|
||||||
|
//case GL_FRONT:
|
||||||
|
case GL_BACK:
|
||||||
|
case GL_LEFT:
|
||||||
|
case GL_FRONT_AND_BACK:
|
||||||
|
if(dxw.HandleFPS()) return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
(*pglDrawBuffer)(mode);
|
||||||
|
}
|
||||||
|
28
dll/glhook.h
28
dll/glhook.h
@ -6,11 +6,33 @@ extern void HookOpenGLLibs(char *, char *);
|
|||||||
typedef void (WINAPI *glViewport_Type)(GLint, GLint, GLsizei, GLsizei);
|
typedef void (WINAPI *glViewport_Type)(GLint, GLint, GLsizei, GLsizei);
|
||||||
typedef void (WINAPI *glScissor_Type)(GLint, GLint, GLsizei, GLsizei);
|
typedef void (WINAPI *glScissor_Type)(GLint, GLint, GLsizei, GLsizei);
|
||||||
typedef void (WINAPI *glGetIntegerv_Type)(GLenum, GLint *);
|
typedef void (WINAPI *glGetIntegerv_Type)(GLenum, GLint *);
|
||||||
|
typedef void (WINAPI *glFinish_Type)(void);
|
||||||
|
typedef void (WINAPI *glFlush_Type)(void);
|
||||||
|
typedef void (WINAPI *glDrawBuffer_Type)(GLenum);
|
||||||
|
|
||||||
extern void WINAPI extglViewport(GLint, GLint, GLsizei, GLsizei);
|
extern void WINAPI extglViewport(GLint, GLint, GLsizei, GLsizei);
|
||||||
extern void WINAPI extglScissor(GLint, GLint, GLsizei, GLsizei);
|
extern void WINAPI extglScissor(GLint, GLint, GLsizei, GLsizei);
|
||||||
extern void WINAPI extglGetIntegerv(GLenum, GLint *);
|
extern void WINAPI extglGetIntegerv(GLenum, GLint *);
|
||||||
|
extern void WINAPI extglFinish(void);
|
||||||
|
extern void WINAPI extglFlush(void);
|
||||||
|
extern void WINAPI extglDrawBuffer(GLenum);
|
||||||
|
|
||||||
extern glViewport_Type pglViewport;
|
#ifdef DXWDECLARATIONS
|
||||||
extern glScissor_Type pglScissor;
|
#undef DXWEXTERN
|
||||||
extern glGetIntegerv_Type pglGetIntegerv;
|
#undef DXWINITIALIZED
|
||||||
|
#define DXWEXTERN
|
||||||
|
#define DXWINITIALIZED = NULL
|
||||||
|
#else
|
||||||
|
#undef DXWEXTERN
|
||||||
|
#undef DXWINITIALIZED
|
||||||
|
#define DXWEXTERN extern
|
||||||
|
#define DXWINITIALIZED
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// GDI32.dll:
|
||||||
|
DXWEXTERN glViewport_Type pglViewport;
|
||||||
|
DXWEXTERN glScissor_Type pglScissor;
|
||||||
|
DXWEXTERN glGetIntegerv_Type pglGetIntegerv;
|
||||||
|
//DXWEXTERN glFinish_Type pglFinish;
|
||||||
|
//DXWEXTERN glFlush_Type pglFlush;
|
||||||
|
DXWEXTERN glDrawBuffer_Type pglDrawBuffer;
|
29
dll/hd3d.cpp
29
dll/hd3d.cpp
@ -11,6 +11,7 @@ typedef HRESULT (WINAPI *EnumAdapterModes8_Type)(void *, UINT, UINT, D3DDISPLAYM
|
|||||||
typedef HRESULT (WINAPI *EnumAdapterModes9_Type)(void *, UINT, D3DFORMAT ,UINT, D3DDISPLAYMODE *);
|
typedef HRESULT (WINAPI *EnumAdapterModes9_Type)(void *, UINT, D3DFORMAT ,UINT, D3DDISPLAYMODE *);
|
||||||
typedef HRESULT (WINAPI *GetAdapterDisplayMode_Type)(void *, UINT, D3DDISPLAYMODE *);
|
typedef HRESULT (WINAPI *GetAdapterDisplayMode_Type)(void *, UINT, D3DDISPLAYMODE *);
|
||||||
typedef HRESULT (WINAPI *GetDisplayMode_Type)(void *, D3DDISPLAYMODE *);
|
typedef HRESULT (WINAPI *GetDisplayMode_Type)(void *, D3DDISPLAYMODE *);
|
||||||
|
typedef HRESULT (WINAPI *Present_Type)(void *, CONST RECT *, CONST RECT *, HWND, CONST RGNDATA *);
|
||||||
|
|
||||||
void* WINAPI extDirect3DCreate8(UINT);
|
void* WINAPI extDirect3DCreate8(UINT);
|
||||||
void* WINAPI extDirect3DCreate9(UINT);
|
void* WINAPI extDirect3DCreate9(UINT);
|
||||||
@ -20,6 +21,7 @@ HRESULT WINAPI extEnumAdapterModes8(void *, UINT, UINT , D3DDISPLAYMODE *);
|
|||||||
HRESULT WINAPI extEnumAdapterModes9(void *, UINT, D3DFORMAT, UINT , D3DDISPLAYMODE *);
|
HRESULT WINAPI extEnumAdapterModes9(void *, UINT, D3DFORMAT, UINT , D3DDISPLAYMODE *);
|
||||||
HRESULT WINAPI extGetAdapterDisplayMode(void *, UINT, D3DDISPLAYMODE *);
|
HRESULT WINAPI extGetAdapterDisplayMode(void *, UINT, D3DDISPLAYMODE *);
|
||||||
HRESULT WINAPI extGetDisplayMode(void *, D3DDISPLAYMODE *);
|
HRESULT WINAPI extGetDisplayMode(void *, D3DDISPLAYMODE *);
|
||||||
|
HRESULT WINAPI extPresent(void *, CONST RECT *, CONST RECT *, HWND, CONST RGNDATA *);
|
||||||
|
|
||||||
extern char *ExplainDDError(DWORD);
|
extern char *ExplainDDError(DWORD);
|
||||||
|
|
||||||
@ -31,6 +33,8 @@ EnumAdapterModes8_Type pEnumAdapterModes8;
|
|||||||
EnumAdapterModes9_Type pEnumAdapterModes9;
|
EnumAdapterModes9_Type pEnumAdapterModes9;
|
||||||
GetAdapterDisplayMode_Type pGetAdapterDisplayMode;
|
GetAdapterDisplayMode_Type pGetAdapterDisplayMode;
|
||||||
GetDisplayMode_Type pGetDisplayMode;
|
GetDisplayMode_Type pGetDisplayMode;
|
||||||
|
Present_Type pPresent;
|
||||||
|
|
||||||
DWORD dwD3DVersion;
|
DWORD dwD3DVersion;
|
||||||
|
|
||||||
int HookDirect3D(char *module, int version){
|
int HookDirect3D(char *module, int version){
|
||||||
@ -123,6 +127,15 @@ HRESULT WINAPI extReset(void *pd3dd, D3DPRESENT_PARAMETERS* pPresentationParamet
|
|||||||
return D3D_OK;
|
return D3D_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HRESULT WINAPI extPresent(void *pd3dd, CONST RECT *pSourceRect, CONST RECT *pDestRect, HWND hDestWindowOverride, CONST RGNDATA *pDirtyRegion)
|
||||||
|
{
|
||||||
|
if (IsDebug) OutTrace("Present\n");
|
||||||
|
// frame counter handling....
|
||||||
|
if (dxw.HandleFPS()) return D3D_OK;
|
||||||
|
// proxy ....
|
||||||
|
return (*pPresent)(pd3dd, pSourceRect, pDestRect, hDestWindowOverride, pDirtyRegion);
|
||||||
|
}
|
||||||
|
|
||||||
HRESULT WINAPI extGetDisplayMode(void *lpd3d, D3DDISPLAYMODE *pMode)
|
HRESULT WINAPI extGetDisplayMode(void *lpd3d, D3DDISPLAYMODE *pMode)
|
||||||
{
|
{
|
||||||
HRESULT res;
|
HRESULT res;
|
||||||
@ -243,21 +256,25 @@ HRESULT WINAPI extCreateDevice(void *lpd3d, UINT adapter, D3DDEVTYPE devicetype,
|
|||||||
pReset=NULL; // to avoid assert condition
|
pReset=NULL; // to avoid assert condition
|
||||||
SetHook((void *)(*(DWORD *)lpd3d + 32), extGetDisplayMode, (void **)&pGetDisplayMode, "GetDisplayMode(D8)");
|
SetHook((void *)(*(DWORD *)lpd3d + 32), extGetDisplayMode, (void **)&pGetDisplayMode, "GetDisplayMode(D8)");
|
||||||
SetHook((void *)(**(DWORD **)ppd3dd + 56), extReset, (void **)&pReset, "Reset(D8)");
|
SetHook((void *)(**(DWORD **)ppd3dd + 56), extReset, (void **)&pReset, "Reset(D8)");
|
||||||
|
SetHook((void *)(**(DWORD **)ppd3dd + 60), extPresent, (void **)&pPresent, "Present(D8)");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
void *pReset;
|
void *pReset;
|
||||||
pReset=NULL; // to avoid assert condition
|
pReset=NULL; // to avoid assert condition
|
||||||
SetHook((void *)(*(DWORD *)lpd3d + 32), extGetDisplayMode, (void **)&pGetDisplayMode, "GetDisplayMode(D9)");
|
SetHook((void *)(*(DWORD *)lpd3d + 32), extGetDisplayMode, (void **)&pGetDisplayMode, "GetDisplayMode(D9)");
|
||||||
SetHook((void *)(**(DWORD **)ppd3dd + 64), extReset, (void **)&pReset, "Reset(D9)");
|
SetHook((void *)(**(DWORD **)ppd3dd + 64), extReset, (void **)&pReset, "Reset(D9)");
|
||||||
|
SetHook((void *)(**(DWORD **)ppd3dd + 68), extPresent, (void **)&pPresent, "Present(D9)");
|
||||||
}
|
}
|
||||||
|
|
||||||
DxWndStatus.IsFullScreen = dxw.IsFullScreen();
|
GetHookInfo()->IsFullScreen = dxw.IsFullScreen();
|
||||||
DxWndStatus.DXVersion=(short)dwD3DVersion;
|
GetHookInfo()->DXVersion=(short)dwD3DVersion;
|
||||||
DxWndStatus.Height=(short)dxw.GetScreenHeight();
|
GetHookInfo()->Height=(short)dxw.GetScreenHeight();
|
||||||
DxWndStatus.Width=(short)dxw.GetScreenWidth();
|
GetHookInfo()->Width=(short)dxw.GetScreenWidth();
|
||||||
DxWndStatus.ColorDepth=(short)dxw.VirtualPixelFormat.dwRGBBitCount;
|
GetHookInfo()->ColorDepth=(short)dxw.VirtualPixelFormat.dwRGBBitCount;
|
||||||
SetHookStatus(&DxWndStatus);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// to do:
|
||||||
|
// hook IDirect3DDevice9::CreateAdditionalSwapChain to intercept Present method on further Swap Chains
|
||||||
|
// hook SetCursorPosition ShowCursor to handle cursor
|
||||||
|
@ -398,12 +398,11 @@ void InitScreenParameters()
|
|||||||
// set default VGA mode 800x600
|
// set default VGA mode 800x600
|
||||||
// should I make it configurable ? (640x480, 800x600, 1024x768)
|
// should I make it configurable ? (640x480, 800x600, 1024x768)
|
||||||
dxw.SetScreenSize(); // 800 x 600 by default
|
dxw.SetScreenSize(); // 800 x 600 by default
|
||||||
DxWndStatus.Height=(short)dxw.GetScreenHeight();
|
GetHookInfo()->Height=(short)dxw.GetScreenHeight();
|
||||||
DxWndStatus.Width=(short)dxw.GetScreenWidth();
|
GetHookInfo()->Width=(short)dxw.GetScreenWidth();
|
||||||
DxWndStatus.ColorDepth=0; // unknown
|
GetHookInfo()->ColorDepth=0; // unknown
|
||||||
DxWndStatus.DXVersion=0; // unknown
|
GetHookInfo()->DXVersion=0; // unknown
|
||||||
DxWndStatus.isLogging=(dxw.dwTFlags & OUTTRACE);
|
GetHookInfo()->isLogging=(dxw.dwTFlags & OUTTRACE);
|
||||||
SetHookStatus(&DxWndStatus);
|
|
||||||
|
|
||||||
if(!EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &CurrDevMode)){
|
if(!EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &CurrDevMode)){
|
||||||
OutTraceE("EnumDisplaySettings: ERROR err=%d at %d\n", GetLastError(), __LINE__);
|
OutTraceE("EnumDisplaySettings: ERROR err=%d at %d\n", GetLastError(), __LINE__);
|
||||||
@ -679,7 +678,7 @@ void do_slow(int delay)
|
|||||||
TranslateMessage (&uMsg);
|
TranslateMessage (&uMsg);
|
||||||
DispatchMessage (&uMsg);
|
DispatchMessage (&uMsg);
|
||||||
}
|
}
|
||||||
Sleep(1);
|
(*pSleep)(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1492,9 +1491,8 @@ HRESULT WINAPI extSetDisplayMode(int version, LPDIRECTDRAW lpdd,
|
|||||||
}
|
}
|
||||||
|
|
||||||
dxw.SetScreenSize(dwwidth, dwheight);
|
dxw.SetScreenSize(dwwidth, dwheight);
|
||||||
DxWndStatus.Height=(short)dxw.GetScreenHeight();
|
GetHookInfo()->Height=(short)dxw.GetScreenHeight();
|
||||||
DxWndStatus.Width=(short)dxw.GetScreenWidth();
|
GetHookInfo()->Width=(short)dxw.GetScreenWidth();
|
||||||
SetHookStatus(&DxWndStatus);
|
|
||||||
AdjustWindowFrame(dxw.GethWnd(), dwwidth, dwheight);
|
AdjustWindowFrame(dxw.GethWnd(), dwwidth, dwheight);
|
||||||
|
|
||||||
if(dxw.dwFlags1 & EMULATESURFACE){
|
if(dxw.dwFlags1 & EMULATESURFACE){
|
||||||
@ -1632,8 +1630,7 @@ HRESULT WINAPI extSetCooperativeLevel(void *lpdd, HWND hwnd, DWORD dwflags)
|
|||||||
if(res)
|
if(res)
|
||||||
OutTraceE("SetCooperativeLevel: ERROR err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
|
OutTraceE("SetCooperativeLevel: ERROR err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
|
||||||
|
|
||||||
DxWndStatus.IsFullScreen=dxw.IsFullScreen();
|
GetHookInfo()->IsFullScreen=dxw.IsFullScreen();
|
||||||
SetHookStatus(&DxWndStatus);
|
|
||||||
|
|
||||||
// WARN: GP500 was setting cooperative level against the desktop! This can be partially
|
// WARN: GP500 was setting cooperative level against the desktop! This can be partially
|
||||||
// intercepted by hooking the GetDesktopWindow() call, but in windowed mode this can't be
|
// intercepted by hooking the GetDesktopWindow() call, but in windowed mode this can't be
|
||||||
@ -1646,9 +1643,6 @@ HRESULT WINAPI extSetCooperativeLevel(void *lpdd, HWND hwnd, DWORD dwflags)
|
|||||||
else
|
else
|
||||||
dxw.SethWnd(hwnd); // save the good one
|
dxw.SethWnd(hwnd); // save the good one
|
||||||
}
|
}
|
||||||
|
|
||||||
DxWndStatus.IsFullScreen=dxw.IsFullScreen();
|
|
||||||
SetHookStatus(&DxWndStatus);
|
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
@ -1676,11 +1670,10 @@ HRESULT WINAPI extCreateSurfaceEmu(int dxversion, CreateSurface_Type pCreateSurf
|
|||||||
ddsd.dwSize = CurSize;
|
ddsd.dwSize = CurSize;
|
||||||
|
|
||||||
if(ddsd.dwFlags & DDSD_CAPS && ddsd.ddsCaps.dwCaps & DDSCAPS_PRIMARYSURFACE){
|
if(ddsd.dwFlags & DDSD_CAPS && ddsd.ddsCaps.dwCaps & DDSCAPS_PRIMARYSURFACE){
|
||||||
DxWndStatus.Height=(short)dxw.GetScreenHeight();
|
GetHookInfo()->Height=(short)dxw.GetScreenHeight();
|
||||||
DxWndStatus.Width=(short)dxw.GetScreenWidth();
|
GetHookInfo()->Width=(short)dxw.GetScreenWidth();
|
||||||
DxWndStatus.ColorDepth=(short)dxw.VirtualPixelFormat.dwRGBBitCount;
|
GetHookInfo()->ColorDepth=(short)dxw.VirtualPixelFormat.dwRGBBitCount;
|
||||||
DxWndStatus.DXVersion=dxversion;
|
GetHookInfo()->DXVersion=dxversion;
|
||||||
SetHookStatus(&DxWndStatus);
|
|
||||||
lpServiceDD = lpdd; // v2.1.87
|
lpServiceDD = lpdd; // v2.1.87
|
||||||
|
|
||||||
dxw.dwPrimarySurfaceCaps = ddsd.ddsCaps.dwCaps;
|
dxw.dwPrimarySurfaceCaps = ddsd.ddsCaps.dwCaps;
|
||||||
@ -1875,10 +1868,8 @@ HRESULT WINAPI extCreateSurfaceEmu(int dxversion, CreateSurface_Type pCreateSurf
|
|||||||
if(ddsd.ddpfPixelFormat.dwRGBBitCount==8){ // use a better condition here....
|
if(ddsd.ddpfPixelFormat.dwRGBBitCount==8){ // use a better condition here....
|
||||||
if(lpDDP==NULL){
|
if(lpDDP==NULL){
|
||||||
// should link here to the GDI palette? See Hyperblade....
|
// should link here to the GDI palette? See Hyperblade....
|
||||||
//static PALETTEENTRY Palette[256];
|
dxw.palNumEntries=256;
|
||||||
extern PALETTEENTRY *GDIPalette;
|
res=(*pCreatePalette)(lpdd, DDPCAPS_ALLOW256|DDPCAPS_8BIT|DDPCAPS_INITIALIZE, dxw.palPalEntry, &lpDDP, NULL);
|
||||||
//res=(*pCreatePalette)(lpdd, DDPCAPS_ALLOW256|DDPCAPS_8BIT|DDPCAPS_INITIALIZE, Palette, &lpDDP, NULL);
|
|
||||||
res=(*pCreatePalette)(lpdd, DDPCAPS_ALLOW256|DDPCAPS_8BIT|DDPCAPS_INITIALIZE, GDIPalette, &lpDDP, NULL);
|
|
||||||
if (res) {
|
if (res) {
|
||||||
OutTraceE("CreateSurface: CreatePalette ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
|
OutTraceE("CreateSurface: CreatePalette ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
|
||||||
return res;
|
return res;
|
||||||
@ -1914,11 +1905,10 @@ HRESULT WINAPI extCreateSurfaceDir(int dxversion, CreateSurface_Type pCreateSurf
|
|||||||
ddsd.dwSize = dwSize;
|
ddsd.dwSize = dwSize;
|
||||||
|
|
||||||
if(ddsd.dwFlags & DDSD_CAPS && ddsd.ddsCaps.dwCaps & DDSCAPS_PRIMARYSURFACE){
|
if(ddsd.dwFlags & DDSD_CAPS && ddsd.ddsCaps.dwCaps & DDSCAPS_PRIMARYSURFACE){
|
||||||
DxWndStatus.Height=(short)dxw.GetScreenHeight();
|
GetHookInfo()->Height=(short)dxw.GetScreenHeight();
|
||||||
DxWndStatus.Width=(short)dxw.GetScreenWidth();
|
GetHookInfo()->Width=(short)dxw.GetScreenWidth();
|
||||||
DxWndStatus.ColorDepth=(short)dxw.VirtualPixelFormat.dwRGBBitCount;
|
GetHookInfo()->ColorDepth=(short)dxw.VirtualPixelFormat.dwRGBBitCount;
|
||||||
DxWndStatus.DXVersion=dxversion;
|
GetHookInfo()->DXVersion=dxversion;
|
||||||
SetHookStatus(&DxWndStatus);
|
|
||||||
dxw.dwPrimarySurfaceCaps = ddsd.ddsCaps.dwCaps;
|
dxw.dwPrimarySurfaceCaps = ddsd.ddsCaps.dwCaps;
|
||||||
dxw.dwBackBufferCount = (ddsd.dwFlags & DDSD_BACKBUFFERCOUNT) ? ddsd.dwBackBufferCount : 0;
|
dxw.dwBackBufferCount = (ddsd.dwFlags & DDSD_BACKBUFFERCOUNT) ? ddsd.dwBackBufferCount : 0;
|
||||||
lpServiceDD = lpdd; // v2.1.87
|
lpServiceDD = lpdd; // v2.1.87
|
||||||
@ -2446,7 +2436,7 @@ HRESULT WINAPI sBlt(char *api, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect,
|
|||||||
work on my PC.
|
work on my PC.
|
||||||
*/
|
*/
|
||||||
if(res==DDERR_UNSUPPORTED){
|
if(res==DDERR_UNSUPPORTED){
|
||||||
if (dxw.dwFlags2 & SHOWFPS) dxw.ShowFPS(lpddssrc);
|
if (dxw.dwFlags2 & SHOWFPSOVERLAY) dxw.ShowFPS(lpddssrc);
|
||||||
res=(*pBlt)(lpDDSEmu_Prim, &destrect, lpddssrc, lpsrcrect, dwflags, lpddbltfx);
|
res=(*pBlt)(lpDDSEmu_Prim, &destrect, lpddssrc, lpsrcrect, dwflags, lpddbltfx);
|
||||||
if (res) BlitError(res, lpsrcrect, &destrect, __LINE__);
|
if (res) BlitError(res, lpsrcrect, &destrect, __LINE__);
|
||||||
}
|
}
|
||||||
@ -2481,7 +2471,7 @@ HRESULT WINAPI sBlt(char *api, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect,
|
|||||||
lpDDSSource = lpdds;
|
lpDDSSource = lpdds;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dxw.dwFlags2 & SHOWFPS) dxw.ShowFPS(lpDDSSource);
|
if (dxw.dwFlags2 & SHOWFPSOVERLAY) dxw.ShowFPS(lpDDSSource);
|
||||||
res=(*pBlt)(lpDDSEmu_Prim, &destrect, lpDDSSource, &emurect, DDBLT_WAIT, 0);
|
res=(*pBlt)(lpDDSEmu_Prim, &destrect, lpDDSSource, &emurect, DDBLT_WAIT, 0);
|
||||||
if (res==DDERR_NOCLIPLIST){
|
if (res==DDERR_NOCLIPLIST){
|
||||||
RenewClipper(lpDD, lpDDSEmu_Prim);
|
RenewClipper(lpDD, lpDDSEmu_Prim);
|
||||||
@ -2677,7 +2667,7 @@ HRESULT WINAPI extWaitForVerticalBlank(LPDIRECTDRAW lpdd, DWORD dwflags, HANDLE
|
|||||||
if(!(dxw.dwFlags1 & SAVELOAD)) return (*pWaitForVerticalBlank)(lpdd, dwflags, hevent);
|
if(!(dxw.dwFlags1 & SAVELOAD)) return (*pWaitForVerticalBlank)(lpdd, dwflags, hevent);
|
||||||
tmp = GetTickCount();
|
tmp = GetTickCount();
|
||||||
if((time - tmp) > 32) time = tmp;
|
if((time - tmp) > 32) time = tmp;
|
||||||
Sleep(time - tmp);
|
(*pSleep)(time - tmp);
|
||||||
if(step) time += 16;
|
if(step) time += 16;
|
||||||
else time += 17;
|
else time += 17;
|
||||||
step ^= 1;
|
step ^= 1;
|
||||||
@ -2900,7 +2890,7 @@ HRESULT WINAPI extUnlock(int dxversion, Unlock4_Type pUnlock, LPDIRECTDRAWSURFAC
|
|||||||
lpDDSSource=lpdds;
|
lpDDSSource=lpdds;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dxw.dwFlags2 & SHOWFPS) dxw.ShowFPS(lpDDSSource);
|
if (dxw.dwFlags2 & SHOWFPSOVERLAY) dxw.ShowFPS(lpDDSSource);
|
||||||
res=(*pBlt)(lpDDSEmu_Prim, &screen, lpDDSSource, &rect, DDBLT_WAIT, 0);
|
res=(*pBlt)(lpDDSEmu_Prim, &screen, lpDDSSource, &rect, DDBLT_WAIT, 0);
|
||||||
if (res==DDERR_NOCLIPLIST) {
|
if (res==DDERR_NOCLIPLIST) {
|
||||||
RenewClipper(lpDD, lpDDSEmu_Prim);
|
RenewClipper(lpDD, lpDDSEmu_Prim);
|
||||||
|
@ -1825,6 +1825,7 @@ BOOL WINAPI extGDIBitBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nH
|
|||||||
nWDest= nWidth;
|
nWDest= nWidth;
|
||||||
nHDest= nHeight;
|
nHDest= nHeight;
|
||||||
dxw.MapRect(&nXDest, &nYDest, &nWDest, &nHDest);
|
dxw.MapRect(&nXDest, &nYDest, &nWDest, &nHDest);
|
||||||
|
if (dxw.dwFlags2 & SHOWFPSOVERLAY) dxw.ShowFPS(hdcDest);
|
||||||
res=(*pGDIStretchBlt)(hdcDest, nXDest, nYDest, nWDest, nHDest, hdcSrc, nXSrc, nYSrc, nWidth, nHeight, dwRop);
|
res=(*pGDIStretchBlt)(hdcDest, nXDest, nYDest, nWDest, nHDest, hdcSrc, nXSrc, nYSrc, nWidth, nHeight, dwRop);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -1847,6 +1848,7 @@ BOOL WINAPI extGDIPatBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nH
|
|||||||
if (dxw.IsFullScreen() && (OBJ_DC == GetObjectType(hdcDest))){
|
if (dxw.IsFullScreen() && (OBJ_DC == GetObjectType(hdcDest))){
|
||||||
int nWDest, nHDest;
|
int nWDest, nHDest;
|
||||||
dxw.MapRect(&nXDest, &nYDest, &nWDest, &nHDest);
|
dxw.MapRect(&nXDest, &nYDest, &nWDest, &nHDest);
|
||||||
|
if (dxw.dwFlags2 & SHOWFPSOVERLAY) dxw.ShowFPS(hdcDest);
|
||||||
res=(*pGDIPatBlt)(hdcDest, nXDest, nYDest, nWDest, nHDest, dwRop);
|
res=(*pGDIPatBlt)(hdcDest, nXDest, nYDest, nWDest, nHDest, dwRop);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -1869,6 +1871,7 @@ BOOL WINAPI extGDIStretchBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, in
|
|||||||
|
|
||||||
// to do: what happend if StretchBlt is applied on screen DC ?
|
// to do: what happend if StretchBlt is applied on screen DC ?
|
||||||
|
|
||||||
|
if (dxw.dwFlags2 & SHOWFPSOVERLAY) dxw.ShowFPS(hdcDest);
|
||||||
res=(*pGDIStretchBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, nWSrc, nHSrc, dwRop);
|
res=(*pGDIStretchBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, nWSrc, nHSrc, dwRop);
|
||||||
if(!res) OutTraceE("GDI.StretchBlt: ERROR err=%d at %d\n", GetLastError(), __LINE__);
|
if(!res) OutTraceE("GDI.StretchBlt: ERROR err=%d at %d\n", GetLastError(), __LINE__);
|
||||||
return res;
|
return res;
|
||||||
@ -1888,7 +1891,7 @@ static DWORD dwThrdId;
|
|||||||
void AutoRefresh(HDC hdc)
|
void AutoRefresh(HDC hdc)
|
||||||
{
|
{
|
||||||
while(1){
|
while(1){
|
||||||
Sleep(10);
|
(*pSleep)(10);
|
||||||
(*pInvalidateRect)(dxw.GethWnd(), 0, FALSE);
|
(*pInvalidateRect)(dxw.GethWnd(), 0, FALSE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2257,17 +2260,6 @@ BOOL WINAPI extInvalidateRect(HWND hwnd, RECT *lpRect, BOOL bErase)
|
|||||||
// maps the GDI palette to the buffered DirectDraw one. This fixes the screen
|
// maps the GDI palette to the buffered DirectDraw one. This fixes the screen
|
||||||
// output for "Dementia" (a.k.a. "Armed & Delirious").
|
// output for "Dementia" (a.k.a. "Armed & Delirious").
|
||||||
|
|
||||||
typedef struct tagDxWndLOGPALETTE
|
|
||||||
{
|
|
||||||
WORD palVersion;
|
|
||||||
WORD palNumEntries;
|
|
||||||
PALETTEENTRY palPalEntry[ 256 ];
|
|
||||||
} DxWndLOGPALETTE;
|
|
||||||
|
|
||||||
DxWndLOGPALETTE MyPal;
|
|
||||||
PALETTEENTRY *GDIPalette = MyPal.palPalEntry;
|
|
||||||
//BOOL G_bForceBackground;
|
|
||||||
|
|
||||||
HPALETTE WINAPI extGDICreatePalette(CONST LOGPALETTE *plpal)
|
HPALETTE WINAPI extGDICreatePalette(CONST LOGPALETTE *plpal)
|
||||||
{
|
{
|
||||||
HPALETTE ret;
|
HPALETTE ret;
|
||||||
@ -2277,14 +2269,14 @@ HPALETTE WINAPI extGDICreatePalette(CONST LOGPALETTE *plpal)
|
|||||||
OutTraceD("GDI.CreatePalette: plpal=%x version=%x NumEntries=%x\n", plpal, plpal->palVersion, plpal->palNumEntries);
|
OutTraceD("GDI.CreatePalette: plpal=%x version=%x NumEntries=%x\n", plpal, plpal->palVersion, plpal->palNumEntries);
|
||||||
ret=(*pGDICreatePalette)(plpal);
|
ret=(*pGDICreatePalette)(plpal);
|
||||||
if(IsDebug){
|
if(IsDebug){
|
||||||
OutTraceD("PalEntry[%x]= ", MyPal.palNumEntries);
|
OutTraceD("PalEntry[%x]= ", plpal->palNumEntries);
|
||||||
for(idx=0; idx<MyPal.palNumEntries; idx++) OutTraceD("(%x)", plpal->palPalEntry[idx]);
|
for(idx=0; idx<plpal->palNumEntries; idx++) OutTraceD("(%x)", plpal->palPalEntry[idx]);
|
||||||
OutTraceD("\n");
|
OutTraceD("\n");
|
||||||
}
|
}
|
||||||
MyPal.palVersion=plpal->palVersion;
|
dxw.palVersion=plpal->palVersion;
|
||||||
MyPal.palNumEntries=plpal->palNumEntries;
|
dxw.palNumEntries=plpal->palNumEntries;
|
||||||
if(MyPal.palNumEntries>256) MyPal.palNumEntries=256;
|
if(dxw.palNumEntries>256) dxw.palNumEntries=256;
|
||||||
for(idx=0; idx<MyPal.palNumEntries; idx++) MyPal.palPalEntry[idx]=plpal->palPalEntry[idx];
|
for(idx=0; idx<dxw.palNumEntries; idx++) dxw.palPalEntry[idx]=plpal->palPalEntry[idx];
|
||||||
OutTraceD("GDI.CreatePalette: hPalette=%x\n", ret);
|
OutTraceD("GDI.CreatePalette: hPalette=%x\n", ret);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -2314,12 +2306,12 @@ UINT WINAPI extRealizePalette(HDC hdc)
|
|||||||
// should be cleaned up a little....
|
// should be cleaned up a little....
|
||||||
// maybe not: now both Diablo & Dementia colors are working...
|
// maybe not: now both Diablo & Dementia colors are working...
|
||||||
if(dxw.dwFlags1 & EMULATESURFACE)
|
if(dxw.dwFlags1 & EMULATESURFACE)
|
||||||
mySetPalette(0, MyPal.palNumEntries, MyPal.palPalEntry);
|
mySetPalette(0, dxw.palNumEntries, dxw.palPalEntry);
|
||||||
// DEBUGGING
|
// DEBUGGING
|
||||||
if(IsDebug){
|
if(IsDebug){
|
||||||
int idx;
|
int idx;
|
||||||
OutTraceD("PaletteEntries[%x]= ", MyPal.palNumEntries);
|
OutTraceD("PaletteEntries[%x]= ", dxw.palNumEntries);
|
||||||
for(idx=0; idx<MyPal.palNumEntries; idx++) OutTraceD("(%x)", PaletteEntries[idx]);
|
for(idx=0; idx<dxw.palNumEntries; idx++) OutTraceD("(%x)", PaletteEntries[idx]);
|
||||||
OutTraceD("\n");
|
OutTraceD("\n");
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
@ -2512,7 +2504,7 @@ DWORD WINAPI extGetTickCount(void)
|
|||||||
void WINAPI extGetSystemTime(LPSYSTEMTIME lpSystemTime)
|
void WINAPI extGetSystemTime(LPSYSTEMTIME lpSystemTime)
|
||||||
{
|
{
|
||||||
dxw.GetSystemTime(lpSystemTime);
|
dxw.GetSystemTime(lpSystemTime);
|
||||||
OutTrace("GetSystemTime: %02d:%02d:%02d.%03d\n",
|
if (IsDebug) OutTrace("GetSystemTime: %02d:%02d:%02d.%03d\n",
|
||||||
lpSystemTime->wHour, lpSystemTime->wMinute, lpSystemTime->wSecond, lpSystemTime->wMilliseconds);
|
lpSystemTime->wHour, lpSystemTime->wMinute, lpSystemTime->wSecond, lpSystemTime->wMilliseconds);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2522,7 +2514,7 @@ void WINAPI extGetLocalTime(LPSYSTEMTIME lpLocalTime)
|
|||||||
SYSTEMTIME SystemTime;
|
SYSTEMTIME SystemTime;
|
||||||
dxw.GetSystemTime(&SystemTime);
|
dxw.GetSystemTime(&SystemTime);
|
||||||
SystemTimeToTzSpecificLocalTime(NULL, &SystemTime, lpLocalTime);
|
SystemTimeToTzSpecificLocalTime(NULL, &SystemTime, lpLocalTime);
|
||||||
OutTrace("GetLocalTime: %02d:%02d:%02d.%03d\n",
|
if (IsDebug) OutTrace("GetLocalTime: %02d:%02d:%02d.%03d\n",
|
||||||
lpLocalTime->wHour, lpLocalTime->wMinute, lpLocalTime->wSecond, lpLocalTime->wMilliseconds);
|
lpLocalTime->wHour, lpLocalTime->wMinute, lpLocalTime->wSecond, lpLocalTime->wMilliseconds);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2533,7 +2525,7 @@ UINT_PTR WINAPI extSetTimer(HWND hWnd, UINT_PTR nIDEvent, UINT uElapse, TIMERPRO
|
|||||||
// and the lesser the pauses must be lasting! Shift operations are reverted in
|
// and the lesser the pauses must be lasting! Shift operations are reverted in
|
||||||
// GetSystemTime vs. Sleep or SetTimer
|
// GetSystemTime vs. Sleep or SetTimer
|
||||||
uShiftedElapse = dxw.StretchTime(uElapse);
|
uShiftedElapse = dxw.StretchTime(uElapse);
|
||||||
OutTrace("SetTimer: elapse=%d->%d timeshift=%d\n", uElapse, uShiftedElapse, dxw.TimeShift);
|
if (IsDebug) OutTrace("SetTimer: elapse=%d->%d timeshift=%d\n", uElapse, uShiftedElapse, dxw.TimeShift);
|
||||||
return (*pSetTimer)(hWnd, nIDEvent, uShiftedElapse, lpTimerFunc);
|
return (*pSetTimer)(hWnd, nIDEvent, uShiftedElapse, lpTimerFunc);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2548,7 +2540,7 @@ VOID WINAPI extSleep(DWORD dwMilliseconds)
|
|||||||
else dwNewDelay = INFINITE-1; // maximum allowed !!!
|
else dwNewDelay = INFINITE-1; // maximum allowed !!!
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
OutTrace("Sleep: msec=%d->%d timeshift=%d\n", dwMilliseconds, dwNewDelay, dxw.TimeShift);
|
if (IsDebug) OutTrace("Sleep: msec=%d->%d timeshift=%d\n", dwMilliseconds, dwNewDelay, dxw.TimeShift);
|
||||||
(*pSleep)(dwNewDelay);
|
(*pSleep)(dwNewDelay);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2563,16 +2555,22 @@ DWORD WINAPI extSleepEx(DWORD dwMilliseconds, BOOL bAlertable)
|
|||||||
else dwNewDelay = INFINITE-1; // maximum allowed !!!
|
else dwNewDelay = INFINITE-1; // maximum allowed !!!
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
OutTrace("SleepEx: msec=%d->%d alertable=%x, timeshift=%d\n", dwMilliseconds, dwNewDelay, bAlertable, dxw.TimeShift);
|
if (IsDebug) OutTrace("SleepEx: msec=%d->%d alertable=%x, timeshift=%d\n", dwMilliseconds, dwNewDelay, bAlertable, dxw.TimeShift);
|
||||||
return (*pSleepEx)(dwNewDelay, bAlertable);
|
return (*pSleepEx)(dwNewDelay, bAlertable);
|
||||||
}
|
}
|
||||||
|
|
||||||
DWORD WINAPI exttimeGetTime(void)
|
DWORD WINAPI exttimeGetTime(void)
|
||||||
{
|
{
|
||||||
OutTrace("timeGetTime\n");
|
if (IsDebug) OutTrace("timeGetTime\n");
|
||||||
return dxw.GetTickCount();
|
return dxw.GetTickCount();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WINAPI extGetSystemTimeAsFileTime(LPFILETIME lpSystemTimeAsFileTime)
|
||||||
|
{
|
||||||
|
if (IsDebug) OutTrace("GetSystemTimeAsFileTime\n");
|
||||||
|
dxw.GetSystemTimeAsFileTime(lpSystemTimeAsFileTime);
|
||||||
|
}
|
||||||
|
|
||||||
int WINAPI extShowCursor(BOOL bShow)
|
int WINAPI extShowCursor(BOOL bShow)
|
||||||
{
|
{
|
||||||
static int iFakeCounter;
|
static int iFakeCounter;
|
||||||
|
@ -43,6 +43,7 @@ typedef BOOL (WINAPI *GetDiskFreeSpaceA_Type)(LPCSTR, LPDWORD, LPDWORD, LPDWORD,
|
|||||||
typedef void (WINAPI *GetLocalTime_Type)(LPSYSTEMTIME);
|
typedef void (WINAPI *GetLocalTime_Type)(LPSYSTEMTIME);
|
||||||
typedef FARPROC (WINAPI *GetProcAddress_Type)(HMODULE, LPCSTR);
|
typedef FARPROC (WINAPI *GetProcAddress_Type)(HMODULE, LPCSTR);
|
||||||
typedef void (WINAPI *GetSystemTime_Type)(LPSYSTEMTIME);
|
typedef void (WINAPI *GetSystemTime_Type)(LPSYSTEMTIME);
|
||||||
|
typedef void (WINAPI *GetSystemTimeAsFileTime_Type)(LPFILETIME);
|
||||||
typedef DWORD (WINAPI *GetTickCount_Type)(void);
|
typedef DWORD (WINAPI *GetTickCount_Type)(void);
|
||||||
typedef HMODULE (WINAPI *LoadLibraryA_Type)(LPCTSTR);
|
typedef HMODULE (WINAPI *LoadLibraryA_Type)(LPCTSTR);
|
||||||
typedef HMODULE (WINAPI *LoadLibraryExA_Type)(LPCTSTR, HANDLE, DWORD);
|
typedef HMODULE (WINAPI *LoadLibraryExA_Type)(LPCTSTR, HANDLE, DWORD);
|
||||||
@ -142,6 +143,7 @@ DXWEXTERN GetDiskFreeSpaceA_Type pGetDiskFreeSpaceA DXWINITIALIZED;
|
|||||||
DXWEXTERN GetLocalTime_Type pGetLocalTime DXWINITIALIZED;
|
DXWEXTERN GetLocalTime_Type pGetLocalTime DXWINITIALIZED;
|
||||||
DXWEXTERN GetProcAddress_Type pGetProcAddress DXWINITIALIZED;
|
DXWEXTERN GetProcAddress_Type pGetProcAddress DXWINITIALIZED;
|
||||||
DXWEXTERN GetSystemTime_Type pGetSystemTime DXWINITIALIZED;
|
DXWEXTERN GetSystemTime_Type pGetSystemTime DXWINITIALIZED;
|
||||||
|
DXWEXTERN GetSystemTimeAsFileTime_Type pGetSystemTimeAsFileTime DXWINITIALIZED;
|
||||||
DXWEXTERN GetTickCount_Type pGetTickCount DXWINITIALIZED;
|
DXWEXTERN GetTickCount_Type pGetTickCount DXWINITIALIZED;
|
||||||
DXWEXTERN LoadLibraryA_Type pLoadLibraryA DXWINITIALIZED;
|
DXWEXTERN LoadLibraryA_Type pLoadLibraryA DXWINITIALIZED;
|
||||||
DXWEXTERN LoadLibraryExA_Type pLoadLibraryExA DXWINITIALIZED;
|
DXWEXTERN LoadLibraryExA_Type pLoadLibraryExA DXWINITIALIZED;
|
||||||
@ -234,6 +236,7 @@ extern BOOL WINAPI extGetDiskFreeSpaceA(LPCSTR, LPDWORD, LPDWORD, LPDWORD, LPDWO
|
|||||||
extern void WINAPI extGetLocalTime(LPSYSTEMTIME);
|
extern void WINAPI extGetLocalTime(LPSYSTEMTIME);
|
||||||
extern FARPROC WINAPI extGetProcAddress(HMODULE, LPCSTR);
|
extern FARPROC WINAPI extGetProcAddress(HMODULE, LPCSTR);
|
||||||
extern void WINAPI extGetSystemTime(LPSYSTEMTIME);
|
extern void WINAPI extGetSystemTime(LPSYSTEMTIME);
|
||||||
|
extern void WINAPI extGetSystemTimeAsFileTime(LPFILETIME);
|
||||||
extern DWORD WINAPI extGetTickCount(void);
|
extern DWORD WINAPI extGetTickCount(void);
|
||||||
extern HMODULE WINAPI extLoadLibraryA(LPCTSTR);
|
extern HMODULE WINAPI extLoadLibraryA(LPCTSTR);
|
||||||
extern HMODULE WINAPI extLoadLibraryExA(LPCTSTR, HANDLE, DWORD);
|
extern HMODULE WINAPI extLoadLibraryExA(LPCTSTR, HANDLE, DWORD);
|
||||||
|
@ -119,6 +119,10 @@
|
|||||||
#define IDC_HOOKOPENGL 1080
|
#define IDC_HOOKOPENGL 1080
|
||||||
#define IDC_WALLPAPERMODE 1081
|
#define IDC_WALLPAPERMODE 1081
|
||||||
#define IDC_HOOKGDI 1082
|
#define IDC_HOOKGDI 1082
|
||||||
|
#define IDC_SHOWFPSOVERLAY 1083
|
||||||
|
#define IDC_COMBOTS 1085
|
||||||
|
#define IDC_LIST2 1088
|
||||||
|
#define IDC_LISTTS 1088
|
||||||
#define ID_MODIFY 32771
|
#define ID_MODIFY 32771
|
||||||
#define ID_DELETE 32772
|
#define ID_DELETE 32772
|
||||||
#define ID_ADD 32773
|
#define ID_ADD 32773
|
||||||
@ -158,9 +162,9 @@
|
|||||||
#ifdef APSTUDIO_INVOKED
|
#ifdef APSTUDIO_INVOKED
|
||||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||||
#define _APS_3D_CONTROLS 1
|
#define _APS_3D_CONTROLS 1
|
||||||
#define _APS_NEXT_RESOURCE_VALUE 151
|
#define _APS_NEXT_RESOURCE_VALUE 152
|
||||||
#define _APS_NEXT_COMMAND_VALUE 32816
|
#define _APS_NEXT_COMMAND_VALUE 32816
|
||||||
#define _APS_NEXT_CONTROL_VALUE 1080
|
#define _APS_NEXT_CONTROL_VALUE 1089
|
||||||
#define _APS_NEXT_SYMED_VALUE 101
|
#define _APS_NEXT_SYMED_VALUE 101
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
@ -28,7 +28,7 @@ BEGIN_MESSAGE_MAP(CStatusDialog, CDialog)
|
|||||||
ON_WM_TIMER()
|
ON_WM_TIMER()
|
||||||
END_MESSAGE_MAP()
|
END_MESSAGE_MAP()
|
||||||
|
|
||||||
#define IDTIMER 1
|
#define IDStatusTIMER 1
|
||||||
|
|
||||||
// CStatusDialog message handlers
|
// CStatusDialog message handlers
|
||||||
|
|
||||||
@ -47,17 +47,17 @@ void CStatusDialog::OnTimer(UINT_PTR nIDEvent)
|
|||||||
extern char *GetTSCaption(int);
|
extern char *GetTSCaption(int);
|
||||||
|
|
||||||
CDialog::OnTimer(nIDEvent);
|
CDialog::OnTimer(nIDEvent);
|
||||||
DxStatus=GetHookStatus(NULL);
|
DxStatus=GetHookStatus(&DxWndStatus);
|
||||||
switch (DxStatus){
|
switch (DxStatus){
|
||||||
case DXW_IDLE: IconId=IDI_DXIDLE; Status="DISABLED"; break;
|
case DXW_IDLE: IconId=IDI_DXIDLE; Status="DISABLED"; break;
|
||||||
case DXW_ACTIVE: IconId=IDI_DXWAIT; Status="READY"; break;
|
case DXW_ACTIVE: IconId=IDI_DXWAIT; Status="READY"; break;
|
||||||
case DXW_RUNNING: IconId=IDI_DXRUN; Status="RUNNING"; break;
|
case DXW_RUNNING: IconId=IDI_DXRUN; Status="RUNNING"; break;
|
||||||
|
default: IconId=IDI_DXIDLE; Status="???"; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
GetDllVersion(DllVersion);
|
GetDllVersion(DllVersion);
|
||||||
DxWndStatus.Status=DxStatus;
|
|
||||||
if(DxStatus==DXW_RUNNING){
|
if(DxStatus==DXW_RUNNING){
|
||||||
GetHookStatus(&DxWndStatus);
|
|
||||||
Target=&pTargets[DxWndStatus.TaskIdx];
|
Target=&pTargets[DxWndStatus.TaskIdx];
|
||||||
|
|
||||||
sprintf_s(sMsg, 1024,
|
sprintf_s(sMsg, 1024,
|
||||||
@ -70,13 +70,13 @@ void CStatusDialog::OnTimer(UINT_PTR nIDEvent)
|
|||||||
DxWndStatus.Width, DxWndStatus.Height, DxWndStatus.ColorDepth,
|
DxWndStatus.Width, DxWndStatus.Height, DxWndStatus.ColorDepth,
|
||||||
DxWndStatus.IsFullScreen ? "Yes":"No", DxWndStatus.DXVersion,
|
DxWndStatus.IsFullScreen ? "Yes":"No", DxWndStatus.DXVersion,
|
||||||
DxWndStatus.isLogging?"ON":"OFF");
|
DxWndStatus.isLogging?"ON":"OFF");
|
||||||
if(Target->flags2 & SHOWFPS){
|
if(Target->flags2 & (SHOWFPS|SHOWFPSOVERLAY)){
|
||||||
sprintf(sMsgBuf, "\nFPS = %d", DxWndStatus.FPSCount);
|
sprintf(sMsgBuf, "\nFPS = %d", DxWndStatus.FPSCount);
|
||||||
strcat(sMsg, sMsgBuf);
|
strcat(sMsg, sMsgBuf);
|
||||||
}
|
}
|
||||||
if(Target->flags2 & TIMESTRETCH){
|
if(Target->flags2 & TIMESTRETCH){
|
||||||
if(DxWndStatus.iTimeShift>=-8 && DxWndStatus.iTimeShift<=8){
|
if(DxWndStatus.TimeShift>=-8 && DxWndStatus.TimeShift<=8){
|
||||||
sprintf(sMsgBuf, "\nTime speed: %s", GetTSCaption(DxWndStatus.iTimeShift));
|
sprintf(sMsgBuf, "\nTime speed %s", GetTSCaption(DxWndStatus.TimeShift));
|
||||||
strcat(sMsg, sMsgBuf);
|
strcat(sMsg, sMsgBuf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -91,7 +91,7 @@ BOOL CStatusDialog::OnInitDialog()
|
|||||||
{
|
{
|
||||||
CDialog::OnInitDialog();
|
CDialog::OnInitDialog();
|
||||||
|
|
||||||
SetTimer(IDTIMER, 1000, NULL);
|
SetTimer(IDStatusTIMER, 1000, NULL);
|
||||||
|
|
||||||
// TODO: Add extra initialization here
|
// TODO: Add extra initialization here
|
||||||
|
|
||||||
@ -103,7 +103,7 @@ void CStatusDialog::OnOK()
|
|||||||
{
|
{
|
||||||
// TODO: Add your specialized code here and/or call the base class
|
// TODO: Add your specialized code here and/or call the base class
|
||||||
|
|
||||||
KillTimer(IDTIMER);
|
KillTimer(IDStatusTIMER);
|
||||||
// stop timer
|
// stop timer
|
||||||
|
|
||||||
CDialog::OnOK();
|
CDialog::OnOK();
|
||||||
|
@ -79,6 +79,7 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/)
|
|||||||
m_LimitFPS = FALSE;
|
m_LimitFPS = FALSE;
|
||||||
m_SkipFPS = FALSE;
|
m_SkipFPS = FALSE;
|
||||||
m_ShowFPS = FALSE;
|
m_ShowFPS = FALSE;
|
||||||
|
m_ShowFPSOverlay = FALSE;
|
||||||
m_TimeStretch = FALSE;
|
m_TimeStretch = FALSE;
|
||||||
m_HookOpenGL = FALSE;
|
m_HookOpenGL = FALSE;
|
||||||
m_InitX = 0;
|
m_InitX = 0;
|
||||||
@ -92,11 +93,42 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/)
|
|||||||
m_SizX = 800;
|
m_SizX = 800;
|
||||||
m_SizY = 600;
|
m_SizY = 600;
|
||||||
m_MaxFPS = 0;
|
m_MaxFPS = 0;
|
||||||
m_InitTS = 0;
|
m_InitTS = 8;
|
||||||
//}}AFX_DATA_INIT
|
//}}AFX_DATA_INIT
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//void TSCombo::OnEnable(BOOL bEnable)
|
||||||
|
//{
|
||||||
|
// CComboBox::OnEnable(bEnable);
|
||||||
|
//
|
||||||
|
// // Get edit control which happens to be the first child window
|
||||||
|
// CEdit* pEdit = (CEdit*)GetWindow(GW_CHILD);
|
||||||
|
//
|
||||||
|
// // Always have the edit box enabled
|
||||||
|
// pEdit->EnableWindow(TRUE);
|
||||||
|
//
|
||||||
|
// // Set read only is combo box is disabled
|
||||||
|
// pEdit->SetReadOnly(!bEnable);
|
||||||
|
//}
|
||||||
|
|
||||||
|
BOOL CTargetDlg::OnInitDialog()
|
||||||
|
{
|
||||||
|
|
||||||
|
CListBox *TSList;
|
||||||
|
CDialog::OnInitDialog();
|
||||||
|
int i;
|
||||||
|
extern char *GetTSCaption(int);
|
||||||
|
//MessageBoxEx(0, "Init Dialog", "Warning", MB_OK | MB_ICONEXCLAMATION, NULL);
|
||||||
|
TSList=(CListBox *)this->GetDlgItem(IDC_LISTTS);
|
||||||
|
TSList->ResetContent();
|
||||||
|
for(i=-8; i<=8; i++) TSList->AddString(GetTSCaption(i));
|
||||||
|
TSList->SetCurSel(m_InitTS);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
void CTargetDlg::DoDataExchange(CDataExchange* pDX)
|
void CTargetDlg::DoDataExchange(CDataExchange* pDX)
|
||||||
{
|
{
|
||||||
CDialog::DoDataExchange(pDX);
|
CDialog::DoDataExchange(pDX);
|
||||||
@ -164,6 +196,7 @@ void CTargetDlg::DoDataExchange(CDataExchange* pDX)
|
|||||||
DDX_Check(pDX, IDC_LIMITFPS, m_LimitFPS);
|
DDX_Check(pDX, IDC_LIMITFPS, m_LimitFPS);
|
||||||
DDX_Check(pDX, IDC_SKIPFPS, m_SkipFPS);
|
DDX_Check(pDX, IDC_SKIPFPS, m_SkipFPS);
|
||||||
DDX_Check(pDX, IDC_SHOWFPS, m_ShowFPS);
|
DDX_Check(pDX, IDC_SHOWFPS, m_ShowFPS);
|
||||||
|
DDX_Check(pDX, IDC_SHOWFPSOVERLAY, m_ShowFPSOverlay);
|
||||||
DDX_Check(pDX, IDC_TIMESTRETCH, m_TimeStretch);
|
DDX_Check(pDX, IDC_TIMESTRETCH, m_TimeStretch);
|
||||||
DDX_Check(pDX, IDC_HOOKOPENGL, m_HookOpenGL);
|
DDX_Check(pDX, IDC_HOOKOPENGL, m_HookOpenGL);
|
||||||
DDX_Text(pDX, IDC_INITX, m_InitX);
|
DDX_Text(pDX, IDC_INITX, m_InitX);
|
||||||
@ -177,7 +210,8 @@ void CTargetDlg::DoDataExchange(CDataExchange* pDX)
|
|||||||
DDX_Text(pDX, IDC_SIZX, m_SizX);
|
DDX_Text(pDX, IDC_SIZX, m_SizX);
|
||||||
DDX_Text(pDX, IDC_SIZY, m_SizY);
|
DDX_Text(pDX, IDC_SIZY, m_SizY);
|
||||||
DDX_Text(pDX, IDC_MAXFPS, m_MaxFPS);
|
DDX_Text(pDX, IDC_MAXFPS, m_MaxFPS);
|
||||||
DDX_Text(pDX, IDC_INITTS, m_InitTS);
|
//DDX_Text(pDX, IDC_INITTS, m_InitTS);
|
||||||
|
DDX_LBIndex(pDX, IDC_LISTTS, m_InitTS);
|
||||||
//}}AFX_DATA_MAP
|
//}}AFX_DATA_MAP
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -84,6 +84,7 @@ public:
|
|||||||
BOOL m_SkipFPS;
|
BOOL m_SkipFPS;
|
||||||
BOOL m_LimitFPS;
|
BOOL m_LimitFPS;
|
||||||
BOOL m_ShowFPS;
|
BOOL m_ShowFPS;
|
||||||
|
BOOL m_ShowFPSOverlay;
|
||||||
BOOL m_TimeStretch;
|
BOOL m_TimeStretch;
|
||||||
BOOL m_HookOpenGL;
|
BOOL m_HookOpenGL;
|
||||||
int m_InitX;
|
int m_InitX;
|
||||||
@ -151,6 +152,8 @@ public:
|
|||||||
afx_msg void OnBnClickedHandleExceptions();
|
afx_msg void OnBnClickedHandleExceptions();
|
||||||
afx_msg void OnEnChangeMaxx();
|
afx_msg void OnEnChangeMaxx();
|
||||||
afx_msg void OnEnChangeInitx();
|
afx_msg void OnEnChangeInitx();
|
||||||
|
public:
|
||||||
|
virtual BOOL OnInitDialog();
|
||||||
};
|
};
|
||||||
//{{AFX_INSERT_LOCATION}}
|
//{{AFX_INSERT_LOCATION}}
|
||||||
// Microsoft Visual C++ Will insert additional declarations immediately before the previous line.
|
// Microsoft Visual C++ Will insert additional declarations immediately before the previous line.
|
||||||
|
@ -33,13 +33,12 @@ BEGIN_MESSAGE_MAP(CTimeSliderDialog, CDialog)
|
|||||||
ON_WM_TIMER()
|
ON_WM_TIMER()
|
||||||
END_MESSAGE_MAP()
|
END_MESSAGE_MAP()
|
||||||
|
|
||||||
#define IDTIMER 1
|
#define IDTimeSiderTIMER 2
|
||||||
|
|
||||||
// CTimeSliderDialog message handlers
|
// CTimeSliderDialog message handlers
|
||||||
|
|
||||||
void CTimeSliderDialog::OnTimer(UINT_PTR nIDEvent)
|
void CTimeSliderDialog::OnTimer(UINT_PTR nIDEvent)
|
||||||
{
|
{
|
||||||
DXWNDSTATUS Status;
|
|
||||||
CSliderCtrl *Slider;
|
CSliderCtrl *Slider;
|
||||||
CStatic *Text;
|
CStatic *Text;
|
||||||
char sMsg[81];
|
char sMsg[81];
|
||||||
@ -51,22 +50,21 @@ void CTimeSliderDialog::OnTimer(UINT_PTR nIDEvent)
|
|||||||
|
|
||||||
CDialog::OnTimer(nIDEvent);
|
CDialog::OnTimer(nIDEvent);
|
||||||
i_TimeSlider=Slider->GetPos();
|
i_TimeSlider=Slider->GetPos();
|
||||||
if(GetHookStatus(&Status)!=DXW_RUNNING) {
|
if(GetHookStatus(NULL)!=DXW_RUNNING) {
|
||||||
Slider->SetPos(0);
|
Slider->SetPos(0);
|
||||||
Text->SetWindowTextA("idle");
|
Text->SetWindowTextA("idle");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(i_TimeSlider==iLastPos){
|
if(i_TimeSlider==iLastPos){
|
||||||
// no change, check for keyboard input changes
|
// no change, check for keyboard input changes
|
||||||
i_TimeSlider=Status.iTimeShift;
|
i_TimeSlider=GetHookInfo()->TimeShift;
|
||||||
if(i_TimeSlider != iLastPos) Slider->SetPos(i_TimeSlider);
|
if(i_TimeSlider != iLastPos) Slider->SetPos(i_TimeSlider);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// slider position changed, set the new value
|
// slider position changed, set the new value
|
||||||
if (i_TimeSlider < -8) i_TimeSlider=-8;
|
if (i_TimeSlider < -8) i_TimeSlider=-8;
|
||||||
if (i_TimeSlider > 8) i_TimeSlider= 8;
|
if (i_TimeSlider > 8) i_TimeSlider= 8;
|
||||||
Status.iTimeShift=i_TimeSlider;
|
GetHookInfo()->TimeShift=i_TimeSlider;
|
||||||
SetHookStatus(&Status);
|
|
||||||
}
|
}
|
||||||
iLastPos = i_TimeSlider;
|
iLastPos = i_TimeSlider;
|
||||||
sprintf(sMsg, "Time speed %s", GetTSCaption(i_TimeSlider));
|
sprintf(sMsg, "Time speed %s", GetTSCaption(i_TimeSlider));
|
||||||
@ -77,14 +75,12 @@ BOOL CTimeSliderDialog::OnInitDialog()
|
|||||||
{
|
{
|
||||||
CSliderCtrl *Slider;
|
CSliderCtrl *Slider;
|
||||||
CDialog::OnInitDialog();
|
CDialog::OnInitDialog();
|
||||||
DXWNDSTATUS Status;
|
|
||||||
|
|
||||||
GetHookStatus(&Status);
|
|
||||||
Slider=(CSliderCtrl *)this->GetDlgItem(IDC_TIMESLIDER);
|
Slider=(CSliderCtrl *)this->GetDlgItem(IDC_TIMESLIDER);
|
||||||
Slider->SetRange(-8, +8, 0);
|
Slider->SetRange(-8, +8, 0);
|
||||||
Slider->SetTicFreq(1);
|
Slider->SetTicFreq(1);
|
||||||
Slider->SetPos(Status.iTimeShift);
|
Slider->SetPos(GetHookInfo()->TimeShift);
|
||||||
SetTimer(IDTIMER, 1000, NULL);
|
SetTimer(IDTimeSiderTIMER, 1000, NULL);
|
||||||
|
|
||||||
// TODO: Add extra initialization here
|
// TODO: Add extra initialization here
|
||||||
|
|
||||||
@ -97,12 +93,10 @@ void CTimeSliderDialog::OnOK()
|
|||||||
|
|
||||||
// stop timer
|
// stop timer
|
||||||
// MessageBoxEx(0, "Stopping Time Slider dialog", "Warning", MB_OK | MB_ICONEXCLAMATION, NULL);
|
// MessageBoxEx(0, "Stopping Time Slider dialog", "Warning", MB_OK | MB_ICONEXCLAMATION, NULL);
|
||||||
KillTimer(IDTIMER);
|
KillTimer(IDTimeSiderTIMER);
|
||||||
|
|
||||||
DXWNDSTATUS Status;
|
DXWNDSTATUS Status;
|
||||||
GetHookStatus(&Status);
|
GetHookInfo()->TimeShift=i_TimeSlider;
|
||||||
Status.iTimeShift=i_TimeSlider;
|
|
||||||
SetHookStatus(&Status);
|
|
||||||
|
|
||||||
CDialog::OnOK();
|
CDialog::OnOK();
|
||||||
}
|
}
|
||||||
|
Binary file not shown.
@ -298,15 +298,15 @@ BEGIN
|
|||||||
CONTROL "Limit available resources",IDC_LIMITRESOURCES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,306,184,93,10
|
CONTROL "Limit available resources",IDC_LIMITRESOURCES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,306,184,93,10
|
||||||
CONTROL "Force win resize",IDC_FORCEWINRESIZE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,433,134,98,9
|
CONTROL "Force win resize",IDC_FORCEWINRESIZE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,433,134,98,9
|
||||||
CONTROL "fix WM_NCHITTEST",IDC_FIXNCHITTEST,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,306,94,98,9
|
CONTROL "fix WM_NCHITTEST",IDC_FIXNCHITTEST,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,306,94,98,9
|
||||||
CONTROL "Limit",IDC_LIMITFPS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,557,123,28,9
|
CONTROL "Limit",IDC_LIMITFPS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,557,98,28,9
|
||||||
EDITTEXT IDC_MAXFPS,635,126,26,12,ES_AUTOHSCROLL | ES_NUMBER,WS_EX_RIGHT
|
EDITTEXT IDC_MAXFPS,635,101,26,12,ES_AUTOHSCROLL | ES_NUMBER,WS_EX_RIGHT
|
||||||
CONTROL "Skip",IDC_SKIPFPS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,557,133,27,9
|
CONTROL "Skip",IDC_SKIPFPS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,557,108,27,9
|
||||||
LTEXT "delay (msec)",IDC_STATIC,591,128,43,8
|
LTEXT "delay (msec)",IDC_STATIC,591,103,43,8
|
||||||
GROUPBOX "Frame per Second",IDC_STATIC,549,111,120,58
|
GROUPBOX "Frame per Second",IDC_STATIC,549,84,120,86
|
||||||
CONTROL "Show FPS",IDC_SHOWFPS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,557,145,52,9
|
CONTROL "Show FPS on title",IDC_SHOWFPS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,557,120,72,9
|
||||||
GROUPBOX "",IDC_STATIC,555,119,110,24
|
GROUPBOX "",IDC_STATIC,555,94,110,24
|
||||||
CONTROL "Hide multi-monitor config.",IDC_HIDEMULTIMONITOR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,433,144,98,9
|
CONTROL "Hide multi-monitor config.",IDC_HIDEMULTIMONITOR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,433,144,98,9
|
||||||
CONTROL "Time Stretch - init val:",IDC_TIMESTRETCH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,557,155,75,9
|
CONTROL "Time Stretch - initial:",IDC_TIMESTRETCH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,557,140,75,9
|
||||||
GROUPBOX "OpenGL",IDC_STATIC,549,3,120,50
|
GROUPBOX "OpenGL",IDC_STATIC,549,3,120,50
|
||||||
CONTROL "Hook OpenGL",IDC_HOOKOPENGL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,557,14,98,9
|
CONTROL "Hook OpenGL",IDC_HOOKOPENGL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,557,14,98,9
|
||||||
EDITTEXT IDC_OPENGLLIB,554,36,108,12,ES_AUTOHSCROLL
|
EDITTEXT IDC_OPENGLLIB,554,36,108,12,ES_AUTOHSCROLL
|
||||||
@ -316,7 +316,8 @@ BEGIN
|
|||||||
GROUPBOX "GDI Handling",IDC_STATIC,172,144,120,62
|
GROUPBOX "GDI Handling",IDC_STATIC,172,144,120,62
|
||||||
CONTROL "Hook GDI",IDC_HOOKGDI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,180,154,102,9
|
CONTROL "Hook GDI",IDC_HOOKGDI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,180,154,102,9
|
||||||
CONTROL "Disable setting gamma ramp",IDC_DISABLEGAMMARAMP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,180,174,102,9
|
CONTROL "Disable setting gamma ramp",IDC_DISABLEGAMMARAMP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,180,174,102,9
|
||||||
EDITTEXT IDC_INITTS,635,152,14,12,ES_AUTOHSCROLL,WS_EX_RIGHT
|
CONTROL "Show FPS overlay",IDC_SHOWFPSOVERLAY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,557,130,72,9
|
||||||
|
LISTBOX IDC_LISTTS,635,131,26,27,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_STATUS DIALOGEX 0, 0, 186, 95
|
IDD_STATUS DIALOGEX 0, 0, 186, 95
|
||||||
|
Binary file not shown.
@ -429,6 +429,7 @@ void CDxwndhostView::OnModify()
|
|||||||
dlg.m_LimitFPS = TargetMaps[i].flags2 & LIMITFPS ? 1 : 0;
|
dlg.m_LimitFPS = TargetMaps[i].flags2 & LIMITFPS ? 1 : 0;
|
||||||
dlg.m_SkipFPS = TargetMaps[i].flags2 & SKIPFPS ? 1 : 0;
|
dlg.m_SkipFPS = TargetMaps[i].flags2 & SKIPFPS ? 1 : 0;
|
||||||
dlg.m_ShowFPS = TargetMaps[i].flags2 & SHOWFPS ? 1 : 0;
|
dlg.m_ShowFPS = TargetMaps[i].flags2 & SHOWFPS ? 1 : 0;
|
||||||
|
dlg.m_ShowFPSOverlay = TargetMaps[i].flags2 & SHOWFPSOVERLAY ? 1 : 0;
|
||||||
dlg.m_TimeStretch = TargetMaps[i].flags2 & TIMESTRETCH ? 1 : 0;
|
dlg.m_TimeStretch = TargetMaps[i].flags2 & TIMESTRETCH ? 1 : 0;
|
||||||
dlg.m_HookOpenGL = TargetMaps[i].flags2 & HOOKOPENGL ? 1 : 0;
|
dlg.m_HookOpenGL = TargetMaps[i].flags2 & HOOKOPENGL ? 1 : 0;
|
||||||
dlg.m_InitX = TargetMaps[i].initx;
|
dlg.m_InitX = TargetMaps[i].initx;
|
||||||
@ -442,7 +443,7 @@ void CDxwndhostView::OnModify()
|
|||||||
dlg.m_SizX = TargetMaps[i].sizx;
|
dlg.m_SizX = TargetMaps[i].sizx;
|
||||||
dlg.m_SizY = TargetMaps[i].sizy;
|
dlg.m_SizY = TargetMaps[i].sizy;
|
||||||
dlg.m_MaxFPS = TargetMaps[i].MaxFPS;
|
dlg.m_MaxFPS = TargetMaps[i].MaxFPS;
|
||||||
dlg.m_InitTS = TargetMaps[i].InitTS;
|
dlg.m_InitTS = TargetMaps[i].InitTS+8;
|
||||||
if(dlg.DoModal() == IDOK && dlg.m_FilePath.GetLength()){
|
if(dlg.DoModal() == IDOK && dlg.m_FilePath.GetLength()){
|
||||||
strcpy_s(TargetMaps[i].path, sizeof(TargetMaps[i].path), dlg.m_FilePath);
|
strcpy_s(TargetMaps[i].path, sizeof(TargetMaps[i].path), dlg.m_FilePath);
|
||||||
strcpy_s(TargetMaps[i].module, sizeof(TargetMaps[i].module), dlg.m_Module);
|
strcpy_s(TargetMaps[i].module, sizeof(TargetMaps[i].module), dlg.m_Module);
|
||||||
@ -525,6 +526,7 @@ void CDxwndhostView::OnModify()
|
|||||||
if(dlg.m_LimitFPS) TargetMaps[i].flags2 |= LIMITFPS;
|
if(dlg.m_LimitFPS) TargetMaps[i].flags2 |= LIMITFPS;
|
||||||
if(dlg.m_SkipFPS) TargetMaps[i].flags2 |= SKIPFPS;
|
if(dlg.m_SkipFPS) TargetMaps[i].flags2 |= SKIPFPS;
|
||||||
if(dlg.m_ShowFPS) TargetMaps[i].flags2 |= SHOWFPS;
|
if(dlg.m_ShowFPS) TargetMaps[i].flags2 |= SHOWFPS;
|
||||||
|
if(dlg.m_ShowFPSOverlay) TargetMaps[i].flags2 |= SHOWFPSOVERLAY;
|
||||||
if(dlg.m_TimeStretch) TargetMaps[i].flags2 |= TIMESTRETCH;
|
if(dlg.m_TimeStretch) TargetMaps[i].flags2 |= TIMESTRETCH;
|
||||||
if(dlg.m_HookOpenGL) TargetMaps[i].flags2 |= HOOKOPENGL;
|
if(dlg.m_HookOpenGL) TargetMaps[i].flags2 |= HOOKOPENGL;
|
||||||
TargetMaps[i].initx = dlg.m_InitX;
|
TargetMaps[i].initx = dlg.m_InitX;
|
||||||
@ -538,7 +540,7 @@ void CDxwndhostView::OnModify()
|
|||||||
TargetMaps[i].sizx = dlg.m_SizX;
|
TargetMaps[i].sizx = dlg.m_SizX;
|
||||||
TargetMaps[i].sizy = dlg.m_SizY;
|
TargetMaps[i].sizy = dlg.m_SizY;
|
||||||
TargetMaps[i].MaxFPS = dlg.m_MaxFPS;
|
TargetMaps[i].MaxFPS = dlg.m_MaxFPS;
|
||||||
TargetMaps[i].InitTS = dlg.m_InitTS;
|
TargetMaps[i].InitTS = dlg.m_InitTS-8;
|
||||||
strcpy_s(TargetMaps[i].module, sizeof(TargetMaps[i].module), dlg.m_Module);
|
strcpy_s(TargetMaps[i].module, sizeof(TargetMaps[i].module), dlg.m_Module);
|
||||||
strcpy_s(TargetMaps[i].OpenGLLib, sizeof(TargetMaps[i].OpenGLLib), dlg.m_OpenGLLib);
|
strcpy_s(TargetMaps[i].OpenGLLib, sizeof(TargetMaps[i].OpenGLLib), dlg.m_OpenGLLib);
|
||||||
strcpy_s(TitleMaps[i].title, sizeof(TitleMaps[i].title), dlg.m_Title);
|
strcpy_s(TitleMaps[i].title, sizeof(TitleMaps[i].title), dlg.m_Title);
|
||||||
@ -814,6 +816,7 @@ void CDxwndhostView::OnAdd()
|
|||||||
if(dlg.m_LimitFPS) TargetMaps[i].flags2 |= LIMITFPS;
|
if(dlg.m_LimitFPS) TargetMaps[i].flags2 |= LIMITFPS;
|
||||||
if(dlg.m_SkipFPS) TargetMaps[i].flags2 |= SKIPFPS;
|
if(dlg.m_SkipFPS) TargetMaps[i].flags2 |= SKIPFPS;
|
||||||
if(dlg.m_ShowFPS) TargetMaps[i].flags2 |= SHOWFPS;
|
if(dlg.m_ShowFPS) TargetMaps[i].flags2 |= SHOWFPS;
|
||||||
|
if(dlg.m_ShowFPSOverlay) TargetMaps[i].flags2 |= SHOWFPSOVERLAY;
|
||||||
if(dlg.m_TimeStretch) TargetMaps[i].flags2 |= TIMESTRETCH;
|
if(dlg.m_TimeStretch) TargetMaps[i].flags2 |= TIMESTRETCH;
|
||||||
if(dlg.m_HookOpenGL) TargetMaps[i].flags2 |= HOOKOPENGL;
|
if(dlg.m_HookOpenGL) TargetMaps[i].flags2 |= HOOKOPENGL;
|
||||||
TargetMaps[i].initx = dlg.m_InitX;
|
TargetMaps[i].initx = dlg.m_InitX;
|
||||||
@ -827,7 +830,10 @@ void CDxwndhostView::OnAdd()
|
|||||||
TargetMaps[i].sizx = dlg.m_SizX;
|
TargetMaps[i].sizx = dlg.m_SizX;
|
||||||
TargetMaps[i].sizy = dlg.m_SizY;
|
TargetMaps[i].sizy = dlg.m_SizY;
|
||||||
TargetMaps[i].MaxFPS = dlg.m_MaxFPS;
|
TargetMaps[i].MaxFPS = dlg.m_MaxFPS;
|
||||||
TargetMaps[i].InitTS = dlg.m_InitTS;
|
if (dlg.m_InitTS>=-8 && dlg.m_InitTS<=8)
|
||||||
|
TargetMaps[i].InitTS = dlg.m_InitTS-8;
|
||||||
|
else
|
||||||
|
MessageBoxEx(0, "Bad InitTS", "Warning", MB_OK, NULL);
|
||||||
CListCtrl& listctrl = GetListCtrl();
|
CListCtrl& listctrl = GetListCtrl();
|
||||||
listitem.mask = LVIF_TEXT;
|
listitem.mask = LVIF_TEXT;
|
||||||
listitem.iItem = i;
|
listitem.iItem = i;
|
||||||
@ -959,6 +965,7 @@ DWORD WINAPI TrayIconUpdate(CSystemTray *Tray)
|
|||||||
case DXW_IDLE: IconId=IDI_DXIDLE; Status="DISABLED"; break;
|
case DXW_IDLE: IconId=IDI_DXIDLE; Status="DISABLED"; break;
|
||||||
case DXW_ACTIVE: IconId=IDI_DXWAIT; Status="READY"; break;
|
case DXW_ACTIVE: IconId=IDI_DXWAIT; Status="READY"; break;
|
||||||
case DXW_RUNNING: IconId=IDI_DXRUN; Status="RUNNING"; break;
|
case DXW_RUNNING: IconId=IDI_DXRUN; Status="RUNNING"; break;
|
||||||
|
default: IconId=IDI_DXIDLE; Status="???"; break;
|
||||||
}
|
}
|
||||||
if (DxStatus != DXW_RUNNING){
|
if (DxStatus != DXW_RUNNING){
|
||||||
TickCount=0;
|
TickCount=0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user