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:
parent
2f18ca470a
commit
f3b85780ad
8
src/dd.c
8
src/dd.c
@ -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();
|
||||
|
@ -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)))
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user