Commit f3aa4812 authored by Ken Thomases's avatar Ken Thomases Committed by Alexandre Julliard

wined3d: Track if a context's private hdc has had its pixel format set, so we…

wined3d: Track if a context's private hdc has had its pixel format set, so we don't need to check it.
parent 27287382
......@@ -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;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment