From 36a87419e3522b028dce9999f31a28bb9e3c7359 Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Fri, 22 Mar 2024 22:27:00 +0100 Subject: [PATCH] don't allocate ddraw struct --- inc/dd.h | 4 +- inc/version.h | 2 +- src/IDirectDraw/IDirectDraw.c | 22 +- src/IDirectDraw/IDirectDrawPalette.c | 4 +- src/IDirectDraw/IDirectDrawSurface.c | 16 +- src/dd.c | 621 ++++++++++++++------------- src/ddpalette.c | 6 +- src/ddsurface.c | 112 ++--- src/debug.c | 6 +- src/directinput.c | 4 +- src/fps_limiter.c | 12 +- src/mouse.c | 44 +- src/render_d3d9.c | 144 +++---- src/render_gdi.c | 112 ++--- src/render_ogl.c | 172 ++++---- src/screenshot.c | 2 +- src/utils.c | 120 +++--- src/winapi_hooks.c | 430 +++++++++---------- src/wndproc.c | 214 ++++----- 19 files changed, 1027 insertions(+), 1020 deletions(-) diff --git a/inc/dd.h b/inc/dd.h index afd00d9..5fdc857 100644 --- a/inc/dd.h +++ b/inc/dd.h @@ -56,11 +56,11 @@ typedef struct SPEEDLIMITER struct IDirectDrawSurfaceImpl; -extern struct CNCDDRAW* g_ddraw; +extern struct CNCDDRAW g_ddraw; typedef struct CNCDDRAW { - ULONG ref; + LONG ref; DWORD width; DWORD height; diff --git a/inc/version.h b/inc/version.h index ddb62c3..9dc51c9 100644 --- a/inc/version.h +++ b/inc/version.h @@ -7,7 +7,7 @@ #define VERSION_MAJOR 6 #define VERSION_MINOR 3 #define VERSION_BUILD 0 -#define VERSION_REVISION 3 +#define VERSION_REVISION 4 #define VERSION VERSION_MAJOR, VERSION_MINOR, VERSION_BUILD, VERSION_REVISION #define VERSION_STRING ver_str(VERSION_MAJOR, VERSION_MINOR, VERSION_BUILD, VERSION_REVISION) diff --git a/src/IDirectDraw/IDirectDraw.c b/src/IDirectDraw/IDirectDraw.c index 9a96270..1e6f6a4 100644 --- a/src/IDirectDraw/IDirectDraw.c +++ b/src/IDirectDraw/IDirectDraw.c @@ -131,20 +131,20 @@ HRESULT __stdcall IDirectDraw__QueryInterface(IDirectDrawImpl* This, REFIID riid { TRACE("NOT_IMPLEMENTED GUID = %08X\n", ((GUID*)riid)->Data1); - if (!g_ddraw->real_dll) - g_ddraw->real_dll = real_LoadLibraryA("system32\\ddraw.dll"); + if (!g_ddraw.real_dll) + g_ddraw.real_dll = real_LoadLibraryA("system32\\ddraw.dll"); - if (g_ddraw->real_dll && !g_ddraw->DirectDrawCreate) - g_ddraw->DirectDrawCreate = (void*)real_GetProcAddress(g_ddraw->real_dll, "DirectDrawCreate"); + if (g_ddraw.real_dll && !g_ddraw.DirectDrawCreate) + g_ddraw.DirectDrawCreate = (void*)real_GetProcAddress(g_ddraw.real_dll, "DirectDrawCreate"); - if (g_ddraw->DirectDrawCreate == DirectDrawCreate) - g_ddraw->DirectDrawCreate = NULL; + if (g_ddraw.DirectDrawCreate == DirectDrawCreate) + g_ddraw.DirectDrawCreate = NULL; - if (!g_ddraw->real_dd && g_ddraw->DirectDrawCreate) - g_ddraw->DirectDrawCreate(NULL, &g_ddraw->real_dd, NULL); + if (!g_ddraw.real_dd && g_ddraw.DirectDrawCreate) + g_ddraw.DirectDrawCreate(NULL, &g_ddraw.real_dd, NULL); - if (g_ddraw->real_dd) - ret = IDirectDraw_QueryInterface(g_ddraw->real_dd, riid, ppvObj); + if (g_ddraw.real_dd) + ret = IDirectDraw_QueryInterface(g_ddraw.real_dd, riid, ppvObj); else ret = E_NOINTERFACE; } @@ -355,7 +355,7 @@ HRESULT __stdcall IDirectDraw__GetGDISurface(IDirectDrawImpl* This, LPDIRECTDRAW { TRACE("NOT_IMPLEMENTED -> %s(This=%p)\n", __FUNCTION__, This); HRESULT ret = DD_OK; - *lplpGDIDDSurface = (LPDIRECTDRAWSURFACE7)g_ddraw->primary; + *lplpGDIDDSurface = (LPDIRECTDRAWSURFACE7)g_ddraw.primary; TRACE("NOT_IMPLEMENTED <- %s\n", __FUNCTION__); return ret; } diff --git a/src/IDirectDraw/IDirectDrawPalette.c b/src/IDirectDraw/IDirectDrawPalette.c index 2eb313b..2767478 100644 --- a/src/IDirectDraw/IDirectDrawPalette.c +++ b/src/IDirectDraw/IDirectDrawPalette.c @@ -30,8 +30,8 @@ ULONG __stdcall IDirectDrawPalette__Release(IDirectDrawPaletteImpl* This) { TRACE(" Released (%p)\n", This); - if (g_ddraw) - g_ddraw->last_freed_palette = This; + if (g_ddraw.ref) + g_ddraw.last_freed_palette = This; HeapFree(GetProcessHeap(), 0, This); } diff --git a/src/IDirectDraw/IDirectDrawSurface.c b/src/IDirectDraw/IDirectDrawSurface.c index c7775af..7445f99 100644 --- a/src/IDirectDraw/IDirectDrawSurface.c +++ b/src/IDirectDraw/IDirectDrawSurface.c @@ -82,11 +82,11 @@ ULONG __stdcall IDirectDrawSurface__Release(IDirectDrawSurfaceImpl* This) { TRACE(" Released (%p)\n", This); - if (g_ddraw && (This->caps & DDSCAPS_PRIMARYSURFACE)) + if (g_ddraw.ref && (This->caps & DDSCAPS_PRIMARYSURFACE)) { - EnterCriticalSection(&g_ddraw->cs); - g_ddraw->primary = NULL; - LeaveCriticalSection(&g_ddraw->cs); + EnterCriticalSection(&g_ddraw.cs); + g_ddraw.primary = NULL; + LeaveCriticalSection(&g_ddraw.cs); } if (This->bitmap) @@ -111,7 +111,7 @@ ULONG __stdcall IDirectDrawSurface__Release(IDirectDrawSurfaceImpl* This) if (This->mapping) CloseHandle(This->mapping); - if (This->backbuffer && (!g_ddraw || (void*)This->backbuffer != g_ddraw->last_freed_surface)) + if (This->backbuffer && (!g_ddraw.ref || (void*)This->backbuffer != g_ddraw.last_freed_surface)) { IDirectDrawSurface_Release(This->backbuffer); } @@ -119,15 +119,15 @@ ULONG __stdcall IDirectDrawSurface__Release(IDirectDrawSurfaceImpl* This) if (This->clipper) IDirectDrawClipper_Release(This->clipper); - if (This->palette && (!g_ddraw || (void*)This->palette != g_ddraw->last_freed_palette)) + if (This->palette && (!g_ddraw.ref || (void*)This->palette != g_ddraw.last_freed_palette)) { IDirectDrawPalette_Release(This->palette); } DeleteCriticalSection(&This->cs); - if (g_ddraw) - g_ddraw->last_freed_surface = This; + if (g_ddraw.ref) + g_ddraw.last_freed_surface = This; HeapFree(GetProcessHeap(), 0, This); } diff --git a/src/dd.c b/src/dd.c index bf448e5..c6cddf1 100644 --- a/src/dd.c +++ b/src/dd.c @@ -16,7 +16,7 @@ #include "blt.h" -CNCDDRAW* g_ddraw = NULL; +CNCDDRAW g_ddraw; HRESULT dd_EnumDisplayModes( DWORD dwFlags, @@ -123,9 +123,9 @@ HRESULT dd_EnumDisplayModes( } } - if ((g_ddraw->bpp && g_config.resolutions == RESLIST_NORMAL) || g_config.resolutions == RESLIST_FULL) + if ((g_ddraw.bpp && g_config.resolutions == RESLIST_NORMAL) || g_config.resolutions == RESLIST_FULL) { - TRACE(" g_ddraw->bpp=%u\n", g_ddraw->bpp); + TRACE(" g_ddraw.bpp=%u\n", g_ddraw.bpp); /* set up some filters to keep the list short */ DWORD refresh_rate = 0; @@ -218,7 +218,7 @@ HRESULT dd_EnumDisplayModes( if (s.ddpfPixelFormat.dwRGBBitCount == bpp_filter || !bpp_filter) { - if (g_ddraw->bpp == 8 || g_config.resolutions == RESLIST_FULL) + if (g_ddraw.bpp == 8 || g_config.resolutions == RESLIST_FULL) { if (g_config.max_resolutions && res_count++ >= g_config.max_resolutions) { @@ -243,7 +243,7 @@ HRESULT dd_EnumDisplayModes( if (s.ddpfPixelFormat.dwRGBBitCount == bpp_filter || !bpp_filter) { - if (g_ddraw->bpp == 16 || g_config.resolutions == RESLIST_FULL) + if (g_ddraw.bpp == 16 || g_config.resolutions == RESLIST_FULL) { if (g_config.max_resolutions && res_count++ >= g_config.max_resolutions) { @@ -268,7 +268,7 @@ HRESULT dd_EnumDisplayModes( if (s.ddpfPixelFormat.dwRGBBitCount == bpp_filter || !bpp_filter) { - if (g_ddraw->bpp == 32 || g_config.resolutions == RESLIST_FULL) + if (g_ddraw.bpp == 32 || g_config.resolutions == RESLIST_FULL) { if (g_config.max_resolutions && res_count++ >= g_config.max_resolutions) { @@ -300,7 +300,7 @@ HRESULT dd_EnumDisplayModes( } } - if (!g_ddraw->bpp || g_config.resolutions != RESLIST_NORMAL) + if (!g_ddraw.bpp || g_config.resolutions != RESLIST_NORMAL) { for (i = 0; i < sizeof(resolutions) / sizeof(resolutions[0]); i++) { @@ -482,13 +482,13 @@ HRESULT dd_GetDisplayMode(LPDDSURFACEDESC lpDDSurfaceDesc) lpDDSurfaceDesc->dwSize = size; lpDDSurfaceDesc->dwFlags = DDSD_HEIGHT | DDSD_REFRESHRATE | DDSD_WIDTH | DDSD_PITCH | DDSD_PIXELFORMAT; lpDDSurfaceDesc->dwRefreshRate = 60; - lpDDSurfaceDesc->dwHeight = g_ddraw->height ? g_ddraw->height : 768; - lpDDSurfaceDesc->dwWidth = g_ddraw->width ? g_ddraw->width : 1024; + lpDDSurfaceDesc->dwHeight = g_ddraw.height ? g_ddraw.height : 768; + lpDDSurfaceDesc->dwWidth = g_ddraw.width ? g_ddraw.width : 1024; lpDDSurfaceDesc->lPitch = ((lpDDSurfaceDesc->dwWidth * lpDDSurfaceDesc->ddpfPixelFormat.dwRGBBitCount + 63) & ~63) >> 3; - if (g_ddraw->bpp == 32 || g_config.vermeer_hack) + if (g_ddraw.bpp == 32 || g_config.vermeer_hack) { lpDDSurfaceDesc->ddpfPixelFormat.dwFlags = DDPF_RGB; lpDDSurfaceDesc->ddpfPixelFormat.dwRGBBitCount = 32; @@ -499,7 +499,7 @@ HRESULT dd_GetDisplayMode(LPDDSURFACEDESC lpDDSurfaceDesc) lpDDSurfaceDesc->lPitch = ((lpDDSurfaceDesc->dwWidth * lpDDSurfaceDesc->ddpfPixelFormat.dwRGBBitCount + 63) & ~63) >> 3; } - else if (g_ddraw->bpp != 8) + else if (g_ddraw.bpp != 8) { lpDDSurfaceDesc->ddpfPixelFormat.dwFlags = DDPF_RGB; lpDDSurfaceDesc->ddpfPixelFormat.dwRGBBitCount = 16; @@ -525,28 +525,28 @@ HRESULT dd_GetMonitorFrequency(LPDWORD lpdwFreq) HRESULT dd_RestoreDisplayMode() { - if (!g_ddraw->render.run) + if (!g_ddraw.render.run) { return DD_OK; } - if (g_ddraw->renderer != gdi_render_main) + if (g_ddraw.renderer != gdi_render_main) { - EnterCriticalSection(&g_ddraw->cs); - g_ddraw->render.run = FALSE; - ReleaseSemaphore(g_ddraw->render.sem, 1, NULL); - LeaveCriticalSection(&g_ddraw->cs); + EnterCriticalSection(&g_ddraw.cs); + g_ddraw.render.run = FALSE; + ReleaseSemaphore(g_ddraw.render.sem, 1, NULL); + LeaveCriticalSection(&g_ddraw.cs); - if (g_ddraw->render.thread) + if (g_ddraw.render.thread) { - WaitForSingleObject(g_ddraw->render.thread, INFINITE); - g_ddraw->render.thread = NULL; + WaitForSingleObject(g_ddraw.render.thread, INFINITE); + g_ddraw.render.thread = NULL; } } if (!g_config.windowed) { - if (g_ddraw->renderer == d3d9_render_main && !g_config.nonexclusive) + if (g_ddraw.renderer == d3d9_render_main && !g_config.nonexclusive) { if (!d3d9_reset(TRUE)) d3d9_release(); @@ -567,187 +567,187 @@ HRESULT dd_SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwFl if (g_config.mgs_hack && dwHeight == 480) dwHeight -= 32; /* Remove black bar in Metal Gear Solid */ - if (g_ddraw->render.thread) + if (g_ddraw.render.thread) { - EnterCriticalSection(&g_ddraw->cs); - g_ddraw->render.run = FALSE; - ReleaseSemaphore(g_ddraw->render.sem, 1, NULL); - LeaveCriticalSection(&g_ddraw->cs); + EnterCriticalSection(&g_ddraw.cs); + g_ddraw.render.run = FALSE; + ReleaseSemaphore(g_ddraw.render.sem, 1, NULL); + LeaveCriticalSection(&g_ddraw.cs); - WaitForSingleObject(g_ddraw->render.thread, INFINITE); - g_ddraw->render.thread = NULL; + WaitForSingleObject(g_ddraw.render.thread, INFINITE); + g_ddraw.render.thread = NULL; } - if (!g_ddraw->mode.dmPelsWidth) + if (!g_ddraw.mode.dmPelsWidth) { ChangeDisplaySettings(NULL, 0); - g_ddraw->mode.dmSize = sizeof(DEVMODE); - g_ddraw->mode.dmDriverExtra = 0; + g_ddraw.mode.dmSize = sizeof(DEVMODE); + g_ddraw.mode.dmDriverExtra = 0; - if (EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &g_ddraw->mode) == FALSE) + if (EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &g_ddraw.mode) == FALSE) { - g_ddraw->mode.dmSize = sizeof(DEVMODE); - g_ddraw->mode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL | DM_DISPLAYFREQUENCY; - g_ddraw->mode.dmPelsWidth = real_GetSystemMetrics(SM_CXSCREEN); - g_ddraw->mode.dmPelsHeight = real_GetSystemMetrics(SM_CYSCREEN); - g_ddraw->mode.dmDisplayFrequency = 60; - g_ddraw->mode.dmBitsPerPel = 32; + g_ddraw.mode.dmSize = sizeof(DEVMODE); + g_ddraw.mode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL | DM_DISPLAYFREQUENCY; + g_ddraw.mode.dmPelsWidth = real_GetSystemMetrics(SM_CXSCREEN); + g_ddraw.mode.dmPelsHeight = real_GetSystemMetrics(SM_CYSCREEN); + g_ddraw.mode.dmDisplayFrequency = 60; + g_ddraw.mode.dmBitsPerPel = 32; - if (!g_ddraw->mode.dmPelsWidth || !g_ddraw->mode.dmPelsHeight) + if (!g_ddraw.mode.dmPelsWidth || !g_ddraw.mode.dmPelsHeight) { g_config.fullscreen = FALSE; } } } - g_ddraw->render.width = g_config.window_rect.right; - g_ddraw->render.height = g_config.window_rect.bottom; + g_ddraw.render.width = g_config.window_rect.right; + g_ddraw.render.height = g_config.window_rect.bottom; /* temporary fix: center window for games that keep changing their resolution */ - if ((g_ddraw->width || g_config.infantryhack) && - (g_ddraw->width != dwWidth || g_ddraw->height != dwHeight) && + if ((g_ddraw.width || g_config.infantryhack) && + (g_ddraw.width != dwWidth || g_ddraw.height != dwHeight) && (dwWidth > g_config.window_rect.right || dwHeight > g_config.window_rect.bottom)) { g_config.window_rect.left = -32000; g_config.window_rect.top = -32000; } - g_ddraw->width = dwWidth; - g_ddraw->height = dwHeight; - g_ddraw->bpp = dwBPP; + g_ddraw.width = dwWidth; + g_ddraw.height = dwHeight; + g_ddraw.bpp = dwBPP; - InterlockedExchange((LONG*)&g_ddraw->cursor.x, dwWidth / 2); - InterlockedExchange((LONG*)&g_ddraw->cursor.y, dwHeight / 2); + InterlockedExchange((LONG*)&g_ddraw.cursor.x, dwWidth / 2); + InterlockedExchange((LONG*)&g_ddraw.cursor.y, dwHeight / 2); BOOL border = g_config.border; BOOL nonexclusive = FALSE; if (g_config.fullscreen) { - g_ddraw->render.width = g_ddraw->mode.dmPelsWidth; - g_ddraw->render.height = g_ddraw->mode.dmPelsHeight; + g_ddraw.render.width = g_ddraw.mode.dmPelsWidth; + g_ddraw.render.height = g_ddraw.mode.dmPelsHeight; if (g_config.windowed) /* windowed-fullscreen aka borderless */ { border = FALSE; /* prevent OpenGL from going automatically into fullscreen exclusive mode */ - if (g_ddraw->renderer == ogl_render_main) + if (g_ddraw.renderer == ogl_render_main) nonexclusive = TRUE; } } - if (g_ddraw->render.width < g_ddraw->width) + if (g_ddraw.render.width < g_ddraw.width) { - g_ddraw->render.width = g_ddraw->width; + g_ddraw.render.width = g_ddraw.width; } - if (g_ddraw->render.height < g_ddraw->height) + if (g_ddraw.render.height < g_ddraw.height) { - g_ddraw->render.height = g_ddraw->height; + g_ddraw.render.height = g_ddraw.height; } - g_ddraw->render.run = TRUE; + g_ddraw.render.run = TRUE; BOOL lock_mouse = g_mouse_locked; mouse_unlock(); - memset(&g_ddraw->render.mode, 0, sizeof(DEVMODE)); - g_ddraw->render.mode.dmSize = sizeof(DEVMODE); + memset(&g_ddraw.render.mode, 0, sizeof(DEVMODE)); + g_ddraw.render.mode.dmSize = sizeof(DEVMODE); - g_ddraw->render.mode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT; - g_ddraw->render.mode.dmPelsWidth = g_ddraw->render.width; - g_ddraw->render.mode.dmPelsHeight = g_ddraw->render.height; + g_ddraw.render.mode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT; + g_ddraw.render.mode.dmPelsWidth = g_ddraw.render.width; + g_ddraw.render.mode.dmPelsHeight = g_ddraw.render.height; if (g_config.refresh_rate) { - g_ddraw->render.mode.dmFields |= DM_DISPLAYFREQUENCY; - g_ddraw->render.mode.dmDisplayFrequency = g_config.refresh_rate; + g_ddraw.render.mode.dmFields |= DM_DISPLAYFREQUENCY; + g_ddraw.render.mode.dmDisplayFrequency = g_config.refresh_rate; - if (ChangeDisplaySettings(&g_ddraw->render.mode, CDS_TEST) != DISP_CHANGE_SUCCESSFUL) + if (ChangeDisplaySettings(&g_ddraw.render.mode, CDS_TEST) != DISP_CHANGE_SUCCESSFUL) { g_config.refresh_rate = 0; - g_ddraw->render.mode.dmFields &= ~DM_DISPLAYFREQUENCY; - g_ddraw->render.mode.dmDisplayFrequency = 0; + g_ddraw.render.mode.dmFields &= ~DM_DISPLAYFREQUENCY; + g_ddraw.render.mode.dmDisplayFrequency = 0; } } if (!g_config.windowed) { /* Making sure the chosen resolution is valid */ - if (ChangeDisplaySettings(&g_ddraw->render.mode, CDS_TEST) != DISP_CHANGE_SUCCESSFUL) + if (ChangeDisplaySettings(&g_ddraw.render.mode, CDS_TEST) != DISP_CHANGE_SUCCESSFUL) { /* Try without upscaling */ - g_ddraw->render.width = g_ddraw->width; - g_ddraw->render.height = g_ddraw->height; + g_ddraw.render.width = g_ddraw.width; + g_ddraw.render.height = g_ddraw.height; - g_ddraw->render.mode.dmPelsWidth = g_ddraw->render.width; - g_ddraw->render.mode.dmPelsHeight = g_ddraw->render.height; + g_ddraw.render.mode.dmPelsWidth = g_ddraw.render.width; + g_ddraw.render.mode.dmPelsHeight = g_ddraw.render.height; - if (ChangeDisplaySettings(&g_ddraw->render.mode, CDS_TEST) != DISP_CHANGE_SUCCESSFUL) + if (ChangeDisplaySettings(&g_ddraw.render.mode, CDS_TEST) != DISP_CHANGE_SUCCESSFUL) { /* Try 2x scaling */ - g_ddraw->render.width *= 2; - g_ddraw->render.height *= 2; + g_ddraw.render.width *= 2; + g_ddraw.render.height *= 2; - g_ddraw->render.mode.dmPelsWidth = g_ddraw->render.width; - g_ddraw->render.mode.dmPelsHeight = g_ddraw->render.height; + g_ddraw.render.mode.dmPelsWidth = g_ddraw.render.width; + g_ddraw.render.mode.dmPelsHeight = g_ddraw.render.height; - if ((g_ddraw->render.width > g_ddraw->mode.dmPelsWidth || - g_ddraw->render.height > g_ddraw->mode.dmPelsHeight) || - ChangeDisplaySettings(&g_ddraw->render.mode, CDS_TEST) != DISP_CHANGE_SUCCESSFUL) + if ((g_ddraw.render.width > g_ddraw.mode.dmPelsWidth || + g_ddraw.render.height > g_ddraw.mode.dmPelsHeight) || + ChangeDisplaySettings(&g_ddraw.render.mode, CDS_TEST) != DISP_CHANGE_SUCCESSFUL) { SIZE res = { 0 }; /* try to get a resolution with the same aspect ratio as the requested resolution */ BOOL found_res = util_get_lowest_resolution( - (float)g_ddraw->width / g_ddraw->height, + (float)g_ddraw.width / g_ddraw.height, &res, - g_ddraw->width + 1, /* don't return the original resolution since we tested that one already */ - g_ddraw->height, - g_ddraw->mode.dmPelsWidth, - g_ddraw->mode.dmPelsHeight); + g_ddraw.width + 1, /* don't return the original resolution since we tested that one already */ + g_ddraw.height, + g_ddraw.mode.dmPelsWidth, + g_ddraw.mode.dmPelsHeight); if (!found_res) { /* try to get a resolution with the same aspect ratio as the current display mode */ found_res = util_get_lowest_resolution( - (float)g_ddraw->mode.dmPelsWidth / g_ddraw->mode.dmPelsHeight, + (float)g_ddraw.mode.dmPelsWidth / g_ddraw.mode.dmPelsHeight, &res, - g_ddraw->width, - g_ddraw->height, - g_ddraw->mode.dmPelsWidth, - g_ddraw->mode.dmPelsHeight); + g_ddraw.width, + g_ddraw.height, + g_ddraw.mode.dmPelsWidth, + g_ddraw.mode.dmPelsHeight); } - g_ddraw->render.width = res.cx; - g_ddraw->render.height = res.cy; + g_ddraw.render.width = res.cx; + g_ddraw.render.height = res.cy; - g_ddraw->render.mode.dmPelsWidth = g_ddraw->render.width; - g_ddraw->render.mode.dmPelsHeight = g_ddraw->render.height; + g_ddraw.render.mode.dmPelsWidth = g_ddraw.render.width; + g_ddraw.render.mode.dmPelsHeight = g_ddraw.render.height; if (!found_res || - ChangeDisplaySettings(&g_ddraw->render.mode, CDS_TEST) != DISP_CHANGE_SUCCESSFUL) + ChangeDisplaySettings(&g_ddraw.render.mode, CDS_TEST) != DISP_CHANGE_SUCCESSFUL) { - if (g_ddraw->width > g_ddraw->mode.dmPelsWidth || - g_ddraw->height > g_ddraw->mode.dmPelsHeight) + if (g_ddraw.width > g_ddraw.mode.dmPelsWidth || + g_ddraw.height > g_ddraw.mode.dmPelsHeight) { /* Downscaling requires adjmouse to be enabled */ g_config.adjmouse = TRUE; } /* try current display settings */ - g_ddraw->render.width = g_ddraw->mode.dmPelsWidth; - g_ddraw->render.height = g_ddraw->mode.dmPelsHeight; + g_ddraw.render.width = g_ddraw.mode.dmPelsWidth; + g_ddraw.render.height = g_ddraw.mode.dmPelsHeight; - g_ddraw->render.mode.dmPelsWidth = g_ddraw->render.width; - g_ddraw->render.mode.dmPelsHeight = g_ddraw->render.height; + g_ddraw.render.mode.dmPelsWidth = g_ddraw.render.width; + g_ddraw.render.mode.dmPelsHeight = g_ddraw.render.height; - if (ChangeDisplaySettings(&g_ddraw->render.mode, CDS_TEST) != DISP_CHANGE_SUCCESSFUL) + if (ChangeDisplaySettings(&g_ddraw.render.mode, CDS_TEST) != DISP_CHANGE_SUCCESSFUL) { /* everything failed, use borderless mode instead */ ChangeDisplaySettings(NULL, 0); @@ -757,7 +757,7 @@ HRESULT dd_SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwFl border = FALSE; /* prevent OpenGL from going automatically into fullscreen exclusive mode */ - if (g_ddraw->renderer == ogl_render_main) + if (g_ddraw.renderer == ogl_render_main) nonexclusive = TRUE; } @@ -770,151 +770,151 @@ HRESULT dd_SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwFl /* Support downscaling in borderless mode */ if (g_config.windowed && g_config.fullscreen) { - if (g_ddraw->width > g_ddraw->mode.dmPelsWidth || - g_ddraw->height > g_ddraw->mode.dmPelsHeight) + if (g_ddraw.width > g_ddraw.mode.dmPelsWidth || + g_ddraw.height > g_ddraw.mode.dmPelsHeight) { /* Downscaling requires adjmouse to be enabled */ g_config.adjmouse = TRUE; - g_ddraw->render.width = g_ddraw->mode.dmPelsWidth; - g_ddraw->render.height = g_ddraw->mode.dmPelsHeight; + g_ddraw.render.width = g_ddraw.mode.dmPelsWidth; + g_ddraw.render.height = g_ddraw.mode.dmPelsHeight; - g_ddraw->render.mode.dmPelsWidth = g_ddraw->render.width; - g_ddraw->render.mode.dmPelsHeight = g_ddraw->render.height; + g_ddraw.render.mode.dmPelsWidth = g_ddraw.render.width; + g_ddraw.render.mode.dmPelsHeight = g_ddraw.render.height; } } - g_ddraw->render.viewport.width = g_ddraw->render.width; - g_ddraw->render.viewport.height = g_ddraw->render.height; - g_ddraw->render.viewport.x = 0; - g_ddraw->render.viewport.y = 0; + g_ddraw.render.viewport.width = g_ddraw.render.width; + g_ddraw.render.viewport.height = g_ddraw.render.height; + g_ddraw.render.viewport.x = 0; + g_ddraw.render.viewport.y = 0; if (g_config.boxing) { - g_ddraw->render.viewport.width = g_ddraw->width; - g_ddraw->render.viewport.height = g_ddraw->height; + g_ddraw.render.viewport.width = g_ddraw.width; + g_ddraw.render.viewport.height = g_ddraw.height; for (int i = 20; i-- > 1;) { - if (g_ddraw->width * i <= g_ddraw->render.width && g_ddraw->height * i <= g_ddraw->render.height) + if (g_ddraw.width * i <= g_ddraw.render.width && g_ddraw.height * i <= g_ddraw.render.height) { - g_ddraw->render.viewport.width *= i; - g_ddraw->render.viewport.height *= i; + g_ddraw.render.viewport.width *= i; + g_ddraw.render.viewport.height *= i; break; } } - g_ddraw->render.viewport.y = g_ddraw->render.height / 2 - g_ddraw->render.viewport.height / 2; - g_ddraw->render.viewport.x = g_ddraw->render.width / 2 - g_ddraw->render.viewport.width / 2; + g_ddraw.render.viewport.y = g_ddraw.render.height / 2 - g_ddraw.render.viewport.height / 2; + g_ddraw.render.viewport.x = g_ddraw.render.width / 2 - g_ddraw.render.viewport.width / 2; } else if (g_config.maintas) { - double dst_ar = (double)g_ddraw->height / g_ddraw->width; - double src_ar = (double)g_ddraw->render.height / g_ddraw->render.width; + double dst_ar = (double)g_ddraw.height / g_ddraw.width; + double src_ar = (double)g_ddraw.render.height / g_ddraw.render.width; - g_ddraw->render.viewport.width = g_ddraw->render.width; - g_ddraw->render.viewport.height = (int)round(dst_ar * g_ddraw->render.viewport.width); + g_ddraw.render.viewport.width = g_ddraw.render.width; + g_ddraw.render.viewport.height = (int)round(dst_ar * g_ddraw.render.viewport.width); if (src_ar < dst_ar) { - g_ddraw->render.viewport.width = - (int)round(((double)g_ddraw->render.viewport.width / g_ddraw->render.viewport.height) * g_ddraw->render.height); + g_ddraw.render.viewport.width = + (int)round(((double)g_ddraw.render.viewport.width / g_ddraw.render.viewport.height) * g_ddraw.render.height); - g_ddraw->render.viewport.height = g_ddraw->render.height; + g_ddraw.render.viewport.height = g_ddraw.render.height; } - g_ddraw->render.viewport.width = min(g_ddraw->render.viewport.width, g_ddraw->render.width); - g_ddraw->render.viewport.height = min(g_ddraw->render.viewport.height, g_ddraw->render.height); + g_ddraw.render.viewport.width = min(g_ddraw.render.viewport.width, g_ddraw.render.width); + g_ddraw.render.viewport.height = min(g_ddraw.render.viewport.height, g_ddraw.render.height); - g_ddraw->render.viewport.y = g_ddraw->render.height / 2 - g_ddraw->render.viewport.height / 2; - g_ddraw->render.viewport.x = g_ddraw->render.width / 2 - g_ddraw->render.viewport.width / 2; + g_ddraw.render.viewport.y = g_ddraw.render.height / 2 - g_ddraw.render.viewport.height / 2; + g_ddraw.render.viewport.x = g_ddraw.render.width / 2 - g_ddraw.render.viewport.width / 2; } - g_ddraw->render.scale_w = ((float)g_ddraw->render.viewport.width / g_ddraw->width); - g_ddraw->render.scale_h = ((float)g_ddraw->render.viewport.height / g_ddraw->height); - g_ddraw->render.unscale_w = ((float)g_ddraw->width / g_ddraw->render.viewport.width); - g_ddraw->render.unscale_h = ((float)g_ddraw->height / g_ddraw->render.viewport.height); + g_ddraw.render.scale_w = ((float)g_ddraw.render.viewport.width / g_ddraw.width); + g_ddraw.render.scale_h = ((float)g_ddraw.render.viewport.height / g_ddraw.height); + g_ddraw.render.unscale_w = ((float)g_ddraw.width / g_ddraw.render.viewport.width); + g_ddraw.render.unscale_h = ((float)g_ddraw.height / g_ddraw.render.viewport.height); - g_ddraw->mouse.scale_x = ((float)(g_ddraw->render.viewport.width - 1) / (g_ddraw->width - 1)); - g_ddraw->mouse.scale_y = ((float)(g_ddraw->render.viewport.height - 1) / (g_ddraw->height - 1)); - g_ddraw->mouse.unscale_x = ((float)(g_ddraw->width - 1) / (g_ddraw->render.viewport.width - 1)); - g_ddraw->mouse.unscale_y = ((float)(g_ddraw->height - 1) / (g_ddraw->render.viewport.height - 1)); + g_ddraw.mouse.scale_x = ((float)(g_ddraw.render.viewport.width - 1) / (g_ddraw.width - 1)); + g_ddraw.mouse.scale_y = ((float)(g_ddraw.render.viewport.height - 1) / (g_ddraw.height - 1)); + g_ddraw.mouse.unscale_x = ((float)(g_ddraw.width - 1) / (g_ddraw.render.viewport.width - 1)); + g_ddraw.mouse.unscale_y = ((float)(g_ddraw.height - 1) / (g_ddraw.render.viewport.height - 1)); - g_ddraw->mouse.x_adjust = g_ddraw->render.viewport.x; - g_ddraw->mouse.y_adjust = g_ddraw->render.viewport.y; + g_ddraw.mouse.x_adjust = g_ddraw.render.viewport.x; + g_ddraw.mouse.y_adjust = g_ddraw.render.viewport.y; - g_ddraw->mouse.rc.left = g_ddraw->mouse.x_adjust; - g_ddraw->mouse.rc.top = g_ddraw->mouse.y_adjust; - g_ddraw->mouse.rc.right = g_ddraw->width + g_ddraw->mouse.x_adjust; - g_ddraw->mouse.rc.bottom = g_ddraw->height + g_ddraw->mouse.y_adjust; + g_ddraw.mouse.rc.left = g_ddraw.mouse.x_adjust; + g_ddraw.mouse.rc.top = g_ddraw.mouse.y_adjust; + g_ddraw.mouse.rc.right = g_ddraw.width + g_ddraw.mouse.x_adjust; + g_ddraw.mouse.rc.bottom = g_ddraw.height + g_ddraw.mouse.y_adjust; if (g_config.adjmouse) { - g_ddraw->mouse.rc.right = g_ddraw->render.viewport.width + g_ddraw->mouse.x_adjust; - g_ddraw->mouse.rc.bottom = g_ddraw->render.viewport.height + g_ddraw->mouse.y_adjust; + g_ddraw.mouse.rc.right = g_ddraw.render.viewport.width + g_ddraw.mouse.x_adjust; + g_ddraw.mouse.rc.bottom = g_ddraw.render.viewport.height + g_ddraw.mouse.y_adjust; } - if (nonexclusive || (g_config.nonexclusive && !g_config.windowed && g_ddraw->renderer == ogl_render_main)) + if (nonexclusive || (g_config.nonexclusive && !g_config.windowed && g_ddraw.renderer == ogl_render_main)) { - g_ddraw->render.height++; - g_ddraw->render.opengl_y_align = 1; + g_ddraw.render.height++; + g_ddraw.render.opengl_y_align = 1; } else { - g_ddraw->render.opengl_y_align = 0; + g_ddraw.render.opengl_y_align = 0; } if (g_config.windowed) { - if (g_config.remove_menu && GetMenu(g_ddraw->hwnd)) - SetMenu(g_ddraw->hwnd, NULL); + if (g_config.remove_menu && GetMenu(g_ddraw.hwnd)) + SetMenu(g_ddraw.hwnd, NULL); if (!g_config.is_wine) { MSG msg; /* workaround for "Not Responding" window problem in cnc games */ - real_PeekMessageA(&msg, g_ddraw->hwnd, 0, 0, PM_NOREMOVE | PM_QS_INPUT); + real_PeekMessageA(&msg, g_ddraw.hwnd, 0, 0, PM_NOREMOVE | PM_QS_INPUT); } if (!border) { real_SetWindowLongA( - g_ddraw->hwnd, + g_ddraw.hwnd, GWL_STYLE, real_GetWindowLongA( - g_ddraw->hwnd, + g_ddraw.hwnd, GWL_STYLE) & ~(WS_CAPTION | WS_THICKFRAME | WS_MINIMIZE | WS_MAXIMIZE | WS_SYSMENU)); - if (GetMenu(g_ddraw->hwnd)) - SetMenu(g_ddraw->hwnd, NULL); + if (GetMenu(g_ddraw.hwnd)) + SetMenu(g_ddraw.hwnd, NULL); } else { real_SetWindowLongA( - g_ddraw->hwnd, + g_ddraw.hwnd, GWL_STYLE, - (real_GetWindowLongA(g_ddraw->hwnd, GWL_STYLE) | WS_OVERLAPPEDWINDOW) & ~WS_MAXIMIZE); + (real_GetWindowLongA(g_ddraw.hwnd, GWL_STYLE) | WS_OVERLAPPEDWINDOW) & ~WS_MAXIMIZE); } - LONG exstyle = real_GetWindowLongA(g_ddraw->hwnd, GWL_EXSTYLE); + LONG exstyle = real_GetWindowLongA(g_ddraw.hwnd, GWL_EXSTYLE); if ((exstyle & WS_EX_TOOLWINDOW)) { - real_SetWindowLongA(g_ddraw->hwnd, GWL_EXSTYLE, exstyle & ~(WS_EX_TOOLWINDOW)); + real_SetWindowLongA(g_ddraw.hwnd, GWL_EXSTYLE, exstyle & ~(WS_EX_TOOLWINDOW)); } if (g_config.is_wine) { real_SetWindowLongA( - g_ddraw->hwnd, + g_ddraw.hwnd, GWL_STYLE, - (real_GetWindowLongA(g_ddraw->hwnd, GWL_STYLE) | WS_MINIMIZEBOX) & ~(WS_MAXIMIZEBOX | WS_THICKFRAME)); + (real_GetWindowLongA(g_ddraw.hwnd, GWL_STYLE) | WS_MINIMIZEBOX) & ~(WS_MAXIMIZEBOX | WS_THICKFRAME)); } /* center the window with correct dimensions */ - int cy = g_ddraw->mode.dmPelsWidth ? g_ddraw->mode.dmPelsWidth : g_ddraw->render.width; - int cx = g_ddraw->mode.dmPelsHeight ? g_ddraw->mode.dmPelsHeight : g_ddraw->render.height; - int x = (g_config.window_rect.left != -32000) ? g_config.window_rect.left : (cy / 2) - (g_ddraw->render.width / 2); - int y = (g_config.window_rect.top != -32000) ? g_config.window_rect.top : (cx / 2) - (g_ddraw->render.height / 2); + int cy = g_ddraw.mode.dmPelsWidth ? g_ddraw.mode.dmPelsWidth : g_ddraw.render.width; + int cx = g_ddraw.mode.dmPelsHeight ? g_ddraw.mode.dmPelsHeight : g_ddraw.render.height; + int x = (g_config.window_rect.left != -32000) ? g_config.window_rect.left : (cy / 2) - (g_ddraw.render.width / 2); + int y = (g_config.window_rect.top != -32000) ? g_config.window_rect.top : (cx / 2) - (g_ddraw.render.height / 2); if (g_config.fullscreen) { @@ -926,18 +926,18 @@ HRESULT dd_SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwFl y = real_GetSystemMetrics(SM_CYCAPTION) + real_GetSystemMetrics(SM_CYSIZEFRAME); } - if (util_is_minimized(g_ddraw->hwnd)) - real_ShowWindow(g_ddraw->hwnd, SW_RESTORE); + if (util_is_minimized(g_ddraw.hwnd)) + real_ShowWindow(g_ddraw.hwnd, SW_RESTORE); - RECT dst = { x, y, g_ddraw->render.width + x, g_ddraw->render.height + y }; + RECT dst = { x, y, g_ddraw.render.width + x, g_ddraw.render.height + y }; - LONG style = real_GetWindowLongA(g_ddraw->hwnd, GWL_STYLE); - exstyle = real_GetWindowLongA(g_ddraw->hwnd, GWL_EXSTYLE); + LONG style = real_GetWindowLongA(g_ddraw.hwnd, GWL_STYLE); + exstyle = real_GetWindowLongA(g_ddraw.hwnd, GWL_EXSTYLE); - AdjustWindowRectEx(&dst, style, GetMenu(g_ddraw->hwnd) != NULL, exstyle); + AdjustWindowRectEx(&dst, style, GetMenu(g_ddraw.hwnd) != NULL, exstyle); real_SetWindowPos( - g_ddraw->hwnd, + g_ddraw.hwnd, HWND_NOTOPMOST, dst.left, dst.top, @@ -948,27 +948,27 @@ HRESULT dd_SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwFl BOOL d3d9_active = FALSE; - if (g_ddraw->renderer == d3d9_render_main) + if (g_ddraw.renderer == d3d9_render_main) { d3d9_active = d3d9_create(); if (!d3d9_active) { d3d9_release(); - g_ddraw->show_driver_warning = TRUE; - g_ddraw->renderer = gdi_render_main; + g_ddraw.show_driver_warning = TRUE; + g_ddraw.renderer = gdi_render_main; } } - if (lock_mouse || (g_config.fullscreen && real_GetForegroundWindow() == g_ddraw->hwnd)) + if (lock_mouse || (g_config.fullscreen && real_GetForegroundWindow() == g_ddraw.hwnd)) mouse_lock(); } else { - if (GetMenu(g_ddraw->hwnd)) - SetMenu(g_ddraw->hwnd, NULL); + if (GetMenu(g_ddraw.hwnd)) + SetMenu(g_ddraw.hwnd, NULL); - LONG style = real_GetWindowLongA(g_ddraw->hwnd, GWL_STYLE); + LONG style = real_GetWindowLongA(g_ddraw.hwnd, GWL_STYLE); DWORD swp_flags = SWP_SHOWWINDOW; @@ -977,34 +977,34 @@ HRESULT dd_SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwFl swp_flags |= SWP_FRAMECHANGED; real_SetWindowLongA( - g_ddraw->hwnd, + g_ddraw.hwnd, GWL_STYLE, style & ~(WS_CAPTION | WS_THICKFRAME | WS_MINIMIZE | WS_MAXIMIZE | WS_SYSMENU)); } - LONG exstyle = real_GetWindowLongA(g_ddraw->hwnd, GWL_EXSTYLE); + LONG exstyle = real_GetWindowLongA(g_ddraw.hwnd, GWL_EXSTYLE); if ((exstyle & WS_EX_TOOLWINDOW)) { - real_SetWindowLongA(g_ddraw->hwnd, GWL_EXSTYLE, exstyle & ~(WS_EX_TOOLWINDOW)); + real_SetWindowLongA(g_ddraw.hwnd, GWL_EXSTYLE, exstyle & ~(WS_EX_TOOLWINDOW)); } BOOL d3d9_active = FALSE; - if (g_ddraw->renderer == d3d9_render_main) + if (g_ddraw.renderer == d3d9_render_main) { if (g_config.nonexclusive) { - if (util_is_minimized(g_ddraw->hwnd)) - real_ShowWindow(g_ddraw->hwnd, SW_RESTORE); + if (util_is_minimized(g_ddraw.hwnd)) + real_ShowWindow(g_ddraw.hwnd, SW_RESTORE); real_SetWindowPos( - g_ddraw->hwnd, + g_ddraw.hwnd, HWND_TOPMOST, 0, 0, - g_ddraw->render.width, - g_ddraw->render.height, + g_ddraw.render.width, + g_ddraw.render.height, swp_flags); swp_flags = SWP_SHOWWINDOW; @@ -1015,16 +1015,16 @@ HRESULT dd_SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwFl if (!d3d9_active) { d3d9_release(); - g_ddraw->show_driver_warning = TRUE; - g_ddraw->renderer = gdi_render_main; + g_ddraw.show_driver_warning = TRUE; + g_ddraw.renderer = gdi_render_main; } } if (!d3d9_active || g_config.nonexclusive) { - if (ChangeDisplaySettings(&g_ddraw->render.mode, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL) + if (ChangeDisplaySettings(&g_ddraw.render.mode, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL) { - g_ddraw->render.run = FALSE; + g_ddraw.render.run = FALSE; g_config.windowed = TRUE; g_config.fullscreen = TRUE; return dd_SetDisplayMode(dwWidth, dwHeight, dwBPP, dwFlags); @@ -1035,12 +1035,12 @@ HRESULT dd_SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwFl ChangeDisplaySettings fails silently - enable borderless mode in case display resolution was not changed */ if (g_config.is_wine && - (g_ddraw->render.mode.dmPelsWidth != real_GetSystemMetrics(SM_CXSCREEN) || - g_ddraw->render.mode.dmPelsHeight != real_GetSystemMetrics(SM_CYSCREEN))) + (g_ddraw.render.mode.dmPelsWidth != real_GetSystemMetrics(SM_CXSCREEN) || + g_ddraw.render.mode.dmPelsHeight != real_GetSystemMetrics(SM_CYSCREEN))) { ChangeDisplaySettings(NULL, 0); - g_ddraw->render.run = FALSE; + g_ddraw.render.run = FALSE; g_config.windowed = TRUE; g_config.fullscreen = TRUE; return dd_SetDisplayMode(dwWidth, dwHeight, dwBPP, dwFlags); @@ -1050,53 +1050,53 @@ HRESULT dd_SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwFl if (g_config.is_wine) { real_SetWindowLongA( - g_ddraw->hwnd, + g_ddraw.hwnd, GWL_STYLE, - real_GetWindowLongA(g_ddraw->hwnd, GWL_STYLE) | WS_MINIMIZEBOX); + real_GetWindowLongA(g_ddraw.hwnd, GWL_STYLE) | WS_MINIMIZEBOX); } - if (util_is_minimized(g_ddraw->hwnd)) - real_ShowWindow(g_ddraw->hwnd, SW_RESTORE); + if (util_is_minimized(g_ddraw.hwnd)) + real_ShowWindow(g_ddraw.hwnd, SW_RESTORE); real_SetWindowPos( - g_ddraw->hwnd, + g_ddraw.hwnd, HWND_TOPMOST, 0, 0, - g_ddraw->render.width, - g_ddraw->render.height, + g_ddraw.render.width, + g_ddraw.render.height, swp_flags); if (d3d9_active && g_config.nonexclusive) d3d9_reset(TRUE); - g_ddraw->last_set_window_pos_tick = timeGetTime(); + g_ddraw.last_set_window_pos_tick = timeGetTime(); mouse_lock(); } - RedrawWindow(g_ddraw->hwnd, NULL, NULL, RDW_ERASE | RDW_INVALIDATE); + RedrawWindow(g_ddraw.hwnd, NULL, NULL, RDW_ERASE | RDW_INVALIDATE); - if (g_ddraw->render.viewport.x != 0 || g_ddraw->render.viewport.y != 0) + if (g_ddraw.render.viewport.x != 0 || g_ddraw.render.viewport.y != 0) { - InterlockedExchange(&g_ddraw->render.clear_screen, TRUE); + InterlockedExchange(&g_ddraw.render.clear_screen, TRUE); } - if (g_ddraw->render.thread == NULL) + if (g_ddraw.render.thread == NULL) { - InterlockedExchange(&g_ddraw->render.palette_updated, TRUE); - InterlockedExchange(&g_ddraw->render.surface_updated, TRUE); - ReleaseSemaphore(g_ddraw->render.sem, 1, NULL); + InterlockedExchange(&g_ddraw.render.palette_updated, TRUE); + InterlockedExchange(&g_ddraw.render.surface_updated, TRUE); + ReleaseSemaphore(g_ddraw.render.sem, 1, NULL); - g_ddraw->render.thread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)g_ddraw->renderer, NULL, 0, NULL); - SetThreadPriority(g_ddraw->render.thread, THREAD_PRIORITY_ABOVE_NORMAL); + g_ddraw.render.thread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)g_ddraw.renderer, NULL, 0, NULL); + SetThreadPriority(g_ddraw.render.thread, THREAD_PRIORITY_ABOVE_NORMAL); } if ((dwFlags & SDM_MODE_SET_BY_GAME) && !g_config.infantryhack) { - real_SendMessageA(g_ddraw->hwnd, WM_SIZE_DDRAW, 0, MAKELPARAM(g_ddraw->width, g_ddraw->height)); - real_SendMessageA(g_ddraw->hwnd, WM_MOVE_DDRAW, 0, MAKELPARAM(0, 0)); - real_SendMessageA(g_ddraw->hwnd, WM_DISPLAYCHANGE_DDRAW, g_ddraw->bpp, MAKELPARAM(g_ddraw->width, g_ddraw->height)); + real_SendMessageA(g_ddraw.hwnd, WM_SIZE_DDRAW, 0, MAKELPARAM(g_ddraw.width, g_ddraw.height)); + real_SendMessageA(g_ddraw.hwnd, WM_MOVE_DDRAW, 0, MAKELPARAM(0, 0)); + real_SendMessageA(g_ddraw.hwnd, WM_DISPLAYCHANGE_DDRAW, g_ddraw.bpp, MAKELPARAM(g_ddraw.width, g_ddraw.height)); } return DD_OK; @@ -1111,21 +1111,21 @@ HRESULT dd_SetCooperativeLevel(HWND hwnd, DWORD dwFlags) return DD_OK; } - if (g_ddraw->hwnd == NULL) + if (g_ddraw.hwnd == NULL) { - g_ddraw->hwnd = hwnd; + g_ddraw.hwnd = hwnd; } - if (!g_ddraw->wndproc) + if (!g_ddraw.wndproc) { hook_init(FALSE); - g_ddraw->wndproc = (WNDPROC)real_SetWindowLongA(g_ddraw->hwnd, GWL_WNDPROC, (LONG)fake_WndProc); - g_ddraw->gui_thread_id = GetWindowThreadProcessId(g_ddraw->hwnd, NULL); + g_ddraw.wndproc = (WNDPROC)real_SetWindowLongA(g_ddraw.hwnd, GWL_WNDPROC, (LONG)fake_WndProc); + g_ddraw.gui_thread_id = GetWindowThreadProcessId(g_ddraw.hwnd, NULL); - if (!g_ddraw->render.hdc) + if (!g_ddraw.render.hdc) { - g_ddraw->render.hdc = GetDC(g_ddraw->hwnd); + g_ddraw.render.hdc = GetDC(g_ddraw.hwnd); PIXELFORMATDESCRIPTOR pfd; memset(&pfd, 0, sizeof(PIXELFORMATDESCRIPTOR)); @@ -1133,13 +1133,13 @@ HRESULT dd_SetCooperativeLevel(HWND hwnd, DWORD dwFlags) pfd.nVersion = 1; pfd.dwFlags = - PFD_DRAW_TO_WINDOW | PFD_DOUBLEBUFFER | (g_ddraw->renderer == ogl_render_main ? PFD_SUPPORT_OPENGL : 0); + PFD_DRAW_TO_WINDOW | PFD_DOUBLEBUFFER | (g_ddraw.renderer == ogl_render_main ? PFD_SUPPORT_OPENGL : 0); pfd.iPixelType = PFD_TYPE_RGBA; - pfd.cColorBits = g_ddraw->mode.dmBitsPerPel; + pfd.cColorBits = g_ddraw.mode.dmBitsPerPel; pfd.iLayerType = PFD_MAIN_PLANE; - SetPixelFormat(g_ddraw->render.hdc, ChoosePixelFormat(g_ddraw->render.hdc, &pfd), &pfd); + SetPixelFormat(g_ddraw.render.hdc, ChoosePixelFormat(g_ddraw.render.hdc, &pfd), &pfd); } if (!g_config.devmode) @@ -1147,11 +1147,11 @@ HRESULT dd_SetCooperativeLevel(HWND hwnd, DWORD dwFlags) HCURSOR cursor = real_SetCursor(LoadCursor(NULL, IDC_ARROW)); if (cursor != LoadCursor(NULL, IDC_WAIT)) - InterlockedExchange((LONG*)&g_ddraw->old_cursor, (LONG)cursor); + InterlockedExchange((LONG*)&g_ddraw.old_cursor, (LONG)cursor); } int cursor_count = real_ShowCursor(TRUE) - 1; - InterlockedExchange((LONG*)&g_ddraw->show_cursor_count, cursor_count); + InterlockedExchange((LONG*)&g_ddraw.show_cursor_count, cursor_count); real_ShowCursor(FALSE); /* Make sure the cursor is visible in windowed mode initially */ @@ -1166,24 +1166,24 @@ HRESULT dd_SetCooperativeLevel(HWND hwnd, DWORD dwFlags) real_ClipCursor(NULL); } - GetWindowText(g_ddraw->hwnd, (LPTSTR)&g_ddraw->title, sizeof(g_ddraw->title)); + GetWindowText(g_ddraw.hwnd, (LPTSTR)&g_ddraw.title, sizeof(g_ddraw.title)); - g_ddraw->isredalert = strcmp(g_ddraw->title, "Red Alert") == 0; - g_ddraw->iscnc1 = strcmp(g_ddraw->title, "Command & Conquer") == 0; - g_ddraw->iskkndx = strcmp(g_ddraw->title, "KKND Xtreme") == 0; + g_ddraw.isredalert = strcmp(g_ddraw.title, "Red Alert") == 0; + g_ddraw.iscnc1 = strcmp(g_ddraw.title, "Command & Conquer") == 0; + g_ddraw.iskkndx = strcmp(g_ddraw.title, "KKND Xtreme") == 0; - if (g_ddraw->iskkndx) + if (g_ddraw.iskkndx) { - g_ddraw->upscale_hack_width = 640; - g_ddraw->upscale_hack_height = 480; + g_ddraw.upscale_hack_width = 640; + g_ddraw.upscale_hack_height = 480; } - else if (g_ddraw->isredalert || g_ddraw->iscnc1) + else if (g_ddraw.isredalert || g_ddraw.iscnc1) { - g_ddraw->upscale_hack_width = 640; - g_ddraw->upscale_hack_height = 400; + g_ddraw.upscale_hack_width = 640; + g_ddraw.upscale_hack_height = 400; } - if (g_config.vhack && !g_ddraw->isredalert && !g_ddraw->iscnc1 && !g_ddraw->iskkndx) + if (g_config.vhack && !g_ddraw.isredalert && !g_ddraw.iscnc1 && !g_ddraw.iskkndx) { g_config.vhack = 0; } @@ -1204,7 +1204,7 @@ HRESULT dd_SetCooperativeLevel(HWND hwnd, DWORD dwFlags) windowed = g_config.windowed; fullscreen = g_config.fullscreen; - if (GetMenu(g_ddraw->hwnd) != NULL) + if (GetMenu(g_ddraw.hwnd) != NULL) { g_config.windowed = TRUE; g_config.fullscreen = FALSE; @@ -1233,25 +1233,25 @@ HRESULT dd_WaitForVerticalBlank(DWORD dwFlags, HANDLE hEvent) return DD_OK; } - if (!g_ddraw->flip_limiter.tick_length) + if (!g_ddraw.flip_limiter.tick_length) return DD_OK; - if (g_ddraw->flip_limiter.htimer) + if (g_ddraw.flip_limiter.htimer) { FILETIME ft = { 0 }; GetSystemTimeAsFileTime(&ft); - if (CompareFileTime((FILETIME*)&g_ddraw->flip_limiter.due_time, &ft) == -1) + if (CompareFileTime((FILETIME*)&g_ddraw.flip_limiter.due_time, &ft) == -1) { - memcpy(&g_ddraw->flip_limiter.due_time, &ft, sizeof(LARGE_INTEGER)); + memcpy(&g_ddraw.flip_limiter.due_time, &ft, sizeof(LARGE_INTEGER)); } else { - WaitForSingleObject(g_ddraw->flip_limiter.htimer, g_ddraw->flip_limiter.tick_length * 2); + WaitForSingleObject(g_ddraw.flip_limiter.htimer, g_ddraw.flip_limiter.tick_length * 2); } - g_ddraw->flip_limiter.due_time.QuadPart += g_ddraw->flip_limiter.tick_length_ns; - SetWaitableTimer(g_ddraw->flip_limiter.htimer, &g_ddraw->flip_limiter.due_time, 0, NULL, NULL, FALSE); + g_ddraw.flip_limiter.due_time.QuadPart += g_ddraw.flip_limiter.tick_length_ns; + SetWaitableTimer(g_ddraw.flip_limiter.htimer, &g_ddraw.flip_limiter.due_time, 0, NULL, NULL, FALSE); } else { @@ -1263,12 +1263,12 @@ HRESULT dd_WaitForVerticalBlank(DWORD dwFlags, HANDLE hEvent) return DD_OK; } - next_game_tick += g_ddraw->flip_limiter.tick_length; + next_game_tick += g_ddraw.flip_limiter.tick_length; DWORD tick_count = timeGetTime(); int sleep_time = next_game_tick - tick_count; - if (sleep_time <= 0 || sleep_time > g_ddraw->flip_limiter.tick_length) + if (sleep_time <= 0 || sleep_time > g_ddraw.flip_limiter.tick_length) { next_game_tick = tick_count; } @@ -1283,37 +1283,37 @@ HRESULT dd_WaitForVerticalBlank(DWORD dwFlags, HANDLE hEvent) ULONG dd_AddRef() { - return ++g_ddraw->ref; + return InterlockedIncrement(&g_ddraw.ref); } ULONG dd_Release() { - g_ddraw->ref--; + LONG ref = InterlockedDecrement(&g_ddraw.ref); - if (g_ddraw->ref == 0) + if (ref == 0) { - if (g_ddraw->bpp) + if (g_ddraw.bpp) { cfg_save(); } - if (g_ddraw->render.run) + if (g_ddraw.render.run) { - EnterCriticalSection(&g_ddraw->cs); - g_ddraw->render.run = FALSE; - ReleaseSemaphore(g_ddraw->render.sem, 1, NULL); - LeaveCriticalSection(&g_ddraw->cs); + EnterCriticalSection(&g_ddraw.cs); + g_ddraw.render.run = FALSE; + ReleaseSemaphore(g_ddraw.render.sem, 1, NULL); + LeaveCriticalSection(&g_ddraw.cs); - if (g_ddraw->render.thread) + if (g_ddraw.render.thread) { - WaitForSingleObject(g_ddraw->render.thread, INFINITE); - g_ddraw->render.thread = NULL; + WaitForSingleObject(g_ddraw.render.thread, INFINITE); + g_ddraw.render.thread = NULL; } } if (!g_config.windowed) { - if (g_ddraw->renderer == d3d9_render_main && !g_config.nonexclusive) + if (g_ddraw.renderer == d3d9_render_main && !g_config.nonexclusive) { if (!d3d9_reset(TRUE)) d3d9_release(); @@ -1324,24 +1324,24 @@ ULONG dd_Release() } } - if (g_ddraw->render.hdc) + if (g_ddraw.render.hdc) { - ReleaseDC(g_ddraw->hwnd, g_ddraw->render.hdc); - g_ddraw->render.hdc = NULL; + ReleaseDC(g_ddraw.hwnd, g_ddraw.render.hdc); + g_ddraw.render.hdc = NULL; } - if (g_ddraw->ticks_limiter.htimer) + if (g_ddraw.ticks_limiter.htimer) { - CancelWaitableTimer(g_ddraw->ticks_limiter.htimer); - CloseHandle(g_ddraw->ticks_limiter.htimer); - g_ddraw->ticks_limiter.htimer = NULL; + CancelWaitableTimer(g_ddraw.ticks_limiter.htimer); + CloseHandle(g_ddraw.ticks_limiter.htimer); + g_ddraw.ticks_limiter.htimer = NULL; } - if (g_ddraw->flip_limiter.htimer) + if (g_ddraw.flip_limiter.htimer) { - CancelWaitableTimer(g_ddraw->flip_limiter.htimer); - CloseHandle(g_ddraw->flip_limiter.htimer); - g_ddraw->flip_limiter.htimer = NULL; + CancelWaitableTimer(g_ddraw.flip_limiter.htimer); + CloseHandle(g_ddraw.flip_limiter.htimer); + g_ddraw.flip_limiter.htimer = NULL; } if (g_fpsl.htimer) @@ -1351,26 +1351,31 @@ ULONG dd_Release() g_fpsl.htimer = NULL; } - if (g_ddraw->real_dd) + if (g_ddraw.real_dd) { - g_ddraw->real_dd->lpVtbl->Release(g_ddraw->real_dd); + g_ddraw.real_dd->lpVtbl->Release(g_ddraw.real_dd); } - DeleteCriticalSection(&g_ddraw->cs); + DeleteCriticalSection(&g_ddraw.cs); /* restore old wndproc, subsequent ddraw creation will otherwise fail */ - if (g_ddraw->hwnd) + if (g_ddraw.hwnd) { - real_SetWindowLongA(g_ddraw->hwnd, GWL_WNDPROC, (LONG)g_ddraw->wndproc); + real_SetWindowLongA(g_ddraw.hwnd, GWL_WNDPROC, (LONG)g_ddraw.wndproc); } - - HeapFree(GetProcessHeap(), 0, g_ddraw); - g_ddraw = NULL; - + + memset(&g_ddraw, 0, sizeof(g_ddraw)); + return 0; } - return g_ddraw->ref; + if (ref < 0) + { + InterlockedExchange(&g_ddraw.ref, 0); + return 0; + } + + return (ULONG)ref; } HRESULT dd_GetAvailableVidMem(LPDDSCAPS lpDDCaps, LPDWORD lpdwTotal, LPDWORD lpdwFree) @@ -1411,42 +1416,41 @@ HRESULT dd_GetDeviceIdentifier(LPDDDEVICEIDENTIFIER pDDDI, DWORD dwFlags, REFIID HRESULT dd_CreateEx(GUID* lpGuid, LPVOID* lplpDD, REFIID iid, IUnknown* pUnkOuter) { - if (!g_ddraw) + if (InterlockedExchangeAdd((LONG*)&g_ddraw.ref, 0) == 0) { - g_ddraw = (CNCDDRAW*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(CNCDDRAW)); - g_ddraw->ref++; + InterlockedIncrement(&g_ddraw.ref); - InitializeCriticalSection(&g_ddraw->cs); + InitializeCriticalSection(&g_ddraw.cs); - g_ddraw->render.sem = CreateSemaphore(NULL, 0, 1, NULL); + g_ddraw.render.sem = CreateSemaphore(NULL, 0, 1, NULL); g_blt_use_avx = util_is_avx_supported(); if (g_config.minfps > 1000) g_config.minfps = 1000; if (g_config.minfps > 0) - g_ddraw->minfps_tick_len = (DWORD)(1000.0f / g_config.minfps); + g_ddraw.minfps_tick_len = (DWORD)(1000.0f / g_config.minfps); - /* can't fully set it up here due to missing g_ddraw->mode.dmDisplayFrequency */ + /* can't fully set it up here due to missing g_ddraw.mode.dmDisplayFrequency */ g_fpsl.htimer = CreateWaitableTimer(NULL, TRUE, NULL); if (g_config.maxgameticks > 0 && g_config.maxgameticks <= 1000) { - g_ddraw->ticks_limiter.htimer = CreateWaitableTimer(NULL, TRUE, NULL); + g_ddraw.ticks_limiter.htimer = CreateWaitableTimer(NULL, TRUE, NULL); float len = 1000.0f / g_config.maxgameticks; - g_ddraw->ticks_limiter.tick_length_ns = (LONGLONG)(len * 10000); - g_ddraw->ticks_limiter.tick_length = (DWORD)(len + 0.5f); + g_ddraw.ticks_limiter.tick_length_ns = (LONGLONG)(len * 10000); + g_ddraw.ticks_limiter.tick_length = (DWORD)(len + 0.5f); } if (g_config.maxgameticks >= 0 || g_config.maxgameticks == -2) { /* always using 60 fps for flip... */ - g_ddraw->flip_limiter.htimer = CreateWaitableTimer(NULL, TRUE, NULL); + g_ddraw.flip_limiter.htimer = CreateWaitableTimer(NULL, TRUE, NULL); float flip_len = 1000.0f / 60; - g_ddraw->flip_limiter.tick_length_ns = (LONGLONG)(flip_len * 10000); - g_ddraw->flip_limiter.tick_length = (DWORD)(flip_len + 0.5f); + g_ddraw.flip_limiter.tick_length_ns = (LONGLONG)(flip_len * 10000); + g_ddraw.flip_limiter.tick_length = (DWORD)(flip_len + 0.5f); } @@ -1480,42 +1484,45 @@ HRESULT dd_CreateEx(GUID* lpGuid, LPVOID* lplpDD, REFIID iid, IUnknown* pUnkOute if (tolower(g_config.renderer[0]) == 'd') /* direct3d9 or direct3d9on12*/ { - g_ddraw->renderer = d3d9_render_main; + g_ddraw.renderer = d3d9_render_main; } else if (tolower(g_config.renderer[0]) == 's' || tolower(g_config.renderer[0]) == 'g') /* gdi */ { - g_ddraw->renderer = gdi_render_main; + g_ddraw.renderer = gdi_render_main; } else if (tolower(g_config.renderer[0]) == 'o') /* opengl or openglcore */ { if (oglu_load_dll()) { - g_ddraw->renderer = ogl_render_main; + g_ddraw.renderer = ogl_render_main; } else { - g_ddraw->show_driver_warning = TRUE; - g_ddraw->renderer = gdi_render_main; + g_ddraw.show_driver_warning = TRUE; + g_ddraw.renderer = gdi_render_main; } } else /* auto */ { if (!g_config.is_wine && d3d9_is_available()) { - g_ddraw->renderer = d3d9_render_main; + g_ddraw.renderer = d3d9_render_main; } else if (oglu_load_dll()) { - g_ddraw->renderer = ogl_render_main; + g_ddraw.renderer = ogl_render_main; } else { - g_ddraw->show_driver_warning = TRUE; - g_ddraw->renderer = gdi_render_main; + g_ddraw.show_driver_warning = TRUE; + g_ddraw.renderer = gdi_render_main; } } - g_ddraw->ref--; + LONG ref = InterlockedDecrement(&g_ddraw.ref); + + if (ref < 0) + InterlockedExchange(&g_ddraw.ref, 0); } IDirectDrawImpl* dd = (IDirectDrawImpl*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectDrawImpl)); diff --git a/src/ddpalette.c b/src/ddpalette.c index 3a7b52c..ed2b858 100644 --- a/src/ddpalette.c +++ b/src/ddpalette.c @@ -57,10 +57,10 @@ HRESULT ddp_SetEntries( This->data_rgb[255].rgbReserved = 0; } - if (g_ddraw && g_ddraw->primary && g_ddraw->primary->palette == This && g_ddraw->render.run) + if (g_ddraw.ref && g_ddraw.primary && g_ddraw.primary->palette == This && g_ddraw.render.run) { - InterlockedExchange(&g_ddraw->render.palette_updated, TRUE); - ReleaseSemaphore(g_ddraw->render.sem, 1, NULL); + InterlockedExchange(&g_ddraw.render.palette_updated, TRUE); + ReleaseSemaphore(g_ddraw.render.sem, 1, NULL); } return DD_OK; diff --git a/src/ddsurface.c b/src/ddsurface.c index b45cc75..d7176c2 100644 --- a/src/ddsurface.c +++ b/src/ddsurface.c @@ -48,8 +48,8 @@ HRESULT dds_Blt( dbg_dump_dds_blt_flags(dwFlags); dbg_dump_dds_blt_fx_flags((dwFlags & DDBLT_DDFX) && lpDDBltFx ? lpDDBltFx->dwDDFX : 0); - if (g_ddraw && - g_ddraw->iskkndx && + if (g_ddraw.ref && + g_ddraw.iskkndx && (dwFlags & DDBLT_COLORFILL) && lpDestRect && lpDestRect->right == 640 && @@ -261,7 +261,7 @@ HRESULT dds_Blt( { RGBQUAD* quad = src_surface->palette ? src_surface->palette->data_rgb : - g_ddraw && g_ddraw->primary && g_ddraw->primary->palette ? g_ddraw->primary->palette->data_rgb : + g_ddraw.ref && g_ddraw.primary && g_ddraw.primary->palette ? g_ddraw.primary->palette->data_rgb : NULL; if (quad) @@ -404,20 +404,20 @@ HRESULT dds_Blt( } } - if ((This->caps & DDSCAPS_PRIMARYSURFACE) && g_ddraw && g_ddraw->render.run) + if ((This->caps & DDSCAPS_PRIMARYSURFACE) && g_ddraw.ref && g_ddraw.render.run) { - InterlockedExchange(&g_ddraw->render.surface_updated, TRUE); + InterlockedExchange(&g_ddraw.render.surface_updated, TRUE); if (!(This->flags & DDSD_BACKBUFFERCOUNT) || This->last_flip_tick + FLIP_REDRAW_TIMEOUT < timeGetTime()) { This->last_blt_tick = timeGetTime(); - ReleaseSemaphore(g_ddraw->render.sem, 1, NULL); + ReleaseSemaphore(g_ddraw.render.sem, 1, NULL); SwitchToThread(); - if (g_ddraw->ticks_limiter.tick_length > 0) + if (g_ddraw.ticks_limiter.tick_length > 0) { - g_ddraw->ticks_limiter.use_blt_or_flip = TRUE; + g_ddraw.ticks_limiter.use_blt_or_flip = TRUE; util_limit_game_ticks(); } } @@ -557,7 +557,7 @@ HRESULT dds_BltFast( { RGBQUAD* quad = src_surface->palette ? src_surface->palette->data_rgb : - g_ddraw && g_ddraw->primary && g_ddraw->primary->palette ? g_ddraw->primary->palette->data_rgb : + g_ddraw.ref && g_ddraw.primary && g_ddraw.primary->palette ? g_ddraw.primary->palette->data_rgb : NULL; if (quad) @@ -637,20 +637,20 @@ HRESULT dds_BltFast( } } - if ((This->caps & DDSCAPS_PRIMARYSURFACE) && g_ddraw && g_ddraw->render.run) + if ((This->caps & DDSCAPS_PRIMARYSURFACE) && g_ddraw.ref && g_ddraw.render.run) { - InterlockedExchange(&g_ddraw->render.surface_updated, TRUE); + InterlockedExchange(&g_ddraw.render.surface_updated, TRUE); DWORD time = timeGetTime(); if (!(This->flags & DDSD_BACKBUFFERCOUNT) || (This->last_flip_tick + FLIP_REDRAW_TIMEOUT < time && This->last_blt_tick + FLIP_REDRAW_TIMEOUT < time)) { - ReleaseSemaphore(g_ddraw->render.sem, 1, NULL); + ReleaseSemaphore(g_ddraw.render.sem, 1, NULL); - if (g_config.limit_bltfast && g_ddraw->ticks_limiter.tick_length > 0) + if (g_config.limit_bltfast && g_ddraw.ticks_limiter.tick_length > 0) { - g_ddraw->ticks_limiter.use_blt_or_flip = TRUE; + g_ddraw.ticks_limiter.use_blt_or_flip = TRUE; util_limit_game_ticks(); } } @@ -749,7 +749,7 @@ HRESULT dds_Flip(IDirectDrawSurfaceImpl* This, IDirectDrawSurfaceImpl* lpDDSurfa if (This->backbuffer && !This->skip_flip) { - EnterCriticalSection(&g_ddraw->cs); + EnterCriticalSection(&g_ddraw.cs); IDirectDrawSurfaceImpl* backbuffer = lpDDSurfaceTargetOverride ? lpDDSurfaceTargetOverride : This->backbuffer; void* buf = InterlockedExchangePointer(&This->surface, backbuffer->surface); @@ -767,7 +767,7 @@ HRESULT dds_Flip(IDirectDrawSurfaceImpl* This, IDirectDrawSurfaceImpl* lpDDSurfa blt_clear(buf, 0, backbuffer->size); } - LeaveCriticalSection(&g_ddraw->cs); + LeaveCriticalSection(&g_ddraw.cs); if (!lpDDSurfaceTargetOverride && This->backbuffer->backbuffer) { @@ -777,12 +777,12 @@ HRESULT dds_Flip(IDirectDrawSurfaceImpl* This, IDirectDrawSurfaceImpl* lpDDSurfa This->skip_flip = FALSE; - if ((This->caps & DDSCAPS_PRIMARYSURFACE) && g_ddraw && g_ddraw->render.run) + if ((This->caps & DDSCAPS_PRIMARYSURFACE) && g_ddraw.ref && g_ddraw.render.run) { This->last_flip_tick = timeGetTime(); - InterlockedExchange(&g_ddraw->render.surface_updated, TRUE); - ReleaseSemaphore(g_ddraw->render.sem, 1, NULL); + InterlockedExchange(&g_ddraw.render.surface_updated, TRUE); + ReleaseSemaphore(g_ddraw.render.sem, 1, NULL); SwitchToThread(); if ((g_config.maxgameticks == 0 && (dwFlags & DDFLIP_WAIT)) || g_config.maxgameticks == -2) @@ -790,9 +790,9 @@ HRESULT dds_Flip(IDirectDrawSurfaceImpl* This, IDirectDrawSurfaceImpl* lpDDSurfa dd_WaitForVerticalBlank(DDWAITVB_BLOCKEND, NULL); } - if (g_ddraw->ticks_limiter.tick_length > 0) + if (g_ddraw.ticks_limiter.tick_length > 0) { - g_ddraw->ticks_limiter.use_blt_or_flip = TRUE; + g_ddraw.ticks_limiter.use_blt_or_flip = TRUE; util_limit_game_ticks(); } } @@ -877,7 +877,7 @@ HRESULT dds_GetDC(IDirectDrawSurfaceImpl* This, HDC FAR* lpHDC) RGBQUAD* data = This->palette ? This->palette->data_rgb : - g_ddraw && g_ddraw->primary && g_ddraw->primary->palette ? g_ddraw->primary->palette->data_rgb : + g_ddraw.ref && g_ddraw.primary && g_ddraw.primary->palette ? g_ddraw.primary->palette->data_rgb : NULL; HDC dc = This->hdc; @@ -957,10 +957,10 @@ HRESULT dds_Lock( dbg_dump_dds_lock_flags(dwFlags); - if (g_ddraw && g_config.fixnotresponding && !g_config.is_wine) + if (g_ddraw.ref && g_config.fixnotresponding && !g_config.is_wine) { MSG msg; /* workaround for "Not Responding" window problem */ - real_PeekMessageA(&msg, g_ddraw->hwnd, 0, 0, PM_NOREMOVE); + real_PeekMessageA(&msg, g_ddraw.hwnd, 0, 0, PM_NOREMOVE); } HRESULT ret = dds_GetSurfaceDesc(This, lpDDSurfaceDesc); @@ -988,16 +988,16 @@ HRESULT dds_Lock( HRESULT dds_ReleaseDC(IDirectDrawSurfaceImpl* This, HDC hDC) { - if ((This->caps & DDSCAPS_PRIMARYSURFACE) && g_ddraw && g_ddraw->render.run) + if ((This->caps & DDSCAPS_PRIMARYSURFACE) && g_ddraw.ref && g_ddraw.render.run) { - InterlockedExchange(&g_ddraw->render.surface_updated, TRUE); + InterlockedExchange(&g_ddraw.render.surface_updated, TRUE); DWORD time = timeGetTime(); if (!(This->flags & DDSD_BACKBUFFERCOUNT) || (This->last_flip_tick + FLIP_REDRAW_TIMEOUT < time && This->last_blt_tick + FLIP_REDRAW_TIMEOUT < time)) { - ReleaseSemaphore(g_ddraw->render.sem, 1, NULL); + ReleaseSemaphore(g_ddraw.render.sem, 1, NULL); } } @@ -1061,16 +1061,16 @@ HRESULT dds_SetPalette(IDirectDrawSurfaceImpl* This, IDirectDrawPaletteImpl* lpD if (This->palette) IDirectDrawPalette_Release(This->palette); - if ((This->caps & DDSCAPS_PRIMARYSURFACE) && g_ddraw) + if ((This->caps & DDSCAPS_PRIMARYSURFACE) && g_ddraw.ref) { - EnterCriticalSection(&g_ddraw->cs); + EnterCriticalSection(&g_ddraw.cs); This->palette = lpDDPalette; - LeaveCriticalSection(&g_ddraw->cs); + LeaveCriticalSection(&g_ddraw.cs); - if (g_ddraw->render.run) + if (g_ddraw.render.run) { - InterlockedExchange(&g_ddraw->render.palette_updated, TRUE); - ReleaseSemaphore(g_ddraw->render.sem, 1, NULL); + InterlockedExchange(&g_ddraw.render.palette_updated, TRUE); + ReleaseSemaphore(g_ddraw.render.sem, 1, NULL); } } else @@ -1084,7 +1084,7 @@ HRESULT dds_SetPalette(IDirectDrawSurfaceImpl* This, IDirectDrawPaletteImpl* lpD HRESULT dds_Unlock(IDirectDrawSurfaceImpl* This, LPRECT lpRect) { /* Hack for Warcraft II BNE and Diablo */ - HWND hwnd = g_ddraw && g_ddraw->bnet_active ? FindWindowEx(HWND_DESKTOP, NULL, "SDlgDialog", NULL) : NULL; + HWND hwnd = g_ddraw.ref && g_ddraw.bnet_active ? FindWindowEx(HWND_DESKTOP, NULL, "SDlgDialog", NULL) : NULL; if (hwnd && (This->caps & DDSCAPS_PRIMARYSURFACE)) { @@ -1129,17 +1129,17 @@ HRESULT dds_Unlock(IDirectDrawSurfaceImpl* This, LPRECT lpRect) if (erase) { - BOOL x = g_ddraw->ticks_limiter.use_blt_or_flip; + BOOL x = g_ddraw.ticks_limiter.use_blt_or_flip; DDBLTFX fx = { .dwFillColor = 0xFE }; IDirectDrawSurface_Blt(This, NULL, NULL, NULL, DDBLT_COLORFILL, &fx); - g_ddraw->ticks_limiter.use_blt_or_flip = x; + g_ddraw.ticks_limiter.use_blt_or_flip = x; } } /* Hack for Star Trek Armada */ - hwnd = g_ddraw && g_config.armadahack ? FindWindowEx(HWND_DESKTOP, NULL, "#32770", NULL) : NULL; + hwnd = g_ddraw.ref && g_config.armadahack ? FindWindowEx(HWND_DESKTOP, NULL, "#32770", NULL) : NULL; if (hwnd && (This->caps & DDSCAPS_PRIMARYSURFACE)) { @@ -1168,27 +1168,27 @@ HRESULT dds_Unlock(IDirectDrawSurfaceImpl* This, LPRECT lpRect) ReleaseDC(hwnd, hdc); } - BOOL x = g_ddraw->ticks_limiter.use_blt_or_flip; + BOOL x = g_ddraw.ticks_limiter.use_blt_or_flip; DDBLTFX fx = { .dwFillColor = 0 }; IDirectDrawSurface_Blt(This, NULL, NULL, NULL, DDBLT_COLORFILL, &fx); - g_ddraw->ticks_limiter.use_blt_or_flip = x; + g_ddraw.ticks_limiter.use_blt_or_flip = x; } - if ((This->caps & DDSCAPS_PRIMARYSURFACE) && g_ddraw && g_ddraw->render.run) + if ((This->caps & DDSCAPS_PRIMARYSURFACE) && g_ddraw.ref && g_ddraw.render.run) { - InterlockedExchange(&g_ddraw->render.surface_updated, TRUE); + InterlockedExchange(&g_ddraw.render.surface_updated, TRUE); DWORD time = timeGetTime(); if (!(This->flags & DDSD_BACKBUFFERCOUNT) || (This->last_flip_tick + FLIP_REDRAW_TIMEOUT < time && This->last_blt_tick + FLIP_REDRAW_TIMEOUT < time)) { - ReleaseSemaphore(g_ddraw->render.sem, 1, NULL); + ReleaseSemaphore(g_ddraw.render.sem, 1, NULL); - if (g_ddraw->ticks_limiter.tick_length > 0 && !g_ddraw->ticks_limiter.use_blt_or_flip) + if (g_ddraw.ticks_limiter.tick_length > 0 && !g_ddraw.ticks_limiter.use_blt_or_flip) util_limit_game_ticks(); } } @@ -1315,15 +1315,15 @@ HRESULT dd_CreateSurface( } if ((lpDDSurfaceDesc->ddsCaps.dwCaps & DDSCAPS_PRIMARYSURFACE) && - g_ddraw->primary && - g_ddraw->primary->width == g_ddraw->width && - g_ddraw->primary->height == g_ddraw->height && - g_ddraw->primary->bpp == g_ddraw->bpp) + g_ddraw.primary && + g_ddraw.primary->width == g_ddraw.width && + g_ddraw.primary->height == g_ddraw.height && + g_ddraw.primary->bpp == g_ddraw.bpp) { - g_ddraw->primary->skip_flip = TRUE; + g_ddraw.primary->skip_flip = TRUE; - *lpDDSurface = g_ddraw->primary; - IDirectDrawSurface_AddRef(g_ddraw->primary); + *lpDDSurface = g_ddraw.primary; + IDirectDrawSurface_AddRef(g_ddraw.primary); return DD_OK; } @@ -1337,7 +1337,7 @@ HRESULT dd_CreateSurface( InitializeCriticalSection(&dst_surface->cs); - dst_surface->bpp = g_ddraw->bpp == 0 ? 16 : g_ddraw->bpp; + dst_surface->bpp = g_ddraw.bpp == 0 ? 16 : g_ddraw.bpp; dst_surface->flags = lpDDSurfaceDesc->dwFlags; dst_surface->caps = lpDDSurfaceDesc->ddsCaps.dwCaps; dst_surface->ddraw = This; @@ -1378,8 +1378,8 @@ HRESULT dd_CreateSurface( dst_surface->caps |= DDSCAPS_FRONTBUFFER; } - dst_surface->width = g_ddraw->width; - dst_surface->height = g_ddraw->height; + dst_surface->width = g_ddraw.width; + dst_surface->height = g_ddraw.height; dst_surface->caps |= DDSCAPS_VIDEOMEMORY; } @@ -1462,10 +1462,10 @@ HRESULT dd_CreateSurface( /* Claw hack: 128x128 surfaces need a DC for custom levels to work properly */ if (InterlockedExchangeAdd(&g_dds_gdi_handles, 0) < 4000 || - (dst_surface->width == g_ddraw->width && dst_surface->height == g_ddraw->height) || + (dst_surface->width == g_ddraw.width && dst_surface->height == g_ddraw.height) || (dst_surface->width == 128 && dst_surface->height == 128)) { - dst_surface->hdc = CreateCompatibleDC(g_ddraw->render.hdc); + dst_surface->hdc = CreateCompatibleDC(g_ddraw.render.hdc); if (dst_surface->hdc) InterlockedIncrement(&g_dds_gdi_handles); @@ -1524,7 +1524,7 @@ HRESULT dd_CreateSurface( if (dst_surface->caps & DDSCAPS_PRIMARYSURFACE) { - g_ddraw->primary = dst_surface; + g_ddraw.primary = dst_surface; FakePrimarySurface = dst_surface->surface; } } diff --git a/src/debug.c b/src/debug.c index b63c88e..4e81ab5 100644 --- a/src/debug.c +++ b/src/debug.c @@ -252,12 +252,12 @@ void dbg_draw_frame_info_start() static DWORD tick_fps = 0; static char debug_text[512] = { 0 }; - RECT debugrc = { 0, 0, g_ddraw->width, g_ddraw->height }; + RECT debugrc = { 0, 0, g_ddraw.width, g_ddraw.height }; - if (g_ddraw->primary) + if (g_ddraw.primary) { HDC primary_dc; - dds_GetDC(g_ddraw->primary, &primary_dc); + dds_GetDC(g_ddraw.primary, &primary_dc); DrawText(primary_dc, debug_text, -1, &debugrc, DT_NOCLIP); } diff --git a/src/directinput.c b/src/directinput.c index 38d6eef..6dd5e5e 100644 --- a/src/directinput.c +++ b/src/directinput.c @@ -45,14 +45,14 @@ static HRESULT WINAPI fake_did_SetCooperativeLevel(IDirectInputDeviceA* This, HW { TRACE("DirectInput SetCooperativeLevel(This=%p, hwnd=%p, dwFlags=0x%08X)\n", This, hwnd, dwFlags); - if (This == g_mouse_device && g_ddraw && (dwFlags & DISCL_EXCLUSIVE)) + if (This == g_mouse_device && g_ddraw.ref && (dwFlags & DISCL_EXCLUSIVE)) { if (g_mouse_locked || g_config.devmode) { while (real_ShowCursor(FALSE) >= 0); } - InterlockedExchange((LONG*)&g_ddraw->show_cursor_count, -1); + InterlockedExchange((LONG*)&g_ddraw.show_cursor_count, -1); } return real_did_SetCooperativeLevel(This, hwnd, DISCL_BACKGROUND | DISCL_NONEXCLUSIVE); diff --git a/src/fps_limiter.c b/src/fps_limiter.c index 90c8076..a6014bf 100644 --- a/src/fps_limiter.c +++ b/src/fps_limiter.c @@ -14,8 +14,8 @@ void fpsl_init() g_fpsl.tick_length_ns = 0; g_fpsl.tick_length = 0; - if (max_fps < 0 || (g_config.vsync && (!g_config.maxfps || g_config.maxfps >= g_ddraw->mode.dmDisplayFrequency))) - max_fps = g_ddraw->mode.dmDisplayFrequency; + if (max_fps < 0 || (g_config.vsync && (!g_config.maxfps || g_config.maxfps >= g_ddraw.mode.dmDisplayFrequency))) + max_fps = g_ddraw.mode.dmDisplayFrequency; if (max_fps > 1000) max_fps = 0; @@ -88,13 +88,13 @@ BOOL fpsl_wait_for_vblank() { if (g_fpsl.initialized) { - if (!g_fpsl.got_adapter && g_fpsl.D3DKMTOpenAdapterFromHdc && g_ddraw->render.hdc) + if (!g_fpsl.got_adapter && g_fpsl.D3DKMTOpenAdapterFromHdc && g_ddraw.render.hdc) { EnterCriticalSection(&g_fpsl.cs); if (!g_fpsl.got_adapter) { - g_fpsl.adapter.hDc = g_ddraw->render.hdc; + g_fpsl.adapter.hDc = g_ddraw.render.hdc; if (g_fpsl.D3DKMTOpenAdapterFromHdc(&g_fpsl.adapter) == 0) { @@ -151,7 +151,7 @@ void fpsl_frame_start() void fpsl_frame_end() { if (g_config.maxfps < 0 || - (g_config.vsync && (!g_config.maxfps || g_config.maxfps >= g_ddraw->mode.dmDisplayFrequency))) + (g_config.vsync && (!g_config.maxfps || g_config.maxfps >= g_ddraw.mode.dmDisplayFrequency))) { if (fpsl_dwm_flush() || fpsl_wait_for_vblank()) return; @@ -161,7 +161,7 @@ void fpsl_frame_end() { if (g_fpsl.htimer) { - if (g_config.vsync && (!g_config.maxfps || g_config.maxfps >= g_ddraw->mode.dmDisplayFrequency)) + if (g_config.vsync && (!g_config.maxfps || g_config.maxfps >= g_ddraw.mode.dmDisplayFrequency)) { WaitForSingleObject(g_fpsl.htimer, g_fpsl.tick_length * 2); LARGE_INTEGER due_time = { .QuadPart = -g_fpsl.tick_length_ns }; diff --git a/src/mouse.c b/src/mouse.c index 504ee92..c5b25eb 100644 --- a/src/mouse.c +++ b/src/mouse.c @@ -13,12 +13,12 @@ HOOKPROC g_mouse_proc; void mouse_lock() { - if (g_config.devmode || g_ddraw->bnet_active || !g_ddraw->hwnd) + if (g_config.devmode || g_ddraw.bnet_active || !g_ddraw.hwnd) return; - if (g_hook_active && !g_mouse_locked && !util_is_minimized(g_ddraw->hwnd)) + if (g_hook_active && !g_mouse_locked && !util_is_minimized(g_ddraw.hwnd)) { - int game_count = InterlockedExchangeAdd((LONG*)&g_ddraw->show_cursor_count, 0); + int game_count = InterlockedExchangeAdd((LONG*)&g_ddraw.show_cursor_count, 0); int cur_count = real_ShowCursor(TRUE) - 1; real_ShowCursor(FALSE); @@ -31,22 +31,22 @@ void mouse_lock() while (real_ShowCursor(TRUE) < game_count); } - real_SetCursor((HCURSOR)InterlockedExchangeAdd((LONG*)&g_ddraw->old_cursor, 0)); + real_SetCursor((HCURSOR)InterlockedExchangeAdd((LONG*)&g_ddraw.old_cursor, 0)); RECT rc = { 0 }; - real_GetClientRect(g_ddraw->hwnd, &rc); - real_MapWindowPoints(g_ddraw->hwnd, HWND_DESKTOP, (LPPOINT)&rc, 2); - OffsetRect(&rc, g_ddraw->render.viewport.x, g_ddraw->render.viewport.y); + real_GetClientRect(g_ddraw.hwnd, &rc); + real_MapWindowPoints(g_ddraw.hwnd, HWND_DESKTOP, (LPPOINT)&rc, 2); + OffsetRect(&rc, g_ddraw.render.viewport.x, g_ddraw.render.viewport.y); - int cur_x = InterlockedExchangeAdd((LONG*)&g_ddraw->cursor.x, 0); - int cur_y = InterlockedExchangeAdd((LONG*)&g_ddraw->cursor.y, 0); + int cur_x = InterlockedExchangeAdd((LONG*)&g_ddraw.cursor.x, 0); + int cur_y = InterlockedExchangeAdd((LONG*)&g_ddraw.cursor.y, 0); real_SetCursorPos( - g_config.adjmouse ? (int)(rc.left + (cur_x * g_ddraw->mouse.scale_x)) : rc.left + cur_x, - g_config.adjmouse ? (int)(rc.top + (cur_y * g_ddraw->mouse.scale_y)) : rc.top + cur_y); + g_config.adjmouse ? (int)(rc.left + (cur_x * g_ddraw.mouse.scale_x)) : rc.left + cur_x, + g_config.adjmouse ? (int)(rc.top + (cur_y * g_ddraw.mouse.scale_y)) : rc.top + cur_y); - CopyRect(&rc, &g_ddraw->mouse.rc); - real_MapWindowPoints(g_ddraw->hwnd, HWND_DESKTOP, (LPPOINT)&rc, 2); + CopyRect(&rc, &g_ddraw.mouse.rc); + real_MapWindowPoints(g_ddraw.hwnd, HWND_DESKTOP, (LPPOINT)&rc, 2); real_ClipCursor(&rc); g_mouse_locked = TRUE; @@ -55,7 +55,7 @@ void mouse_lock() void mouse_unlock() { - if (g_config.devmode || !g_hook_active || !g_ddraw->hwnd) + if (g_config.devmode || !g_hook_active || !g_ddraw.hwnd) return; if (g_mouse_locked) @@ -66,16 +66,16 @@ void mouse_unlock() //ReleaseCapture(); RECT rc = { 0 }; - real_GetClientRect(g_ddraw->hwnd, &rc); - real_MapWindowPoints(g_ddraw->hwnd, HWND_DESKTOP, (LPPOINT)&rc, 2); - OffsetRect(&rc, g_ddraw->render.viewport.x, g_ddraw->render.viewport.y); + real_GetClientRect(g_ddraw.hwnd, &rc); + real_MapWindowPoints(g_ddraw.hwnd, HWND_DESKTOP, (LPPOINT)&rc, 2); + OffsetRect(&rc, g_ddraw.render.viewport.x, g_ddraw.render.viewport.y); - int cur_x = InterlockedExchangeAdd((LONG*)&g_ddraw->cursor.x, 0); - int cur_y = InterlockedExchangeAdd((LONG*)&g_ddraw->cursor.y, 0); + int cur_x = InterlockedExchangeAdd((LONG*)&g_ddraw.cursor.x, 0); + int cur_y = InterlockedExchangeAdd((LONG*)&g_ddraw.cursor.y, 0); real_SetCursorPos( - (int)(rc.left + (cur_x * g_ddraw->mouse.scale_x)), - (int)(rc.top + (cur_y * g_ddraw->mouse.scale_y))); + (int)(rc.left + (cur_x * g_ddraw.mouse.scale_x)), + (int)(rc.top + (cur_y * g_ddraw.mouse.scale_y))); real_SetCursor(LoadCursor(NULL, IDC_ARROW)); @@ -85,7 +85,7 @@ void mouse_unlock() LRESULT CALLBACK mouse_hook_proc(int Code, WPARAM wParam, LPARAM lParam) { - if (!g_ddraw) + if (!g_ddraw.ref) return g_mouse_proc(Code, wParam, lParam); if (Code < 0 || (!g_config.devmode && !g_mouse_locked)) diff --git a/src/render_d3d9.c b/src/render_d3d9.c index faed00a..276a81f 100644 --- a/src/render_d3d9.c +++ b/src/render_d3d9.c @@ -55,7 +55,7 @@ BOOL d3d9_is_available() BOOL d3d9_create() { - if (g_d3d9.hwnd == g_ddraw->hwnd && d3d9_create_resources() && d3d9_reset(g_config.windowed)) + if (g_d3d9.hwnd == g_ddraw.hwnd && d3d9_create_resources() && d3d9_reset(g_config.windowed)) { return TRUE; } @@ -122,18 +122,18 @@ BOOL d3d9_create() TRACE("+------------------------------------------------\n"); } #endif - g_d3d9.hwnd = g_ddraw->hwnd; + g_d3d9.hwnd = g_ddraw.hwnd; memset(&g_d3d9.params, 0, sizeof(g_d3d9.params)); g_d3d9.params.Windowed = g_config.windowed || g_config.nonexclusive; g_d3d9.params.SwapEffect = D3DSWAPEFFECT_DISCARD; - g_d3d9.params.hDeviceWindow = g_ddraw->hwnd; + g_d3d9.params.hDeviceWindow = g_ddraw.hwnd; g_d3d9.params.PresentationInterval = g_config.vsync ? D3DPRESENT_INTERVAL_ONE : D3DPRESENT_INTERVAL_IMMEDIATE; - g_d3d9.params.BackBufferWidth = g_d3d9.params.Windowed ? 0 : g_ddraw->render.width; - g_d3d9.params.BackBufferHeight = g_d3d9.params.Windowed ? 0 : g_ddraw->render.height; + g_d3d9.params.BackBufferWidth = g_d3d9.params.Windowed ? 0 : g_ddraw.render.width; + g_d3d9.params.BackBufferHeight = g_d3d9.params.Windowed ? 0 : g_ddraw.render.height; g_d3d9.params.FullScreen_RefreshRateInHz = g_d3d9.params.Windowed ? 0 : g_config.refresh_rate; - g_d3d9.params.BackBufferFormat = g_ddraw->mode.dmBitsPerPel == 16 ? D3DFMT_R5G6B5 : D3DFMT_X8R8G8B8; + g_d3d9.params.BackBufferFormat = g_ddraw.mode.dmBitsPerPel == 16 ? D3DFMT_R5G6B5 : D3DFMT_X8R8G8B8; g_d3d9.params.BackBufferCount = 1; DWORD behavior_flags[] = { @@ -151,7 +151,7 @@ BOOL d3d9_create() g_d3d9.instance, D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, - g_ddraw->hwnd, + g_ddraw.hwnd, behavior_flags[i], &g_d3d9.params, &g_d3d9.device))) @@ -176,10 +176,10 @@ BOOL d3d9_on_device_lost() BOOL d3d9_reset(BOOL windowed) { g_d3d9.params.Windowed = windowed || g_config.nonexclusive; - g_d3d9.params.BackBufferWidth = g_d3d9.params.Windowed ? 0 : g_ddraw->render.width; - g_d3d9.params.BackBufferHeight = g_d3d9.params.Windowed ? 0 : g_ddraw->render.height; + g_d3d9.params.BackBufferWidth = g_d3d9.params.Windowed ? 0 : g_ddraw.render.width; + g_d3d9.params.BackBufferHeight = g_d3d9.params.Windowed ? 0 : g_ddraw.render.height; g_d3d9.params.FullScreen_RefreshRateInHz = g_d3d9.params.Windowed ? 0 : g_config.refresh_rate; - g_d3d9.params.BackBufferFormat = g_ddraw->mode.dmBitsPerPel == 16 ? D3DFMT_R5G6B5 : D3DFMT_X8R8G8B8; + g_d3d9.params.BackBufferFormat = g_ddraw.mode.dmBitsPerPel == 16 ? D3DFMT_R5G6B5 : D3DFMT_X8R8G8B8; if (g_d3d9.device && SUCCEEDED(IDirect3DDevice9_Reset(g_d3d9.device, &g_d3d9.params))) { @@ -187,9 +187,9 @@ BOOL d3d9_reset(BOOL windowed) if (result) { - InterlockedExchange(&g_ddraw->render.palette_updated, TRUE); - InterlockedExchange(&g_ddraw->render.surface_updated, TRUE); - ReleaseSemaphore(g_ddraw->render.sem, 1, NULL); + InterlockedExchange(&g_ddraw.render.palette_updated, TRUE); + InterlockedExchange(&g_ddraw.render.surface_updated, TRUE); + ReleaseSemaphore(g_ddraw.render.sem, 1, NULL); } return result; @@ -264,8 +264,8 @@ static BOOL d3d9_create_resources() BOOL err = FALSE; - int width = g_ddraw->width; - int height = g_ddraw->height; + int width = g_ddraw.width; + int height = g_ddraw.height; g_d3d9.tex_width = width <= 1024 ? 1024 : width <= 2048 ? 2048 : width <= 4096 ? 4096 : width; @@ -287,11 +287,11 @@ static BOOL d3d9_create_resources() &g_d3d9.vertex_buf, NULL)); - err = err || !d3d9_update_vertices(InterlockedExchangeAdd(&g_ddraw->upscale_hack_active, 0), TRUE); + err = err || !d3d9_update_vertices(InterlockedExchangeAdd(&g_ddraw.upscale_hack_active, 0), TRUE); for (int i = 0; i < D3D9_TEXTURE_COUNT; i++) { - if (g_ddraw->bpp == 16 && g_config.rgb555) + if (g_ddraw.bpp == 16 && g_config.rgb555) { BOOL error = FAILED( IDirect3DDevice9_CreateTexture( @@ -320,7 +320,7 @@ static BOOL d3d9_create_resources() 0)); } } - else if (g_ddraw->bpp == 32) + else if (g_ddraw.bpp == 32) { BOOL error = FAILED( IDirect3DDevice9_CreateTexture( @@ -358,7 +358,7 @@ static BOOL d3d9_create_resources() g_d3d9.tex_height, 1, 0, - g_ddraw->bpp == 16 ? D3DFMT_R5G6B5 : D3DFMT_L8, + g_ddraw.bpp == 16 ? D3DFMT_R5G6B5 : D3DFMT_L8, D3DPOOL_MANAGED, &g_d3d9.surface_tex[i], 0)); @@ -366,7 +366,7 @@ static BOOL d3d9_create_resources() err = err || !g_d3d9.surface_tex[i]; - if (g_ddraw->bpp == 8) + if (g_ddraw.bpp == 8) { BOOL error = FAILED( IDirect3DDevice9_CreateTexture( @@ -399,7 +399,7 @@ static BOOL d3d9_create_resources() } } - if (g_ddraw->bpp == 8) + if (g_ddraw.bpp == 8) { err = err || FAILED( IDirect3DDevice9_CreatePixelShader(g_d3d9.device, (DWORD*)D3D9_PALETTE_SHADER, &g_d3d9.pixel_shader)); @@ -434,7 +434,7 @@ static BOOL d3d9_create_resources() } } - return g_d3d9.vertex_buf && (g_d3d9.pixel_shader || g_ddraw->bpp == 16 || g_ddraw->bpp == 32) && !err; + return g_d3d9.vertex_buf && (g_d3d9.pixel_shader || g_ddraw.bpp == 16 || g_ddraw.bpp == 32) && !err; } static BOOL d3d9_set_states() @@ -445,14 +445,14 @@ static BOOL d3d9_set_states() err = err || FAILED(IDirect3DDevice9_SetStreamSource(g_d3d9.device, 0, g_d3d9.vertex_buf, 0, sizeof(CUSTOMVERTEX))); err = err || FAILED(IDirect3DDevice9_SetTexture(g_d3d9.device, 0, (IDirect3DBaseTexture9*)g_d3d9.surface_tex[0])); - if (g_ddraw->bpp == 8) + if (g_ddraw.bpp == 8) { err = err || FAILED(IDirect3DDevice9_SetTexture(g_d3d9.device, 1, (IDirect3DBaseTexture9*)g_d3d9.palette_tex[0])); BOOL bilinear = g_config.d3d9_filter && g_d3d9.pixel_shader_upscale && - (g_ddraw->render.viewport.width != g_ddraw->width || g_ddraw->render.viewport.height != g_ddraw->height); + (g_ddraw.render.viewport.width != g_ddraw.width || g_ddraw.render.viewport.height != g_ddraw.height); err = err || FAILED( IDirect3DDevice9_SetPixelShader( @@ -471,8 +471,8 @@ static BOOL d3d9_set_states() { if (g_config.d3d9_filter == FILTER_LANCZOS && g_d3d9.pixel_shader_upscale && - (g_ddraw->render.viewport.width != g_ddraw->width || - g_ddraw->render.viewport.height != g_ddraw->height) && + (g_ddraw.render.viewport.width != g_ddraw.width || + g_ddraw.render.viewport.height != g_ddraw.height) && SUCCEEDED(IDirect3DDevice9_SetPixelShader(g_d3d9.device, g_d3d9.pixel_shader_upscale))) { float texture_size[4] = { (float)g_d3d9.tex_width, (float)g_d3d9.tex_height, 0, 0 }; @@ -483,8 +483,8 @@ static BOOL d3d9_set_states() SUCCEEDED(IDirect3DDevice9_SetSamplerState(g_d3d9.device, 0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR)) && g_config.d3d9_filter == FILTER_CUBIC && g_d3d9.pixel_shader_upscale && - (g_ddraw->render.viewport.width != g_ddraw->width || - g_ddraw->render.viewport.height != g_ddraw->height) && + (g_ddraw.render.viewport.width != g_ddraw.width || + g_ddraw.render.viewport.height != g_ddraw.height) && SUCCEEDED(IDirect3DDevice9_SetPixelShader(g_d3d9.device, g_d3d9.pixel_shader_upscale))) { float texture_size[4] = { (float)g_d3d9.tex_width, (float)g_d3d9.tex_height, 0, 0 }; @@ -495,10 +495,10 @@ static BOOL d3d9_set_states() /* D3DVIEWPORT9 view_data = { - g_ddraw->render.viewport.x, - g_ddraw->render.viewport.y, - g_ddraw->render.viewport.width, - g_ddraw->render.viewport.height, + g_ddraw.render.viewport.x, + g_ddraw.render.viewport.y, + g_ddraw.render.viewport.width, + g_ddraw.render.viewport.height, 0.0f, 1.0f }; @@ -509,14 +509,14 @@ static BOOL d3d9_set_states() static BOOL d3d9_update_vertices(BOOL upscale_hack, BOOL stretch) { - float vp_x = stretch ? (float)g_ddraw->render.viewport.x : 0.0f; - float vp_y = stretch ? (float)g_ddraw->render.viewport.y : 0.0f; + float vp_x = stretch ? (float)g_ddraw.render.viewport.x : 0.0f; + float vp_y = stretch ? (float)g_ddraw.render.viewport.y : 0.0f; - float vp_w = stretch ? (float)(g_ddraw->render.viewport.width + g_ddraw->render.viewport.x) : (float)g_ddraw->width; - float vp_h = stretch ? (float)(g_ddraw->render.viewport.height + g_ddraw->render.viewport.y) : (float)g_ddraw->height; + float vp_w = stretch ? (float)(g_ddraw.render.viewport.width + g_ddraw.render.viewport.x) : (float)g_ddraw.width; + float vp_h = stretch ? (float)(g_ddraw.render.viewport.height + g_ddraw.render.viewport.y) : (float)g_ddraw.height; - float s_h = upscale_hack ? g_d3d9.scale_h * ((float)g_ddraw->upscale_hack_height / g_ddraw->height) : g_d3d9.scale_h; - float s_w = upscale_hack ? g_d3d9.scale_w * ((float)g_ddraw->upscale_hack_width / g_ddraw->width) : g_d3d9.scale_w; + float s_h = upscale_hack ? g_d3d9.scale_h * ((float)g_ddraw.upscale_hack_height / g_ddraw.height) : g_d3d9.scale_h; + float s_w = upscale_hack ? g_d3d9.scale_w * ((float)g_ddraw.upscale_hack_width / g_ddraw.width) : g_d3d9.scale_w; CUSTOMVERTEX vertices[] = { @@ -546,10 +546,10 @@ DWORD WINAPI d3d9_render_main(void) BOOL needs_update = FALSE; - DWORD timeout = g_config.minfps > 0 ? g_ddraw->minfps_tick_len : INFINITE; + DWORD timeout = g_config.minfps > 0 ? g_ddraw.minfps_tick_len : INFINITE; - while (g_ddraw->render.run && - (g_config.minfps < 0 || WaitForSingleObject(g_ddraw->render.sem, timeout) != WAIT_FAILED)) + while (g_ddraw.render.run && + (g_config.minfps < 0 || WaitForSingleObject(g_ddraw.render.sem, timeout) != WAIT_FAILED)) { #if _DEBUG dbg_draw_frame_info_start(); @@ -559,39 +559,39 @@ DWORD WINAPI d3d9_render_main(void) fpsl_frame_start(); - EnterCriticalSection(&g_ddraw->cs); + EnterCriticalSection(&g_ddraw.cs); - if (g_ddraw->primary && - g_ddraw->primary->bpp == g_ddraw->bpp && - g_ddraw->primary->width == g_ddraw->width && - g_ddraw->primary->height == g_ddraw->height && - (g_ddraw->bpp == 16 || g_ddraw->bpp == 32 || g_ddraw->primary->palette)) + if (g_ddraw.primary && + g_ddraw.primary->bpp == g_ddraw.bpp && + g_ddraw.primary->width == g_ddraw.width && + g_ddraw.primary->height == g_ddraw.height && + (g_ddraw.bpp == 16 || g_ddraw.bpp == 32 || g_ddraw.primary->palette)) { if (g_config.lock_surfaces) - EnterCriticalSection(&g_ddraw->primary->cs); + EnterCriticalSection(&g_ddraw.primary->cs); if (g_config.vhack) { if (util_detect_low_res_screen()) { - if (!InterlockedExchange(&g_ddraw->upscale_hack_active, TRUE)) + if (!InterlockedExchange(&g_ddraw.upscale_hack_active, TRUE)) d3d9_update_vertices(TRUE, TRUE); } else { - if (InterlockedExchange(&g_ddraw->upscale_hack_active, FALSE)) + if (InterlockedExchange(&g_ddraw.upscale_hack_active, FALSE)) d3d9_update_vertices(FALSE, TRUE); } } D3DLOCKED_RECT lock_rc; - if (InterlockedExchange(&g_ddraw->render.surface_updated, FALSE) || g_config.minfps == -2) + if (InterlockedExchange(&g_ddraw.render.surface_updated, FALSE) || g_config.minfps == -2) { if (++tex_index >= D3D9_TEXTURE_COUNT) tex_index = 0; - RECT rc = { 0, 0, g_ddraw->width, g_ddraw->height }; + RECT rc = { 0, 0, g_ddraw.width, g_ddraw.height }; if (SUCCEEDED(IDirect3DDevice9_SetTexture(g_d3d9.device, 0, (IDirect3DBaseTexture9*)g_d3d9.surface_tex[tex_index])) && SUCCEEDED(IDirect3DTexture9_LockRect(g_d3d9.surface_tex[tex_index], 0, &lock_rc, &rc, 0))) @@ -600,21 +600,21 @@ DWORD WINAPI d3d9_render_main(void) lock_rc.pBits, 0, 0, - g_ddraw->primary->width, - g_ddraw->primary->height, + g_ddraw.primary->width, + g_ddraw.primary->height, lock_rc.Pitch, - g_ddraw->primary->surface, + g_ddraw.primary->surface, 0, 0, - g_ddraw->primary->pitch, - g_ddraw->primary->bpp); + g_ddraw.primary->pitch, + g_ddraw.primary->bpp); IDirect3DTexture9_UnlockRect(g_d3d9.surface_tex[tex_index], 0); } } - if (g_ddraw->bpp == 8 && - (InterlockedExchange(&g_ddraw->render.palette_updated, FALSE) || g_config.minfps == -2)) + if (g_ddraw.bpp == 8 && + (InterlockedExchange(&g_ddraw.render.palette_updated, FALSE) || g_config.minfps == -2)) { if (++pal_index >= D3D9_TEXTURE_COUNT) pal_index = 0; @@ -624,7 +624,7 @@ DWORD WINAPI d3d9_render_main(void) if (SUCCEEDED(IDirect3DDevice9_SetTexture(g_d3d9.device, 1, (IDirect3DBaseTexture9*)g_d3d9.palette_tex[pal_index])) && SUCCEEDED(IDirect3DTexture9_LockRect(g_d3d9.palette_tex[pal_index], 0, &lock_rc, &rc, 0))) { - memcpy(lock_rc.pBits, g_ddraw->primary->palette->data_rgb, 256 * sizeof(int)); + memcpy(lock_rc.pBits, g_ddraw.primary->palette->data_rgb, 256 * sizeof(int)); IDirect3DTexture9_UnlockRect(g_d3d9.palette_tex[pal_index], 0); } @@ -632,13 +632,13 @@ DWORD WINAPI d3d9_render_main(void) if (g_config.fixchilds) { - g_ddraw->child_window_exists = FALSE; - InterlockedExchangePointer((void*)&g_ddraw->video_window_hwnd, NULL); - EnumChildWindows(g_ddraw->hwnd, util_enum_child_proc, (LPARAM)g_ddraw->primary); + g_ddraw.child_window_exists = FALSE; + InterlockedExchangePointer((void*)&g_ddraw.video_window_hwnd, NULL); + EnumChildWindows(g_ddraw.hwnd, util_enum_child_proc, (LPARAM)g_ddraw.primary); - if (g_ddraw->render.width != g_ddraw->width || g_ddraw->render.height != g_ddraw->height) + if (g_ddraw.render.width != g_ddraw.width || g_ddraw.render.height != g_ddraw.height) { - if (g_ddraw->child_window_exists) + if (g_ddraw.child_window_exists) { IDirect3DDevice9_Clear(g_d3d9.device, 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0); @@ -654,12 +654,12 @@ DWORD WINAPI d3d9_render_main(void) } if (g_config.lock_surfaces) - LeaveCriticalSection(&g_ddraw->primary->cs); + LeaveCriticalSection(&g_ddraw.primary->cs); } - LeaveCriticalSection(&g_ddraw->cs); + LeaveCriticalSection(&g_ddraw.cs); - if (g_ddraw->render.viewport.x != 0 || g_ddraw->render.viewport.y != 0) + if (g_ddraw.render.viewport.x != 0 || g_ddraw.render.viewport.y != 0) { IDirect3DDevice9_Clear(g_d3d9.device, 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0); } @@ -668,7 +668,7 @@ DWORD WINAPI d3d9_render_main(void) IDirect3DDevice9_DrawPrimitive(g_d3d9.device, D3DPT_TRIANGLESTRIP, 0, 2); IDirect3DDevice9_EndScene(g_d3d9.device); - if (g_ddraw->bnet_active) + if (g_ddraw.bnet_active) { IDirect3DDevice9_Clear(g_d3d9.device, 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0); } @@ -676,9 +676,9 @@ DWORD WINAPI d3d9_render_main(void) if (FAILED(IDirect3DDevice9_Present(g_d3d9.device, NULL, NULL, NULL, NULL))) { DWORD_PTR result; - SendMessageTimeout(g_ddraw->hwnd, WM_D3D9DEVICELOST, 0, 0, 0, 1000, &result); + SendMessageTimeout(g_ddraw.hwnd, WM_D3D9DEVICELOST, 0, 0, 0, 1000, &result); - ReleaseSemaphore(g_ddraw->render.sem, 1, NULL); + ReleaseSemaphore(g_ddraw.render.sem, 1, NULL); Sleep(50); } @@ -690,7 +690,7 @@ DWORD WINAPI d3d9_render_main(void) } if (g_config.vhack) - InterlockedExchange(&g_ddraw->upscale_hack_active, FALSE); + InterlockedExchange(&g_ddraw.upscale_hack_active, FALSE); return 0; } diff --git a/src/render_gdi.c b/src/render_gdi.c index 8576450..78f7d5d 100644 --- a/src/render_gdi.c +++ b/src/render_gdi.c @@ -16,16 +16,16 @@ DWORD WINAPI gdi_render_main(void) static DWORD warning_end_tick = 0; static char warning_text[512] = { 0 }; - if (g_ddraw->show_driver_warning) + if (g_ddraw.show_driver_warning) { - g_ddraw->show_driver_warning = FALSE; + g_ddraw.show_driver_warning = FALSE; TRACE(" Switched to GDI renderer\n"); warning_end_tick = timeGetTime() + (15 * 1000); if (!g_config.windowed) - PostMessage(g_ddraw->hwnd, WM_AUTORENDERER, 0, 0); + PostMessage(g_ddraw.hwnd, WM_AUTORENDERER, 0, 0); _snprintf( warning_text, @@ -38,10 +38,10 @@ DWORD WINAPI gdi_render_main(void) fpsl_init(); - DWORD timeout = g_config.minfps > 0 ? g_ddraw->minfps_tick_len : INFINITE; + DWORD timeout = g_config.minfps > 0 ? g_ddraw.minfps_tick_len : INFINITE; - while (g_ddraw->render.run && - (g_config.minfps < 0 || WaitForSingleObject(g_ddraw->render.sem, timeout) != WAIT_FAILED)) + while (g_ddraw.render.run && + (g_config.minfps < 0 || WaitForSingleObject(g_ddraw.render.sem, timeout) != WAIT_FAILED)) { #if _DEBUG dbg_draw_frame_info_start(); @@ -49,25 +49,25 @@ DWORD WINAPI gdi_render_main(void) fpsl_frame_start(); - EnterCriticalSection(&g_ddraw->cs); + EnterCriticalSection(&g_ddraw.cs); - if (g_ddraw->primary && - g_ddraw->primary->bpp == g_ddraw->bpp && - g_ddraw->primary->width == g_ddraw->width && - g_ddraw->primary->height == g_ddraw->height && - (g_ddraw->bpp == 16 || g_ddraw->bpp == 32 || g_ddraw->primary->palette)) + if (g_ddraw.primary && + g_ddraw.primary->bpp == g_ddraw.bpp && + g_ddraw.primary->width == g_ddraw.width && + g_ddraw.primary->height == g_ddraw.height && + (g_ddraw.bpp == 16 || g_ddraw.bpp == 32 || g_ddraw.primary->palette)) { if (g_config.lock_surfaces) - EnterCriticalSection(&g_ddraw->primary->cs); + EnterCriticalSection(&g_ddraw.primary->cs); if (warning_end_tick) { if (timeGetTime() < warning_end_tick) { HDC primary_dc; - dds_GetDC(g_ddraw->primary, &primary_dc); + dds_GetDC(g_ddraw.primary, &primary_dc); - RECT rc = { 0, 0, g_ddraw->width, g_ddraw->height }; + RECT rc = { 0, 0, g_ddraw.width, g_ddraw.height }; DrawText(primary_dc, warning_text, -1, &rc, DT_NOCLIP | DT_CENTER); } else @@ -79,88 +79,88 @@ DWORD WINAPI gdi_render_main(void) BOOL upscale_hack = g_config.vhack && util_detect_low_res_screen(); if (g_config.vhack) - InterlockedExchange(&g_ddraw->upscale_hack_active, upscale_hack); + InterlockedExchange(&g_ddraw.upscale_hack_active, upscale_hack); if (g_config.fixchilds) { - g_ddraw->child_window_exists = FALSE; - InterlockedExchangePointer((void*)&g_ddraw->video_window_hwnd, NULL); - EnumChildWindows(g_ddraw->hwnd, util_enum_child_proc, (LPARAM)g_ddraw->primary); + g_ddraw.child_window_exists = FALSE; + InterlockedExchangePointer((void*)&g_ddraw.video_window_hwnd, NULL); + EnumChildWindows(g_ddraw.hwnd, util_enum_child_proc, (LPARAM)g_ddraw.primary); } - if (g_ddraw->bpp == 8 && g_ddraw->primary->palette) + if (g_ddraw.bpp == 8 && g_ddraw.primary->palette) { - memcpy(&g_ddraw->primary->bmi->bmiColors[0], g_ddraw->primary->palette->data_rgb, 256 * sizeof(int)); + memcpy(&g_ddraw.primary->bmi->bmiColors[0], g_ddraw.primary->palette->data_rgb, 256 * sizeof(int)); } - if (InterlockedExchange(&g_ddraw->render.clear_screen, FALSE)) + if (InterlockedExchange(&g_ddraw.render.clear_screen, FALSE)) { - RECT rc = { 0, 0, g_ddraw->render.width, g_ddraw->render.height }; - FillRect(g_ddraw->render.hdc, &rc, (HBRUSH)GetStockObject(BLACK_BRUSH)); + RECT rc = { 0, 0, g_ddraw.render.width, g_ddraw.render.height }; + FillRect(g_ddraw.render.hdc, &rc, (HBRUSH)GetStockObject(BLACK_BRUSH)); } - if (g_ddraw->bnet_active) + if (g_ddraw.bnet_active) { - RECT rc = { 0, 0, g_ddraw->render.width, g_ddraw->render.height }; - FillRect(g_ddraw->render.hdc, &rc, (HBRUSH)GetStockObject(BLACK_BRUSH)); + RECT rc = { 0, 0, g_ddraw.render.width, g_ddraw.render.height }; + FillRect(g_ddraw.render.hdc, &rc, (HBRUSH)GetStockObject(BLACK_BRUSH)); } else if (upscale_hack) { real_StretchDIBits( - g_ddraw->render.hdc, - g_ddraw->render.viewport.x, - g_ddraw->render.viewport.y, - g_ddraw->render.viewport.width, - g_ddraw->render.viewport.height, + g_ddraw.render.hdc, + g_ddraw.render.viewport.x, + g_ddraw.render.viewport.y, + g_ddraw.render.viewport.width, + g_ddraw.render.viewport.height, 0, - g_ddraw->height - g_ddraw->upscale_hack_height, - g_ddraw->upscale_hack_width, - g_ddraw->upscale_hack_height, - g_ddraw->primary->surface, - g_ddraw->primary->bmi, + g_ddraw.height - g_ddraw.upscale_hack_height, + g_ddraw.upscale_hack_width, + g_ddraw.upscale_hack_height, + g_ddraw.primary->surface, + g_ddraw.primary->bmi, DIB_RGB_COLORS, SRCCOPY); } - else if (!g_ddraw->child_window_exists && - (g_ddraw->render.width != g_ddraw->width || g_ddraw->render.height != g_ddraw->height)) + else if (!g_ddraw.child_window_exists && + (g_ddraw.render.width != g_ddraw.width || g_ddraw.render.height != g_ddraw.height)) { real_StretchDIBits( - g_ddraw->render.hdc, - g_ddraw->render.viewport.x, - g_ddraw->render.viewport.y, - g_ddraw->render.viewport.width, - g_ddraw->render.viewport.height, + g_ddraw.render.hdc, + g_ddraw.render.viewport.x, + g_ddraw.render.viewport.y, + g_ddraw.render.viewport.width, + g_ddraw.render.viewport.height, 0, 0, - g_ddraw->width, - g_ddraw->height, - g_ddraw->primary->surface, - g_ddraw->primary->bmi, + g_ddraw.width, + g_ddraw.height, + g_ddraw.primary->surface, + g_ddraw.primary->bmi, DIB_RGB_COLORS, SRCCOPY); } else { real_SetDIBitsToDevice( - g_ddraw->render.hdc, + g_ddraw.render.hdc, 0, 0, - g_ddraw->width, - g_ddraw->height, + g_ddraw.width, + g_ddraw.height, 0, 0, 0, - g_ddraw->height, - g_ddraw->primary->surface, - g_ddraw->primary->bmi, + g_ddraw.height, + g_ddraw.primary->surface, + g_ddraw.primary->bmi, DIB_RGB_COLORS); } if (g_config.lock_surfaces) - LeaveCriticalSection(&g_ddraw->primary->cs); + LeaveCriticalSection(&g_ddraw.primary->cs); } - LeaveCriticalSection(&g_ddraw->cs); + LeaveCriticalSection(&g_ddraw.cs); #if _DEBUG dbg_draw_frame_info_end(); diff --git a/src/render_ogl.c b/src/render_ogl.c index 6ff9a2c..428453e 100644 --- a/src/render_ogl.c +++ b/src/render_ogl.c @@ -30,7 +30,7 @@ DWORD WINAPI ogl_render_main(void) Sleep(250); g_ogl.got_error = g_ogl.use_opengl = FALSE; - g_ogl.context = ogl_create_context(g_ddraw->render.hdc); + g_ogl.context = ogl_create_context(g_ddraw.render.hdc); if (g_ogl.context) { oglu_init(); @@ -42,21 +42,21 @@ DWORD WINAPI ogl_render_main(void) TRACE("| GL_SHADING_LANGUAGE_VERSION: %s\n", glGetString(GL_SHADING_LANGUAGE_VERSION)); TRACE("+------------------------------------------------\n"); - g_ogl.context = ogl_create_core_context(g_ddraw->render.hdc); + g_ogl.context = ogl_create_core_context(g_ddraw.render.hdc); - if (oglu_ext_exists("WGL_EXT_swap_control", g_ddraw->render.hdc) && wglSwapIntervalEXT) + if (oglu_ext_exists("WGL_EXT_swap_control", g_ddraw.render.hdc) && wglSwapIntervalEXT) wglSwapIntervalEXT(g_config.vsync ? 1 : 0); fpsl_init(); ogl_build_programs(); - ogl_create_textures(g_ddraw->width, g_ddraw->height); + ogl_create_textures(g_ddraw.width, g_ddraw.height); ogl_init_main_program(); ogl_init_scale_program(); g_ogl.got_error = g_ogl.got_error || !ogl_texture_upload_test(); g_ogl.got_error = g_ogl.got_error || !ogl_shader_test(); g_ogl.got_error = g_ogl.got_error || glGetError() != GL_NO_ERROR; - g_ogl.use_opengl = (g_ogl.main_program || g_ddraw->bpp == 16 || g_ddraw->bpp == 32) && !g_ogl.got_error; + g_ogl.use_opengl = (g_ogl.main_program || g_ddraw.bpp == 16 || g_ddraw.bpp == 32) && !g_ogl.got_error; ogl_render(); @@ -65,8 +65,8 @@ DWORD WINAPI ogl_render_main(void) if (!g_ogl.use_opengl) { - g_ddraw->show_driver_warning = TRUE; - g_ddraw->renderer = gdi_render_main; + g_ddraw.show_driver_warning = TRUE; + g_ddraw.renderer = gdi_render_main; gdi_render_main(); } @@ -137,15 +137,15 @@ static void ogl_build_programs() if (g_oglu_got_version3) { - if (g_ddraw->bpp == 8) + if (g_ddraw.bpp == 8) { g_ogl.main_program = oglu_build_program(PASSTHROUGH_VERT_SHADER, PALETTE_FRAG_SHADER, core_profile); } - else if (g_ddraw->bpp == 16 && g_config.rgb555) + else if (g_ddraw.bpp == 16 && g_config.rgb555) { g_ogl.main_program = oglu_build_program(PASSTHROUGH_VERT_SHADER, RGB555_FRAG_SHADER, core_profile); } - else if (g_ddraw->bpp == 16 || g_ddraw->bpp == 32) + else if (g_ddraw.bpp == 16 || g_ddraw.bpp == 32) { g_ogl.main_program = oglu_build_program(PASSTHROUGH_VERT_SHADER, PASSTHROUGH_FRAG_SHADER, core_profile); } @@ -172,14 +172,14 @@ static void ogl_build_programs() strstr(g_config.shader, "xbrz-freescale.glsl") != NULL; if (!is_upscaler || - g_ddraw->render.viewport.width != g_ddraw->width || - g_ddraw->render.viewport.height != g_ddraw->height) + g_ddraw.render.viewport.width != g_ddraw.width || + g_ddraw.render.viewport.height != g_ddraw.height) { g_ogl.scale_program = oglu_build_program_from_file(shader_path, core_profile); if (!g_ogl.scale_program && - (g_ddraw->render.viewport.width != g_ddraw->width || - g_ddraw->render.viewport.height != g_ddraw->height)) + (g_ddraw.render.viewport.width != g_ddraw.width || + g_ddraw.render.viewport.height != g_ddraw.height)) { g_ogl.scale_program = oglu_build_program( @@ -209,11 +209,11 @@ static void ogl_build_programs() if (g_oglu_got_version2 && !g_ogl.main_program) { - if (g_ddraw->bpp == 8) + if (g_ddraw.bpp == 8) { g_ogl.main_program = oglu_build_program(PASSTHROUGH_VERT_SHADER_110, PALETTE_FRAG_SHADER_110, FALSE); } - else if (g_ddraw->bpp == 16 || g_ddraw->bpp == 32) + else if (g_ddraw.bpp == 16 || g_ddraw.bpp == 32) { g_ogl.main_program = oglu_build_program(PASSTHROUGH_VERT_SHADER_110, PASSTHROUGH_FRAG_SHADER_110, FALSE); } @@ -246,7 +246,7 @@ static void ogl_create_textures(int width, int height) while (glGetError() != GL_NO_ERROR); - if (g_ddraw->bpp == 32) + if (g_ddraw.bpp == 32) { glTexImage2D( GL_TEXTURE_2D, @@ -259,7 +259,7 @@ static void ogl_create_textures(int width, int height) g_ogl.surface_type = GL_UNSIGNED_BYTE, 0); } - else if (g_ddraw->bpp == 16 && g_config.rgb555) + else if (g_ddraw.bpp == 16 && g_config.rgb555) { if (g_oglu_got_version3) { @@ -288,7 +288,7 @@ static void ogl_create_textures(int width, int height) 0); } } - else if (g_ddraw->bpp == 16) + else if (g_ddraw.bpp == 16) { glTexImage2D( GL_TEXTURE_2D, @@ -316,7 +316,7 @@ static void ogl_create_textures(int width, int height) 0); } } - else if (g_ddraw->bpp == 8) + else if (g_ddraw.bpp == 8) { glTexImage2D( GL_TEXTURE_2D, @@ -360,7 +360,7 @@ static void ogl_create_textures(int width, int height) } } - if (g_ddraw->bpp == 8) + if (g_ddraw.bpp == 8) { glGenTextures(TEXTURE_COUNT, g_ogl.palette_tex_ids); @@ -385,7 +385,7 @@ static void ogl_init_main_program() glUniform1i(glGetUniformLocation(g_ogl.main_program, "Texture"), 0); - if (g_ddraw->bpp == 8) + if (g_ddraw.bpp == 8) glUniform1i(glGetUniformLocation(g_ogl.main_program, "PaletteTexture"), 1); if (g_oglu_got_version3) @@ -532,12 +532,12 @@ static void ogl_init_scale_program() float input_size[2], output_size[2], texture_size[2]; - input_size[0] = (float)g_ddraw->width; - input_size[1] = (float)g_ddraw->height; + input_size[0] = (float)g_ddraw.width; + input_size[1] = (float)g_ddraw.height; texture_size[0] = (float)g_ogl.surface_tex_width; texture_size[1] = (float)g_ogl.surface_tex_height; - output_size[0] = (float)g_ddraw->render.viewport.width; - output_size[1] = (float)g_ddraw->render.viewport.height; + output_size[0] = (float)g_ddraw.render.viewport.width; + output_size[1] = (float)g_ddraw.render.viewport.height; GLint loc = glGetUniformLocation(g_ogl.scale_program, "OutputSize"); if (loc != -1) @@ -648,31 +648,31 @@ static void ogl_render() BOOL needs_update = FALSE; glViewport( - g_ddraw->render.viewport.x, - g_ddraw->render.viewport.y + g_ddraw->render.opengl_y_align, - g_ddraw->render.viewport.width, - g_ddraw->render.viewport.height); + g_ddraw.render.viewport.x, + g_ddraw.render.viewport.y + g_ddraw.render.opengl_y_align, + g_ddraw.render.viewport.width, + g_ddraw.render.viewport.height); if (g_ogl.main_program) { glUseProgram(g_ogl.main_program); } - else if (g_ddraw->bpp == 16 || g_ddraw->bpp == 32) + else if (g_ddraw.bpp == 16 || g_ddraw.bpp == 32) { glEnable(GL_TEXTURE_2D); } - DWORD timeout = g_config.minfps > 0 ? g_ddraw->minfps_tick_len : INFINITE; + DWORD timeout = g_config.minfps > 0 ? g_ddraw.minfps_tick_len : INFINITE; - while (g_ogl.use_opengl && g_ddraw->render.run && - (g_config.minfps < 0 || WaitForSingleObject(g_ddraw->render.sem, timeout) != WAIT_FAILED)) + while (g_ogl.use_opengl && g_ddraw.render.run && + (g_config.minfps < 0 || WaitForSingleObject(g_ddraw.render.sem, timeout) != WAIT_FAILED)) { #if _DEBUG dbg_draw_frame_info_start(); #endif - g_ogl.scale_w = (float)g_ddraw->width / g_ogl.surface_tex_width; - g_ogl.scale_h = (float)g_ddraw->height / g_ogl.surface_tex_height; + g_ogl.scale_w = (float)g_ddraw.width / g_ogl.surface_tex_width; + g_ogl.scale_h = (float)g_ddraw.height / g_ogl.surface_tex_height; static int tex_index = 0, pal_index = 0; @@ -680,36 +680,36 @@ static void ogl_render() fpsl_frame_start(); - EnterCriticalSection(&g_ddraw->cs); + EnterCriticalSection(&g_ddraw.cs); - if (g_ddraw->primary && - g_ddraw->primary->bpp == g_ddraw->bpp && - g_ddraw->primary->width == g_ddraw->width && - g_ddraw->primary->height == g_ddraw->height && - (g_ddraw->bpp == 16 || g_ddraw->bpp == 32 || g_ddraw->primary->palette)) + if (g_ddraw.primary && + g_ddraw.primary->bpp == g_ddraw.bpp && + g_ddraw.primary->width == g_ddraw.width && + g_ddraw.primary->height == g_ddraw.height && + (g_ddraw.bpp == 16 || g_ddraw.bpp == 32 || g_ddraw.primary->palette)) { if (g_config.lock_surfaces) - EnterCriticalSection(&g_ddraw->primary->cs); + EnterCriticalSection(&g_ddraw.primary->cs); if (g_config.vhack) { if (util_detect_low_res_screen()) { - g_ogl.scale_w *= (float)g_ddraw->upscale_hack_width / g_ddraw->width; - g_ogl.scale_h *= (float)g_ddraw->upscale_hack_height / g_ddraw->height; + g_ogl.scale_w *= (float)g_ddraw.upscale_hack_width / g_ddraw.width; + g_ogl.scale_h *= (float)g_ddraw.upscale_hack_height / g_ddraw.height; - if (!InterlockedExchange(&g_ddraw->upscale_hack_active, TRUE)) + if (!InterlockedExchange(&g_ddraw.upscale_hack_active, TRUE)) scale_changed = TRUE; } else { - if (InterlockedExchange(&g_ddraw->upscale_hack_active, FALSE)) + if (InterlockedExchange(&g_ddraw.upscale_hack_active, FALSE)) scale_changed = TRUE; } } - if (g_ddraw->bpp == 8 && - (InterlockedExchange(&g_ddraw->render.palette_updated, FALSE) || g_config.minfps == -2)) + if (g_ddraw.bpp == 8 && + (InterlockedExchange(&g_ddraw.render.palette_updated, FALSE) || g_config.minfps == -2)) { if (++pal_index >= TEXTURE_COUNT) pal_index = 0; @@ -725,19 +725,19 @@ static void ogl_render() 1, GL_RGBA, GL_UNSIGNED_BYTE, - g_ddraw->primary->palette->data_bgr); + g_ddraw.primary->palette->data_bgr); } - if (InterlockedExchange(&g_ddraw->render.surface_updated, FALSE) || g_config.minfps == -2) + if (InterlockedExchange(&g_ddraw.render.surface_updated, FALSE) || g_config.minfps == -2) { if (++tex_index >= TEXTURE_COUNT) tex_index = 0; glBindTexture(GL_TEXTURE_2D, g_ogl.surface_tex_ids[tex_index]); - DWORD row_len = g_ddraw->primary->pitch ? g_ddraw->primary->pitch / g_ddraw->primary->bytes_pp : 0; + DWORD row_len = g_ddraw.primary->pitch ? g_ddraw.primary->pitch / g_ddraw.primary->bytes_pp : 0; - if (row_len != g_ddraw->primary->width) + if (row_len != g_ddraw.primary->width) glPixelStorei(GL_UNPACK_ROW_LENGTH, row_len); glTexSubImage2D( @@ -745,13 +745,13 @@ static void ogl_render() 0, 0, 0, - g_ddraw->width, - g_ddraw->height, + g_ddraw.width, + g_ddraw.height, g_ogl.surface_format, g_ogl.surface_type, - g_ddraw->primary->surface); + g_ddraw.primary->surface); - if (row_len != g_ddraw->primary->width) + if (row_len != g_ddraw.primary->width) glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); } @@ -769,29 +769,29 @@ static void ogl_render() if (g_config.fixchilds) { - g_ddraw->child_window_exists = FALSE; - InterlockedExchangePointer((void*)&g_ddraw->video_window_hwnd, NULL); - EnumChildWindows(g_ddraw->hwnd, util_enum_child_proc, (LPARAM)g_ddraw->primary); + g_ddraw.child_window_exists = FALSE; + InterlockedExchangePointer((void*)&g_ddraw.video_window_hwnd, NULL); + EnumChildWindows(g_ddraw.hwnd, util_enum_child_proc, (LPARAM)g_ddraw.primary); - if (g_ddraw->render.width != g_ddraw->width || g_ddraw->render.height != g_ddraw->height) + if (g_ddraw.render.width != g_ddraw.width || g_ddraw.render.height != g_ddraw.height) { - if (g_ddraw->child_window_exists) + if (g_ddraw.child_window_exists) { glClear(GL_COLOR_BUFFER_BIT); if (!needs_update) { - glViewport(0, g_ddraw->render.height - g_ddraw->height, g_ddraw->width, g_ddraw->height); + glViewport(0, g_ddraw.render.height - g_ddraw.height, g_ddraw.width, g_ddraw.height); needs_update = TRUE; } } else if (needs_update) { glViewport( - g_ddraw->render.viewport.x, - g_ddraw->render.viewport.y + g_ddraw->render.opengl_y_align, - g_ddraw->render.viewport.width, - g_ddraw->render.viewport.height); + g_ddraw.render.viewport.x, + g_ddraw.render.viewport.y + g_ddraw.render.opengl_y_align, + g_ddraw.render.viewport.width, + g_ddraw.render.viewport.height); needs_update = FALSE; } @@ -799,12 +799,12 @@ static void ogl_render() } if (g_config.lock_surfaces) - LeaveCriticalSection(&g_ddraw->primary->cs); + LeaveCriticalSection(&g_ddraw.primary->cs); } - LeaveCriticalSection(&g_ddraw->cs); + LeaveCriticalSection(&g_ddraw.cs); - if (g_ddraw->render.viewport.x != 0 || g_ddraw->render.viewport.y != 0) + if (g_ddraw.render.viewport.x != 0 || g_ddraw.render.viewport.y != 0) { glClear(GL_COLOR_BUFFER_BIT); } @@ -848,7 +848,7 @@ static void ogl_render() glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, g_ogl.surface_tex_ids[tex_index]); - if (g_ddraw->bpp == 8) + if (g_ddraw.bpp == 8) { glActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, g_ogl.palette_tex_ids[pal_index]); @@ -861,7 +861,7 @@ static void ogl_render() /* draw surface into framebuffer */ glUseProgram(g_ogl.main_program); - glViewport(0, 0, g_ddraw->width, g_ddraw->height); + glViewport(0, 0, g_ddraw.width, g_ddraw.height); glBindFramebuffer(GL_FRAMEBUFFER, g_ogl.frame_buffer_id); @@ -874,17 +874,17 @@ static void ogl_render() glActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, 0); - if (g_ddraw->child_window_exists) + if (g_ddraw.child_window_exists) { - glViewport(0, g_ddraw->render.height - g_ddraw->height, g_ddraw->width, g_ddraw->height); + glViewport(0, g_ddraw.render.height - g_ddraw.height, g_ddraw.width, g_ddraw.height); } else { glViewport( - g_ddraw->render.viewport.x, - g_ddraw->render.viewport.y + g_ddraw->render.opengl_y_align, - g_ddraw->render.viewport.width, - g_ddraw->render.viewport.height); + g_ddraw.render.viewport.x, + g_ddraw.render.viewport.y + g_ddraw.render.opengl_y_align, + g_ddraw.render.viewport.width, + g_ddraw.render.viewport.height); } /* apply filter */ @@ -917,10 +917,10 @@ static void ogl_render() glEnd(); } - if (g_ddraw->bnet_active) + if (g_ddraw.bnet_active) glClear(GL_COLOR_BUFFER_BIT); - SwapBuffers(g_ddraw->render.hdc); + SwapBuffers(g_ddraw.render.hdc); #if _DEBUG dbg_draw_frame_info_end(); @@ -930,7 +930,7 @@ static void ogl_render() } if (g_config.vhack) - InterlockedExchange(&g_ddraw->upscale_hack_active, FALSE); + InterlockedExchange(&g_ddraw.upscale_hack_active, FALSE); } static void ogl_delete_context(HGLRC context) @@ -940,7 +940,7 @@ static void ogl_delete_context(HGLRC context) glDeleteTextures(TEXTURE_COUNT, g_ogl.surface_tex_ids); - if (g_ddraw->bpp == 8) + if (g_ddraw.bpp == 8) glDeleteTextures(TEXTURE_COUNT, g_ogl.palette_tex_ids); if (glUseProgram) @@ -1004,8 +1004,8 @@ static BOOL ogl_texture_upload_test() 0, 0, 0, - g_ddraw->width, - g_ddraw->height, + g_ddraw.width, + g_ddraw.height, g_ogl.surface_format, g_ogl.surface_type, g_ogl.surface_tex); @@ -1018,7 +1018,7 @@ static BOOL ogl_texture_upload_test() return FALSE; } - if (g_ddraw->bpp == 8) + if (g_ddraw.bpp == 8) { for (i = 0; i < TEXTURE_COUNT; i++) { @@ -1053,7 +1053,7 @@ static BOOL ogl_shader_test() BOOL result = TRUE; - if (g_ddraw->bpp != 8) + if (g_ddraw.bpp != 8) return result; if (g_oglu_got_version3 && g_ogl.main_program) diff --git a/src/screenshot.c b/src/screenshot.c index 88d559c..d76105e 100644 --- a/src/screenshot.c +++ b/src/screenshot.c @@ -134,7 +134,7 @@ BOOL ss_take_screenshot(IDirectDrawSurfaceImpl* src) char str_time[64]; time_t t = time(NULL); - strncpy(title, g_ddraw->title, sizeof(g_ddraw->title)); + strncpy(title, g_ddraw.title, sizeof(g_ddraw.title)); for (int i = 0; i < strlen(title); i++) { diff --git a/src/utils.c b/src/utils.c index d3b26c9..34ff9a2 100644 --- a/src/utils.c +++ b/src/utils.c @@ -152,25 +152,25 @@ BOOL util_is_avx_supported() void util_limit_game_ticks() { - if (GetCurrentThreadId() != g_ddraw->gui_thread_id) + if (GetCurrentThreadId() != g_ddraw.gui_thread_id) return; - if (g_ddraw->ticks_limiter.htimer) + if (g_ddraw.ticks_limiter.htimer) { FILETIME ft = { 0 }; GetSystemTimeAsFileTime(&ft); - if (CompareFileTime((FILETIME*)&g_ddraw->ticks_limiter.due_time, &ft) == -1) + if (CompareFileTime((FILETIME*)&g_ddraw.ticks_limiter.due_time, &ft) == -1) { - memcpy(&g_ddraw->ticks_limiter.due_time, &ft, sizeof(LARGE_INTEGER)); + memcpy(&g_ddraw.ticks_limiter.due_time, &ft, sizeof(LARGE_INTEGER)); } else { - WaitForSingleObject(g_ddraw->ticks_limiter.htimer, g_ddraw->ticks_limiter.tick_length * 2); + WaitForSingleObject(g_ddraw.ticks_limiter.htimer, g_ddraw.ticks_limiter.tick_length * 2); } - g_ddraw->ticks_limiter.due_time.QuadPart += g_ddraw->ticks_limiter.tick_length_ns; - SetWaitableTimer(g_ddraw->ticks_limiter.htimer, &g_ddraw->ticks_limiter.due_time, 0, NULL, NULL, FALSE); + g_ddraw.ticks_limiter.due_time.QuadPart += g_ddraw.ticks_limiter.tick_length_ns; + SetWaitableTimer(g_ddraw.ticks_limiter.htimer, &g_ddraw.ticks_limiter.due_time, 0, NULL, NULL, FALSE); } else { @@ -182,12 +182,12 @@ void util_limit_game_ticks() return; } - next_game_tick += g_ddraw->ticks_limiter.tick_length; + next_game_tick += g_ddraw.ticks_limiter.tick_length; DWORD tick_count = timeGetTime(); int sleep_time = next_game_tick - tick_count; - if (sleep_time <= 0 || sleep_time > g_ddraw->ticks_limiter.tick_length) + if (sleep_time <= 0 || sleep_time > g_ddraw.ticks_limiter.tick_length) { next_game_tick = tick_count; } @@ -203,7 +203,7 @@ void util_update_bnet_pos(int new_x, int new_y) static int old_x = -32000; static int old_y = -32000; - if (old_x == -32000 || old_y == -32000 || !g_ddraw->bnet_active) + if (old_x == -32000 || old_y == -32000 || !g_ddraw.bnet_active) { old_x = new_x; old_y = new_y; @@ -211,10 +211,10 @@ void util_update_bnet_pos(int new_x, int new_y) } POINT pt = { 0, 0 }; - real_ClientToScreen(g_ddraw->hwnd, &pt); + real_ClientToScreen(g_ddraw.hwnd, &pt); RECT mainrc; - SetRect(&mainrc, pt.x, pt.y, pt.x + g_ddraw->width, pt.y + g_ddraw->height); + SetRect(&mainrc, pt.x, pt.y, pt.x + g_ddraw.width, pt.y + g_ddraw.height); int adj_y = 0; int adj_x = 0; @@ -237,7 +237,7 @@ void util_update_bnet_pos(int new_x, int new_y) 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE); - if (rc.bottom - rc.top <= g_ddraw->height) + if (rc.bottom - rc.top <= g_ddraw.height) { if (rc.bottom > mainrc.bottom && abs(mainrc.bottom - rc.bottom) > abs(adj_y)) { @@ -249,7 +249,7 @@ void util_update_bnet_pos(int new_x, int new_y) } } - if (rc.right - rc.left <= g_ddraw->width) + if (rc.right - rc.left <= g_ddraw.width) { if (rc.right > mainrc.right && abs(mainrc.right - rc.right) > abs(adj_x)) { @@ -340,23 +340,23 @@ void util_toggle_maximize() RECT client_rc; RECT dst_rc; - LONG style = real_GetWindowLongA(g_ddraw->hwnd, GWL_STYLE); - LONG exstyle = real_GetWindowLongA(g_ddraw->hwnd, GWL_EXSTYLE); - BOOL got_menu = GetMenu(g_ddraw->hwnd) != NULL; + LONG style = real_GetWindowLongA(g_ddraw.hwnd, GWL_STYLE); + LONG exstyle = real_GetWindowLongA(g_ddraw.hwnd, GWL_EXSTYLE); + BOOL got_menu = GetMenu(g_ddraw.hwnd) != NULL; - if (real_GetClientRect(g_ddraw->hwnd, &client_rc) && SystemParametersInfo(SPI_GETWORKAREA, 0, &dst_rc, 0)) + if (real_GetClientRect(g_ddraw.hwnd, &client_rc) && SystemParametersInfo(SPI_GETWORKAREA, 0, &dst_rc, 0)) { int width = (dst_rc.right - dst_rc.left); int height = (dst_rc.bottom - dst_rc.top); int x = dst_rc.left; int y = dst_rc.top; - if (client_rc.right != g_ddraw->width || client_rc.bottom != g_ddraw->height) + if (client_rc.right != g_ddraw.width || client_rc.bottom != g_ddraw.height) { dst_rc.left = 0; dst_rc.top = 0; - dst_rc.right = g_ddraw->width; - dst_rc.bottom = g_ddraw->height; + dst_rc.right = g_ddraw.width; + dst_rc.bottom = g_ddraw.height; AdjustWindowRectEx(&dst_rc, style, got_menu, exstyle); } @@ -364,15 +364,15 @@ void util_toggle_maximize() { dst_rc.left = 0; dst_rc.top = 0; - dst_rc.right = g_ddraw->width; - dst_rc.bottom = g_ddraw->height; + dst_rc.right = g_ddraw.width; + dst_rc.bottom = g_ddraw.height; for (int i = 20; i-- > 1;) { - if (width >= g_ddraw->width * i && height - 20 >= g_ddraw->height * i) + if (width >= g_ddraw.width * i && height - 20 >= g_ddraw.height * i) { - dst_rc.right = g_ddraw->width * i; - dst_rc.bottom = g_ddraw->height * i; + dst_rc.right = g_ddraw.width * i; + dst_rc.bottom = g_ddraw.height * i; break; } } @@ -386,7 +386,7 @@ void util_toggle_maximize() int w = dst_rc.right - dst_rc.left; int h = dst_rc.bottom - dst_rc.top; - double dst_ar = (double)g_ddraw->height / g_ddraw->width; + double dst_ar = (double)g_ddraw.height / g_ddraw.width; double src_ar = (double)h / w; dst_rc.top = 0; @@ -423,7 +423,7 @@ void util_toggle_maximize() void util_toggle_fullscreen() { - if (g_ddraw->bnet_active) + if (g_ddraw.bnet_active) return; if (g_config.toggle_borderless && g_config.windowed) @@ -433,7 +433,7 @@ void util_toggle_fullscreen() mouse_unlock(); g_config.upscaled_state = g_config.fullscreen = TRUE; - dd_SetDisplayMode(g_ddraw->width, g_ddraw->height, g_ddraw->bpp, 0); + dd_SetDisplayMode(g_ddraw.width, g_ddraw.height, g_ddraw.bpp, 0); mouse_lock(); } @@ -442,7 +442,7 @@ void util_toggle_fullscreen() mouse_unlock(); g_config.upscaled_state = g_config.fullscreen = FALSE; - dd_SetDisplayMode(g_ddraw->width, g_ddraw->height, g_ddraw->bpp, 0); + dd_SetDisplayMode(g_ddraw.width, g_ddraw.height, g_ddraw.bpp, 0); //mouse_lock(); } @@ -459,7 +459,7 @@ void util_toggle_fullscreen() } g_config.window_state = g_config.windowed = FALSE; - dd_SetDisplayMode(g_ddraw->width, g_ddraw->height, g_ddraw->bpp, SDM_LEAVE_WINDOWED); + dd_SetDisplayMode(g_ddraw.width, g_ddraw.height, g_ddraw.bpp, SDM_LEAVE_WINDOWED); util_update_bnet_pos(0, 0); mouse_lock(); @@ -475,27 +475,27 @@ void util_toggle_fullscreen() g_config.window_state = g_config.windowed = TRUE; - if (g_ddraw->renderer == d3d9_render_main && !g_config.nonexclusive) + if (g_ddraw.renderer == d3d9_render_main && !g_config.nonexclusive) { d3d9_reset(g_config.windowed); } else { - if (g_ddraw->render.thread) + if (g_ddraw.render.thread) { - EnterCriticalSection(&g_ddraw->cs); - g_ddraw->render.run = FALSE; - ReleaseSemaphore(g_ddraw->render.sem, 1, NULL); - LeaveCriticalSection(&g_ddraw->cs); + EnterCriticalSection(&g_ddraw.cs); + g_ddraw.render.run = FALSE; + ReleaseSemaphore(g_ddraw.render.sem, 1, NULL); + LeaveCriticalSection(&g_ddraw.cs); - WaitForSingleObject(g_ddraw->render.thread, INFINITE); - g_ddraw->render.thread = NULL; + WaitForSingleObject(g_ddraw.render.thread, INFINITE); + g_ddraw.render.thread = NULL; } - ChangeDisplaySettings(NULL, g_ddraw->bnet_active ? CDS_FULLSCREEN : 0); + ChangeDisplaySettings(NULL, g_ddraw.bnet_active ? CDS_FULLSCREEN : 0); } - dd_SetDisplayMode(g_ddraw->width, g_ddraw->height, g_ddraw->bpp, SDM_LEAVE_FULLSCREEN); + dd_SetDisplayMode(g_ddraw.width, g_ddraw.height, g_ddraw.bpp, SDM_LEAVE_FULLSCREEN); //mouse_lock(); } } @@ -523,15 +523,15 @@ void util_set_window_rect(int x, int y, int width, int height, UINT flags) { if (g_config.windowed) { - if (g_ddraw->render.thread) + if (g_ddraw.render.thread) { - EnterCriticalSection(&g_ddraw->cs); - g_ddraw->render.run = FALSE; - ReleaseSemaphore(g_ddraw->render.sem, 1, NULL); - LeaveCriticalSection(&g_ddraw->cs); + EnterCriticalSection(&g_ddraw.cs); + g_ddraw.render.run = FALSE; + ReleaseSemaphore(g_ddraw.render.sem, 1, NULL); + LeaveCriticalSection(&g_ddraw.cs); - WaitForSingleObject(g_ddraw->render.thread, INFINITE); - g_ddraw->render.thread = NULL; + WaitForSingleObject(g_ddraw.render.thread, INFINITE); + g_ddraw.render.thread = NULL; } if ((flags & SWP_NOMOVE) == 0) @@ -546,7 +546,7 @@ void util_set_window_rect(int x, int y, int width, int height, UINT flags) g_config.window_rect.right = width; } - dd_SetDisplayMode(g_ddraw->width, g_ddraw->height, g_ddraw->bpp, 0); + dd_SetDisplayMode(g_ddraw.width, g_ddraw.height, g_ddraw.bpp, 0); } } @@ -581,7 +581,7 @@ BOOL CALLBACK util_enum_child_proc(HWND hwnd, LPARAM lparam) { if (g_config.fixchilds != FIX_CHILDS_DETECT_HIDE) { - InterlockedExchangePointer((void*)&g_ddraw->video_window_hwnd, hwnd); + InterlockedExchangePointer((void*)&g_ddraw.video_window_hwnd, hwnd); } LONG style = real_GetWindowLongA(hwnd, GWL_EXSTYLE); @@ -603,7 +603,7 @@ BOOL CALLBACK util_enum_child_proc(HWND hwnd, LPARAM lparam) } else { - g_ddraw->got_child_windows = g_ddraw->child_window_exists = TRUE; + g_ddraw.got_child_windows = g_ddraw.child_window_exists = TRUE; if (g_config.fixchilds == FIX_CHILDS_DETECT_PAINT) { @@ -612,7 +612,7 @@ BOOL CALLBACK util_enum_child_proc(HWND hwnd, LPARAM lparam) dds_GetDC(this, &src_dc); - real_MapWindowPoints(HWND_DESKTOP, g_ddraw->hwnd, (LPPOINT)&pos, 2); + real_MapWindowPoints(HWND_DESKTOP, g_ddraw.hwnd, (LPPOINT)&pos, 2); BitBlt(dst_dc, 0, 0, size.right, size.bottom, src_dc, pos.left, pos.top, SRCCOPY); @@ -627,7 +627,7 @@ BOOL CALLBACK util_enum_child_proc(HWND hwnd, LPARAM lparam) static unsigned char util_get_pixel(int x, int y) { return ((unsigned char*)dds_GetBuffer( - g_ddraw->primary))[y * g_ddraw->primary->pitch + x * g_ddraw->primary->bytes_pp]; + g_ddraw.primary))[y * g_ddraw.primary->pitch + x * g_ddraw.primary->bytes_pp]; } BOOL util_detect_low_res_screen() @@ -636,12 +636,12 @@ BOOL util_detect_low_res_screen() static int* is_vqa_640 = (int*)0x0065D7BC; static BYTE* should_stretch = (BYTE*)0x00607D78; - if (g_ddraw->width <= g_ddraw->upscale_hack_width || g_ddraw->height <= g_ddraw->upscale_hack_height) + if (g_ddraw.width <= g_ddraw.upscale_hack_width || g_ddraw.height <= g_ddraw.upscale_hack_height) { return FALSE; } - if (g_ddraw->isredalert) + if (g_ddraw.isredalert) { if ((*in_movie && !*is_vqa_640) || *should_stretch) { @@ -650,15 +650,15 @@ BOOL util_detect_low_res_screen() return FALSE; } - else if (g_ddraw->iscnc1) + else if (g_ddraw.iscnc1) { return - util_get_pixel(g_ddraw->upscale_hack_width + 1, 0) == 0 || - util_get_pixel(g_ddraw->upscale_hack_width + 5, 1) == 0; + util_get_pixel(g_ddraw.upscale_hack_width + 1, 0) == 0 || + util_get_pixel(g_ddraw.upscale_hack_width + 5, 1) == 0; } - else if (g_ddraw->iskkndx) + else if (g_ddraw.iskkndx) { - return util_get_pixel(g_ddraw->width - 3, 3) == 0; + return util_get_pixel(g_ddraw.width - 3, 3) == 0; } return FALSE; diff --git a/src/winapi_hooks.c b/src/winapi_hooks.c index 10c287e..8b6562a 100644 --- a/src/winapi_hooks.c +++ b/src/winapi_hooks.c @@ -21,7 +21,7 @@ BOOL WINAPI fake_GetCursorPos(LPPOINT lpPoint) { - if (!g_ddraw || !g_ddraw->hwnd || !g_ddraw->width) + if (!g_ddraw.ref || !g_ddraw.hwnd || !g_ddraw.width) return real_GetCursorPos(lpPoint); POINT pt, realpt; @@ -32,16 +32,16 @@ BOOL WINAPI fake_GetCursorPos(LPPOINT lpPoint) realpt.x = pt.x; realpt.y = pt.y; - if (g_mouse_locked && (!g_config.windowed || real_ScreenToClient(g_ddraw->hwnd, &pt))) + if (g_mouse_locked && (!g_config.windowed || real_ScreenToClient(g_ddraw.hwnd, &pt))) { /* fallback solution for possible ClipCursor failure */ int diffx = 0, diffy = 0; - int max_width = g_config.adjmouse ? g_ddraw->render.viewport.width : g_ddraw->width; - int max_height = g_config.adjmouse ? g_ddraw->render.viewport.height : g_ddraw->height; + int max_width = g_config.adjmouse ? g_ddraw.render.viewport.width : g_ddraw.width; + int max_height = g_config.adjmouse ? g_ddraw.render.viewport.height : g_ddraw.height; - pt.x -= g_ddraw->mouse.x_adjust; - pt.y -= g_ddraw->mouse.y_adjust; + pt.x -= g_ddraw.mouse.x_adjust; + pt.y -= g_ddraw.mouse.y_adjust; if (pt.x < 0) { @@ -75,38 +75,38 @@ BOOL WINAPI fake_GetCursorPos(LPPOINT lpPoint) if (g_config.adjmouse) { - x = min((DWORD)(roundf(pt.x * g_ddraw->mouse.unscale_x)), g_ddraw->width - 1); - y = min((DWORD)(roundf(pt.y * g_ddraw->mouse.unscale_y)), g_ddraw->height - 1); + x = min((DWORD)(roundf(pt.x * g_ddraw.mouse.unscale_x)), g_ddraw.width - 1); + y = min((DWORD)(roundf(pt.y * g_ddraw.mouse.unscale_y)), g_ddraw.height - 1); } else { - x = min(pt.x, g_ddraw->width - 1); - y = min(pt.y, g_ddraw->height - 1); + x = min(pt.x, g_ddraw.width - 1); + y = min(pt.y, g_ddraw.height - 1); } - if (g_config.vhack && InterlockedExchangeAdd(&g_ddraw->upscale_hack_active, 0)) + if (g_config.vhack && InterlockedExchangeAdd(&g_ddraw.upscale_hack_active, 0)) { diffx = 0; diffy = 0; - if (x > g_ddraw->upscale_hack_width) + if (x > g_ddraw.upscale_hack_width) { - diffx = x - g_ddraw->upscale_hack_width; - x = g_ddraw->upscale_hack_width; + diffx = x - g_ddraw.upscale_hack_width; + x = g_ddraw.upscale_hack_width; } - if (y > g_ddraw->upscale_hack_height) + if (y > g_ddraw.upscale_hack_height) { - diffy = y - g_ddraw->upscale_hack_height; - y = g_ddraw->upscale_hack_height; + diffy = y - g_ddraw.upscale_hack_height; + y = g_ddraw.upscale_hack_height; } if (diffx || diffy) real_SetCursorPos(realpt.x - diffx, realpt.y - diffy); } - InterlockedExchange((LONG*)&g_ddraw->cursor.x, x); - InterlockedExchange((LONG*)&g_ddraw->cursor.y, y); + InterlockedExchange((LONG*)&g_ddraw.cursor.x, x); + InterlockedExchange((LONG*)&g_ddraw.cursor.y, y); if (lpPoint) { @@ -116,9 +116,9 @@ BOOL WINAPI fake_GetCursorPos(LPPOINT lpPoint) return TRUE; } - else if (lpPoint && g_ddraw->bnet_active && real_ScreenToClient(g_ddraw->hwnd, &pt)) + else if (lpPoint && g_ddraw.bnet_active && real_ScreenToClient(g_ddraw.hwnd, &pt)) { - if (pt.x > 0 && pt.x < g_ddraw->width && pt.y > 0 && pt.y < g_ddraw->height) + if (pt.x > 0 && pt.x < g_ddraw.width && pt.y > 0 && pt.y < g_ddraw.height) { lpPoint->x = pt.x; lpPoint->y = pt.y; @@ -129,8 +129,8 @@ BOOL WINAPI fake_GetCursorPos(LPPOINT lpPoint) if (lpPoint) { - lpPoint->x = InterlockedExchangeAdd((LONG*)&g_ddraw->cursor.x, 0); - lpPoint->y = InterlockedExchangeAdd((LONG*)&g_ddraw->cursor.y, 0); + lpPoint->x = InterlockedExchangeAdd((LONG*)&g_ddraw.cursor.x, 0); + lpPoint->y = InterlockedExchangeAdd((LONG*)&g_ddraw.cursor.y, 0); } return TRUE; @@ -138,13 +138,13 @@ BOOL WINAPI fake_GetCursorPos(LPPOINT lpPoint) BOOL WINAPI fake_ClipCursor(const RECT* lpRect) { - if (g_ddraw && g_ddraw->hwnd && g_ddraw->width) + if (g_ddraw.ref && g_ddraw.hwnd && g_ddraw.width) { RECT dst_rc = { 0, 0, - g_ddraw->width, - g_ddraw->height + g_ddraw.width, + g_ddraw.height }; if (lpRect) @@ -152,28 +152,28 @@ BOOL WINAPI fake_ClipCursor(const RECT* lpRect) if (g_config.adjmouse) { - dst_rc.left = (LONG)(roundf(dst_rc.left * g_ddraw->render.scale_w)); - dst_rc.top = (LONG)(roundf(dst_rc.top * g_ddraw->render.scale_h)); - dst_rc.bottom = (LONG)(roundf(dst_rc.bottom * g_ddraw->render.scale_h)); - dst_rc.right = (LONG)(roundf(dst_rc.right * g_ddraw->render.scale_w)); + dst_rc.left = (LONG)(roundf(dst_rc.left * g_ddraw.render.scale_w)); + dst_rc.top = (LONG)(roundf(dst_rc.top * g_ddraw.render.scale_h)); + dst_rc.bottom = (LONG)(roundf(dst_rc.bottom * g_ddraw.render.scale_h)); + dst_rc.right = (LONG)(roundf(dst_rc.right * g_ddraw.render.scale_w)); } - int max_width = g_config.adjmouse ? g_ddraw->render.viewport.width : g_ddraw->width; - int max_height = g_config.adjmouse ? g_ddraw->render.viewport.height : g_ddraw->height; + int max_width = g_config.adjmouse ? g_ddraw.render.viewport.width : g_ddraw.width; + int max_height = g_config.adjmouse ? g_ddraw.render.viewport.height : g_ddraw.height; dst_rc.bottom = min(dst_rc.bottom, max_height); dst_rc.right = min(dst_rc.right, max_width); OffsetRect( &dst_rc, - g_ddraw->mouse.x_adjust, - g_ddraw->mouse.y_adjust); + g_ddraw.mouse.x_adjust, + g_ddraw.mouse.y_adjust); - CopyRect(&g_ddraw->mouse.rc, &dst_rc); + CopyRect(&g_ddraw.mouse.rc, &dst_rc); - if (g_mouse_locked && !util_is_minimized(g_ddraw->hwnd)) + if (g_mouse_locked && !util_is_minimized(g_ddraw.hwnd)) { - real_MapWindowPoints(g_ddraw->hwnd, HWND_DESKTOP, (LPPOINT)&dst_rc, 2); + real_MapWindowPoints(g_ddraw.hwnd, HWND_DESKTOP, (LPPOINT)&dst_rc, 2); return real_ClipCursor(&dst_rc); } @@ -184,19 +184,19 @@ BOOL WINAPI fake_ClipCursor(const RECT* lpRect) int WINAPI fake_ShowCursor(BOOL bShow) { - if (g_ddraw && g_ddraw->hwnd) + if (g_ddraw.ref && g_ddraw.hwnd) { if (g_mouse_locked || g_config.devmode) { int count = real_ShowCursor(bShow); - InterlockedExchange((LONG*)&g_ddraw->show_cursor_count, count); + InterlockedExchange((LONG*)&g_ddraw.show_cursor_count, count); return count; } else { return bShow ? - InterlockedIncrement((LONG*)&g_ddraw->show_cursor_count) : - InterlockedDecrement((LONG*)&g_ddraw->show_cursor_count); + InterlockedIncrement((LONG*)&g_ddraw.show_cursor_count) : + InterlockedDecrement((LONG*)&g_ddraw.show_cursor_count); } } @@ -205,9 +205,9 @@ int WINAPI fake_ShowCursor(BOOL bShow) HCURSOR WINAPI fake_SetCursor(HCURSOR hCursor) { - if (g_ddraw && g_ddraw->hwnd) + if (g_ddraw.ref && g_ddraw.hwnd) { - HCURSOR cursor = (HCURSOR)InterlockedExchange((LONG*)&g_ddraw->old_cursor, (LONG)hCursor); + HCURSOR cursor = (HCURSOR)InterlockedExchange((LONG*)&g_ddraw.old_cursor, (LONG)hCursor); if (!g_mouse_locked && !g_config.devmode) return cursor; @@ -219,15 +219,15 @@ HCURSOR WINAPI fake_SetCursor(HCURSOR hCursor) BOOL WINAPI fake_GetWindowRect(HWND hWnd, LPRECT lpRect) { if (lpRect && - g_ddraw && - g_ddraw->hwnd && - (g_config.hook != 2 || g_ddraw->renderer == gdi_render_main)) + g_ddraw.ref && + g_ddraw.hwnd && + (g_config.hook != 2 || g_ddraw.renderer == gdi_render_main)) { - if (g_ddraw->hwnd == hWnd) + if (g_ddraw.hwnd == hWnd) { - lpRect->bottom = g_ddraw->height; + lpRect->bottom = g_ddraw.height; lpRect->left = 0; - lpRect->right = g_ddraw->width; + lpRect->right = g_ddraw.width; lpRect->top = 0; return TRUE; @@ -236,7 +236,7 @@ BOOL WINAPI fake_GetWindowRect(HWND hWnd, LPRECT lpRect) { if (real_GetWindowRect(hWnd, lpRect)) { - real_MapWindowPoints(HWND_DESKTOP, g_ddraw->hwnd, (LPPOINT)lpRect, 2); + real_MapWindowPoints(HWND_DESKTOP, g_ddraw.hwnd, (LPPOINT)lpRect, 2); return TRUE; } @@ -251,13 +251,13 @@ BOOL WINAPI fake_GetWindowRect(HWND hWnd, LPRECT lpRect) BOOL WINAPI fake_GetClientRect(HWND hWnd, LPRECT lpRect) { if (lpRect && - g_ddraw && - g_ddraw->hwnd == hWnd && - (g_config.hook != 2 || g_ddraw->renderer == gdi_render_main)) + g_ddraw.ref && + g_ddraw.hwnd == hWnd && + (g_config.hook != 2 || g_ddraw.renderer == gdi_render_main)) { - lpRect->bottom = g_ddraw->height; + lpRect->bottom = g_ddraw.height; lpRect->left = 0; - lpRect->right = g_ddraw->width; + lpRect->right = g_ddraw.width; lpRect->top = 0; return TRUE; @@ -268,29 +268,29 @@ BOOL WINAPI fake_GetClientRect(HWND hWnd, LPRECT lpRect) BOOL WINAPI fake_ClientToScreen(HWND hWnd, LPPOINT lpPoint) { - if (!g_ddraw || !g_ddraw->hwnd) + if (!g_ddraw.ref || !g_ddraw.hwnd) return real_ClientToScreen(hWnd, lpPoint); - if (g_ddraw->hwnd != hWnd) - return real_ClientToScreen(hWnd, lpPoint) && real_ScreenToClient(g_ddraw->hwnd, lpPoint); + if (g_ddraw.hwnd != hWnd) + return real_ClientToScreen(hWnd, lpPoint) && real_ScreenToClient(g_ddraw.hwnd, lpPoint); return TRUE; } BOOL WINAPI fake_ScreenToClient(HWND hWnd, LPPOINT lpPoint) { - if (!g_ddraw || !g_ddraw->hwnd) + if (!g_ddraw.ref || !g_ddraw.hwnd) return real_ScreenToClient(hWnd, lpPoint); - if (g_ddraw->hwnd != hWnd) - return real_ClientToScreen(g_ddraw->hwnd, lpPoint) && real_ScreenToClient(hWnd, lpPoint); + if (g_ddraw.hwnd != hWnd) + return real_ClientToScreen(g_ddraw.hwnd, lpPoint) && real_ScreenToClient(hWnd, lpPoint); return TRUE; } BOOL WINAPI fake_SetCursorPos(int X, int Y) { - if (!g_ddraw || !g_ddraw->hwnd || !g_ddraw->width) + if (!g_ddraw.ref || !g_ddraw.hwnd || !g_ddraw.width) return real_SetCursorPos(X, Y); if (!g_mouse_locked && !g_config.devmode) @@ -300,35 +300,35 @@ BOOL WINAPI fake_SetCursorPos(int X, int Y) if (g_config.adjmouse) { - pt.x = (LONG)(roundf(pt.x * g_ddraw->mouse.scale_x)); - pt.y = (LONG)(roundf(pt.y * g_ddraw->mouse.scale_y)); + pt.x = (LONG)(roundf(pt.x * g_ddraw.mouse.scale_x)); + pt.y = (LONG)(roundf(pt.y * g_ddraw.mouse.scale_y)); } - pt.x += g_ddraw->mouse.x_adjust; - pt.y += g_ddraw->mouse.y_adjust; + pt.x += g_ddraw.mouse.x_adjust; + pt.y += g_ddraw.mouse.y_adjust; - return real_ClientToScreen(g_ddraw->hwnd, &pt) && real_SetCursorPos(pt.x, pt.y); + return real_ClientToScreen(g_ddraw.hwnd, &pt) && real_SetCursorPos(pt.x, pt.y); } HWND WINAPI fake_WindowFromPoint(POINT Point) { - if (!g_ddraw || !g_ddraw->hwnd) + if (!g_ddraw.ref || !g_ddraw.hwnd) return real_WindowFromPoint(Point); POINT pt = { Point.x, Point.y }; - return real_ClientToScreen(g_ddraw->hwnd, &pt) ? real_WindowFromPoint(pt) : NULL; + return real_ClientToScreen(g_ddraw.hwnd, &pt) ? real_WindowFromPoint(pt) : NULL; } BOOL WINAPI fake_GetClipCursor(LPRECT lpRect) { - if (!g_ddraw || !g_ddraw->width) + if (!g_ddraw.ref || !g_ddraw.width) return real_GetClipCursor(lpRect); if (lpRect) { - lpRect->bottom = g_ddraw->height; + lpRect->bottom = g_ddraw.height; lpRect->left = 0; - lpRect->right = g_ddraw->width; + lpRect->right = g_ddraw.width; lpRect->top = 0; return TRUE; @@ -339,21 +339,21 @@ BOOL WINAPI fake_GetClipCursor(LPRECT lpRect) BOOL WINAPI fake_GetCursorInfo(PCURSORINFO pci) { - if (!g_ddraw || !g_ddraw->hwnd) + if (!g_ddraw.ref || !g_ddraw.hwnd) return real_GetCursorInfo(pci); - return pci && real_GetCursorInfo(pci) && real_ScreenToClient(g_ddraw->hwnd, &pci->ptScreenPos); + return pci && real_GetCursorInfo(pci) && real_ScreenToClient(g_ddraw.hwnd, &pci->ptScreenPos); } int WINAPI fake_GetSystemMetrics(int nIndex) { - if (g_ddraw && g_ddraw->width) + if (g_ddraw.ref && g_ddraw.width) { if (nIndex == SM_CXSCREEN) - return g_ddraw->width; + return g_ddraw.width; if (nIndex == SM_CYSCREEN) - return g_ddraw->height; + return g_ddraw.height; } return real_GetSystemMetrics(nIndex); @@ -361,19 +361,19 @@ int WINAPI fake_GetSystemMetrics(int nIndex) BOOL WINAPI fake_SetWindowPos(HWND hWnd, HWND hWndInsertAfter, int X, int Y, int cx, int cy, UINT uFlags) { - if (g_ddraw && g_ddraw->hwnd) + if (g_ddraw.ref && g_ddraw.hwnd) { - if (g_ddraw->hwnd == hWnd) + if (g_ddraw.hwnd == hWnd) { UINT req_flags = SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER; if ((uFlags & req_flags) != req_flags) return TRUE; } - else if (!IsChild(g_ddraw->hwnd, hWnd) && !(real_GetWindowLongA(hWnd, GWL_STYLE) & WS_CHILD)) + else if (!IsChild(g_ddraw.hwnd, hWnd) && !(real_GetWindowLongA(hWnd, GWL_STYLE) & WS_CHILD)) { POINT pt = { 0, 0 }; - if (real_ClientToScreen(g_ddraw->hwnd, &pt)) + if (real_ClientToScreen(g_ddraw.hwnd, &pt)) { X += pt.x; Y += pt.y; @@ -386,27 +386,27 @@ BOOL WINAPI fake_SetWindowPos(HWND hWnd, HWND hWndInsertAfter, int X, int Y, int BOOL WINAPI fake_MoveWindow(HWND hWnd, int X, int Y, int nWidth, int nHeight, BOOL bRepaint) { - if (g_ddraw && g_ddraw->hwnd) + if (g_ddraw.ref && g_ddraw.hwnd) { - if (g_ddraw->hwnd == hWnd) + if (g_ddraw.hwnd == hWnd) { - if (g_ddraw->width && g_ddraw->height && (nWidth != g_ddraw->width || nHeight != g_ddraw->height)) + if (g_ddraw.width && g_ddraw.height && (nWidth != g_ddraw.width || nHeight != g_ddraw.height)) { - //real_SendMessageA(g_ddraw->hwnd, WM_MOVE_DDRAW, 0, MAKELPARAM(X, Y)); + //real_SendMessageA(g_ddraw.hwnd, WM_MOVE_DDRAW, 0, MAKELPARAM(X, Y)); real_SendMessageA( - g_ddraw->hwnd, + g_ddraw.hwnd, WM_SIZE_DDRAW, 0, - MAKELPARAM(min(nWidth, g_ddraw->width), min(nHeight, g_ddraw->height))); + MAKELPARAM(min(nWidth, g_ddraw.width), min(nHeight, g_ddraw.height))); } return TRUE; } - else if (!IsChild(g_ddraw->hwnd, hWnd) && !(real_GetWindowLongA(hWnd, GWL_STYLE) & WS_CHILD)) + else if (!IsChild(g_ddraw.hwnd, hWnd) && !(real_GetWindowLongA(hWnd, GWL_STYLE) & WS_CHILD)) { POINT pt = { 0, 0 }; - if (real_ClientToScreen(g_ddraw->hwnd, &pt)) + if (real_ClientToScreen(g_ddraw.hwnd, &pt)) { X += pt.x; Y += pt.y; @@ -419,35 +419,35 @@ BOOL WINAPI fake_MoveWindow(HWND hWnd, int X, int Y, int nWidth, int nHeight, BO LRESULT WINAPI fake_SendMessageA(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { - if (!g_ddraw || !g_ddraw->hwnd) + if (!g_ddraw.ref || !g_ddraw.hwnd) return real_SendMessageA(hWnd, Msg, wParam, lParam); - if (g_ddraw->hwnd == hWnd && Msg == WM_MOUSEMOVE) + if (g_ddraw.hwnd == hWnd && Msg == WM_MOUSEMOVE) { int x = GET_X_LPARAM(lParam); int y = GET_Y_LPARAM(lParam); if (g_config.adjmouse) { - x = (int)(roundf(x * g_ddraw->mouse.scale_x)); - y = (int)(roundf(y * g_ddraw->mouse.scale_y)); + x = (int)(roundf(x * g_ddraw.mouse.scale_x)); + y = (int)(roundf(y * g_ddraw.mouse.scale_y)); } - lParam = MAKELPARAM(x + g_ddraw->mouse.x_adjust, y + g_ddraw->mouse.y_adjust); + lParam = MAKELPARAM(x + g_ddraw.mouse.x_adjust, y + g_ddraw.mouse.y_adjust); } - if (g_ddraw->hwnd == hWnd && Msg == WM_SIZE && g_config.hook != 2) + if (g_ddraw.hwnd == hWnd && Msg == WM_SIZE && g_config.hook != 2) { Msg = WM_SIZE_DDRAW; } LRESULT result = real_SendMessageA(hWnd, Msg, wParam, lParam); - if (result && g_ddraw && Msg == CB_GETDROPPEDCONTROLRECT) + if (result && g_ddraw.ref && Msg == CB_GETDROPPEDCONTROLRECT) { RECT* rc = (RECT*)lParam; if (rc) - real_MapWindowPoints(HWND_DESKTOP, g_ddraw->hwnd, (LPPOINT)rc, 2); + real_MapWindowPoints(HWND_DESKTOP, g_ddraw.hwnd, (LPPOINT)rc, 2); } return result; @@ -455,15 +455,15 @@ LRESULT WINAPI fake_SendMessageA(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lPar LONG WINAPI fake_SetWindowLongA(HWND hWnd, int nIndex, LONG dwNewLong) { - if (g_ddraw && g_ddraw->hwnd == hWnd) + if (g_ddraw.ref && g_ddraw.hwnd == hWnd) { if (nIndex == GWL_STYLE) return 0; if (nIndex == GWL_WNDPROC) { - WNDPROC old = g_ddraw->wndproc; - g_ddraw->wndproc = (WNDPROC)dwNewLong; + WNDPROC old = g_ddraw.wndproc; + g_ddraw.wndproc = (WNDPROC)dwNewLong; return (LONG)old; } @@ -474,11 +474,11 @@ LONG WINAPI fake_SetWindowLongA(HWND hWnd, int nIndex, LONG dwNewLong) LONG WINAPI fake_GetWindowLongA(HWND hWnd, int nIndex) { - if (g_ddraw && g_ddraw->hwnd == hWnd) + if (g_ddraw.ref && g_ddraw.hwnd == hWnd) { if (nIndex == GWL_WNDPROC) { - return (LONG)g_ddraw->wndproc; + return (LONG)g_ddraw.wndproc; } } @@ -487,7 +487,7 @@ LONG WINAPI fake_GetWindowLongA(HWND hWnd, int nIndex) BOOL WINAPI fake_EnableWindow(HWND hWnd, BOOL bEnable) { - if (g_ddraw && g_ddraw->hwnd == hWnd) + if (g_ddraw.ref && g_ddraw.hwnd == hWnd) { return FALSE; } @@ -497,30 +497,30 @@ BOOL WINAPI fake_EnableWindow(HWND hWnd, BOOL bEnable) int WINAPI fake_MapWindowPoints(HWND hWndFrom, HWND hWndTo, LPPOINT lpPoints, UINT cPoints) { - if (g_ddraw && g_ddraw->hwnd) + if (g_ddraw.ref && g_ddraw.hwnd) { if (hWndTo == HWND_DESKTOP) { - if (hWndFrom == g_ddraw->hwnd) + if (hWndFrom == g_ddraw.hwnd) { return 0; } else { //real_MapWindowPoints(hWndFrom, hWndTo, lpPoints, cPoints); - //return real_MapWindowPoints(HWND_DESKTOP, g_ddraw->hwnd, lpPoints, cPoints); + //return real_MapWindowPoints(HWND_DESKTOP, g_ddraw.hwnd, lpPoints, cPoints); } } if (hWndFrom == HWND_DESKTOP) { - if (hWndTo == g_ddraw->hwnd) + if (hWndTo == g_ddraw.hwnd) { return 0; } else { - //real_MapWindowPoints(g_ddraw->hwnd, HWND_DESKTOP, lpPoints, cPoints); + //real_MapWindowPoints(g_ddraw.hwnd, HWND_DESKTOP, lpPoints, cPoints); //return real_MapWindowPoints(hWndFrom, hWndTo, lpPoints, cPoints); } } @@ -531,7 +531,7 @@ int WINAPI fake_MapWindowPoints(HWND hWndFrom, HWND hWndTo, LPPOINT lpPoints, UI BOOL WINAPI fake_ShowWindow(HWND hWnd, int nCmdShow) { - if (g_ddraw && g_ddraw->hwnd == hWnd) + if (g_ddraw.ref && g_ddraw.hwnd == hWnd) { if (nCmdShow == SW_SHOWMAXIMIZED) nCmdShow = SW_SHOWNORMAL; @@ -548,9 +548,9 @@ BOOL WINAPI fake_ShowWindow(HWND hWnd, int nCmdShow) HWND WINAPI fake_GetTopWindow(HWND hWnd) { - if (g_ddraw && g_config.windowed && g_ddraw->hwnd && !hWnd) + if (g_ddraw.ref && g_config.windowed && g_ddraw.hwnd && !hWnd) { - return g_ddraw->hwnd; + return g_ddraw.hwnd; } return real_GetTopWindow(hWnd); @@ -558,9 +558,9 @@ HWND WINAPI fake_GetTopWindow(HWND hWnd) HWND WINAPI fake_GetForegroundWindow() { - if (g_ddraw && g_config.windowed && g_ddraw->hwnd) + if (g_ddraw.ref && g_config.windowed && g_ddraw.hwnd) { - return g_ddraw->hwnd; + return g_ddraw.hwnd; } return real_GetForegroundWindow(); @@ -568,7 +568,7 @@ HWND WINAPI fake_GetForegroundWindow() BOOL WINAPI fake_SetForegroundWindow(HWND hWnd) { - if (g_ddraw && g_ddraw->bnet_active) + if (g_ddraw.ref && g_ddraw.bnet_active) { return TRUE; } @@ -596,7 +596,7 @@ HHOOK WINAPI fake_SetWindowsHookExA(int idHook, HOOKPROC lpfn, HINSTANCE hmod, D BOOL HandleMessage(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax) { - if (g_ddraw && g_ddraw->width) + if (g_ddraw.ref && g_ddraw.width) { switch (lpMsg->message) { @@ -609,22 +609,22 @@ BOOL HandleMessage(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMa int x = GET_X_LPARAM(lpMsg->lParam); int y = GET_Y_LPARAM(lpMsg->lParam); - if (x > g_ddraw->render.viewport.x + g_ddraw->render.viewport.width || - x < g_ddraw->render.viewport.x || - y > g_ddraw->render.viewport.y + g_ddraw->render.viewport.height || - y < g_ddraw->render.viewport.y) + if (x > g_ddraw.render.viewport.x + g_ddraw.render.viewport.width || + x < g_ddraw.render.viewport.x || + y > g_ddraw.render.viewport.y + g_ddraw.render.viewport.height || + y < g_ddraw.render.viewport.y) { - x = g_ddraw->width / 2; - y = g_ddraw->height / 2; + x = g_ddraw.width / 2; + y = g_ddraw.height / 2; } else { - x = (DWORD)((x - g_ddraw->render.viewport.x) * g_ddraw->mouse.unscale_x); - y = (DWORD)((y - g_ddraw->render.viewport.y) * g_ddraw->mouse.unscale_y); + x = (DWORD)((x - g_ddraw.render.viewport.x) * g_ddraw.mouse.unscale_x); + y = (DWORD)((y - g_ddraw.render.viewport.y) * g_ddraw.mouse.unscale_y); } - InterlockedExchange((LONG*)&g_ddraw->cursor.x, x); - InterlockedExchange((LONG*)&g_ddraw->cursor.y, y); + InterlockedExchange((LONG*)&g_ddraw.cursor.x, x); + InterlockedExchange((LONG*)&g_ddraw.cursor.y, y); mouse_lock(); //return FALSE; @@ -654,12 +654,12 @@ BOOL HandleMessage(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMa if (lpMsg->message == WM_MOUSEWHEEL) { POINT pt = { GET_X_LPARAM(lpMsg->lParam), GET_Y_LPARAM(lpMsg->lParam) }; - real_ScreenToClient(g_ddraw->hwnd, &pt); + real_ScreenToClient(g_ddraw.hwnd, &pt); lpMsg->lParam = MAKELPARAM(pt.x, pt.y); } - int x = max(GET_X_LPARAM(lpMsg->lParam) - g_ddraw->mouse.x_adjust, 0); - int y = max(GET_Y_LPARAM(lpMsg->lParam) - g_ddraw->mouse.y_adjust, 0); + int x = max(GET_X_LPARAM(lpMsg->lParam) - g_ddraw.mouse.x_adjust, 0); + int y = max(GET_Y_LPARAM(lpMsg->lParam) - g_ddraw.mouse.y_adjust, 0); if (g_config.adjmouse) { @@ -673,16 +673,16 @@ BOOL HandleMessage(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMa } else { - x = (DWORD)(roundf(x * g_ddraw->mouse.unscale_x)); - y = (DWORD)(roundf(y * g_ddraw->mouse.unscale_y)); + x = (DWORD)(roundf(x * g_ddraw.mouse.unscale_x)); + y = (DWORD)(roundf(y * g_ddraw.mouse.unscale_y)); } } - x = min(x, g_ddraw->width - 1); - y = min(y, g_ddraw->height - 1); + x = min(x, g_ddraw.width - 1); + y = min(y, g_ddraw.height - 1); - InterlockedExchange((LONG*)&g_ddraw->cursor.x, x); - InterlockedExchange((LONG*)&g_ddraw->cursor.y, y); + InterlockedExchange((LONG*)&g_ddraw.cursor.x, x); + InterlockedExchange((LONG*)&g_ddraw.cursor.y, y); lpMsg->lParam = MAKELPARAM(x, y); fake_GetCursorPos(&lpMsg->pt); @@ -718,7 +718,7 @@ BOOL WINAPI fake_PeekMessageA(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT w SHORT WINAPI fake_GetKeyState(int nVirtKey) { - if (g_config.windowed && g_ddraw && g_ddraw->hwnd && !util_in_foreground()) + if (g_config.windowed && g_ddraw.ref && g_ddraw.hwnd && !util_in_foreground()) { return 0; } @@ -728,7 +728,7 @@ SHORT WINAPI fake_GetKeyState(int nVirtKey) SHORT WINAPI fake_GetAsyncKeyState(int vKey) { - if (g_config.windowed && g_ddraw && g_ddraw->hwnd && !util_in_foreground()) + if (g_config.windowed && g_ddraw.ref && g_ddraw.hwnd && !util_in_foreground()) { return 0; } @@ -738,18 +738,18 @@ SHORT WINAPI fake_GetAsyncKeyState(int vKey) int WINAPI fake_GetDeviceCaps(HDC hdc, int index) { - if (g_ddraw && - g_ddraw->bpp && + if (g_ddraw.ref && + g_ddraw.bpp && index == BITSPIXEL && - (g_config.hook != 2 || g_ddraw->renderer == gdi_render_main)) + (g_config.hook != 2 || g_ddraw.renderer == gdi_render_main)) { - return g_ddraw->bpp; + return g_ddraw.bpp; } - if (g_ddraw && - g_ddraw->bpp == 8 && + if (g_ddraw.ref && + g_ddraw.bpp == 8 && index == RASTERCAPS && - (g_config.hook != 2 || g_ddraw->renderer == gdi_render_main)) + (g_config.hook != 2 || g_ddraw.renderer == gdi_render_main)) { return RC_PALETTE | real_GetDeviceCaps(hdc, index); } @@ -774,42 +774,42 @@ BOOL WINAPI fake_StretchBlt( char class_name[MAX_PATH] = { 0 }; - if (g_ddraw && g_ddraw->hwnd && hwnd && hwnd != g_ddraw->hwnd) + if (g_ddraw.ref && g_ddraw.hwnd && hwnd && hwnd != g_ddraw.hwnd) { GetClassNameA(hwnd, class_name, sizeof(class_name) - 1); } - if (g_ddraw && g_ddraw->hwnd && - (hwnd == g_ddraw->hwnd || - (g_config.fixchilds && IsChild(g_ddraw->hwnd, hwnd) && + if (g_ddraw.ref && g_ddraw.hwnd && + (hwnd == g_ddraw.hwnd || + (g_config.fixchilds && IsChild(g_ddraw.hwnd, hwnd) && (g_config.fixchilds == FIX_CHILDS_DETECT_HIDE || strcmp(class_name, "MCIAVI") == 0 || strcmp(class_name, "AVIWnd32") == 0 || strcmp(class_name, "MCIWndClass") == 0)))) { - if (g_ddraw->primary && (g_ddraw->primary->bpp == 16 || g_ddraw->primary->bpp == 32 || g_ddraw->primary->palette)) + if (g_ddraw.primary && (g_ddraw.primary->bpp == 16 || g_ddraw.primary->bpp == 32 || g_ddraw.primary->palette)) { HDC primary_dc; - dds_GetDC(g_ddraw->primary, &primary_dc); + dds_GetDC(g_ddraw.primary, &primary_dc); if (primary_dc) { BOOL result = real_StretchBlt(primary_dc, xDest, yDest, wDest, hDest, hdcSrc, xSrc, ySrc, wSrc, hSrc, rop); - dds_ReleaseDC(g_ddraw->primary, primary_dc); + dds_ReleaseDC(g_ddraw.primary, primary_dc); return result; } } - else if (g_ddraw->width > 0 && g_ddraw->render.hdc) + else if (g_ddraw.width > 0 && g_ddraw.render.hdc) { return real_StretchBlt( - g_ddraw->render.hdc, - xDest + g_ddraw->render.viewport.x, - yDest + g_ddraw->render.viewport.y, - (int)(wDest * g_ddraw->render.scale_w), - (int)(hDest * g_ddraw->render.scale_h), + g_ddraw.render.hdc, + xDest + g_ddraw.render.viewport.x, + yDest + g_ddraw.render.viewport.y, + (int)(wDest * g_ddraw.render.scale_w), + (int)(hDest * g_ddraw.render.scale_h), hdcSrc, xSrc, ySrc, @@ -836,12 +836,12 @@ int WINAPI fake_SetDIBitsToDevice( const BITMAPINFO* lpbmi, UINT ColorUse) { - if (g_ddraw && g_ddraw->hwnd && WindowFromDC(hdc) == g_ddraw->hwnd) + if (g_ddraw.ref && g_ddraw.hwnd && WindowFromDC(hdc) == g_ddraw.hwnd) { - if (g_ddraw->primary && (g_ddraw->primary->bpp == 16 || g_ddraw->primary->bpp == 32 || g_ddraw->primary->palette)) + if (g_ddraw.primary && (g_ddraw.primary->bpp == 16 || g_ddraw.primary->bpp == 32 || g_ddraw.primary->palette)) { HDC primary_dc; - dds_GetDC(g_ddraw->primary, &primary_dc); + dds_GetDC(g_ddraw.primary, &primary_dc); if (primary_dc) { @@ -860,7 +860,7 @@ int WINAPI fake_SetDIBitsToDevice( lpbmi, ColorUse); - dds_ReleaseDC(g_ddraw->primary, primary_dc); + dds_ReleaseDC(g_ddraw.primary, primary_dc); return result; } @@ -889,23 +889,23 @@ int WINAPI fake_StretchDIBits( char class_name[MAX_PATH] = { 0 }; - if (g_ddraw && g_ddraw->hwnd && hwnd && hwnd != g_ddraw->hwnd) + if (g_ddraw.ref && g_ddraw.hwnd && hwnd && hwnd != g_ddraw.hwnd) { GetClassNameA(hwnd, class_name, sizeof(class_name) - 1); } - if (g_ddraw && g_ddraw->hwnd && - (hwnd == g_ddraw->hwnd || - (g_config.fixchilds && IsChild(g_ddraw->hwnd, hwnd) && + if (g_ddraw.ref && g_ddraw.hwnd && + (hwnd == g_ddraw.hwnd || + (g_config.fixchilds && IsChild(g_ddraw.hwnd, hwnd) && (g_config.fixchilds == FIX_CHILDS_DETECT_HIDE || strcmp(class_name, "MCIAVI") == 0 || strcmp(class_name, "AVIWnd32") == 0 || strcmp(class_name, "MCIWndClass") == 0)))) { - if (g_ddraw->primary && (g_ddraw->primary->bpp == 16 || g_ddraw->primary->bpp == 32 || g_ddraw->primary->palette)) + if (g_ddraw.primary && (g_ddraw.primary->bpp == 16 || g_ddraw.primary->bpp == 32 || g_ddraw.primary->palette)) { HDC primary_dc; - dds_GetDC(g_ddraw->primary, &primary_dc); + dds_GetDC(g_ddraw.primary, &primary_dc); if (primary_dc) { @@ -925,20 +925,20 @@ int WINAPI fake_StretchDIBits( iUsage, rop); - dds_ReleaseDC(g_ddraw->primary, primary_dc); + dds_ReleaseDC(g_ddraw.primary, primary_dc); return result; } } - else if (g_ddraw->width > 0 && g_ddraw->render.hdc) + else if (g_ddraw.width > 0 && g_ddraw.render.hdc) { return real_StretchDIBits( - g_ddraw->render.hdc, - xDest + g_ddraw->render.viewport.x, - yDest + g_ddraw->render.viewport.y, - (int)(DestWidth * g_ddraw->render.scale_w), - (int)(DestHeight * g_ddraw->render.scale_h), + g_ddraw.render.hdc, + xDest + g_ddraw.render.viewport.x, + yDest + g_ddraw.render.viewport.y, + (int)(DestWidth * g_ddraw.render.scale_w), + (int)(DestHeight * g_ddraw.render.scale_h), xSrc, ySrc, SrcWidth, @@ -1227,49 +1227,49 @@ BOOL WINAPI fake_DestroyWindow(HWND hWnd) { BOOL result = real_DestroyWindow(hWnd); - if (result && g_ddraw && hWnd == g_ddraw->hwnd) + if (result && g_ddraw.ref && hWnd == g_ddraw.hwnd) { - g_ddraw->hwnd = NULL; - g_ddraw->wndproc = NULL; - g_ddraw->render.hdc = NULL; + g_ddraw.hwnd = NULL; + g_ddraw.wndproc = NULL; + g_ddraw.render.hdc = NULL; } - if (g_ddraw && g_ddraw->hwnd != hWnd && g_ddraw->bnet_active) + if (g_ddraw.ref && g_ddraw.hwnd != hWnd && g_ddraw.bnet_active) { RedrawWindow(NULL, NULL, NULL, RDW_ERASE | RDW_INVALIDATE | RDW_ALLCHILDREN); if (!FindWindowEx(HWND_DESKTOP, NULL, "SDlgDialog", NULL)) { - g_ddraw->bnet_active = FALSE; - SetFocus(g_ddraw->hwnd); + g_ddraw.bnet_active = FALSE; + SetFocus(g_ddraw.hwnd); mouse_lock(); if (g_config.windowed) { - g_ddraw->bnet_pos.x = g_ddraw->bnet_pos.y = 0; - real_ClientToScreen(g_ddraw->hwnd, &g_ddraw->bnet_pos); + g_ddraw.bnet_pos.x = g_ddraw.bnet_pos.y = 0; + real_ClientToScreen(g_ddraw.hwnd, &g_ddraw.bnet_pos); - if (!g_ddraw->bnet_was_upscaled) + if (!g_ddraw.bnet_was_upscaled) { - int width = g_ddraw->bnet_win_rect.right - g_ddraw->bnet_win_rect.left; - int height = g_ddraw->bnet_win_rect.bottom - g_ddraw->bnet_win_rect.top; + int width = g_ddraw.bnet_win_rect.right - g_ddraw.bnet_win_rect.left; + int height = g_ddraw.bnet_win_rect.bottom - g_ddraw.bnet_win_rect.top; - UINT flags = width != g_ddraw->width || height != g_ddraw->height ? 0 : SWP_NOMOVE; + UINT flags = width != g_ddraw.width || height != g_ddraw.height ? 0 : SWP_NOMOVE; - int dst_width = width == g_ddraw->width ? 0 : width; - int dst_height = height == g_ddraw->height ? 0 : height; + int dst_width = width == g_ddraw.width ? 0 : width; + int dst_height = height == g_ddraw.height ? 0 : height; util_set_window_rect( - g_ddraw->bnet_win_rect.left, - g_ddraw->bnet_win_rect.top, + g_ddraw.bnet_win_rect.left, + g_ddraw.bnet_win_rect.top, dst_width, dst_height, flags); } - g_config.fullscreen = g_ddraw->bnet_was_upscaled; + g_config.fullscreen = g_ddraw.bnet_was_upscaled; - SetTimer(g_ddraw->hwnd, IDT_TIMER_LEAVE_BNET, 1000, (TIMERPROC)NULL); + SetTimer(g_ddraw.hwnd, IDT_TIMER_LEAVE_BNET, 1000, (TIMERPROC)NULL); g_config.resizable = TRUE; } @@ -1286,14 +1286,14 @@ HWND WINAPI fake_CreateWindowExA( /* Center Claw DVD movies */ if (HIWORD(lpClassName) && _strcmpi(lpClassName, "Afx:400000:3") == 0 && - g_ddraw && g_ddraw->hwnd && g_ddraw->width && + g_ddraw.ref && g_ddraw.hwnd && g_ddraw.width && (dwStyle & (WS_POPUP | WS_CHILD)) == (WS_POPUP | WS_CHILD)) { POINT pt = { 0, 0 }; - real_ClientToScreen(g_ddraw->hwnd, &pt); + real_ClientToScreen(g_ddraw.hwnd, &pt); - int added_height = g_ddraw->render.height - g_ddraw->height; - int added_width = g_ddraw->render.width - g_ddraw->width; + int added_height = g_ddraw.render.height - g_ddraw.height; + int added_width = g_ddraw.render.width - g_ddraw.width; int align_y = added_height > 0 ? added_height / 2 : 0; int align_x = added_width > 0 ? added_width / 2 : 0; @@ -1302,52 +1302,52 @@ HWND WINAPI fake_CreateWindowExA( } /* Fix for SMACKW32.DLL creating another window that steals the focus */ - if (HIWORD(lpClassName) && _strcmpi(lpClassName, "MouseTypeWind") == 0 && g_ddraw && g_ddraw->hwnd) + if (HIWORD(lpClassName) && _strcmpi(lpClassName, "MouseTypeWind") == 0 && g_ddraw.ref && g_ddraw.hwnd) { dwStyle &= ~WS_VISIBLE; } - if (HIWORD(lpClassName) && _strcmpi(lpClassName, "SDlgDialog") == 0 && g_ddraw && g_ddraw->hwnd) + if (HIWORD(lpClassName) && _strcmpi(lpClassName, "SDlgDialog") == 0 && g_ddraw.ref && g_ddraw.hwnd) { - if (!g_ddraw->bnet_active) + if (!g_ddraw.bnet_active) { - g_ddraw->bnet_was_upscaled = g_config.fullscreen; + g_ddraw.bnet_was_upscaled = g_config.fullscreen; g_config.fullscreen = FALSE; - if (!g_config.windowed && !g_ddraw->bnet_was_fullscreen) + if (!g_config.windowed && !g_ddraw.bnet_was_fullscreen) { int ws = g_config.window_state; util_toggle_fullscreen(); g_config.window_state = ws; - g_ddraw->bnet_was_fullscreen = TRUE; + g_ddraw.bnet_was_fullscreen = TRUE; } - real_GetClientRect(g_ddraw->hwnd, &g_ddraw->bnet_win_rect); - real_MapWindowPoints(g_ddraw->hwnd, HWND_DESKTOP, (LPPOINT)&g_ddraw->bnet_win_rect, 2); + real_GetClientRect(g_ddraw.hwnd, &g_ddraw.bnet_win_rect); + real_MapWindowPoints(g_ddraw.hwnd, HWND_DESKTOP, (LPPOINT)&g_ddraw.bnet_win_rect, 2); - int width = g_ddraw->bnet_win_rect.right - g_ddraw->bnet_win_rect.left; - int height = g_ddraw->bnet_win_rect.bottom - g_ddraw->bnet_win_rect.top; + int width = g_ddraw.bnet_win_rect.right - g_ddraw.bnet_win_rect.left; + int height = g_ddraw.bnet_win_rect.bottom - g_ddraw.bnet_win_rect.top; - int x = g_ddraw->bnet_pos.x || g_ddraw->bnet_pos.y ? g_ddraw->bnet_pos.x : -32000; - int y = g_ddraw->bnet_pos.x || g_ddraw->bnet_pos.y ? g_ddraw->bnet_pos.y : -32000; + int x = g_ddraw.bnet_pos.x || g_ddraw.bnet_pos.y ? g_ddraw.bnet_pos.x : -32000; + int y = g_ddraw.bnet_pos.x || g_ddraw.bnet_pos.y ? g_ddraw.bnet_pos.y : -32000; - UINT flags = width != g_ddraw->width || height != g_ddraw->height ? 0 : SWP_NOMOVE; + UINT flags = width != g_ddraw.width || height != g_ddraw.height ? 0 : SWP_NOMOVE; - int dst_width = g_config.window_rect.right ? g_ddraw->width : 0; - int dst_height = g_config.window_rect.bottom ? g_ddraw->height : 0; + int dst_width = g_config.window_rect.right ? g_ddraw.width : 0; + int dst_height = g_config.window_rect.bottom ? g_ddraw.height : 0; util_set_window_rect(x, y, dst_width, dst_height, flags); g_config.resizable = FALSE; - g_ddraw->bnet_active = TRUE; + g_ddraw.bnet_active = TRUE; mouse_unlock(); } POINT pt = { 0, 0 }; - real_ClientToScreen(g_ddraw->hwnd, &pt); + real_ClientToScreen(g_ddraw.hwnd, &pt); - int added_height = g_ddraw->height - 480; - int added_width = g_ddraw->width - 640; + int added_height = g_ddraw.height - 480; + int added_width = g_ddraw.width - 640; int align_y = added_height > 0 ? added_height / 2 : 0; int align_x = added_width > 0 ? added_width / 2 : 0; diff --git a/src/wndproc.c b/src/wndproc.c index 31cbc02..35b8cf2 100644 --- a/src/wndproc.c +++ b/src/wndproc.c @@ -54,15 +54,15 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam { MINMAXINFO* mmi = (MINMAXINFO*)lParam; - if (g_config.windowed && g_ddraw->width) + if (g_config.windowed && g_ddraw.width) { - RECT rc = { 0, 0, g_ddraw->render.width, g_ddraw->render.height }; + RECT rc = { 0, 0, g_ddraw.render.width, g_ddraw.render.height }; AdjustWindowRectEx( &rc, - real_GetWindowLongA(g_ddraw->hwnd, GWL_STYLE), - GetMenu(g_ddraw->hwnd) != NULL, - real_GetWindowLongA(g_ddraw->hwnd, GWL_EXSTYLE)); + real_GetWindowLongA(g_ddraw.hwnd, GWL_STYLE), + GetMenu(g_ddraw.hwnd) != NULL, + real_GetWindowLongA(g_ddraw.hwnd, GWL_EXSTYLE)); if (mmi->ptMaxTrackSize.x < rc.right - rc.left) mmi->ptMaxTrackSize.x = rc.right - rc.left; @@ -71,13 +71,13 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam mmi->ptMaxTrackSize.y = rc.bottom - rc.top; /* - RECT rcmin = { 0, 0, g_ddraw->width, g_ddraw->height }; + RECT rcmin = { 0, 0, g_ddraw.width, g_ddraw.height }; AdjustWindowRectEx( &rcmin, - real_GetWindowLongA(g_ddraw->hwnd, GWL_STYLE), - GetMenu(g_ddraw->hwnd) != NULL, - real_GetWindowLongA(g_ddraw->hwnd, GWL_EXSTYLE)); + real_GetWindowLongA(g_ddraw.hwnd, GWL_STYLE), + GetMenu(g_ddraw.hwnd) != NULL, + real_GetWindowLongA(g_ddraw.hwnd, GWL_EXSTYLE)); mmi->ptMinTrackSize.x = rcmin.right - rcmin.left; mmi->ptMinTrackSize.y = rcmin.bottom - rcmin.top; @@ -122,7 +122,7 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam case WM_SETCURSOR: { /* show resize cursor on window borders */ - if ((HWND)wParam == g_ddraw->hwnd) + if ((HWND)wParam == g_ddraw.hwnd) { WORD message = HIWORD(lParam); @@ -176,8 +176,8 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam } case WM_D3D9DEVICELOST: { - if (((!g_config.windowed && !g_config.nonexclusive) || !util_is_minimized(g_ddraw->hwnd)) && - g_ddraw->renderer == d3d9_render_main && + if (((!g_config.windowed && !g_config.nonexclusive) || !util_is_minimized(g_ddraw.hwnd)) && + g_ddraw.renderer == d3d9_render_main && d3d9_on_device_lost()) { if (!g_config.windowed) @@ -191,24 +191,24 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam { case IDT_TIMER_LEAVE_BNET: { - KillTimer(g_ddraw->hwnd, IDT_TIMER_LEAVE_BNET); + KillTimer(g_ddraw.hwnd, IDT_TIMER_LEAVE_BNET); if (!g_config.windowed) - g_ddraw->bnet_was_fullscreen = FALSE; + g_ddraw.bnet_was_fullscreen = FALSE; - if (!g_ddraw->bnet_active) + if (!g_ddraw.bnet_active) { - if (g_ddraw->bnet_was_fullscreen) + if (g_ddraw.bnet_was_fullscreen) { int ws = g_config.window_state; util_toggle_fullscreen(); g_config.window_state = ws; - g_ddraw->bnet_was_fullscreen = FALSE; + g_ddraw.bnet_was_fullscreen = FALSE; } - else if (g_ddraw->bnet_was_upscaled) + else if (g_ddraw.bnet_was_upscaled) { util_set_window_rect(0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); - g_ddraw->bnet_was_upscaled = FALSE; + g_ddraw.bnet_was_upscaled = FALSE; } } @@ -231,9 +231,9 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam if (g_config.is_wine && !g_config.windowed && (pos->x > 0 || pos->y > 0) && - g_ddraw->last_set_window_pos_tick + 500 < timeGetTime()) + g_ddraw.last_set_window_pos_tick + 500 < timeGetTime()) { - PostMessage(g_ddraw->hwnd, WM_WINEFULLSCREEN, 0, 0); + PostMessage(g_ddraw.hwnd, WM_WINEFULLSCREEN, 0, 0); } break; @@ -242,24 +242,24 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam { if (!g_config.windowed) { - g_ddraw->last_set_window_pos_tick = timeGetTime(); + g_ddraw.last_set_window_pos_tick = timeGetTime(); real_SetWindowPos( - g_ddraw->hwnd, + g_ddraw.hwnd, HWND_TOPMOST, 1, 1, - g_ddraw->render.width, - g_ddraw->render.height, + g_ddraw.render.width, + g_ddraw.render.height, SWP_SHOWWINDOW); real_SetWindowPos( - g_ddraw->hwnd, + g_ddraw.hwnd, HWND_TOPMOST, 0, 0, - g_ddraw->render.width, - g_ddraw->render.height, + g_ddraw.render.width, + g_ddraw.render.height, SWP_SHOWWINDOW); } return 0; @@ -278,8 +278,8 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam { in_size_move = FALSE; - if (!g_ddraw->render.thread) - dd_SetDisplayMode(g_ddraw->width, g_ddraw->height, g_ddraw->bpp, 0); + if (!g_ddraw.render.thread) + dd_SetDisplayMode(g_ddraw.width, g_ddraw.height, g_ddraw.bpp, 0); } break; } @@ -291,15 +291,15 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam { if (in_size_move) { - if (g_ddraw->render.thread) + if (g_ddraw.render.thread) { - EnterCriticalSection(&g_ddraw->cs); - g_ddraw->render.run = FALSE; - ReleaseSemaphore(g_ddraw->render.sem, 1, NULL); - LeaveCriticalSection(&g_ddraw->cs); + EnterCriticalSection(&g_ddraw.cs); + g_ddraw.render.run = FALSE; + ReleaseSemaphore(g_ddraw.render.sem, 1, NULL); + LeaveCriticalSection(&g_ddraw.cs); - WaitForSingleObject(g_ddraw->render.thread, INFINITE); - g_ddraw->render.thread = NULL; + WaitForSingleObject(g_ddraw.render.thread, INFINITE); + g_ddraw.render.thread = NULL; } RECT clientrc = { 0 }; @@ -314,8 +314,8 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam real_GetWindowLongA(hWnd, GWL_EXSTYLE)) && SetRect(&clientrc, 0, 0, clientrc.right - clientrc.left, clientrc.bottom - clientrc.top)) { - double scaleH = (double)g_ddraw->height / g_ddraw->width; - double scaleW = (double)g_ddraw->width / g_ddraw->height; + double scaleH = (double)g_ddraw.height / g_ddraw.width; + double scaleW = (double)g_ddraw.width / g_ddraw.height; switch (wParam) { @@ -351,7 +351,7 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam real_GetWindowLongA(hWnd, GWL_EXSTYLE)) && SetRect(&clientrc, 0, 0, clientrc.right - clientrc.left, clientrc.bottom - clientrc.top)) { - if (clientrc.right < g_ddraw->width) + if (clientrc.right < g_ddraw.width) { switch (wParam) { @@ -361,20 +361,20 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam case WMSZ_BOTTOM: case WMSZ_TOP: { - windowrc->right += g_ddraw->width - clientrc.right; + windowrc->right += g_ddraw.width - clientrc.right; break; } case WMSZ_TOPLEFT: case WMSZ_BOTTOMLEFT: case WMSZ_LEFT: { - windowrc->left -= g_ddraw->width - clientrc.right; + windowrc->left -= g_ddraw.width - clientrc.right; break; } } } - if (clientrc.bottom < g_ddraw->height) + if (clientrc.bottom < g_ddraw.height) { switch (wParam) { @@ -384,14 +384,14 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam case WMSZ_RIGHT: case WMSZ_LEFT: { - windowrc->bottom += g_ddraw->height - clientrc.bottom; + windowrc->bottom += g_ddraw.height - clientrc.bottom; break; } case WMSZ_TOPLEFT: case WMSZ_TOPRIGHT: case WMSZ_TOP: { - windowrc->top -= g_ddraw->height - clientrc.bottom; + windowrc->top -= g_ddraw.height - clientrc.bottom; break; } } @@ -423,24 +423,24 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam { if (wParam == SIZE_RESTORED) { - if (in_size_move && !g_ddraw->render.thread) + if (in_size_move && !g_ddraw.render.thread) { g_config.window_rect.right = LOWORD(lParam); g_config.window_rect.bottom = HIWORD(lParam); } /* - else if (g_ddraw->wine) + else if (g_ddraw.wine) { WindowRect.right = LOWORD(lParam); WindowRect.bottom = HIWORD(lParam); - if (WindowRect.right != g_ddraw->render.width || WindowRect.bottom != g_ddraw->render.height) - dd_SetDisplayMode(g_ddraw->width, g_ddraw->height, g_ddraw->bpp); + if (WindowRect.right != g_ddraw.render.width || WindowRect.bottom != g_ddraw.render.height) + dd_SetDisplayMode(g_ddraw.width, g_ddraw.height, g_ddraw.bpp); } */ } } - if (g_ddraw->got_child_windows) + if (g_ddraw.got_child_windows) { redraw_count = 2; RedrawWindow(hWnd, NULL, NULL, RDW_INVALIDATE | RDW_ALLCHILDREN); @@ -460,7 +460,7 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam util_update_bnet_pos(x, y); } - if (in_size_move || (g_config.is_wine && !g_config.fullscreen && g_ddraw->render.thread)) + if (in_size_move || (g_config.is_wine && !g_config.fullscreen && g_ddraw.render.thread)) { if (x != -32000) g_config.window_rect.left = x; /* -32000 = Exit/Minimize */ @@ -470,7 +470,7 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam } } - if (g_ddraw->got_child_windows) + if (g_ddraw.got_child_windows) RedrawWindow(hWnd, NULL, NULL, RDW_INVALIDATE | RDW_ALLCHILDREN); return DefWindowProc(hWnd, uMsg, wParam, lParam); /* Carmageddon fix */ @@ -479,11 +479,11 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam { if (!g_config.is_wine) /* hack: disable aero snap */ { - LONG style = real_GetWindowLongA(g_ddraw->hwnd, GWL_STYLE); + LONG style = real_GetWindowLongA(g_ddraw.hwnd, GWL_STYLE); if (!(style & WS_MAXIMIZEBOX)) { - real_SetWindowLongA(g_ddraw->hwnd, GWL_STYLE, style | WS_MAXIMIZEBOX); + real_SetWindowLongA(g_ddraw.hwnd, GWL_STYLE, style | WS_MAXIMIZEBOX); } } break; @@ -492,11 +492,11 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam { if ((wParam & ~0x0F) == SC_MOVE && !g_config.is_wine) /* hack: disable aero snap */ { - LONG style = real_GetWindowLongA(g_ddraw->hwnd, GWL_STYLE); + LONG style = real_GetWindowLongA(g_ddraw.hwnd, GWL_STYLE); if ((style & WS_MAXIMIZEBOX)) { - real_SetWindowLongA(g_ddraw->hwnd, GWL_STYLE, style & ~WS_MAXIMIZEBOX); + real_SetWindowLongA(g_ddraw.hwnd, GWL_STYLE, style & ~WS_MAXIMIZEBOX); } } @@ -515,7 +515,7 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam _exit(0); } - if (wParam == SC_KEYMENU && GetMenu(g_ddraw->hwnd) == NULL) + if (wParam == SC_KEYMENU && GetMenu(g_ddraw.hwnd) == NULL) return 0; if (!GameHandlesClose) @@ -541,7 +541,7 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam { mouse_unlock(); - if (real_GetForegroundWindow() == g_ddraw->hwnd) + if (real_GetForegroundWindow() == g_ddraw.hwnd) mouse_lock(); } } @@ -556,7 +556,7 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam { if (wParam == WA_ACTIVE || wParam == WA_CLICKACTIVE) { - if (g_ddraw->got_child_windows) + if (g_ddraw.got_child_windows) RedrawWindow(hWnd, NULL, NULL, RDW_INVALIDATE | RDW_ALLCHILDREN); } @@ -597,7 +597,7 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam } } - //if (g_ddraw->windowed || g_ddraw->noactivateapp) + //if (g_ddraw.windowed || g_ddraw.noactivateapp) if (!g_config.allow_wmactivate) return 0; @@ -610,19 +610,19 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam { if (!g_config.windowed) { - if (g_ddraw->renderer != d3d9_render_main || g_config.nonexclusive) + if (g_ddraw.renderer != d3d9_render_main || g_config.nonexclusive) { - ChangeDisplaySettings(&g_ddraw->render.mode, CDS_FULLSCREEN); - real_ShowWindow(g_ddraw->hwnd, SW_RESTORE); + ChangeDisplaySettings(&g_ddraw.render.mode, CDS_FULLSCREEN); + real_ShowWindow(g_ddraw.hwnd, SW_RESTORE); mouse_lock(); } } - else if (g_config.fullscreen && real_GetForegroundWindow() == g_ddraw->hwnd) + else if (g_config.fullscreen && real_GetForegroundWindow() == g_ddraw.hwnd) { mouse_lock(); } - ReleaseSemaphore(g_ddraw->render.sem, 1, NULL); + ReleaseSemaphore(g_ddraw.render.sem, 1, NULL); } else { @@ -631,15 +631,15 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam mouse_unlock(); - if (g_config.is_wine && g_ddraw->last_set_window_pos_tick + 500 > timeGetTime()) + if (g_config.is_wine && g_ddraw.last_set_window_pos_tick + 500 > timeGetTime()) return 0; if (!g_config.windowed) { - if (g_ddraw->renderer != d3d9_render_main || g_config.nonexclusive) + if (g_ddraw.renderer != d3d9_render_main || g_config.nonexclusive) { - real_ShowWindow(g_ddraw->hwnd, SW_MINIMIZE); - ChangeDisplaySettings(NULL, g_ddraw->bnet_active ? CDS_FULLSCREEN : 0); + real_ShowWindow(g_ddraw.hwnd, SW_MINIMIZE); + ChangeDisplaySettings(NULL, g_ddraw.bnet_active ? CDS_FULLSCREEN : 0); } } } @@ -674,8 +674,8 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam break; } - if (wParam && g_ddraw->alt_key_down && !g_config.releasealt) - PostMessageA(g_ddraw->hwnd, WM_SYSKEYUP, VK_MENU, 0); + if (wParam && g_ddraw.alt_key_down && !g_config.releasealt) + PostMessageA(g_ddraw.hwnd, WM_SYSKEYUP, VK_MENU, 0); return 0; } @@ -684,8 +684,8 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam case WM_AUTORENDERER: { mouse_unlock(); - real_SetWindowPos(g_ddraw->hwnd, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); - real_SetWindowPos(g_ddraw->hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); + real_SetWindowPos(g_ddraw.hwnd, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); + real_SetWindowPos(g_ddraw.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); mouse_lock(); return 0; } @@ -751,7 +751,7 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam if (wParam == VK_MENU) { - g_ddraw->alt_key_down = TRUE; + g_ddraw.alt_key_down = TRUE; } break; @@ -760,7 +760,7 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam { if (wParam == VK_MENU) { - g_ddraw->alt_key_down = FALSE; + g_ddraw.alt_key_down = FALSE; } if (wParam == VK_TAB || (g_config.hotkeys.toggle_fullscreen && wParam == g_config.hotkeys.toggle_fullscreen)) @@ -792,7 +792,7 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam } } - HWND video_hwnd = (HWND)InterlockedExchangeAdd((LONG*)&g_ddraw->video_window_hwnd, 0); + HWND video_hwnd = (HWND)InterlockedExchangeAdd((LONG*)&g_ddraw.video_window_hwnd, 0); if (video_hwnd) { PostMessageA(video_hwnd, uMsg, wParam, lParam); @@ -804,9 +804,9 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam case WM_KEYUP: { if (g_config.hotkeys.screenshot && wParam == g_config.hotkeys.screenshot) - ss_take_screenshot(g_ddraw->primary); + ss_take_screenshot(g_ddraw.primary); - HWND video_hwnd = (HWND)InterlockedExchangeAdd((LONG*)&g_ddraw->video_window_hwnd, 0); + HWND video_hwnd = (HWND)InterlockedExchangeAdd((LONG*)&g_ddraw.video_window_hwnd, 0); if (video_hwnd) { PostMessageA(video_hwnd, uMsg, wParam, lParam); @@ -825,22 +825,22 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam int x = GET_X_LPARAM(lParam); int y = GET_Y_LPARAM(lParam); - if (x > g_ddraw->render.viewport.x + g_ddraw->render.viewport.width || - x < g_ddraw->render.viewport.x || - y > g_ddraw->render.viewport.y + g_ddraw->render.viewport.height || - y < g_ddraw->render.viewport.y) + if (x > g_ddraw.render.viewport.x + g_ddraw.render.viewport.width || + x < g_ddraw.render.viewport.x || + y > g_ddraw.render.viewport.y + g_ddraw.render.viewport.height || + y < g_ddraw.render.viewport.y) { - x = g_ddraw->width / 2; - y = g_ddraw->height / 2; + x = g_ddraw.width / 2; + y = g_ddraw.height / 2; } else { - x = (DWORD)((x - g_ddraw->render.viewport.x) * g_ddraw->mouse.unscale_x); - y = (DWORD)((y - g_ddraw->render.viewport.y) * g_ddraw->mouse.unscale_y); + x = (DWORD)((x - g_ddraw.render.viewport.x) * g_ddraw.mouse.unscale_x); + y = (DWORD)((y - g_ddraw.render.viewport.y) * g_ddraw.mouse.unscale_y); } - InterlockedExchange((LONG*)&g_ddraw->cursor.x, x); - InterlockedExchange((LONG*)&g_ddraw->cursor.y, y); + InterlockedExchange((LONG*)&g_ddraw.cursor.x, x); + InterlockedExchange((LONG*)&g_ddraw.cursor.y, y); mouse_lock(); return 0; @@ -869,12 +869,12 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam if (uMsg == WM_MOUSEWHEEL) { POINT pt = { GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam) }; - real_ScreenToClient(g_ddraw->hwnd, &pt); + real_ScreenToClient(g_ddraw.hwnd, &pt); lParam = MAKELPARAM(pt.x, pt.y); } - int x = max(GET_X_LPARAM(lParam) - g_ddraw->mouse.x_adjust, 0); - int y = max(GET_Y_LPARAM(lParam) - g_ddraw->mouse.y_adjust, 0); + int x = max(GET_X_LPARAM(lParam) - g_ddraw.mouse.x_adjust, 0); + int y = max(GET_Y_LPARAM(lParam) - g_ddraw.mouse.y_adjust, 0); if (g_config.adjmouse) { @@ -888,20 +888,20 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam } else { - x = (DWORD)(roundf(x * g_ddraw->mouse.unscale_x)); - y = (DWORD)(roundf(y * g_ddraw->mouse.unscale_y)); + x = (DWORD)(roundf(x * g_ddraw.mouse.unscale_x)); + y = (DWORD)(roundf(y * g_ddraw.mouse.unscale_y)); } } - x = min(x, g_ddraw->width - 1); - y = min(y, g_ddraw->height - 1); + x = min(x, g_ddraw.width - 1); + y = min(y, g_ddraw.height - 1); - InterlockedExchange((LONG*)&g_ddraw->cursor.x, x); - InterlockedExchange((LONG*)&g_ddraw->cursor.y, y); + InterlockedExchange((LONG*)&g_ddraw.cursor.x, x); + InterlockedExchange((LONG*)&g_ddraw.cursor.y, y); lParam = MAKELPARAM(x, y); - HWND video_hwnd = (HWND)InterlockedExchangeAdd((LONG*)&g_ddraw->video_window_hwnd, 0); + HWND video_hwnd = (HWND)InterlockedExchangeAdd((LONG*)&g_ddraw.video_window_hwnd, 0); if (video_hwnd) { PostMessageA(video_hwnd, uMsg, wParam, lParam); @@ -924,11 +924,11 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam { if (!g_config.devmode && !g_mouse_locked) { - int x = (DWORD)((GET_X_LPARAM(lParam) - g_ddraw->render.viewport.x) * g_ddraw->mouse.unscale_x); - int y = (DWORD)((GET_Y_LPARAM(lParam) - g_ddraw->render.viewport.y) * g_ddraw->mouse.unscale_y); + int x = (DWORD)((GET_X_LPARAM(lParam) - g_ddraw.render.viewport.x) * g_ddraw.mouse.unscale_x); + int y = (DWORD)((GET_Y_LPARAM(lParam) - g_ddraw.render.viewport.y) * g_ddraw.mouse.unscale_y); - InterlockedExchange((LONG*)&g_ddraw->cursor.x, x); - InterlockedExchange((LONG*)&g_ddraw->cursor.y, y); + InterlockedExchange((LONG*)&g_ddraw.cursor.x, x); + InterlockedExchange((LONG*)&g_ddraw.cursor.y, y); mouse_lock(); } @@ -945,19 +945,19 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam RedrawWindow(hWnd, NULL, NULL, RDW_INVALIDATE | RDW_ALLCHILDREN); } - ReleaseSemaphore(g_ddraw->render.sem, 1, NULL); + ReleaseSemaphore(g_ddraw.render.sem, 1, NULL); break; } case WM_ERASEBKGND: { - if (g_ddraw->render.viewport.x != 0 || g_ddraw->render.viewport.y != 0) + if (g_ddraw.render.viewport.x != 0 || g_ddraw.render.viewport.y != 0) { - InterlockedExchange(&g_ddraw->render.clear_screen, TRUE); - ReleaseSemaphore(g_ddraw->render.sem, 1, NULL); + InterlockedExchange(&g_ddraw.render.clear_screen, TRUE); + ReleaseSemaphore(g_ddraw.render.sem, 1, NULL); } break; } } - return CallWindowProcA(g_ddraw->wndproc, hWnd, uMsg, wParam, lParam); + return CallWindowProcA(g_ddraw.wndproc, hWnd, uMsg, wParam, lParam); }