mirror of
https://github.com/reactos/wine.git
synced 2025-03-02 09:47:59 +00:00
wined3d: Track if a context's private hdc has had its pixel format set, so we don't need to check it.
This commit is contained in:
parent
272873823e
commit
f3aa481238
@ -753,9 +753,13 @@ static BOOL context_restore_pixel_format(struct wined3d_context *ctx)
|
||||
static BOOL context_set_pixel_format(struct wined3d_context *context, HDC dc, BOOL private, int format)
|
||||
{
|
||||
const struct wined3d_gl_info *gl_info = context->gl_info;
|
||||
int current = GetPixelFormat(dc);
|
||||
int current;
|
||||
|
||||
if (current == format) return TRUE;
|
||||
if (dc == context->hdc && context->hdc_is_private && context->hdc_has_format)
|
||||
return TRUE;
|
||||
|
||||
current = GetPixelFormat(dc);
|
||||
if (current == format) goto success;
|
||||
|
||||
if (!current)
|
||||
{
|
||||
@ -769,7 +773,7 @@ static BOOL context_set_pixel_format(struct wined3d_context *context, HDC dc, BO
|
||||
|
||||
context->restore_pf = 0;
|
||||
context->restore_pf_win = private ? NULL : WindowFromDC(dc);
|
||||
return TRUE;
|
||||
goto success;
|
||||
}
|
||||
|
||||
/* By default WGL doesn't allow pixel format adjustments but we need it
|
||||
@ -796,7 +800,7 @@ static BOOL context_set_pixel_format(struct wined3d_context *context, HDC dc, BO
|
||||
context->restore_pf_win = win;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
goto success;
|
||||
}
|
||||
|
||||
/* OpenGL doesn't allow pixel format adjustments. Print an error and
|
||||
@ -806,6 +810,11 @@ static BOOL context_set_pixel_format(struct wined3d_context *context, HDC dc, BO
|
||||
ERR("Unable to set pixel format %d on device context %p. Already using format %d.\n",
|
||||
format, dc, current);
|
||||
return TRUE;
|
||||
|
||||
success:
|
||||
if (dc == context->hdc && context->hdc_is_private)
|
||||
context->hdc_has_format = TRUE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static BOOL context_set_gl_context(struct wined3d_context *ctx)
|
||||
@ -891,6 +900,7 @@ static void context_update_window(struct wined3d_context *context)
|
||||
|
||||
context->win_handle = context->swapchain->win_handle;
|
||||
context->hdc_is_private = FALSE;
|
||||
context->hdc_has_format = FALSE;
|
||||
context->needs_set = 1;
|
||||
context->valid = 1;
|
||||
|
||||
@ -1120,7 +1130,8 @@ static void context_enter(struct wined3d_context *context)
|
||||
context->restore_dc = wglGetCurrentDC();
|
||||
context->needs_set = 1;
|
||||
}
|
||||
else if (!context->needs_set && context->pixel_format != GetPixelFormat(context->hdc))
|
||||
else if (!context->needs_set && !(context->hdc_is_private && context->hdc_has_format)
|
||||
&& context->pixel_format != GetPixelFormat(context->hdc))
|
||||
context->needs_set = 1;
|
||||
}
|
||||
}
|
||||
@ -1521,6 +1532,7 @@ struct wined3d_context *context_create(struct wined3d_swapchain *swapchain,
|
||||
ret->win_handle = swapchain->win_handle;
|
||||
ret->hdc = hdc;
|
||||
ret->hdc_is_private = hdc_is_private;
|
||||
ret->hdc_has_format = TRUE;
|
||||
ret->pixel_format = pixel_format;
|
||||
ret->needs_set = 1;
|
||||
|
||||
|
@ -1087,7 +1087,8 @@ struct wined3d_context
|
||||
DWORD rebind_fbo : 1;
|
||||
DWORD needs_set : 1;
|
||||
DWORD hdc_is_private : 1;
|
||||
DWORD padding : 17;
|
||||
DWORD hdc_has_format : 1; /* only meaningful if hdc_is_private */
|
||||
DWORD padding : 16;
|
||||
DWORD shader_update_mask;
|
||||
DWORD constant_update_mask;
|
||||
DWORD numbered_array_mask;
|
||||
|
Loading…
x
Reference in New Issue
Block a user