Module: wine Branch: master Commit: 7e7bd87b2cf2786f858a5d14a4611c34102bbbfe URL: http://source.winehq.org/git/wine.git/?a=commit;h=7e7bd87b2cf2786f858a5d14a4...
Author: Henri Verbeet hverbeet@codeweavers.com Date: Tue Aug 20 10:20:09 2013 +0200
wined3d: Store the original display mode in the swapchain.
---
dlls/wined3d/device.c | 6 +----- dlls/wined3d/swapchain.c | 39 ++++++++++++--------------------------- dlls/wined3d/wined3d_private.h | 3 +-- 3 files changed, 14 insertions(+), 34 deletions(-)
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c index 1db04b4..1ab93a3 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c @@ -5012,11 +5012,7 @@ HRESULT CDECL wined3d_device_reset(struct wined3d_device *device, } else if (swapchain_desc->windowed) { - m.width = swapchain->orig_width; - m.height = swapchain->orig_height; - m.refresh_rate = 0; - m.format_id = swapchain->desc.backbuffer_format; - m.scanline_ordering = WINED3D_SCANLINE_ORDERING_UNKNOWN; + m = swapchain->original_mode; } else { diff --git a/dlls/wined3d/swapchain.c b/dlls/wined3d/swapchain.c index f6cfc2e..47ee901 100644 --- a/dlls/wined3d/swapchain.c +++ b/dlls/wined3d/swapchain.c @@ -30,7 +30,6 @@ WINE_DECLARE_DEBUG_CHANNEL(fps); /* Do not call while under the GL lock. */ static void swapchain_cleanup(struct wined3d_swapchain *swapchain) { - struct wined3d_display_mode mode; HRESULT hr; UINT i;
@@ -76,13 +75,8 @@ static void swapchain_cleanup(struct wined3d_swapchain *swapchain) * orig_height will be equal to the modes in the presentation params. */ if (!swapchain->desc.windowed && swapchain->desc.auto_restore_display_mode) { - mode.width = swapchain->orig_width; - mode.height = swapchain->orig_height; - mode.refresh_rate = 0; - mode.format_id = swapchain->orig_fmt; - mode.scanline_ordering = WINED3D_SCANLINE_ORDERING_UNKNOWN; if (FAILED(hr = wined3d_set_adapter_display_mode(swapchain->device->wined3d, - swapchain->device->adapter->ordinal, &mode))) + swapchain->device->adapter->ordinal, &swapchain->original_mode))) ERR("Failed to restore display mode, hr %#x.\n", hr); }
@@ -818,8 +812,6 @@ static HRESULT swapchain_init(struct wined3d_swapchain *swapchain, struct wined3 { const struct wined3d_adapter *adapter = device->adapter; struct wined3d_resource_desc surface_desc; - const struct wined3d_format *format; - struct wined3d_display_mode mode; BOOL displaymode_set = FALSE; RECT client_rect; HWND window; @@ -853,11 +845,12 @@ static HRESULT swapchain_init(struct wined3d_swapchain *swapchain, struct wined3 swapchain->win_handle = window; swapchain->device_window = window;
- wined3d_get_adapter_display_mode(device->wined3d, adapter->ordinal, &mode, NULL); - swapchain->orig_width = mode.width; - swapchain->orig_height = mode.height; - swapchain->orig_fmt = mode.format_id; - format = wined3d_get_format(&adapter->gl_info, mode.format_id); + if (FAILED(hr = wined3d_get_adapter_display_mode(device->wined3d, + adapter->ordinal, &swapchain->original_mode, NULL))) + { + ERR("Failed to get current display mode, hr %#x.\n", hr); + goto err; + }
GetClientRect(window, &client_rect); if (desc->windowed @@ -879,8 +872,8 @@ static HRESULT swapchain_init(struct wined3d_swapchain *swapchain, struct wined3
if (desc->backbuffer_format == WINED3DFMT_UNKNOWN) { - desc->backbuffer_format = swapchain->orig_fmt; - TRACE("Updating format to %s.\n", debug_d3dformat(swapchain->orig_fmt)); + desc->backbuffer_format = swapchain->original_mode.format_id; + TRACE("Updating format to %s.\n", debug_d3dformat(swapchain->original_mode.format_id)); } } swapchain->desc = *desc; @@ -1040,18 +1033,10 @@ static HRESULT swapchain_init(struct wined3d_swapchain *swapchain, struct wined3 err: if (displaymode_set) { - DEVMODEW devmode; - + if (FAILED(wined3d_set_adapter_display_mode(device->wined3d, + adapter->ordinal, &swapchain->original_mode))) + ERR("Failed to restore display mode.\n"); ClipCursor(NULL); - - /* Change the display settings */ - memset(&devmode, 0, sizeof(devmode)); - devmode.dmSize = sizeof(devmode); - devmode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT; - devmode.dmBitsPerPel = format->byte_count * CHAR_BIT; - devmode.dmPelsWidth = swapchain->orig_width; - devmode.dmPelsHeight = swapchain->orig_height; - ChangeDisplaySettingsExW(adapter->DeviceName, &devmode, NULL, CDS_FULLSCREEN, NULL); }
if (swapchain->back_buffers) diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index cee9651..49aacc1 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -2543,8 +2543,7 @@ struct wined3d_swapchain struct wined3d_surface **back_buffers; struct wined3d_surface *front_buffer; struct wined3d_swapchain_desc desc; - DWORD orig_width, orig_height; - enum wined3d_format_id orig_fmt; + struct wined3d_display_mode original_mode; struct wined3d_gamma_ramp orig_gamma; BOOL render_to_fbo; const struct wined3d_format *ds_format;