display: always ensure we have an onscreen_template

If the user doesn't explicitly pass an onscreen template then instead of
leaving display->onscreen_template as NULL we now instantiate a template
ourselves. This simplifies winsys code that might want to refer to the
template since it needn't first check for a NULL pointer.

Reviewed-by: Neil Roberts <neil@linux.intel.com>
This commit is contained in:
Robert Bragg 2011-08-21 21:21:34 +01:00
parent 21e87a9bf0
commit 476ff37fa6
3 changed files with 8 additions and 6 deletions

View File

@ -109,6 +109,8 @@ cogl_display_new (CoglRenderer *renderer,
display->onscreen_template = onscreen_template;
if (onscreen_template)
cogl_object_ref (onscreen_template);
else
display->onscreen_template = cogl_onscreen_template_new (NULL);
display->setup = FALSE;

View File

@ -1005,8 +1005,7 @@ create_context (CoglDisplay *display, GError **error)
g_return_val_if_fail (egl_display->egl_context == NULL, TRUE);
if (display->onscreen_template &&
display->onscreen_template->swap_chain &&
if (display->onscreen_template->swap_chain &&
display->onscreen_template->swap_chain->has_alpha)
support_transparent_windows = TRUE;
else
@ -1098,10 +1097,12 @@ gdl_plane_init (CoglDisplay *display, GError **error)
if (rc == GDL_SUCCESS)
rc = gdl_plane_set_attr (GDL_PLANE_DST_RECT, &dstRect);
/* Default to triple buffering if we don't have an onscreen template */
/* Default to triple buffering if the swap_chain doesn't have an explicit
* length */
if (rc == GDL_SUCCESS)
{
if (display->onscreen_template)
if (display->onscreen_template->swap_chain &&
display->onscreen_template->swap_chain->length != -1)
rc = gdl_plane_set_uint (GDL_PLANE_NUM_GFX_SURFACES,
display->onscreen_template->swap_chain->length);
else

View File

@ -550,8 +550,7 @@ create_context (CoglDisplay *display, GError **error)
g_return_val_if_fail (glx_display->glx_context == NULL, TRUE);
if (display->onscreen_template &&
display->onscreen_template->swap_chain &&
if (display->onscreen_template->swap_chain &&
display->onscreen_template->swap_chain->has_alpha)
support_transparent_windows = TRUE;
else