cogl-clip-state: Adapt to experimental cogl2 API.
authorJasper St. Pierre <jstpierre@mecheye.net>
Wed, 2 Mar 2011 17:45:25 +0000 (12:45 -0500)
committerNeil Roberts <neil@linux.intel.com>
Thu, 10 Mar 2011 13:05:43 +0000 (13:05 +0000)
The current clip state implementation couldn't be used in
conjunction with the CoglPath experimental API.

http://bugzilla.clutter-project.org/show_bug.cgi?id=2594

Signed-off-by: Neil Roberts <neil@linux.intel.com>
clutter/cogl/cogl/Makefile.am
clutter/cogl/cogl/cogl-clip-state-private.h [new file with mode: 0644]
clutter/cogl/cogl/cogl-clip-state.c
clutter/cogl/cogl/cogl-clip-state.h
clutter/cogl/cogl/cogl-framebuffer-private.h
clutter/cogl/cogl/cogl.h
clutter/cogl/cogl/cogl2-clip-state.c [new file with mode: 0644]
clutter/cogl/cogl/cogl2-clip-state.h [new file with mode: 0644]

index e21426d..c6a7afa 100644 (file)
@@ -77,11 +77,13 @@ cogl_public_h = \
        $(srcdir)/cogl-indices.h                \
        $(srcdir)/cogl-attribute.h              \
        $(srcdir)/cogl-primitive.h              \
+       $(srcdir)/cogl-clip-state.h             \
        $(srcdir)/cogl.h                        \
        $(NULL)
 
 cogl_experimental_h = \
        $(srcdir)/cogl2-path.h                  \
+       $(srcdir)/cogl2-clip-state.h            \
        $(NULL)
 
 # driver sources
@@ -182,8 +184,11 @@ cogl_sources_c = \
        $(srcdir)/cogl-bitmap-pixbuf.c                  \
        $(srcdir)/cogl-clip-stack.h                     \
        $(srcdir)/cogl-clip-stack.c                     \
-       $(srcdir)/cogl-clip-state.h                     \
-       $(srcdir)/cogl-clip-state.c                     \
+       $(srcdir)/cogl-clip-state-private.h             \
+       $(srcdir)/cogl-clip-state.h                     \
+       $(srcdir)/cogl-clip-state.c                     \
+       $(srcdir)/cogl2-clip-state.h                    \
+       $(srcdir)/cogl2-clip-state.c                    \
        $(srcdir)/cogl-feature-private.h                \
        $(srcdir)/cogl-feature-private.c                \
        $(srcdir)/cogl-fixed.c                          \
diff --git a/clutter/cogl/cogl/cogl-clip-state-private.h b/clutter/cogl/cogl/cogl-clip-state-private.h
new file mode 100644 (file)
index 0000000..f77a166
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * Cogl
+ *
+ * An object oriented GL/GLES Abstraction/Utility Layer
+ *
+ * Copyright (C) 2007,2008,2009,2010 Intel Corporation.
+ *
+ * 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/>.
+ *
+ *
+ */
+
+#ifndef __COGL_CLIP_STATE_PRIVATE_H
+#define __COGL_CLIP_STATE_PRIVATE_H
+
+#include "cogl-clip-stack.h"
+
+typedef struct _CoglClipState CoglClipState;
+
+struct _CoglClipState
+{
+  /* Stack of CoglClipStacks */
+  GSList *stacks;
+};
+
+void
+_cogl_clip_state_init (CoglClipState *state);
+
+void
+_cogl_clip_state_destroy (CoglClipState *state);
+
+void
+_cogl_clip_state_flush (CoglClipState *clip_state);
+
+CoglClipStack *
+_cogl_clip_state_get_stack (CoglClipState *clip_state);
+
+void
+_cogl_clip_state_set_stack (CoglClipState *clip_state,
+                            CoglClipStack *clip_stack);
+
+#endif /* __COGL_CLIP_STATE_PRIVATE_H */
index a4a3b1a..475e4e3 100644 (file)
@@ -32,7 +32,7 @@
 
 #include "cogl.h"
 #include "cogl-clip-stack.h"
-#include "cogl-clip-state.h"
+#include "cogl-clip-state-private.h"
 #include "cogl-context.h"
 #include "cogl-internal.h"
 #include "cogl-framebuffer-private.h"
@@ -109,29 +109,17 @@ cogl_clip_push (float x_offset,
 void
 cogl_clip_push_from_path_preserve (void)
 {
-  CoglFramebuffer *framebuffer;
-  CoglClipState *clip_state;
-  CoglMatrix modelview_matrix;
-
   _COGL_GET_CONTEXT (ctx, NO_RETVAL);
-
-  framebuffer = _cogl_get_draw_buffer ();
-  clip_state = _cogl_framebuffer_get_clip_state (framebuffer);
-
-  cogl_get_modelview_matrix (&modelview_matrix);
-
-  clip_state->stacks->data =
-    _cogl_clip_stack_push_from_path (clip_state->stacks->data,
-                                     ctx->current_path,
-                                     &modelview_matrix);
+  cogl2_clip_push_from_path (ctx->current_path);
 }
 
+#undef cogl_clip_push_from_path
 void
 cogl_clip_push_from_path (void)
 {
   _COGL_GET_CONTEXT (ctx, NO_RETVAL);
 
-  cogl_clip_push_from_path_preserve ();
+  cogl2_clip_push_from_path (ctx->current_path);
 
   cogl_object_unref (ctx->current_path);
   ctx->current_path = cogl2_path_new ();
index 2358273..b51943f 100644 (file)
  *
  */
 
+#if !defined(__COGL_H_INSIDE__) && !defined(CLUTTER_COMPILATION)
+#error "Only <cogl/cogl.h> can be included directly."
+#endif
+
 #ifndef __COGL_CLIP_STATE_H
 #define __COGL_CLIP_STATE_H
 
-#include "cogl-clip-stack.h"
-
-typedef struct _CoglClipState CoglClipState;
-
-struct _CoglClipState
-{
-  /* Stack of CoglClipStacks */
-  GSList *stacks;
-};
+#include <cogl/cogl-types.h>
 
-void
-_cogl_clip_state_init (CoglClipState *state);
-
-void
-_cogl_clip_state_destroy (CoglClipState *state);
+G_BEGIN_DECLS
 
+/**
+ * cogl_clip_push_from_path:
+ *
+ * Sets a new clipping area using the current path. The current path
+ * is then cleared. The clipping area is intersected with the previous
+ * clipping area. To restore the previous clipping area, call
+ * cogl_clip_pop().
+ *
+ * Since: 1.0
+ */
 void
-_cogl_clip_state_flush (CoglClipState *clip_state);
+cogl_clip_push_from_path (void);
 
-CoglClipStack *
-_cogl_clip_state_get_stack (CoglClipState *clip_state);
-
-void
-_cogl_clip_state_set_stack (CoglClipState *clip_state,
-                            CoglClipStack *clip_stack);
+G_END_DECLS
 
 #endif /* __COGL_CLIP_STATE_H */
index 44fc84f..14a4d04 100644 (file)
@@ -26,7 +26,7 @@
 
 #include "cogl-handle.h"
 #include "cogl-matrix-stack.h"
-#include "cogl-clip-state.h"
+#include "cogl-clip-state-private.h"
 #include "cogl-journal-private.h"
 
 typedef enum _CoglFramebufferType {
index f3a3543..a7f9ea7 100644 (file)
 #include <cogl/cogl-primitives.h>
 #ifdef COGL_ENABLE_EXPERIMENTAL_2_0_API
 #include <cogl/cogl2-path.h>
+#include <cogl/cogl2-clip-state.h>
 #else
 #include <cogl/cogl-path.h>
+#include <cogl/cogl-clip-state.h>
 #endif
 #include <cogl/cogl-shader.h>
 #include <cogl/cogl-texture.h>
@@ -858,19 +860,6 @@ cogl_clip_push_rectangle (float x0,
                           float y1);
 
 /**
- * cogl_clip_push_from_path:
- *
- * Sets a new clipping area using the current path. The current path
- * is then cleared. The clipping area is intersected with the previous
- * clipping area. To restore the previous clipping area, call
- * cogl_clip_pop().
- *
- * Since: 1.0
- */
-void
-cogl_clip_push_from_path (void);
-
-/**
  * cogl_clip_push_from_path_preserve:
  *
  * Sets a new clipping area using the current path. The current path
diff --git a/clutter/cogl/cogl/cogl2-clip-state.c b/clutter/cogl/cogl/cogl2-clip-state.c
new file mode 100644 (file)
index 0000000..9b56ab9
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * Cogl
+ *
+ * An object oriented GL/GLES Abstraction/Utility Layer
+ *
+ * Copyright (C) 2007,2008,2009,2010 Intel Corporation.
+ *
+ * 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 "cogl.h"
+#include "cogl-clip-state-private.h"
+#include "cogl-framebuffer-private.h"
+#include "cogl-journal-private.h"
+
+void
+cogl2_clip_push_from_path (CoglPath *path)
+{
+  CoglFramebuffer *framebuffer;
+  CoglClipState *clip_state;
+  CoglMatrix modelview_matrix;
+
+  framebuffer = _cogl_get_draw_buffer ();
+  clip_state = _cogl_framebuffer_get_clip_state (framebuffer);
+
+  cogl_get_modelview_matrix (&modelview_matrix);
+
+  clip_state->stacks->data =
+    _cogl_clip_stack_push_from_path (clip_state->stacks->data,
+                                     path,
+                                     &modelview_matrix);
+}
diff --git a/clutter/cogl/cogl/cogl2-clip-state.h b/clutter/cogl/cogl/cogl2-clip-state.h
new file mode 100644 (file)
index 0000000..9239bb1
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * Cogl
+ *
+ * An object oriented GL/GLES Abstraction/Utility Layer
+ *
+ * Copyright (C) 2007,2008,2009,2010 Intel Corporation.
+ *
+ * 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/>.
+ *
+ *
+ */
+
+#if !defined(__COGL_H_INSIDE__) && !defined(CLUTTER_COMPILATION)
+#error "Only <cogl/cogl.h> can be included directly."
+#endif
+
+#ifndef __COGL2_CLIP_STATE_H
+#define __COGL2_CLIP_STATE_H
+
+#include <cogl/cogl-types.h>
+
+G_BEGIN_DECLS
+
+#define cogl_clip_push_from_path cogl2_clip_push_from_path
+/**
+ * cogl_clip_push_from_path:
+ * @path: The path to clip with.
+ *
+ * Sets a new clipping area using @path. The clipping area is intersected
+ * with the previous clipping area. To restore the previous clipping area,
+ * call cogl_clip_pop().
+ *
+ * Since: 1.8
+ * Stability: Unstable
+ */
+void
+cogl_clip_push_from_path (CoglPath *path);
+
+G_END_DECLS
+
+#endif /* __COGL2_CLIP_STATE_H */