Initialize color masks lazily
authorKristian Høgsberg <krh@bitplanet.net>
Mon, 27 Sep 2010 17:25:50 +0000 (13:25 -0400)
committerRobert Bragg <robert@linux.intel.com>
Thu, 14 Oct 2010 15:23:05 +0000 (16:23 +0100)
When we don't use a window system drawable, we can't query the color
masks at context initialization time.  Do it lazily so we're sure to have
a current context with a valid framebuffer.

clutter/clutter-main.c

index 10535c2..8945aa5 100644 (file)
@@ -343,6 +343,26 @@ _clutter_id_to_color (guint id, ClutterColor *col)
 
   ctx = _clutter_context_get_default ();
 
+  if (ctx->fb_g_mask == 0)
+    {
+      /* Figure out framebuffer masks used for pick */
+      cogl_get_bitmasks (&ctx->fb_r_mask,
+                        &ctx->fb_g_mask,
+                        &ctx->fb_b_mask, NULL);
+
+      ctx->fb_r_mask_used = ctx->fb_r_mask;
+      ctx->fb_g_mask_used = ctx->fb_g_mask;
+      ctx->fb_b_mask_used = ctx->fb_b_mask;
+
+      /* XXX - describe what "fuzzy picking" is */
+      if (clutter_use_fuzzy_picking)
+       {
+         ctx->fb_r_mask_used--;
+         ctx->fb_g_mask_used--;
+         ctx->fb_b_mask_used--;
+       }
+    }
+
   /* compute the numbers we'll store in the components */
   red   = (id >> (ctx->fb_g_mask_used+ctx->fb_b_mask_used))
         & (0xff >> (8-ctx->fb_r_mask_used));
@@ -1606,21 +1626,6 @@ clutter_init_real (GError **error)
 
   clutter_text_direction = clutter_get_text_direction ();
 
-  /* Figure out framebuffer masks used for pick */
-  cogl_get_bitmasks (&ctx->fb_r_mask, &ctx->fb_g_mask, &ctx->fb_b_mask, NULL);
-
-  ctx->fb_r_mask_used = ctx->fb_r_mask;
-  ctx->fb_g_mask_used = ctx->fb_g_mask;
-  ctx->fb_b_mask_used = ctx->fb_b_mask;
-
-  /* XXX - describe what "fuzzy picking" is */
-  if (clutter_use_fuzzy_picking)
-    {
-      ctx->fb_r_mask_used--;
-      ctx->fb_g_mask_used--;
-      ctx->fb_b_mask_used--;
-    }
-
   /* Initiate event collection */
   _clutter_backend_init_events (ctx->backend);