[clutter/wip/cogl2: 4/5] Add a --enable-cogl2 configure option to build against Cogl 2.0



commit db700df26831d6da3dbef8c2fa6b83483ab9cee5
Author: Neil Roberts <neil linux intel com>
Date:   Mon Apr 23 15:14:02 2012 +0100

    Add a --enable-cogl2 configure option to build against Cogl 2.0
    
    The Cogl master branch has started removing API in preparation for a
    Cogl 2.0 release which will be incompatible with the current API.
    Clutter is already internally mostly using the new API via
    experimental features so it can more or less already compile against
    2.0. However the old Cogl API is effectively part of the Clutter API
    because that is what actors use for drawing so Clutter can not
    silently switch to a new Cogl API. To make testing the new Cogl API
    easier it is still convenient to be able to build against Cogl 2.0 for
    apps that don't care about the API break.
    
    This adds an experimental configure option to make Clutter use the
    next version of Cogl. When this is enabled CLUTTER_COGL2 will be
    defined from the public Cogl headers so an application can decide to
    use the newer Cogl API. Clutter internally now uses this in some
    places where the new API is not available as experimental API.
    
    This patch does not update any tests which depend on the old API but
    instead just skips building them when the option is enabled.
    
    Some features of Clutter are removed when the option is enabled. These
    include ClutterShader and ClutterFixed.
    
    The Cogl compatibility header has been expanded to define more
    wrappers when CLUTTER_COGL2 is defined.

 clutter/Makefile.am                 |   32 +++++++++++++++++++++-----
 clutter/clutter-actor.c             |    6 +++++
 clutter/clutter-backend.h           |    5 +++-
 clutter/clutter-bezier.c            |    1 +
 clutter/clutter-cogl-compat.c       |   43 +++++++++++++++++++++++++++++++++++
 clutter/clutter-cogl-compat.h       |   27 +++++++++++++++++++++-
 clutter/clutter-deprecated.h        |    7 ++++-
 clutter/clutter-interval.c          |    7 +++++-
 clutter/clutter-paint-nodes.c       |   11 +++++++++
 clutter/clutter-shader-effect.c     |    8 ++++++
 clutter/clutter-shader-effect.h     |    4 +++
 clutter/clutter-text.c              |   35 ++++++++++++++++++++++++----
 clutter/clutter-texture.c           |    6 +++++
 clutter/clutter-texture.h           |    1 +
 configure.ac                        |   31 +++++++++++++++++++++++-
 tests/conform/Makefile.am           |   35 +++++++++++++++++++---------
 tests/conform/actor-shader-effect.c |    9 +++++++
 tests/conform/test-conform-main.c   |   35 ++++++++++++++++++----------
 tests/interactive/Makefile.am       |   25 ++++++++++++--------
 19 files changed, 276 insertions(+), 52 deletions(-)
---
diff --git a/clutter/Makefile.am b/clutter/Makefile.am
index 3a7cb65..9cea187 100644
--- a/clutter/Makefile.am
+++ b/clutter/Makefile.am
@@ -262,7 +262,6 @@ deprecated_h = \
 	$(srcdir)/deprecated/clutter-box.h			\
 	$(srcdir)/deprecated/clutter-cairo-texture.h		\
 	$(srcdir)/deprecated/clutter-container.h		\
-	$(srcdir)/deprecated/clutter-fixed.h			\
 	$(srcdir)/deprecated/clutter-frame-source.h		\
 	$(srcdir)/deprecated/clutter-group.h			\
 	$(srcdir)/deprecated/clutter-keysyms.h			\
@@ -270,7 +269,6 @@ deprecated_h = \
 	$(srcdir)/deprecated/clutter-media.h			\
 	$(srcdir)/deprecated/clutter-rectangle.h		\
 	$(srcdir)/deprecated/clutter-score.h 			\
-	$(srcdir)/deprecated/clutter-shader.h 			\
 	$(srcdir)/deprecated/clutter-stage-manager.h		\
 	$(srcdir)/deprecated/clutter-stage.h			\
 	$(srcdir)/deprecated/clutter-state.h			\
@@ -282,7 +280,6 @@ deprecated_h = \
 
 # deprecated source code
 deprecated_c = \
-	$(srcdir)/deprecated/clutter-actor-deprecated.c		\
 	$(srcdir)/deprecated/clutter-alpha.c 			\
 	$(srcdir)/deprecated/clutter-animation.c		\
 	$(srcdir)/deprecated/clutter-animator.c			\
@@ -295,13 +292,11 @@ deprecated_c = \
 	$(srcdir)/deprecated/clutter-behaviour-scale.c		\
 	$(srcdir)/deprecated/clutter-box.c			\
 	$(srcdir)/deprecated/clutter-cairo-texture.c		\
-	$(srcdir)/deprecated/clutter-fixed.c			\
 	$(srcdir)/deprecated/clutter-frame-source.c		\
 	$(srcdir)/deprecated/clutter-group.c 			\
 	$(srcdir)/deprecated/clutter-media.c			\
 	$(srcdir)/deprecated/clutter-rectangle.c 		\
 	$(srcdir)/deprecated/clutter-score.c 			\
-	$(srcdir)/deprecated/clutter-shader.c 			\
 	$(srcdir)/deprecated/clutter-state.c			\
 	$(srcdir)/deprecated/clutter-timeout-pool.c		\
 	$(NULL)
@@ -316,6 +311,26 @@ deprecated_c_priv = \
 	$(srcdir)/deprecated/clutter-timeout-interval.c	\
 	$(NULL)
 
+if USE_COGL2
+
+source_c +=							\
+	$(srcdir)/clutter-cogl-compat.c				\
+	$(NULL)
+
+else
+
+deprecated_c +=							\
+	$(srcdir)/deprecated/clutter-actor-deprecated.c		\
+	$(srcdir)/deprecated/clutter-shader.c			\
+	$(srcdir)/deprecated/clutter-fixed.c			\
+	$(NULL)
+deprecated_h +=							\
+	$(srcdir)/deprecated/clutter-shader.h			\
+	$(srcdir)/deprecated/clutter-fixed.h			\
+	$(NULL)
+
+endif
+
 # built sources
 built_source_c = \
 	clutter-enum-types.c			\
@@ -951,11 +966,16 @@ Clutter_ CLUTTER_API_VERSION_AM@_gir_FILES = \
 	$(deprecated_c) \
 	$(built_source_c)
 Clutter_ CLUTTER_API_VERSION_AM@_gir_CFLAGS = $(INCLUDES) $(CLUTTER_CFLAGS) $(AM_CPPFLAGS)
-Clutter_ CLUTTER_API_VERSION_AM@_gir_INCLUDES = GL-1.0 GObject-2.0 cairo-1.0 Cogl-1.0 CoglPango-1.0 Atk-1.0 Json-1.0
+Clutter_ CLUTTER_API_VERSION_AM@_gir_INCLUDES = GL-1.0 GObject-2.0 cairo-1.0 Atk-1.0 Json-1.0
 Clutter_ CLUTTER_API_VERSION_AM@_gir_SCANNERFLAGS = \
 	--warn-all \
 	--c-include='clutter/clutter.h' \
 	--pkg-export=clutter- CLUTTER_API_VERSION@
+if USE_COGL2
+Clutter_ CLUTTER_API_VERSION_AM@_gir_INCLUDES += Cogl-2.0 CoglPango-2.0
+else
+Clutter_ CLUTTER_API_VERSION_AM@_gir_INCLUDES += Cogl-1.0 CoglPango-1.0
+endif
 
 INTROSPECTION_GIRS += Clutter- CLUTTER_API_VERSION@.gir
 
diff --git a/clutter/clutter-actor.c b/clutter/clutter-actor.c
index 70928b2..b4446d6 100644
--- a/clutter/clutter-actor.c
+++ b/clutter/clutter-actor.c
@@ -3463,7 +3463,9 @@ clutter_actor_paint (ClutterActor *self)
   ClutterActorPrivate *priv;
   ClutterPickMode pick_mode;
   gboolean clip_set = FALSE;
+#ifndef CLUTTER_COGL2
   gboolean shader_applied = FALSE;
+#endif
 
   CLUTTER_STATIC_COUNTER (actor_paint_counter,
                           "Actor real-paint counter",
@@ -3642,12 +3644,14 @@ clutter_actor_paint (ClutterActor *self)
 
   if (priv->effects == NULL)
     {
+#ifndef CLUTTER_COGL2
       if (pick_mode == CLUTTER_PICK_NONE &&
           actor_has_shader_data (self))
         {
           _clutter_actor_shader_pre_paint (self, FALSE);
           shader_applied = TRUE;
         }
+#endif
 
       priv->next_effect_to_paint = NULL;
     }
@@ -3657,8 +3661,10 @@ clutter_actor_paint (ClutterActor *self)
 
   clutter_actor_continue_paint (self);
 
+#ifndef CLUTTER_COGL2
   if (shader_applied)
     _clutter_actor_shader_post_paint (self);
+#endif
 
   if (G_UNLIKELY (clutter_paint_debug_flags & CLUTTER_DEBUG_PAINT_VOLUMES &&
                   pick_mode == CLUTTER_PICK_NONE))
diff --git a/clutter/clutter-backend.h b/clutter/clutter-backend.h
index 8f8f7e9..7e4ce48 100644
--- a/clutter/clutter-backend.h
+++ b/clutter/clutter-backend.h
@@ -65,7 +65,10 @@ void                        clutter_backend_set_font_options          (ClutterBa
                                                                        const cairo_font_options_t *options);
 const cairo_font_options_t *clutter_backend_get_font_options          (ClutterBackend             *backend);
 
-#if defined (COGL_ENABLE_EXPERIMENTAL_API) && defined (CLUTTER_ENABLE_EXPERIMENTAL_API)
+#if (defined (COGL_ENABLE_EXPERIMENTAL_API) ||  \
+     defined (CLUTTER_COGL2)) &&                \
+  (defined (CLUTTER_ENABLE_EXPERIMENTAL_API) || \
+   defined (CLUTTER_COMPILATION))
 CoglContext                *clutter_backend_get_cogl_context          (ClutterBackend             *backend);
 #endif
 
diff --git a/clutter/clutter-bezier.c b/clutter/clutter-bezier.c
index 7b6ba3c..1a5dd05 100644
--- a/clutter/clutter-bezier.c
+++ b/clutter/clutter-bezier.c
@@ -25,6 +25,7 @@
 #include <string.h>
 #include "clutter-bezier.h"
 #include "clutter-debug.h"
+#include "clutter-cogl-compat.h"
 
 /*
  * We have some experimental code here to allow for constant velocity
diff --git a/clutter/clutter-cogl-compat.c b/clutter/clutter-cogl-compat.c
new file mode 100644
index 0000000..a0ff666
--- /dev/null
+++ b/clutter/clutter-cogl-compat.c
@@ -0,0 +1,43 @@
+/*
+ * Clutter.
+ *
+ * An OpenGL based 'interactive canvas' library.
+ *
+ * Copyright (C) 2012  Intel Corporation.
+ *
+ * Authored By: Neil Roberts <neil linux intel com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "clutter-cogl-compat.h"
+
+GType
+cogl_gtype_handle_get_type (void)
+{
+   static volatile gsize type_volatile = 0;
+   if (g_once_init_enter (&type_volatile))
+     {
+       GType type =
+         g_boxed_type_register_static (g_intern_static_string ("CoglHandle"),
+                                       (GBoxedCopyFunc) cogl_object_ref,
+                                       (GBoxedFreeFunc) cogl_object_unref);
+       g_once_init_leave (&type_volatile, type);
+     }
+   return type_volatile;
+}
diff --git a/clutter/clutter-cogl-compat.h b/clutter/clutter-cogl-compat.h
index 3e58634..40fedba 100644
--- a/clutter/clutter-cogl-compat.h
+++ b/clutter/clutter-cogl-compat.h
@@ -27,6 +27,11 @@
 #error "Only <clutter/clutter.h> can be included directly."
 #endif
 
+#include <glib-object.h>
+#include "clutter-config.h"
+#include <cogl/cogl-enum-types.h>
+#include <cogl/cogl.h>
+
 G_BEGIN_DECLS
 
 /* XXX: Some public Clutter apis depend on Cogl types that have been
@@ -40,13 +45,33 @@ G_BEGIN_DECLS
  * defined.
  */
 
-#ifdef COGL_ENABLE_EXPERIMENTAL_2_0_API
+#if defined(COGL_ENABLE_EXPERIMENTAL_2_0_API) || defined(CLUTTER_COGL2)
 
 /* CoglMaterial has been replaced with CoglPipeline in Cogl 2.0 */
 typedef struct _CoglMaterial CoglMaterial;
 
 #endif
 
+#ifdef CLUTTER_COGL2
+
+#include <math.h>
+
+/* CoglHandle has been removed */
+typedef void *CoglHandle;
+#define COGL_INVALID_HANDLE NULL
+
+#define cogl_handle_unref cogl_object_unref
+#define cogl_handle_ref cogl_object_ref
+
+#define COGL_TYPE_HANDLE (cogl_gtype_handle_get_type ())
+
+GType cogl_gtype_handle_get_type (void);
+
+/* cogl_sqrti has been removed */
+#define cogl_sqrti(x) ((int) sqrtf (x))
+
+#endif /* CLUTTER_COGL2 */
+
 G_END_DECLS
 
 #endif /* __CLUTTER_COGL_COMPAT_H__ */
diff --git a/clutter/clutter-deprecated.h b/clutter/clutter-deprecated.h
index b19dbab..5e5e00c 100644
--- a/clutter/clutter-deprecated.h
+++ b/clutter/clutter-deprecated.h
@@ -20,7 +20,6 @@
 #include "deprecated/clutter-box.h"
 #include "deprecated/clutter-cairo-texture.h"
 #include "deprecated/clutter-container.h"
-#include "deprecated/clutter-fixed.h"
 #include "deprecated/clutter-frame-source.h"
 #include "deprecated/clutter-group.h"
 #include "deprecated/clutter-keysyms.h"
@@ -28,7 +27,6 @@
 #include "deprecated/clutter-media.h"
 #include "deprecated/clutter-rectangle.h"
 #include "deprecated/clutter-score.h"
-#include "deprecated/clutter-shader.h"
 #include "deprecated/clutter-stage-manager.h"
 #include "deprecated/clutter-stage.h"
 #include "deprecated/clutter-state.h"
@@ -37,6 +35,11 @@
 #include "deprecated/clutter-timeout-pool.h"
 #include "deprecated/clutter-util.h"
 
+#ifndef CLUTTER_COGL2
+#include "deprecated/clutter-shader.h"
+#include "deprecated/clutter-fixed.h"
+#endif /* CLUTTER_COGL2 */
+
 #undef __CLUTTER_DEPRECATED_H_INSIDE__
 
 #endif /* __CLUTTER_DEPRECATED_H__ */
diff --git a/clutter/clutter-interval.c b/clutter/clutter-interval.c
index 5d09545..370dbd3 100644
--- a/clutter/clutter-interval.c
+++ b/clutter/clutter-interval.c
@@ -58,11 +58,14 @@
 #include <gobject/gvaluecollector.h>
 
 #include "clutter-color.h"
-#include "clutter-fixed.h"
 #include "clutter-interval.h"
 #include "clutter-private.h"
 #include "clutter-units.h"
 
+#ifndef CLUTTER_COGL2
+#include "clutter-fixed.h"
+#endif
+
 enum
 {
   PROP_0,
@@ -100,6 +103,7 @@ clutter_interval_real_validate (ClutterInterval *interval,
 {
   GType pspec_gtype = G_PARAM_SPEC_VALUE_TYPE (pspec);
 
+#ifndef CLUTTER_COGL2
   /* check the GTypes we provide first */
   if (pspec_gtype == COGL_TYPE_FIXED)
     {
@@ -114,6 +118,7 @@ clutter_interval_real_validate (ClutterInterval *interval,
       else
         return FALSE;
     }
+#endif /* CLUTTER_COGL2 */
 
   /* then check the fundamental types */
   switch (G_TYPE_FUNDAMENTAL (pspec_gtype))
diff --git a/clutter/clutter-paint-nodes.c b/clutter/clutter-paint-nodes.c
index e78199c..affa444 100644
--- a/clutter/clutter-paint-nodes.c
+++ b/clutter/clutter-paint-nodes.c
@@ -407,7 +407,14 @@ clutter_pipeline_node_draw (ClutterPaintNode *node)
           break;
 
         case PAINT_OP_PATH:
+#ifdef CLUTTER_COGL2
+          {
+            CoglFramebuffer *fb = cogl_get_draw_framebuffer ();
+            cogl_framebuffer_fill_path (fb, pnode->pipeline, op->op.path);
+          }
+#else
           cogl_path_fill (op->op.path);
+#endif
           break;
 
         case PAINT_OP_PRIMITIVE:
@@ -1145,9 +1152,13 @@ clutter_layer_node_post_draw (ClutterPaintNode *node)
           break;
 
         case PAINT_OP_PATH:
+#ifdef CLUTTER_COGL2
+          cogl_framebuffer_fill_path (fb, lnode->state, op->op.path);
+#else
           cogl_push_source (lnode->state);
           cogl_path_fill (op->op.path);
           cogl_pop_source ();
+#endif
           break;
 
         case PAINT_OP_PRIMITIVE:
diff --git a/clutter/clutter-shader-effect.c b/clutter/clutter-shader-effect.c
index 747a250..6a32e85 100644
--- a/clutter/clutter-shader-effect.c
+++ b/clutter/clutter-shader-effect.c
@@ -146,6 +146,7 @@ struct _ClutterShaderEffectPrivate
    * happen if a uniform is set before setting the source */
   CoglSnippet *snippet;
 
+#ifndef CLUTTER_COGL2
   /* A CoglShader containing the same source as the snippet. This is
    * created on demand only if clutter_shader_effect_get_program is
    * called. */
@@ -153,6 +154,7 @@ struct _ClutterShaderEffectPrivate
   /* A CoglProgram containing the above shader. This is also only
    * created on demand */
   CoglHandle program;
+#endif /* CLUTTER_COGL2 */
 };
 
 typedef struct _ClutterShaderEffectClassPrivate
@@ -379,6 +381,7 @@ clutter_shader_effect_finalize (GObject *gobject)
       priv->snippet = NULL;
     }
 
+#ifndef CLUTTER_COGL2
   if (priv->shader != COGL_INVALID_HANDLE)
     {
       cogl_handle_unref (priv->shader);
@@ -392,6 +395,7 @@ clutter_shader_effect_finalize (GObject *gobject)
 
       priv->program = COGL_INVALID_HANDLE;
     }
+#endif /* CLUTTER_COGL2 */
 
   G_OBJECT_CLASS (clutter_shader_effect_parent_class)->finalize (gobject);
 }
@@ -467,6 +471,8 @@ clutter_shader_effect_new (ClutterShaderType shader_type)
                        NULL);
 }
 
+#ifndef CLUTTER_COGL2
+
 /**
  * clutter_shader_effect_get_shader:
  * @effect: a #ClutterShaderEffect
@@ -578,6 +584,8 @@ clutter_shader_effect_get_program (ClutterShaderEffect *effect)
   return priv->program;
 }
 
+#endif /* CLUTTER_COGL2 */
+
 static void
 clutter_shader_effect_ensure_pipeline (ClutterShaderEffect *effect)
 {
diff --git a/clutter/clutter-shader-effect.h b/clutter/clutter-shader-effect.h
index 9777b64..2a514ce 100644
--- a/clutter/clutter-shader-effect.h
+++ b/clutter/clutter-shader-effect.h
@@ -106,9 +106,13 @@ void            clutter_shader_effect_set_uniform_value (ClutterShaderEffect *ef
                                                          const gchar         *name,
                                                          const GValue        *value);
 
+#ifndef CLUTTER_COGL2
+
 CoglHandle      clutter_shader_effect_get_shader        (ClutterShaderEffect *effect);
 CoglHandle      clutter_shader_effect_get_program       (ClutterShaderEffect *effect);
 
+#endif /* CLUTTER_COGL2 */
+
 G_END_DECLS
 
 #endif /* __CLUTTER_SHADER_EFFECT_H__ */
diff --git a/clutter/clutter-text.c b/clutter/clutter-text.c
index ed03947..6a27c3e 100644
--- a/clutter/clutter-text.c
+++ b/clutter/clutter-text.c
@@ -61,6 +61,7 @@
 #include "clutter-units.h"
 #include "clutter-paint-volume-private.h"
 #include "clutter-scriptable.h"
+#include "clutter-backend.h"
 
 /* cursor width in pixels */
 #define DEFAULT_CURSOR_SIZE     2
@@ -1588,8 +1589,18 @@ selection_paint (ClutterText *self)
         {
           /* Paint selection background first */
           PangoLayout *layout = clutter_text_get_layout (self);
-          CoglPath *selection_path = cogl_path_new ();
+          CoglPath *selection_path;
           CoglColor cogl_color = { 0, };
+#ifdef CLUTTER_COGL2
+          CoglContext *context =
+            clutter_backend_get_cogl_context (clutter_get_default_backend ());
+#endif
+
+#ifdef CLUTTER_COGL2
+          selection_path = cogl_path_new (context);
+#else /* CLUTTER_COGL2 */
+          selection_path = cogl_path_new ();
+#endif /* CLUTTER_COGL2 */
 
           /* Paint selection background */
           if (priv->selection_color_set)
@@ -1599,16 +1610,30 @@ selection_paint (ClutterText *self)
           else
             color = &priv->text_color;
 
+          clutter_text_foreach_selection_rectangle (self,
+                                                    add_selection_rectangle_to_path,
+                                                    selection_path);
+
+#ifdef CLUTTER_COGL2
+          {
+            CoglFramebuffer *fb = cogl_get_draw_framebuffer ();
+            CoglPipeline *pipeline = cogl_pipeline_new (context);
+            cogl_pipeline_set_color4ub (pipeline,
+                                        color->red,
+                                        color->green,
+                                        color->blue,
+                                        255);
+            cogl_framebuffer_fill_path (fb, pipeline, selection_path);
+            cogl_object_unref (pipeline);
+          }
+#else
           cogl_set_source_color4ub (color->red,
                                     color->green,
                                     color->blue,
                                     paint_opacity * color->alpha / 255);
 
-          clutter_text_foreach_selection_rectangle (self,
-                                                    add_selection_rectangle_to_path,
-                                                    selection_path);
-
           cogl_path_fill (selection_path);
+#endif
 
           /* Paint selected text */
           cogl_framebuffer_push_path_clip (cogl_get_draw_framebuffer (),
diff --git a/clutter/clutter-texture.c b/clutter/clutter-texture.c
index d9b2305..3961f07 100644
--- a/clutter/clutter-texture.c
+++ b/clutter/clutter-texture.c
@@ -488,12 +488,15 @@ update_fbo (ClutterActor *self)
 {
   ClutterTexture        *texture = CLUTTER_TEXTURE (self);
   ClutterTexturePrivate *priv = texture->priv;
+#ifndef CLUTTER_COGL2
   ClutterActor          *head;
   ClutterShader         *shader = NULL;
+#endif
   ClutterActor          *stage = NULL;
   CoglMatrix             projection;
   CoglColor              transparent_col;
 
+#ifndef CLUTTER_COGL2
   head = _clutter_context_peek_shader_stack ();
   if (head != NULL)
     shader = clutter_actor_get_shader (head);
@@ -503,6 +506,7 @@ update_fbo (ClutterActor *self)
    */
   if (shader != NULL)
     clutter_shader_set_is_enabled (shader, FALSE);
+#endif
 
   /* Redirect drawing to the fbo */
   cogl_push_framebuffer (priv->fbo_handle);
@@ -563,9 +567,11 @@ update_fbo (ClutterActor *self)
   /* Restore drawing to the previous framebuffer */
   cogl_pop_framebuffer ();
 
+#ifndef CLUTTER_COGL2
   /* If there is a shader on top of the shader stack, turn it back on. */
   if (shader != NULL)
     clutter_shader_set_is_enabled (shader, TRUE);
+#endif
 }
 
 static void
diff --git a/clutter/clutter-texture.h b/clutter/clutter-texture.h
index 690a8c1..4c722ef 100644
--- a/clutter/clutter-texture.h
+++ b/clutter/clutter-texture.h
@@ -30,6 +30,7 @@
 
 #include <cogl/cogl.h>
 #include <clutter/clutter-actor.h>
+#include <clutter/clutter-cogl-compat.h>
 
 G_BEGIN_DECLS
 
diff --git a/configure.ac b/configure.ac
index abd8079..07ffef1 100644
--- a/configure.ac
+++ b/configure.ac
@@ -137,6 +137,7 @@ AC_HEADER_STDC
 # required versions for dependencies
 m4_define([glib_req_version],           [2.31.19])
 m4_define([cogl_req_version],           [1.9.6])
+m4_define([cogl2_req_version],          [1.99.1])
 m4_define([json_glib_req_version],      [0.12.0])
 m4_define([atk_req_version],            [2.1.5])
 m4_define([cairo_req_version],          [1.10])
@@ -150,6 +151,7 @@ m4_define([gdk_req_version],            [3.3.18])
 
 AC_SUBST([GLIB_REQ_VERSION],       [glib_req_version])
 AC_SUBST([COGL_REQ_VERSION],       [cogl_req_version])
+AC_SUBST([COGL2_REQ_VERSION],      [cogl2_req_version])
 AC_SUBST([JSON_GLIB_REQ_VERSION],  [json_glib_req_version])
 AC_SUBST([ATK_REQ_VERSION],        [atk_req_version])
 AC_SUBST([CAIRO_REQ_VERSION],      [cairo_req_version])
@@ -204,8 +206,19 @@ CLUTTER_CONFIG_DEFINES=
 experimental_backend=no
 experimental_input_backend=no
 
+# Should Cogl 2.0 be used? This will break ABI/API
+AC_ARG_ENABLE([cogl2],
+              [AS_HELP_STRING([--enable-cogl2],
+                              [Use Cogl 2.0 instead of 1.0. This will effectively be an API break])],
+              [enable_cogl2=$enableval],
+              [enable_cogl2=no])
+
+AS_IF([test "x$enable_cogl2" = "xyes"],
+      [COGL_PC_FILE="cogl2 >= $COGL2_REQ_VERSION cogl-pango2"],
+      [COGL_PC_FILE="cogl-1.0 >= $COGL_REQ_VERSION cogl-pango-1.0"])
+
 # base dependencies for core
-CLUTTER_BASE_PC_FILES="cogl-1.0 >= $COGL_REQ_VERSION cairo-gobject >= $CAIRO_REQ_VERSION atk >= $ATK_REQ_VERSION pangocairo >= $PANGO_REQ_VERSION cogl-pango-1.0 json-glib-1.0 >= $JSON_GLIB_REQ_VERSION"
+CLUTTER_BASE_PC_FILES="$COGL_PC_FILE cairo-gobject >= $CAIRO_REQ_VERSION atk >= $ATK_REQ_VERSION pangocairo >= $PANGO_REQ_VERSION json-glib-1.0 >= $JSON_GLIB_REQ_VERSION"
 
 # private base dependencies
 CLUTTER_BASE_PC_FILES_PRIVATE=""
@@ -483,6 +496,7 @@ AM_CONDITIONAL(SUPPORT_CEX100,  [test "x$SUPPORT_CEX100" = "x1"])
 AM_CONDITIONAL(SUPPORT_WAYLAND, [test "x$SUPPORT_WAYLAND" = "x1"])
 
 AM_CONDITIONAL(USE_COGL,  [test "x$SUPPORT_COGL" = "x1"])
+AM_CONDITIONAL(USE_COGL2, [test "x$enable_cogl2" = "xyes"])
 AM_CONDITIONAL(USE_TSLIB, [test "x$have_tslib" = "xyes"])
 AM_CONDITIONAL(USE_EVDEV, [test "x$have_evdev" = "xyes"])
 AM_CONDITIONAL(USE_GLD,   [test "x$have_gdl" = "xyes"])
@@ -550,6 +564,11 @@ AS_IF([test "x$SUPPORT_WAYLAND" = "x1"],
 CLUTTER_CONFIG_DEFINES="$CLUTTER_CONFIG_DEFINES
 #define CLUTTER_INPUT_NULL \"null\""
 
+# whether to use Cogl 2.0
+AS_IF([test "x$enable_cogl2" = "xyes"],
+      [CLUTTER_CONFIG_DEFINES="$CLUTTER_CONFIG_DEFINES
+#define CLUTTER_COGL2 1"])
+
 AC_SUBST([CLUTTER_CONFIG_DEFINES])
 
 dnl === Clutter substitutions kept for backwards compatibility ================
@@ -1205,10 +1224,18 @@ echo ""
 echo "     - Wayland compositor support enabled (WARNING: Experimental)"
 fi
 
+if test "x$enable_cogl2" = "xyes"; then
+echo ""
+echo "     - Cogl 2.0 support enabled (WARNING: Experimental)"
+echo "       ***This will make the build API incompatible with other builds***"
+fi
+
 echo ""
 
 # General warning about experimental features
-if test "x$experimental_backend" = "xyes"; then
+if test "x$experimental_backend" = "xyes" -o \
+        "x$experimental_input_backend" = "xyes" -o \
+        "x$enable_cogl2" = "xyes"; then
 echo ""
 echo "âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ"
 echo "*WARNING* *WARNING* *WARNING* *WARNING* *WARNING* *WARNING* *WARNING*"
diff --git a/tests/conform/Makefile.am b/tests/conform/Makefile.am
index 5d5cf3b..b6addc4 100644
--- a/tests/conform/Makefile.am
+++ b/tests/conform/Makefile.am
@@ -27,23 +27,29 @@ units_sources += \
 
 # cogl tests
 units_sources += \
-	test-cogl-fixed.c 			\
-	test-cogl-materials.c			\
 	test-cogl-viewport.c			\
-	test-cogl-multitexture.c        	\
 	test-cogl-npot-texture.c        	\
-	test-cogl-object.c			\
-	test-cogl-premult.c			\
 	test-cogl-readpixels.c			\
 	test-cogl-texture-get-set-data.c 	\
+	test-cogl-atlas-migration.c		\
+	$(NULL)
+
+# These tests need some work to compile when --enable-cogl2 is enabled
+if !USE_COGL2
+units_sources += \
+	test-cogl-fixed.c			\
+	test-cogl-materials.c			\
+	test-cogl-multitexture.c        	\
+	test-cogl-object.c	        	\
+	test-cogl-premult.c			\
 	test-cogl-texture-mipmaps.c     	\
-	test-cogl-texture-pixmap-x11.c  	\
 	test-cogl-texture-rectangle.c   	\
-	test-cogl-atlas-migration.c		\
-	test-cogl-vertex-buffer-contiguous.c 	\
+	test-cogl-texture-pixmap-x11.c  	\
 	test-cogl-vertex-buffer-interleved.c 	\
+	test-cogl-vertex-buffer-contiguous.c 	\
 	test-cogl-vertex-buffer-mutability.c 	\
 	$(NULL)
+endif
 
 # actors tests
 units_sources += \
@@ -55,20 +61,26 @@ units_sources += \
 	actor-layout.c			\
 	actor-offscreen-redirect.c	\
 	actor-paint-opacity.c 		\
-	actor-pick.c 			\
-	actor-shader-effect.c		\
+	actor-shader-effect.c 		\
 	actor-size.c			\
 	binding-pool.c			\
 	cairo-texture.c    		\
 	group.c				\
 	path.c 				\
 	rectangle.c 			\
-	texture-fbo.c			\
 	texture.c			\
         text-cache.c               	\
         text.c             		\
 	$(NULL)
 
+# These tests need some work to compile when --enable-cogl2 is enabled
+if !USE_COGL2
+units_sources += \
+	actor-pick.c 			\
+	texture-fbo.c			\
+	$(NULL)
+endif
+
 # objects tests
 units_sources += \
 	color.c				\
@@ -101,6 +113,7 @@ stamp-test-conformance: Makefile $(srcdir)/test-conform-main.c
 	@mkdir -p wrappers
 	@sed -n \
 		-e 's/^ \{1,\}TEST_CONFORM_SIMPLE *(.*"\([^",]\{1,\}\)", *\([a-zA-Z0-9_]\{1,\}\).*/\/conform\1\/\2/p' \
+		-e 's/^ \{1,\}TEST_CONFORM_COGL1 *(.*"\([^",]\{1,\}\)", *\([a-zA-Z0-9_]\{1,\}\).*/\/conform\1\/\2/p' \
 		-e 's/^ \{1,\}TEST_CONFORM_SKIP *(.*"\([^",]\{1,\}\)", *\([a-zA-Z0-9_]\{1,\}\).*/\/conform\1\/\2/p' \
 		-e 's/^ \{1,\}TEST_CONFORM_TODO *(.*"\([^",]\{1,\}\)", *\([a-zA-Z0-9_]\{1,\}\).*/\/conform\1\/\2/p' \
 	$(srcdir)/test-conform-main.c > unit-tests
diff --git a/tests/conform/actor-shader-effect.c b/tests/conform/actor-shader-effect.c
index de0e8be..7a69514 100644
--- a/tests/conform/actor-shader-effect.c
+++ b/tests/conform/actor-shader-effect.c
@@ -190,6 +190,8 @@ foo_another_new_shader_effect_init (FooAnotherNewShaderEffect *self)
  clutter_shader_effect_get_program
  ****************************************************************/
 
+#ifndef CLUTTER_COGL2
+
 static const gchar
 foo_manual_shader_effect_source[] =
   "\n"
@@ -255,6 +257,8 @@ foo_manual_shader_effect_init (FooManualShaderEffect *self)
 {
 }
 
+#endif /* CLUTTER_COGL2 */
+
 /****************************************************************/
 
 static ClutterActor *
@@ -298,8 +302,11 @@ paint_cb (ClutterActor *stage)
   g_assert_cmpint (get_pixel (250, 50), ==, 0xff00ff);
   /* new shader effect */
   g_assert_cmpint (get_pixel (350, 50), ==, 0x00ffff);
+
+#ifndef CLUTTER_COGL2
   /* manual shader effect */
   g_assert_cmpint (get_pixel (450, 50), ==, 0x800000);
+#endif /* CLUTTER_COGL2 */
 
   clutter_main_quit ();
 }
@@ -331,9 +338,11 @@ actor_shader_effect (TestConformSimpleFixture *fixture,
   clutter_actor_set_x (rect, 300);
   clutter_container_add_actor (CLUTTER_CONTAINER (stage), rect);
 
+#ifndef CLUTTER_COGL2
   rect = make_actor (foo_manual_shader_effect_get_type ());
   clutter_actor_set_x (rect, 400);
   clutter_container_add_actor (CLUTTER_CONTAINER (stage), rect);
+#endif /* CLUTTER_COGL2 */
 
   clutter_actor_show (stage);
 
diff --git a/tests/conform/test-conform-main.c b/tests/conform/test-conform-main.c
index 04536ae..e214a3d 100644
--- a/tests/conform/test-conform-main.c
+++ b/tests/conform/test-conform-main.c
@@ -60,6 +60,15 @@ static TestConformSharedState *shared_state = NULL;
 	      FUNC,                                                     \
 	      test_conform_simple_fixture_teardown);    } G_STMT_END
 
+/* These tests require Cogl 1.x */
+#if CLUTTER_COGL2
+#define TEST_CONFORM_COGL1(NAMESPACE, FUNC) \
+  G_STMT_START { } G_STMT_END
+#else /* CLUTTER_COGL2 */
+#define TEST_CONFORM_COGL1(NAMESPACE, FUNC) \
+  TEST_CONFORM_SIMPLE(NAMESPACE, FUNC)
+#endif /* CLUTTER_COGL2 */
+
 /* this is a macro that conditionally executes a test if CONDITION
  * evaluates to TRUE; otherwise, it will put the test under the
  * "/skipped" namespace and execute a dummy function that will always
@@ -139,7 +148,7 @@ main (int argc, char **argv)
   TEST_CONFORM_SIMPLE ("/actor", actor_container_signals);
   TEST_CONFORM_SIMPLE ("/actor", actor_destruction);
   TEST_CONFORM_SIMPLE ("/actor", actor_anchors);
-  TEST_CONFORM_SIMPLE ("/actor", actor_pick);
+  TEST_CONFORM_COGL1 ("/actor", actor_pick);
   TEST_CONFORM_SIMPLE ("/actor", actor_fixed_size);
   TEST_CONFORM_SIMPLE ("/actor", actor_preferred_size);
   TEST_CONFORM_SIMPLE ("/actor", actor_basic_layout);
@@ -185,7 +194,7 @@ main (int argc, char **argv)
   TEST_CONFORM_SIMPLE ("/rectangle", rectangle_set_color);
 
   TEST_CONFORM_SIMPLE ("/texture", texture_pick_with_alpha);
-  TEST_CONFORM_SIMPLE ("/texture", texture_fbo);
+  TEST_CONFORM_COGL1 ("/texture", texture_fbo);
   TEST_CONFORM_SIMPLE ("/texture/cairo", texture_cairo);
 
   TEST_CONFORM_SIMPLE ("/path", path_base);
@@ -234,23 +243,23 @@ main (int argc, char **argv)
   /* FIXME - see bug https://bugzilla.gnome.org/show_bug.cgi?id=655588 */
   TEST_CONFORM_TODO ("/cally", cally_text);
 
-  TEST_CONFORM_SIMPLE ("/cogl", test_cogl_object);
-  TEST_CONFORM_SIMPLE ("/cogl", test_cogl_fixed);
-  TEST_CONFORM_SIMPLE ("/cogl", test_cogl_materials);
-  TEST_CONFORM_SIMPLE ("/cogl", test_cogl_premult);
+  TEST_CONFORM_COGL1 ("/cogl", test_cogl_object);
+  TEST_CONFORM_COGL1 ("/cogl", test_cogl_fixed);
+  TEST_CONFORM_COGL1 ("/cogl", test_cogl_materials);
+  TEST_CONFORM_COGL1 ("/cogl", test_cogl_premult);
   TEST_CONFORM_SIMPLE ("/cogl", test_cogl_readpixels);
 
   TEST_CONFORM_SIMPLE ("/cogl/texture", test_cogl_npot_texture);
-  TEST_CONFORM_SIMPLE ("/cogl/texture", test_cogl_multitexture);
-  TEST_CONFORM_SIMPLE ("/cogl/texture", test_cogl_texture_mipmaps);
-  TEST_CONFORM_SIMPLE ("/cogl/texture", test_cogl_texture_rectangle);
-  TEST_CONFORM_SIMPLE ("/cogl/texture", test_cogl_texture_pixmap_x11);
+  TEST_CONFORM_COGL1 ("/cogl/texture", test_cogl_multitexture);
+  TEST_CONFORM_COGL1 ("/cogl/texture", test_cogl_texture_mipmaps);
+  TEST_CONFORM_COGL1 ("/cogl/texture", test_cogl_texture_rectangle);
+  TEST_CONFORM_COGL1 ("/cogl/texture", test_cogl_texture_pixmap_x11);
   TEST_CONFORM_SIMPLE ("/cogl/texture", test_cogl_texture_get_set_data);
   TEST_CONFORM_SIMPLE ("/cogl/texture", test_cogl_atlas_migration);
 
-  TEST_CONFORM_SIMPLE ("/cogl/vertex-buffer", test_cogl_vertex_buffer_contiguous);
-  TEST_CONFORM_SIMPLE ("/cogl/vertex-buffer", test_cogl_vertex_buffer_interleved);
-  TEST_CONFORM_SIMPLE ("/cogl/vertex-buffer", test_cogl_vertex_buffer_mutability);
+  TEST_CONFORM_COGL1 ("/cogl/vertex-buffer", test_cogl_vertex_buffer_contiguous);
+  TEST_CONFORM_COGL1 ("/cogl/vertex-buffer", test_cogl_vertex_buffer_interleved);
+  TEST_CONFORM_COGL1 ("/cogl/vertex-buffer", test_cogl_vertex_buffer_mutability);
 
   /* left to the end because they aren't currently very orthogonal and tend to
    * break subsequent tests! */
diff --git a/tests/interactive/Makefile.am b/tests/interactive/Makefile.am
index 72b545d..7c1c650 100644
--- a/tests/interactive/Makefile.am
+++ b/tests/interactive/Makefile.am
@@ -12,23 +12,16 @@ UNIT_TESTS = \
 	test-threads.c \
 	test-script.c \
 	test-grab.c \
-	test-cogl-shader-arbfp.c \
-	test-cogl-shader-glsl.c \
 	test-animator.c \
 	test-state.c \
 	test-state-animator.c \
 	test-fbo.c \
 	test-multistage.c \
-	test-cogl-primitives.c \
 	test-cogl-tex-tile.c \
 	test-cogl-tex-convert.c \
 	test-cogl-tex-foreign.c \
 	test-cogl-tex-getset.c \
-	test-cogl-offscreen.c \
-	test-cogl-tex-polygon.c \
-	test-cogl-multitexture.c \
 	test-stage-read-pixels.c \
-	test-clip.c \
 	test-paint-wrapper.c \
 	test-texture-quality.c \
 	test-layout.c \
@@ -39,15 +32,12 @@ UNIT_TESTS = \
         test-text-field.c \
 	test-cairo-clock.c \
 	test-cairo-flowers.c \
-	test-cogl-vertex-buffer.c \
 	test-flow-layout.c \
 	test-box-layout.c \
 	test-stage-sizing.c \
 	test-drag.c \
-	test-constraints.c \
 	test-scrolling.c \
 	test-swipe-action.c \
-	test-cogl-point-sprites.c \
 	test-table-layout.c \
 	test-path-constraint.c \
 	test-snap-constraint.c \
@@ -61,6 +51,21 @@ UNIT_TESTS = \
 	test-keyframe-transition.c \
 	test-scroll-actor.c
 
+# These tests need some work to compile when --enable-cogl2 is enabled
+if !USE_COGL2
+UNIT_TESTS += \
+	test-cogl-primitives.c \
+	test-cogl-shader-arbfp.c \
+	test-cogl-shader-glsl.c \
+	test-cogl-offscreen.c \
+	test-cogl-tex-polygon.c \
+	test-cogl-multitexture.c \
+	test-clip.c \
+	test-constraints.c \
+	test-cogl-vertex-buffer.c \
+	test-cogl-point-sprites.c
+endif
+
 if X11_TESTS
 UNIT_TESTS += test-pixmap.c
 endif



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]