mirror of
https://github.com/FunkyFr3sh/cnc-ddraw.git
synced 2025-03-24 17:49:52 +01:00
replace Direct3D9EnableMaximizedWindowedModeShim with better solution
This commit is contained in:
parent
2f18ca470a
commit
f3b85780ad
8
src/dd.c
8
src/dd.c
@ -506,7 +506,6 @@ HRESULT dd_RestoreDisplayMode()
|
|||||||
return DD_OK;
|
return DD_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* only stop drawing in GL mode when minimized */
|
|
||||||
if (g_ddraw->renderer != gdi_render_main)
|
if (g_ddraw->renderer != gdi_render_main)
|
||||||
{
|
{
|
||||||
EnterCriticalSection(&g_ddraw->cs);
|
EnterCriticalSection(&g_ddraw->cs);
|
||||||
@ -523,7 +522,7 @@ HRESULT dd_RestoreDisplayMode()
|
|||||||
|
|
||||||
if (!g_ddraw->windowed)
|
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))
|
if (!d3d9_reset(TRUE))
|
||||||
d3d9_release();
|
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->render.run = FALSE;
|
||||||
g_ddraw->windowed = TRUE;
|
g_ddraw->windowed = TRUE;
|
||||||
@ -1185,7 +1185,7 @@ ULONG dd_Release()
|
|||||||
|
|
||||||
if (!g_ddraw->windowed)
|
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))
|
if (!d3d9_reset(TRUE))
|
||||||
d3d9_release();
|
d3d9_release();
|
||||||
|
@ -50,15 +50,6 @@ BOOL d3d9_create()
|
|||||||
|
|
||||||
if (g_d3d9.hmodule)
|
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;
|
LPDIRECT3D9 d3d9on12 = NULL;
|
||||||
D3D9ON12_ARGS args;
|
D3D9ON12_ARGS args;
|
||||||
memset(&args, 0, sizeof(args));
|
memset(&args, 0, sizeof(args));
|
||||||
@ -118,7 +109,7 @@ BOOL d3d9_create()
|
|||||||
|
|
||||||
memset(&g_d3d9.params, 0, sizeof(g_d3d9.params));
|
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.SwapEffect = D3DSWAPEFFECT_DISCARD;
|
||||||
g_d3d9.params.hDeviceWindow = g_ddraw->hwnd;
|
g_d3d9.params.hDeviceWindow = g_ddraw->hwnd;
|
||||||
g_d3d9.params.PresentationInterval = g_ddraw->vsync ? D3DPRESENT_INTERVAL_ONE : D3DPRESENT_INTERVAL_IMMEDIATE;
|
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)
|
BOOL d3d9_reset(BOOL windowed)
|
||||||
{
|
{
|
||||||
g_d3d9.params.Windowed = windowed;
|
g_d3d9.params.Windowed = windowed || g_ddraw->nonexclusive;
|
||||||
g_d3d9.params.BackBufferWidth = windowed ? 0 : g_ddraw->render.width;
|
g_d3d9.params.BackBufferWidth = g_d3d9.params.Windowed ? 0 : g_ddraw->render.width;
|
||||||
g_d3d9.params.BackBufferHeight = windowed ? 0 : g_ddraw->render.height;
|
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;
|
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)))
|
if (g_d3d9.device && SUCCEEDED(IDirect3DDevice9_Reset(g_d3d9.device, &g_d3d9.params)))
|
||||||
|
@ -365,7 +365,7 @@ void util_toggle_fullscreen()
|
|||||||
mouse_unlock();
|
mouse_unlock();
|
||||||
g_config.window_state = g_ddraw->windowed = TRUE;
|
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);
|
d3d9_reset(g_ddraw->windowed);
|
||||||
}
|
}
|
||||||
|
@ -136,7 +136,7 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam
|
|||||||
}
|
}
|
||||||
case WM_D3D9DEVICELOST:
|
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 &&
|
g_ddraw->renderer == d3d9_render_main &&
|
||||||
d3d9_on_device_lost())
|
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->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);
|
ChangeDisplaySettings(&g_ddraw->render.mode, CDS_FULLSCREEN);
|
||||||
real_ShowWindow(g_ddraw->hwnd, SW_RESTORE);
|
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->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);
|
real_ShowWindow(g_ddraw->hwnd, SW_MINIMIZE);
|
||||||
ChangeDisplaySettings(NULL, g_ddraw->bnet_active ? CDS_FULLSCREEN : 0);
|
ChangeDisplaySettings(NULL, g_ddraw->bnet_active ? CDS_FULLSCREEN : 0);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user