[PATCH 3/5] wined3d: Move the backup window from struct wined3d_swapchain to struct wined3d_swapchain_gl.
Henri Verbeet
hverbeet at codeweavers.com
Tue Aug 13 03:31:38 CDT 2019
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
---
dlls/wined3d/context.c | 8 ++++----
dlls/wined3d/swapchain.c | 32 ++++++++++++++++----------------
dlls/wined3d/wined3d_private.h | 8 ++++----
3 files changed, 24 insertions(+), 24 deletions(-)
diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c
index 8a6cd5c889a..89f37cd6613 100644
--- a/dlls/wined3d/context.c
+++ b/dlls/wined3d/context.c
@@ -1231,7 +1231,7 @@ success:
static BOOL wined3d_context_gl_set_gl_context(struct wined3d_context_gl *context_gl)
{
- struct wined3d_swapchain *swapchain = context_gl->c.swapchain;
+ struct wined3d_swapchain_gl *swapchain_gl = wined3d_swapchain_gl(context_gl->c.swapchain);
BOOL backup = FALSE;
if (!wined3d_context_gl_set_pixel_format(context_gl))
@@ -1252,14 +1252,14 @@ static BOOL wined3d_context_gl_set_gl_context(struct wined3d_context_gl *context
* a swapchain, so we can't use the swapchain to get a backup dc. To
* make this work windowless contexts would need to be handled by the
* device. */
- if (context_gl->c.destroyed || !swapchain)
+ if (context_gl->c.destroyed || !swapchain_gl)
{
FIXME("Unable to get backup dc for destroyed context %p.\n", context_gl);
wined3d_context_gl_set_current(NULL);
return FALSE;
}
- if (!(context_gl->dc = swapchain_get_backup_dc(swapchain)))
+ if (!(context_gl->dc = wined3d_swapchain_gl_get_backup_dc(swapchain_gl)))
{
wined3d_context_gl_set_current(NULL);
return FALSE;
@@ -1968,7 +1968,7 @@ HRESULT wined3d_context_gl_init(struct wined3d_context_gl *context_gl, struct wi
if (!context_gl->dc)
{
- if (!(context_gl->dc = swapchain_get_backup_dc(context->swapchain)))
+ if (!(context_gl->dc = wined3d_swapchain_gl_get_backup_dc(wined3d_swapchain_gl(context->swapchain))))
{
ERR("Failed to retrieve a device context.\n");
return E_FAIL;
diff --git a/dlls/wined3d/swapchain.c b/dlls/wined3d/swapchain.c
index c0eeca52c7d..eb515f0a6dd 100644
--- a/dlls/wined3d/swapchain.c
+++ b/dlls/wined3d/swapchain.c
@@ -95,19 +95,19 @@ void wined3d_swapchain_cleanup(struct wined3d_swapchain *swapchain)
wined3d_swapchain_state_restore_from_fullscreen(&swapchain->state, swapchain->state.device_window, NULL);
}
}
-
- if (swapchain->backup_dc)
- {
- TRACE("Destroying backup wined3d window %p, dc %p.\n", swapchain->backup_wnd, swapchain->backup_dc);
-
- wined3d_release_dc(swapchain->backup_wnd, swapchain->backup_dc);
- DestroyWindow(swapchain->backup_wnd);
- }
}
void wined3d_swapchain_gl_cleanup(struct wined3d_swapchain_gl *swapchain_gl)
{
wined3d_swapchain_cleanup(&swapchain_gl->s);
+
+ if (swapchain_gl->backup_dc)
+ {
+ TRACE("Destroying backup wined3d window %p, dc %p.\n", swapchain_gl->backup_wnd, swapchain_gl->backup_dc);
+
+ wined3d_release_dc(swapchain_gl->backup_wnd, swapchain_gl->backup_dc);
+ DestroyWindow(swapchain_gl->backup_wnd);
+ }
}
ULONG CDECL wined3d_swapchain_incref(struct wined3d_swapchain *swapchain)
@@ -1162,29 +1162,29 @@ struct wined3d_context *swapchain_get_context(struct wined3d_swapchain *swapchai
return swapchain_create_context(swapchain);
}
-HDC swapchain_get_backup_dc(struct wined3d_swapchain *swapchain)
+HDC wined3d_swapchain_gl_get_backup_dc(struct wined3d_swapchain_gl *swapchain_gl)
{
- if (!swapchain->backup_dc)
+ if (!swapchain_gl->backup_dc)
{
- TRACE("Creating the backup window for swapchain %p.\n", swapchain);
+ TRACE("Creating the backup window for swapchain %p.\n", swapchain_gl);
- if (!(swapchain->backup_wnd = CreateWindowA(WINED3D_OPENGL_WINDOW_CLASS_NAME, "WineD3D fake window",
+ if (!(swapchain_gl->backup_wnd = CreateWindowA(WINED3D_OPENGL_WINDOW_CLASS_NAME, "WineD3D fake window",
WS_OVERLAPPEDWINDOW, 10, 10, 10, 10, NULL, NULL, NULL, NULL)))
{
ERR("Failed to create a window.\n");
return NULL;
}
- if (!(swapchain->backup_dc = GetDC(swapchain->backup_wnd)))
+ if (!(swapchain_gl->backup_dc = GetDC(swapchain_gl->backup_wnd)))
{
ERR("Failed to get a DC.\n");
- DestroyWindow(swapchain->backup_wnd);
- swapchain->backup_wnd = NULL;
+ DestroyWindow(swapchain_gl->backup_wnd);
+ swapchain_gl->backup_wnd = NULL;
return NULL;
}
}
- return swapchain->backup_dc;
+ return swapchain_gl->backup_dc;
}
void swapchain_update_draw_bindings(struct wined3d_swapchain *swapchain)
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 1e4e1390fe5..4ce2a2a29ca 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -4404,16 +4404,12 @@ struct wined3d_swapchain
struct wined3d_swapchain_state state;
HWND win_handle;
-
- HDC backup_dc;
- HWND backup_wnd;
};
void wined3d_swapchain_activate(struct wined3d_swapchain *swapchain, BOOL activate) DECLSPEC_HIDDEN;
void wined3d_swapchain_cleanup(struct wined3d_swapchain *swapchain) DECLSPEC_HIDDEN;
struct wined3d_context *swapchain_get_context(struct wined3d_swapchain *swapchain) DECLSPEC_HIDDEN;
void swapchain_destroy_contexts(struct wined3d_swapchain *swapchain) DECLSPEC_HIDDEN;
-HDC swapchain_get_backup_dc(struct wined3d_swapchain *swapchain) DECLSPEC_HIDDEN;
void swapchain_update_draw_bindings(struct wined3d_swapchain *swapchain) DECLSPEC_HIDDEN;
void swapchain_set_max_frame_latency(struct wined3d_swapchain *swapchain,
const struct wined3d_device *device) DECLSPEC_HIDDEN;
@@ -4425,6 +4421,9 @@ HRESULT wined3d_swapchain_no3d_init(struct wined3d_swapchain *swapchain_no3d,
struct wined3d_swapchain_gl
{
struct wined3d_swapchain s;
+
+ HDC backup_dc;
+ HWND backup_wnd;
};
static inline struct wined3d_swapchain_gl *wined3d_swapchain_gl(struct wined3d_swapchain *swapchain)
@@ -4433,6 +4432,7 @@ static inline struct wined3d_swapchain_gl *wined3d_swapchain_gl(struct wined3d_s
}
void wined3d_swapchain_gl_cleanup(struct wined3d_swapchain_gl *swapchain_gl) DECLSPEC_HIDDEN;
+HDC wined3d_swapchain_gl_get_backup_dc(struct wined3d_swapchain_gl *swapchain_gl) DECLSPEC_HIDDEN;
HRESULT wined3d_swapchain_gl_init(struct wined3d_swapchain_gl *swapchain_gl,
struct wined3d_device *device, struct wined3d_swapchain_desc *desc,
void *parent, const struct wined3d_parent_ops *parent_ops) DECLSPEC_HIDDEN;
--
2.11.0
More information about the wine-devel
mailing list