summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--clutter/clutter/clutter-stage-view-private.h9
-rw-r--r--clutter/clutter/clutter-stage-view.c29
-rw-r--r--clutter/clutter/clutter-stage.c14
3 files changed, 42 insertions, 10 deletions
diff --git a/clutter/clutter/clutter-stage-view-private.h b/clutter/clutter/clutter-stage-view-private.h
index 2e5ad4c53..6b445448e 100644
--- a/clutter/clutter/clutter-stage-view-private.h
+++ b/clutter/clutter/clutter-stage-view-private.h
@@ -27,11 +27,20 @@ gboolean clutter_stage_view_is_dirty_viewport (ClutterStageView *view);
void clutter_stage_view_set_dirty_viewport (ClutterStageView *view,
gboolean dirty);
+void clutter_stage_view_set_viewport (ClutterStageView *view,
+ float x,
+ float y,
+ float width,
+ float height);
+
gboolean clutter_stage_view_is_dirty_projection (ClutterStageView *view);
void clutter_stage_view_set_dirty_projection (ClutterStageView *view,
gboolean dirty);
+void clutter_stage_view_set_projection (ClutterStageView *view,
+ const CoglMatrix *matrix);
+
void clutter_stage_view_add_redraw_clip (ClutterStageView *view,
const cairo_rectangle_int_t *clip);
diff --git a/clutter/clutter/clutter-stage-view.c b/clutter/clutter/clutter-stage-view.c
index 0aa92f3fb..3ebe9c445 100644
--- a/clutter/clutter/clutter-stage-view.c
+++ b/clutter/clutter/clutter-stage-view.c
@@ -363,6 +363,22 @@ clutter_stage_view_set_dirty_viewport (ClutterStageView *view,
priv->dirty_viewport = dirty;
}
+void
+clutter_stage_view_set_viewport (ClutterStageView *view,
+ float x,
+ float y,
+ float width,
+ float height)
+{
+ ClutterStageViewPrivate *priv =
+ clutter_stage_view_get_instance_private (view);
+ CoglFramebuffer *framebuffer;
+
+ priv->dirty_viewport = FALSE;
+ framebuffer = clutter_stage_view_get_framebuffer (view);
+ cogl_framebuffer_set_viewport (framebuffer, x, y, width, height);
+}
+
gboolean
clutter_stage_view_is_dirty_projection (ClutterStageView *view)
{
@@ -383,6 +399,19 @@ clutter_stage_view_set_dirty_projection (ClutterStageView *view,
}
void
+clutter_stage_view_set_projection (ClutterStageView *view,
+ const CoglMatrix *matrix)
+{
+ ClutterStageViewPrivate *priv =
+ clutter_stage_view_get_instance_private (view);
+ CoglFramebuffer *framebuffer;
+
+ priv->dirty_projection = FALSE;
+ framebuffer = clutter_stage_view_get_framebuffer (view);
+ cogl_framebuffer_set_projection_matrix (framebuffer, matrix);
+}
+
+void
clutter_stage_view_get_offscreen_transformation_matrix (ClutterStageView *view,
CoglMatrix *matrix)
{
diff --git a/clutter/clutter/clutter-stage.c b/clutter/clutter/clutter-stage.c
index 9657dc8b5..310da1744 100644
--- a/clutter/clutter/clutter-stage.c
+++ b/clutter/clutter/clutter-stage.c
@@ -3147,7 +3147,6 @@ _clutter_stage_maybe_setup_viewport (ClutterStage *stage,
ClutterStageView *view)
{
ClutterStagePrivate *priv = stage->priv;
- CoglFramebuffer *fb = clutter_stage_view_get_framebuffer (view);
if (clutter_stage_view_is_dirty_viewport (view))
{
@@ -3174,19 +3173,14 @@ _clutter_stage_maybe_setup_viewport (ClutterStage *stage,
viewport_y = roundf (priv->viewport[1] * fb_scale - viewport_offset_y);
viewport_width = roundf (priv->viewport[2] * fb_scale);
viewport_height = roundf (priv->viewport[3] * fb_scale);
- cogl_framebuffer_set_viewport (fb,
- viewport_x, viewport_y,
- viewport_width, viewport_height);
- clutter_stage_view_set_dirty_viewport (view, FALSE);
+ clutter_stage_view_set_viewport (view,
+ viewport_x, viewport_y,
+ viewport_width, viewport_height);
}
if (clutter_stage_view_is_dirty_projection (view))
- {
- cogl_framebuffer_set_projection_matrix (fb, &priv->projection);
-
- clutter_stage_view_set_dirty_projection (view, FALSE);
- }
+ clutter_stage_view_set_projection (view, &priv->projection);
}
#undef _DEG_TO_RAD