static cairo_int_status_t _scissor_and_clip (cairo_gl_context_t *ctx, cairo_gl_composite_t *setup, cairo_composite_rectangles_t *composite, cairo_bool_t *used_stencil_buffer) { cairo_gl_surface_t *dst = (cairo_gl_surface_t *) composite->surface; cairo_rectangle_int_t *bounds = &composite->unbounded; cairo_clip_t *clip = composite->clip; cairo_rectangle_int_t r; *used_stencil_buffer = FALSE; if (_cairo_composite_rectangles_can_reduce_clip (composite, clip)) { _scissor_to_rectangle (dst, bounds); return CAIRO_INT_STATUS_SUCCESS; } /* If we cannot reduce the clip to a rectangular region, we scissor and clip using the stencil buffer */ if (clip->num_boxes > 1 || clip->path != NULL) { *used_stencil_buffer = TRUE; _scissor_to_rectangle (dst, bounds); return _draw_clip_to_stencil_buffer (ctx, setup, clip); } /* Always interpret the clip path as ANTIALIAS_NONE */ _cairo_box_round_to_rectangle (clip->boxes, &r); _scissor_to_rectangle (dst, &r); return CAIRO_INT_STATUS_SUCCESS; }
static void _cairo_gl_msaa_compositor_set_clip (cairo_composite_rectangles_t *composite, cairo_gl_composite_t *setup) { if (_cairo_composite_rectangles_can_reduce_clip (composite, composite->clip)) return; _cairo_gl_composite_set_clip (setup, composite->clip); }
static void _cairo_gl_msaa_compositor_set_clip (cairo_composite_rectangles_t *composite, cairo_gl_composite_t *setup) { uint32_t is_bounded; if (_cairo_clip_is_all_clipped (composite->clip)) return; /* We don't need to check CAIRO_OPERATOR_BOUND_BY_MASK in these situations. */ is_bounded = composite->is_bounded; composite->is_bounded = CAIRO_OPERATOR_BOUND_BY_SOURCE; if (_cairo_composite_rectangles_can_reduce_clip (composite, composite->clip)) return; _cairo_gl_composite_set_clip (setup, composite->clip); composite->is_bounded = is_bounded; }