1
0
mirror of https://github.com/FunkyFr3sh/cnc-ddraw.git synced 2025-03-15 06:04:49 +01:00

replace Direct3D9EnableMaximizedWindowedModeShim with better solution

This commit is contained in:
FunkyFr3sh 2023-08-14 19:56:00 +02:00
parent 2f18ca470a
commit f3b85780ad
4 changed files with 12 additions and 21 deletions

View File

@ -506,7 +506,6 @@ HRESULT dd_RestoreDisplayMode()
return DD_OK;
}
/* only stop drawing in GL mode when minimized */
if (g_ddraw->renderer != gdi_render_main)
{
EnterCriticalSection(&g_ddraw->cs);
@ -523,7 +522,7 @@ HRESULT dd_RestoreDisplayMode()
if (!g_ddraw->windowed)
{
if (g_ddraw->renderer == d3d9_render_main)
if (g_ddraw->renderer == d3d9_render_main && !g_ddraw->nonexclusive)
{
if (!d3d9_reset(TRUE))
d3d9_release();
@ -922,7 +921,8 @@ HRESULT dd_SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwFl
}
}
if (!d3d9_active && ChangeDisplaySettings(&g_ddraw->render.mode, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL)
if ((!d3d9_active || g_ddraw->nonexclusive) &&
ChangeDisplaySettings(&g_ddraw->render.mode, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL)
{
g_ddraw->render.run = FALSE;
g_ddraw->windowed = TRUE;
@ -1185,7 +1185,7 @@ ULONG dd_Release()
if (!g_ddraw->windowed)
{
if (g_ddraw->renderer == d3d9_render_main)
if (g_ddraw->renderer == d3d9_render_main && !g_ddraw->nonexclusive)
{
if (!d3d9_reset(TRUE))
d3d9_release();

View File

@ -50,15 +50,6 @@ BOOL d3d9_create()
if (g_d3d9.hmodule)
{
if (g_ddraw->nonexclusive)
{
int (WINAPI * d3d9_enable_shim)(BOOL) =
(int (WINAPI*)(BOOL))real_GetProcAddress(g_d3d9.hmodule, "Direct3D9EnableMaximizedWindowedModeShim");
if (d3d9_enable_shim)
d3d9_enable_shim(TRUE);
}
LPDIRECT3D9 d3d9on12 = NULL;
D3D9ON12_ARGS args;
memset(&args, 0, sizeof(args));
@ -118,7 +109,7 @@ BOOL d3d9_create()
memset(&g_d3d9.params, 0, sizeof(g_d3d9.params));
g_d3d9.params.Windowed = g_ddraw->windowed;
g_d3d9.params.Windowed = g_ddraw->windowed || g_ddraw->nonexclusive;
g_d3d9.params.SwapEffect = D3DSWAPEFFECT_DISCARD;
g_d3d9.params.hDeviceWindow = g_ddraw->hwnd;
g_d3d9.params.PresentationInterval = g_ddraw->vsync ? D3DPRESENT_INTERVAL_ONE : D3DPRESENT_INTERVAL_IMMEDIATE;
@ -166,9 +157,9 @@ BOOL d3d9_on_device_lost()
BOOL d3d9_reset(BOOL windowed)
{
g_d3d9.params.Windowed = windowed;
g_d3d9.params.BackBufferWidth = windowed ? 0 : g_ddraw->render.width;
g_d3d9.params.BackBufferHeight = windowed ? 0 : g_ddraw->render.height;
g_d3d9.params.Windowed = windowed || g_ddraw->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.BackBufferFormat = g_ddraw->mode.dmBitsPerPel == 16 ? D3DFMT_R5G6B5 : D3DFMT_X8R8G8B8;
if (g_d3d9.device && SUCCEEDED(IDirect3DDevice9_Reset(g_d3d9.device, &g_d3d9.params)))

View File

@ -365,7 +365,7 @@ void util_toggle_fullscreen()
mouse_unlock();
g_config.window_state = g_ddraw->windowed = TRUE;
if (g_ddraw->renderer == d3d9_render_main)
if (g_ddraw->renderer == d3d9_render_main && !g_ddraw->nonexclusive)
{
d3d9_reset(g_ddraw->windowed);
}

View File

@ -136,7 +136,7 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam
}
case WM_D3D9DEVICELOST:
{
if ((!g_ddraw->windowed || !IsIconic(g_ddraw->hwnd)) &&
if (((!g_ddraw->windowed && !g_ddraw->nonexclusive) || !IsIconic(g_ddraw->hwnd)) &&
g_ddraw->renderer == d3d9_render_main &&
d3d9_on_device_lost())
{
@ -519,7 +519,7 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam
{
if (!g_ddraw->windowed)
{
if (g_ddraw->renderer != d3d9_render_main)
if (g_ddraw->renderer != d3d9_render_main || g_ddraw->nonexclusive)
{
ChangeDisplaySettings(&g_ddraw->render.mode, CDS_FULLSCREEN);
real_ShowWindow(g_ddraw->hwnd, SW_RESTORE);
@ -543,7 +543,7 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam
if (!g_ddraw->windowed)
{
if (g_ddraw->renderer != d3d9_render_main)
if (g_ddraw->renderer != d3d9_render_main || g_ddraw->nonexclusive)
{
real_ShowWindow(g_ddraw->hwnd, SW_MINIMIZE);
ChangeDisplaySettings(NULL, g_ddraw->bnet_active ? CDS_FULLSCREEN : 0);