diff --git a/cogl-path/cogl-path.c b/cogl-path/cogl-path.c
index cde619657..aeceda23d 100644
--- a/cogl-path/cogl-path.c
+++ b/cogl-path/cogl-path.c
@@ -1471,7 +1471,6 @@ void
cogl_framebuffer_push_path_clip (CoglFramebuffer *framebuffer,
CoglPath *path)
{
- CoglClipState *clip_state = _cogl_framebuffer_get_clip_state (framebuffer);
CoglMatrixEntry *modelview_entry =
_cogl_framebuffer_get_modelview_entry (framebuffer);
CoglMatrixEntry *projection_entry =
@@ -1485,8 +1484,8 @@ cogl_framebuffer_push_path_clip (CoglFramebuffer *framebuffer,
framebuffer->viewport_height
};
- clip_state->stacks->data =
- _cogl_clip_stack_push_from_path (clip_state->stacks->data,
+ framebuffer->clip_stack =
+ _cogl_clip_stack_push_from_path (framebuffer->clip_stack,
path,
modelview_entry,
projection_entry,
diff --git a/cogl/Makefile.am b/cogl/Makefile.am
index 90c0c2eb3..9599d0a58 100644
--- a/cogl/Makefile.am
+++ b/cogl/Makefile.am
@@ -69,6 +69,7 @@ EXTRA_DIST += cogl-1.0.pc.in cogl-$(COGL_API_VERSION)-experimental.pc.in
DISTCLEANFILES += $(pc_files)
cogl_deprecated_h = \
+ $(srcdir)/deprecated/cogl-clip-state.h \
$(srcdir)/deprecated/cogl-fixed.h \
$(srcdir)/deprecated/cogl-material-compat.h \
$(srcdir)/deprecated/cogl-vertex-buffer.h \
@@ -111,7 +112,6 @@ cogl_experimental_h = \
$(srcdir)/cogl-indices.h \
$(srcdir)/cogl-attribute.h \
$(srcdir)/cogl-primitive.h \
- $(srcdir)/cogl-clip-state.h \
$(srcdir)/cogl-framebuffer.h \
$(srcdir)/cogl-onscreen.h \
$(srcdir)/cogl-frame-info.h \
@@ -261,9 +261,6 @@ cogl_sources_c = \
$(srcdir)/cogl-bitmap-pixbuf.c \
$(srcdir)/cogl-clip-stack.h \
$(srcdir)/cogl-clip-stack.c \
- $(srcdir)/cogl-clip-state-private.h \
- $(srcdir)/cogl-clip-state.h \
- $(srcdir)/cogl-clip-state.c \
$(srcdir)/cogl2-compatibility.c \
$(srcdir)/cogl-feature-private.h \
$(srcdir)/cogl-feature-private.c \
@@ -394,6 +391,7 @@ cogl_sources_c = \
$(srcdir)/cogl-closure-list.c \
$(srcdir)/cogl-fence.c \
$(srcdir)/cogl-fence-private.h \
+ $(srcdir)/deprecated/cogl-clip-state.c \
$(srcdir)/deprecated/cogl-fixed.c \
$(srcdir)/deprecated/cogl-vertex-buffer-private.h \
$(srcdir)/deprecated/cogl-vertex-buffer.c \
@@ -543,7 +541,7 @@ libcogl_la_LDFLAGS = \
-no-undefined \
-version-info @COGL_LT_CURRENT@:@COGL_LT_REVISION@:@COGL_LT_AGE@ \
-export-dynamic \
- -export-symbols-regex "^(cogl|_cogl_debug_flags|_cogl_atlas_new|_cogl_atlas_add_reorganize_callback|_cogl_atlas_reserve_space|_cogl_callback|_cogl_util_get_eye_planes_for_screen_poly|_cogl_atlas_texture_remove_reorganize_callback|_cogl_atlas_texture_add_reorganize_callback|_cogl_texture_foreach_sub_texture_in_region|_cogl_profile_trace_message|_cogl_context_get_default|_cogl_framebuffer_get_stencil_bits|_cogl_clip_stack_push_rectangle|_cogl_framebuffer_get_modelview_stack|_cogl_object_default_unref|_cogl_pipeline_foreach_layer_internal|_cogl_clip_stack_push_primitive|_cogl_buffer_unmap_for_fill_or_fallback|_cogl_framebuffer_draw_primitive|_cogl_debug_instances|_cogl_framebuffer_get_projection_stack|_cogl_pipeline_layer_get_texture|_cogl_buffer_map_for_fill_or_fallback|_cogl_framebuffer_get_clip_state|_cogl_texture_can_hardware_repeat|_cogl_pipeline_prune_to_n_layers|_cogl_primitive_draw|test_|unit_test_).*"
+ -export-symbols-regex "^(cogl|_cogl_debug_flags|_cogl_atlas_new|_cogl_atlas_add_reorganize_callback|_cogl_atlas_reserve_space|_cogl_callback|_cogl_util_get_eye_planes_for_screen_poly|_cogl_atlas_texture_remove_reorganize_callback|_cogl_atlas_texture_add_reorganize_callback|_cogl_texture_foreach_sub_texture_in_region|_cogl_profile_trace_message|_cogl_context_get_default|_cogl_framebuffer_get_stencil_bits|_cogl_clip_stack_push_rectangle|_cogl_framebuffer_get_modelview_stack|_cogl_object_default_unref|_cogl_pipeline_foreach_layer_internal|_cogl_clip_stack_push_primitive|_cogl_buffer_unmap_for_fill_or_fallback|_cogl_framebuffer_draw_primitive|_cogl_debug_instances|_cogl_framebuffer_get_projection_stack|_cogl_pipeline_layer_get_texture|_cogl_buffer_map_for_fill_or_fallback|_cogl_texture_can_hardware_repeat|_cogl_pipeline_prune_to_n_layers|_cogl_primitive_draw|test_|unit_test_).*"
libcogl_la_SOURCES = $(cogl_sources_c)
nodist_libcogl_la_SOURCES = $(BUILT_SOURCES)
diff --git a/cogl/cogl-clip-state-private.h b/cogl/cogl-clip-state-private.h
deleted file mode 100644
index e5e1488e0..000000000
--- a/cogl/cogl-clip-state-private.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * 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 .
- *
- *
- */
-
-#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);
-
-CoglClipStack *
-_cogl_clip_state_get_stack (CoglClipState *clip_state);
-
-void
-_cogl_clip_state_set_stack (CoglClipState *clip_state,
- CoglClipStack *clip_stack);
-
-void
-_cogl_clip_state_save_clip_stack (CoglClipState *clip_state);
-
-void
-_cogl_clip_state_restore_clip_stack (CoglClipState *clip_state);
-
-#endif /* __COGL_CLIP_STATE_PRIVATE_H */
diff --git a/cogl/cogl-clip-state.h b/cogl/cogl-clip-state.h
deleted file mode 100644
index 2d71fbf6a..000000000
--- a/cogl/cogl-clip-state.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * 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 .
- *
- *
- */
-
-#if !defined(__COGL_H_INSIDE__) && !defined(COGL_COMPILATION)
-#error "Only can be included directly."
-#endif
-
-#ifndef __COGL_CLIP_STATE_H
-#define __COGL_CLIP_STATE_H
-
-#include
-
-COGL_BEGIN_DECLS
-
-COGL_END_DECLS
-
-#endif /* __COGL_CLIP_STATE_H */
diff --git a/cogl/cogl-framebuffer-private.h b/cogl/cogl-framebuffer-private.h
index b180b75c5..52bd1cdff 100644
--- a/cogl/cogl-framebuffer-private.h
+++ b/cogl/cogl-framebuffer-private.h
@@ -26,12 +26,12 @@
#include "cogl-object-private.h"
#include "cogl-matrix-stack-private.h"
-#include "cogl-clip-state-private.h"
#include "cogl-journal-private.h"
#include "cogl-winsys-private.h"
#include "cogl-attribute-private.h"
#include "cogl-offscreen.h"
#include "cogl-gl-header.h"
+#include "cogl-clip-stack.h"
#ifdef COGL_HAS_XLIB_SUPPORT
#include
@@ -142,7 +142,7 @@ struct _CoglFramebuffer
int viewport_age;
int viewport_age_for_scissor_workaround;
- CoglClipState clip_state;
+ CoglClipStack *clip_stack;
CoglBool dither_enabled;
CoglBool depth_writing_enabled;
@@ -242,9 +242,6 @@ _cogl_framebuffer_clear_without_flush4f (CoglFramebuffer *framebuffer,
void
_cogl_framebuffer_mark_mid_scene (CoglFramebuffer *framebuffer);
-CoglClipState *
-_cogl_framebuffer_get_clip_state (CoglFramebuffer *framebuffer);
-
/*
* _cogl_framebuffer_get_clip_stack:
* @framebuffer: A #CoglFramebuffer
diff --git a/cogl/cogl-framebuffer.c b/cogl/cogl-framebuffer.c
index 7e3305b2d..3e5796b34 100644
--- a/cogl/cogl-framebuffer.c
+++ b/cogl/cogl-framebuffer.c
@@ -125,8 +125,7 @@ _cogl_framebuffer_init (CoglFramebuffer *framebuffer,
framebuffer->samples_per_pixel = 0;
- /* Initialise the clip stack */
- _cogl_clip_state_init (&framebuffer->clip_state);
+ framebuffer->clip_stack = NULL;
framebuffer->journal = _cogl_journal_new (framebuffer);
@@ -173,7 +172,7 @@ _cogl_framebuffer_free (CoglFramebuffer *framebuffer)
_cogl_fence_cancel_fences_for_framebuffer (framebuffer);
- _cogl_clip_state_destroy (&framebuffer->clip_state);
+ _cogl_clip_stack_unref (framebuffer->clip_stack);
cogl_object_unref (framebuffer->modelview_stack);
framebuffer->modelview_stack = NULL;
@@ -459,27 +458,19 @@ cogl_framebuffer_get_height (CoglFramebuffer *framebuffer)
return framebuffer->height;
}
-CoglClipState *
-_cogl_framebuffer_get_clip_state (CoglFramebuffer *framebuffer)
-{
- return &framebuffer->clip_state;
-}
-
CoglClipStack *
_cogl_framebuffer_get_clip_stack (CoglFramebuffer *framebuffer)
{
- CoglClipState *clip_state = _cogl_framebuffer_get_clip_state (framebuffer);
-
- return _cogl_clip_state_get_stack (clip_state);
+ return framebuffer->clip_stack;
}
void
_cogl_framebuffer_set_clip_stack (CoglFramebuffer *framebuffer,
CoglClipStack *stack)
{
- CoglClipState *clip_state = _cogl_framebuffer_get_clip_state (framebuffer);
-
- _cogl_clip_state_set_stack (clip_state, stack);
+ _cogl_clip_stack_ref (stack);
+ _cogl_clip_stack_unref (framebuffer->clip_stack);
+ framebuffer->clip_stack = stack;
}
void
@@ -1046,10 +1037,7 @@ static unsigned long
_cogl_framebuffer_compare_clip_state (CoglFramebuffer *a,
CoglFramebuffer *b)
{
- if (((a->clip_state.stacks == NULL || b->clip_state.stacks == NULL) &&
- a->clip_state.stacks != b->clip_state.stacks)
- ||
- a->clip_state.stacks->data != b->clip_state.stacks->data)
+ if (a->clip_stack != b->clip_stack)
return COGL_FRAMEBUFFER_STATE_CLIP;
else
return 0;
@@ -1959,10 +1947,8 @@ cogl_framebuffer_push_scissor_clip (CoglFramebuffer *framebuffer,
int width,
int height)
{
- CoglClipState *clip_state = _cogl_framebuffer_get_clip_state (framebuffer);
-
- clip_state->stacks->data =
- _cogl_clip_stack_push_window_rectangle (clip_state->stacks->data,
+ framebuffer->clip_stack =
+ _cogl_clip_stack_push_window_rectangle (framebuffer->clip_stack,
x, y, width, height);
if (framebuffer->context->current_draw_buffer == framebuffer)
@@ -1977,7 +1963,6 @@ cogl_framebuffer_push_rectangle_clip (CoglFramebuffer *framebuffer,
float x_2,
float y_2)
{
- CoglClipState *clip_state = _cogl_framebuffer_get_clip_state (framebuffer);
CoglMatrixEntry *modelview_entry =
_cogl_framebuffer_get_modelview_entry (framebuffer);
CoglMatrixEntry *projection_entry =
@@ -1991,8 +1976,8 @@ cogl_framebuffer_push_rectangle_clip (CoglFramebuffer *framebuffer,
framebuffer->viewport_height
};
- clip_state->stacks->data =
- _cogl_clip_stack_push_rectangle (clip_state->stacks->data,
+ framebuffer->clip_stack =
+ _cogl_clip_stack_push_rectangle (framebuffer->clip_stack,
x_1, y_1, x_2, y_2,
modelview_entry,
projection_entry,
@@ -2011,7 +1996,6 @@ cogl_framebuffer_push_primitive_clip (CoglFramebuffer *framebuffer,
float bounds_x2,
float bounds_y2)
{
- CoglClipState *clip_state = _cogl_framebuffer_get_clip_state (framebuffer);
CoglMatrixEntry *modelview_entry =
_cogl_framebuffer_get_modelview_entry (framebuffer);
CoglMatrixEntry *projection_entry =
@@ -2025,8 +2009,8 @@ cogl_framebuffer_push_primitive_clip (CoglFramebuffer *framebuffer,
framebuffer->viewport_height
};
- clip_state->stacks->data =
- _cogl_clip_stack_push_primitive (clip_state->stacks->data,
+ framebuffer->clip_stack =
+ _cogl_clip_stack_push_primitive (framebuffer->clip_stack,
primitive,
bounds_x1, bounds_y1,
bounds_x2, bounds_y2,
@@ -2042,31 +2026,7 @@ cogl_framebuffer_push_primitive_clip (CoglFramebuffer *framebuffer,
void
cogl_framebuffer_pop_clip (CoglFramebuffer *framebuffer)
{
- CoglClipState *clip_state = _cogl_framebuffer_get_clip_state (framebuffer);
-
- clip_state->stacks->data = _cogl_clip_stack_pop (clip_state->stacks->data);
-
- if (framebuffer->context->current_draw_buffer == framebuffer)
- framebuffer->context->current_draw_buffer_changes |=
- COGL_FRAMEBUFFER_STATE_CLIP;
-}
-
-void
-_cogl_framebuffer_save_clip_stack (CoglFramebuffer *framebuffer)
-{
- CoglClipState *clip_state = _cogl_framebuffer_get_clip_state (framebuffer);
- _cogl_clip_state_save_clip_stack (clip_state);
-
- if (framebuffer->context->current_draw_buffer == framebuffer)
- framebuffer->context->current_draw_buffer_changes |=
- COGL_FRAMEBUFFER_STATE_CLIP;
-}
-
-void
-_cogl_framebuffer_restore_clip_stack (CoglFramebuffer *framebuffer)
-{
- CoglClipState *clip_state = _cogl_framebuffer_get_clip_state (framebuffer);
- _cogl_clip_state_restore_clip_stack (clip_state);
+ framebuffer->clip_stack = _cogl_clip_stack_pop (framebuffer->clip_stack);
if (framebuffer->context->current_draw_buffer == framebuffer)
framebuffer->context->current_draw_buffer_changes |=
diff --git a/cogl/cogl.h b/cogl/cogl.h
index 940b7ddc2..5035a99d8 100644
--- a/cogl/cogl.h
+++ b/cogl/cogl.h
@@ -73,8 +73,8 @@
* 1.x only api...
*/
#ifndef COGL_ENABLE_EXPERIMENTAL_2_0_API
-#include
#include
+#include
#include
#include
#include
diff --git a/cogl/cogl1-context.h b/cogl/cogl1-context.h
index 48b6ce252..53c9783ae 100644
--- a/cogl/cogl1-context.h
+++ b/cogl/cogl1-context.h
@@ -731,228 +731,6 @@ COGL_DEPRECATED_IN_1_16
void
cogl_set_source_texture (CoglTexture *texture);
-
-/**
- * SECTION:cogl-clipping
- * @short_description: Fuctions for manipulating a stack of clipping regions
- *
- * To support clipping your geometry to rectangles or paths Cogl exposes a
- * stack based API whereby each clip region you push onto the stack is
- * intersected with the previous region.
- */
-
-/**
- * cogl_clip_push_window_rect:
- * @x_offset: left edge of the clip rectangle in window coordinates
- * @y_offset: top edge of the clip rectangle in window coordinates
- * @width: width of the clip rectangle
- * @height: height of the clip rectangle
- *
- * Specifies a rectangular clipping area for all subsequent drawing
- * operations. Any drawing commands that extend outside the rectangle
- * will be clipped so that only the portion inside the rectangle will
- * be displayed. The rectangle dimensions are not transformed by the
- * current model-view matrix.
- *
- * The rectangle is intersected with the current clip region. To undo
- * the effect of this function, call cogl_clip_pop().
- *
- * Deprecated: 1.16: Use cogl_framebuffer_push_scissor_clip() instead
- */
-COGL_DEPRECATED_IN_1_16_FOR (cogl_framebuffer_push_scissor_clip)
-void
-cogl_clip_push_window_rect (float x_offset,
- float y_offset,
- float width,
- float height);
-
-/**
- * cogl_clip_push_window_rectangle:
- * @x_offset: left edge of the clip rectangle in window coordinates
- * @y_offset: top edge of the clip rectangle in window coordinates
- * @width: width of the clip rectangle
- * @height: height of the clip rectangle
- *
- * Specifies a rectangular clipping area for all subsequent drawing
- * operations. Any drawing commands that extend outside the rectangle
- * will be clipped so that only the portion inside the rectangle will
- * be displayed. The rectangle dimensions are not transformed by the
- * current model-view matrix.
- *
- * The rectangle is intersected with the current clip region. To undo
- * the effect of this function, call cogl_clip_pop().
- *
- * Since: 1.2
- * Deprecated: 1.16: Use cogl_framebuffer_push_scissor_clip() instead
- */
-COGL_DEPRECATED_IN_1_16_FOR (cogl_framebuffer_push_scissor_clip)
-void
-cogl_clip_push_window_rectangle (int x_offset,
- int y_offset,
- int width,
- int height);
-
-/**
- * cogl_clip_push:
- * @x_offset: left edge of the clip rectangle
- * @y_offset: top edge of the clip rectangle
- * @width: width of the clip rectangle
- * @height: height of the clip rectangle
- *
- * Specifies a rectangular clipping area for all subsequent drawing
- * operations. Any drawing commands that extend outside the rectangle
- * will be clipped so that only the portion inside the rectangle will
- * be displayed. The rectangle dimensions are transformed by the
- * current model-view matrix.
- *
- * The rectangle is intersected with the current clip region. To undo
- * the effect of this function, call cogl_clip_pop().
- *
- * Deprecated: 1.16: The x, y, width, height arguments are inconsistent
- * with other API that specify rectangles in model space, and when used
- * with a coordinate space that puts the origin at the center and y+
- * extending up, it's awkward to use. Please use
- * cogl_framebuffer_push_rectangle_clip()
- */
-COGL_DEPRECATED_IN_1_16_FOR (cogl_framebuffer_push_rectangle_clip)
-void
-cogl_clip_push (float x_offset,
- float y_offset,
- float width,
- float height);
-
-/**
- * cogl_clip_push_rectangle:
- * @x0: x coordinate for top left corner of the clip rectangle
- * @y0: y coordinate for top left corner of the clip rectangle
- * @x1: x coordinate for bottom right corner of the clip rectangle
- * @y1: y coordinate for bottom right corner of the clip rectangle
- *
- * Specifies a rectangular clipping area for all subsequent drawing
- * operations. Any drawing commands that extend outside the rectangle
- * will be clipped so that only the portion inside the rectangle will
- * be displayed. The rectangle dimensions are transformed by the
- * current model-view matrix.
- *
- * The rectangle is intersected with the current clip region. To undo
- * the effect of this function, call cogl_clip_pop().
- *
- * Since: 1.2
- * Deprecated: 1.16: Use cogl_framebuffer_push_rectangle_clip()
- * instead
- */
-COGL_DEPRECATED_IN_1_16_FOR (cogl_framebuffer_push_rectangle_clip)
-void
-cogl_clip_push_rectangle (float x0,
- float y0,
- float x1,
- float y1);
-
-/**
- * cogl_clip_push_primitive:
- * @primitive: A #CoglPrimitive describing a flat 2D shape
- * @bounds_x1: x coordinate for the top-left corner of the primitives
- * bounds
- * @bounds_y1: y coordinate for the top-left corner of the primitives
- * bounds
- * @bounds_x2: x coordinate for the bottom-right corner of the primitives
- * bounds
- * @bounds_y2: y coordinate for the bottom-right corner of the
- * primitives bounds.
- *
- * Sets a new clipping area using a 2D shaped described with a
- * #CoglPrimitive. The shape must not contain self overlapping
- * geometry and must lie on a single 2D plane. A bounding box of the
- * 2D shape in local coordinates (the same coordinates used to
- * describe the shape) must be given. It is acceptable for the bounds
- * to be larger than the true bounds but behaviour is undefined if the
- * bounds are smaller than the true bounds.
- *
- * The primitive is transformed by the current model-view matrix and
- * the silhouette is intersected with the previous clipping area. To
- * restore the previous clipping area, call
- * cogl_clip_pop().
- *
- * Since: 1.10
- * Stability: unstable
- * Deprecated: 1.16: Use cogl_framebuffer_push_primitive_clip()
- * instead
- */
-COGL_DEPRECATED_IN_1_16_FOR (cogl_framebuffer_push_primitive_clip)
-void
-cogl_clip_push_primitive (CoglPrimitive *primitive,
- float bounds_x1,
- float bounds_y1,
- float bounds_x2,
- float bounds_y2);
-
-/**
- * cogl_clip_pop:
- *
- * Reverts the clipping region to the state before the last call to
- * cogl_clip_push().
- *
- * Deprecated: 1.16: Use cogl_framebuffer_pop_clip() instead
- */
-COGL_DEPRECATED_IN_1_16_FOR (cogl_framebuffer_pop_clip)
-void
-cogl_clip_pop (void);
-
-/**
- * cogl_clip_ensure:
- *
- * Ensures that the current clipping region has been set in GL. This
- * will automatically be called before any Cogl primitives but it
- * maybe be neccessary to call if you are using raw GL calls with
- * clipping.
- *
- * Deprecated: 1.2: Calling this function has no effect
- *
- * Since: 1.0
- */
-COGL_DEPRECATED
-void
-cogl_clip_ensure (void);
-
-/**
- * cogl_clip_stack_save:
- *
- * Save the entire state of the clipping stack and then clear all
- * clipping. The previous state can be returned to with
- * cogl_clip_stack_restore(). Each call to cogl_clip_push() after this
- * must be matched by a call to cogl_clip_pop() before calling
- * cogl_clip_stack_restore().
- *
- * Deprecated: 1.2: This was originally added to allow us to save the
- * clip stack when switching to an offscreen framebuffer, but it's
- * not necessary anymore given that framebuffers now own separate
- * clip stacks which will be automatically switched between when a
- * new buffer is set. Calling this function has no effect
- *
- * Since: 0.8.2
- */
-COGL_DEPRECATED
-void
-cogl_clip_stack_save (void);
-
-/**
- * cogl_clip_stack_restore:
- *
- * Restore the state of the clipping stack that was previously saved
- * by cogl_clip_stack_save().
- *
- * Deprecated: 1.2: This was originally added to allow us to restore
- * the clip stack when switching back from an offscreen framebuffer,
- * but it's not necessary anymore given that framebuffers now own
- * separate clip stacks which will be automatically switched between
- * when a new buffer is set. Calling this function has no effect
- *
- * Since: 0.8.2
- */
-COGL_DEPRECATED
-void
-cogl_clip_stack_restore (void);
-
/**
* cogl_set_framebuffer:
* @buffer: A #CoglFramebuffer object, either onscreen or offscreen.
diff --git a/cogl/cogl-clip-state.c b/cogl/deprecated/cogl-clip-state.c
similarity index 69%
rename from cogl/cogl-clip-state.c
rename to cogl/deprecated/cogl-clip-state.c
index 4b70f3f8f..7beee4602 100644
--- a/cogl/cogl-clip-state.c
+++ b/cogl/deprecated/cogl-clip-state.c
@@ -30,14 +30,13 @@
#include
+#include "cogl-clip-state.h"
#include "cogl-clip-stack.h"
-#include "cogl-clip-state-private.h"
#include "cogl-context-private.h"
#include "cogl-framebuffer-private.h"
#include "cogl-journal-private.h"
#include "cogl-util.h"
#include "cogl-matrix-private.h"
-#include "cogl-clip-state.h"
#include "cogl1-context.h"
#include "cogl-path/cogl-path.h"
@@ -108,13 +107,16 @@ cogl_clip_pop (void)
void
cogl_clip_stack_save (void)
{
- _cogl_framebuffer_save_clip_stack (cogl_get_draw_framebuffer ());
+ /* This function was just used to temporarily switch the clip stack
+ * when using an offscreen buffer. This is no longer needed because
+ * each framebuffer maintains its own clip stack. The function is
+ * documented to do nothing since version 1.2 */
}
void
cogl_clip_stack_restore (void)
{
- _cogl_framebuffer_restore_clip_stack (cogl_get_draw_framebuffer ());
+ /* Do nothing. See cogl_clip_stack_save() */
}
/* XXX: This should never have been made public API! */
@@ -128,60 +130,3 @@ cogl_clip_ensure (void)
* nothing here.
*/
}
-
-void
-_cogl_clip_state_init (CoglClipState *clip_state)
-{
- _COGL_GET_CONTEXT (ctx, NO_RETVAL);
-
- clip_state->stacks = NULL;
-
- /* Add an intial stack */
- _cogl_clip_state_save_clip_stack (clip_state);
-}
-
-void
-_cogl_clip_state_destroy (CoglClipState *clip_state)
-{
- /* Destroy all of the stacks */
- while (clip_state->stacks)
- _cogl_clip_state_restore_clip_stack (clip_state);
-}
-
-CoglClipStack *
-_cogl_clip_state_get_stack (CoglClipState *clip_state)
-{
- return clip_state->stacks->data;
-}
-
-void
-_cogl_clip_state_set_stack (CoglClipState *clip_state,
- CoglClipStack *stack)
-{
- /* Replace the top of the stack of stacks */
- _cogl_clip_stack_ref (stack);
- _cogl_clip_stack_unref (clip_state->stacks->data);
- clip_state->stacks->data = stack;
-}
-
-void
-_cogl_clip_state_save_clip_stack (CoglClipState *clip_state)
-{
- clip_state->stacks = g_slist_prepend (clip_state->stacks, NULL);
-}
-
-void
-_cogl_clip_state_restore_clip_stack (CoglClipState *clip_state)
-{
- CoglClipStack *stack;
-
- _COGL_RETURN_IF_FAIL (clip_state->stacks != NULL);
-
- stack = clip_state->stacks->data;
-
- _cogl_clip_stack_unref (stack);
-
- /* Revert to an old stack */
- clip_state->stacks = g_slist_delete_link (clip_state->stacks,
- clip_state->stacks);
-}
diff --git a/cogl/deprecated/cogl-clip-state.h b/cogl/deprecated/cogl-clip-state.h
new file mode 100644
index 000000000..b4662bcef
--- /dev/null
+++ b/cogl/deprecated/cogl-clip-state.h
@@ -0,0 +1,259 @@
+/*
+ * Cogl
+ *
+ * An object oriented GL/GLES Abstraction/Utility Layer
+ *
+ * Copyright (C) 2010,2013 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 .
+ *
+ *
+ */
+
+#if !defined(__COGL_H_INSIDE__) && !defined(COGL_COMPILATION)
+#error "Only can be included directly."
+#endif
+
+#ifndef __COGL_CLIP_STATE_H__
+#define __COGL_CLIP_STATE_H__
+
+#include
+#include
+#include
+
+COGL_BEGIN_DECLS
+
+/**
+ * SECTION:cogl-clipping
+ * @short_description: Fuctions for manipulating a stack of clipping regions
+ *
+ * To support clipping your geometry to rectangles or paths Cogl exposes a
+ * stack based API whereby each clip region you push onto the stack is
+ * intersected with the previous region.
+ */
+
+/**
+ * cogl_clip_push_window_rectangle:
+ * @x_offset: left edge of the clip rectangle in window coordinates
+ * @y_offset: top edge of the clip rectangle in window coordinates
+ * @width: width of the clip rectangle
+ * @height: height of the clip rectangle
+ *
+ * Specifies a rectangular clipping area for all subsequent drawing
+ * operations. Any drawing commands that extend outside the rectangle
+ * will be clipped so that only the portion inside the rectangle will
+ * be displayed. The rectangle dimensions are not transformed by the
+ * current model-view matrix.
+ *
+ * The rectangle is intersected with the current clip region. To undo
+ * the effect of this function, call cogl_clip_pop().
+ *
+ * Since: 1.2
+ * Deprecated: 1.16: Use cogl_framebuffer_push_scissor_clip() instead
+ */
+COGL_DEPRECATED_IN_1_16_FOR (cogl_framebuffer_push_scissor_clip)
+void
+cogl_clip_push_window_rectangle (int x_offset,
+ int y_offset,
+ int width,
+ int height);
+
+/**
+ * cogl_clip_push_window_rect:
+ * @x_offset: left edge of the clip rectangle in window coordinates
+ * @y_offset: top edge of the clip rectangle in window coordinates
+ * @width: width of the clip rectangle
+ * @height: height of the clip rectangle
+ *
+ * Specifies a rectangular clipping area for all subsequent drawing
+ * operations. Any drawing commands that extend outside the rectangle
+ * will be clipped so that only the portion inside the rectangle will
+ * be displayed. The rectangle dimensions are not transformed by the
+ * current model-view matrix.
+ *
+ * The rectangle is intersected with the current clip region. To undo
+ * the effect of this function, call cogl_clip_pop().
+ *
+ * Deprecated: 1.16: Use cogl_framebuffer_push_scissor_clip() instead
+ */
+COGL_DEPRECATED_IN_1_16_FOR (cogl_framebuffer_push_scissor_clip)
+void
+cogl_clip_push_window_rect (float x_offset,
+ float y_offset,
+ float width,
+ float height);
+
+/**
+ * cogl_clip_push_rectangle:
+ * @x0: x coordinate for top left corner of the clip rectangle
+ * @y0: y coordinate for top left corner of the clip rectangle
+ * @x1: x coordinate for bottom right corner of the clip rectangle
+ * @y1: y coordinate for bottom right corner of the clip rectangle
+ *
+ * Specifies a rectangular clipping area for all subsequent drawing
+ * operations. Any drawing commands that extend outside the rectangle
+ * will be clipped so that only the portion inside the rectangle will
+ * be displayed. The rectangle dimensions are transformed by the
+ * current model-view matrix.
+ *
+ * The rectangle is intersected with the current clip region. To undo
+ * the effect of this function, call cogl_clip_pop().
+ *
+ * Since: 1.2
+ * Deprecated: 1.16: Use cogl_framebuffer_push_rectangle_clip()
+ * instead
+ */
+COGL_DEPRECATED_IN_1_16_FOR (cogl_framebuffer_push_rectangle_clip)
+void
+cogl_clip_push_rectangle (float x0,
+ float y0,
+ float x1,
+ float y1);
+
+/**
+ * cogl_clip_push:
+ * @x_offset: left edge of the clip rectangle
+ * @y_offset: top edge of the clip rectangle
+ * @width: width of the clip rectangle
+ * @height: height of the clip rectangle
+ *
+ * Specifies a rectangular clipping area for all subsequent drawing
+ * operations. Any drawing commands that extend outside the rectangle
+ * will be clipped so that only the portion inside the rectangle will
+ * be displayed. The rectangle dimensions are transformed by the
+ * current model-view matrix.
+ *
+ * The rectangle is intersected with the current clip region. To undo
+ * the effect of this function, call cogl_clip_pop().
+ *
+ * Deprecated: 1.16: The x, y, width, height arguments are inconsistent
+ * with other API that specify rectangles in model space, and when used
+ * with a coordinate space that puts the origin at the center and y+
+ * extending up, it's awkward to use. Please use
+ * cogl_framebuffer_push_rectangle_clip()
+ */
+COGL_DEPRECATED_IN_1_16_FOR (cogl_framebuffer_push_rectangle_clip)
+void
+cogl_clip_push (float x_offset,
+ float y_offset,
+ float width,
+ float height);
+
+/**
+ * cogl_clip_push_primitive:
+ * @primitive: A #CoglPrimitive describing a flat 2D shape
+ * @bounds_x1: x coordinate for the top-left corner of the primitives
+ * bounds
+ * @bounds_y1: y coordinate for the top-left corner of the primitives
+ * bounds
+ * @bounds_x2: x coordinate for the bottom-right corner of the primitives
+ * bounds
+ * @bounds_y2: y coordinate for the bottom-right corner of the
+ * primitives bounds.
+ *
+ * Sets a new clipping area using a 2D shaped described with a
+ * #CoglPrimitive. The shape must not contain self overlapping
+ * geometry and must lie on a single 2D plane. A bounding box of the
+ * 2D shape in local coordinates (the same coordinates used to
+ * describe the shape) must be given. It is acceptable for the bounds
+ * to be larger than the true bounds but behaviour is undefined if the
+ * bounds are smaller than the true bounds.
+ *
+ * The primitive is transformed by the current model-view matrix and
+ * the silhouette is intersected with the previous clipping area. To
+ * restore the previous clipping area, call
+ * cogl_clip_pop().
+ *
+ * Since: 1.10
+ * Stability: unstable
+ * Deprecated: 1.16: Use cogl_framebuffer_push_primitive_clip()
+ * instead
+ */
+COGL_DEPRECATED_IN_1_16_FOR (cogl_framebuffer_push_primitive_clip)
+void
+cogl_clip_push_primitive (CoglPrimitive *primitive,
+ float bounds_x1,
+ float bounds_y1,
+ float bounds_x2,
+ float bounds_y2);
+/**
+ * cogl_clip_pop:
+ *
+ * Reverts the clipping region to the state before the last call to
+ * cogl_clip_push().
+ *
+ * Deprecated: 1.16: Use cogl_framebuffer_pop_clip() instead
+ */
+COGL_DEPRECATED_IN_1_16_FOR (cogl_framebuffer_pop_clip)
+void
+cogl_clip_pop (void);
+
+/**
+ * cogl_clip_ensure:
+ *
+ * Ensures that the current clipping region has been set in GL. This
+ * will automatically be called before any Cogl primitives but it
+ * maybe be neccessary to call if you are using raw GL calls with
+ * clipping.
+ *
+ * Deprecated: 1.2: Calling this function has no effect
+ *
+ * Since: 1.0
+ */
+COGL_DEPRECATED
+void
+cogl_clip_ensure (void);
+
+/**
+ * cogl_clip_stack_save:
+ *
+ * Save the entire state of the clipping stack and then clear all
+ * clipping. The previous state can be returned to with
+ * cogl_clip_stack_restore(). Each call to cogl_clip_push() after this
+ * must be matched by a call to cogl_clip_pop() before calling
+ * cogl_clip_stack_restore().
+ *
+ * Deprecated: 1.2: This was originally added to allow us to save the
+ * clip stack when switching to an offscreen framebuffer, but it's
+ * not necessary anymore given that framebuffers now own separate
+ * clip stacks which will be automatically switched between when a
+ * new buffer is set. Calling this function has no effect
+ *
+ * Since: 0.8.2
+ */
+COGL_DEPRECATED
+void
+cogl_clip_stack_save (void);
+
+/**
+ * cogl_clip_stack_restore:
+ *
+ * Restore the state of the clipping stack that was previously saved
+ * by cogl_clip_stack_save().
+ *
+ * Deprecated: 1.2: This was originally added to allow us to restore
+ * the clip stack when switching back from an offscreen framebuffer,
+ * but it's not necessary anymore given that framebuffers now own
+ * separate clip stacks which will be automatically switched between
+ * when a new buffer is set. Calling this function has no effect
+ *
+ * Since: 0.8.2
+ */
+COGL_DEPRECATED
+void
+cogl_clip_stack_restore (void);
+
+COGL_END_DECLS
+
+#endif /* __COGL_CLIP_STATE_H__ */
diff --git a/cogl/driver/gl/cogl-framebuffer-gl.c b/cogl/driver/gl/cogl-framebuffer-gl.c
index 5749983da..68ac66158 100644
--- a/cogl/driver/gl/cogl-framebuffer-gl.c
+++ b/cogl/driver/gl/cogl-framebuffer-gl.c
@@ -148,8 +148,7 @@ _cogl_framebuffer_gl_flush_viewport_state (CoglFramebuffer *framebuffer)
static void
_cogl_framebuffer_gl_flush_clip_state (CoglFramebuffer *framebuffer)
{
- CoglClipStack *stack = _cogl_clip_state_get_stack (&framebuffer->clip_state);
- _cogl_clip_stack_flush (stack, framebuffer);
+ _cogl_clip_stack_flush (framebuffer->clip_stack, framebuffer);
}
static void