mirror of
https://gitlab.freedesktop.org/cairo/cairo.git
synced 2026-01-23 03:30:29 +01:00
gl: And enable subsurface caching of the clones
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
parent
5f6d3fe40b
commit
03be2019cd
1 changed files with 29 additions and 22 deletions
|
|
@ -86,31 +86,38 @@ _cairo_gl_subsurface_clone_operand_init (cairo_gl_operand_t *operand,
|
|||
|
||||
sub = (cairo_surface_subsurface_t *) src->surface;
|
||||
|
||||
status = _cairo_gl_context_acquire (dst->base.device, &ctx);
|
||||
if (unlikely (status))
|
||||
return status;
|
||||
if (sub->snapshot) {
|
||||
surface = (cairo_gl_surface_t *)
|
||||
cairo_surface_reference (sub->snapshot);
|
||||
} else {
|
||||
status = _cairo_gl_context_acquire (dst->base.device, &ctx);
|
||||
if (unlikely (status))
|
||||
return status;
|
||||
|
||||
surface = (cairo_gl_surface_t *)
|
||||
_cairo_gl_surface_create_scratch (ctx,
|
||||
sub->target->content,
|
||||
extents->width, extents->height);
|
||||
if (surface->base.status)
|
||||
return _cairo_gl_context_release (ctx, surface->base.status);
|
||||
surface = (cairo_gl_surface_t *)
|
||||
_cairo_gl_surface_create_scratch (ctx,
|
||||
sub->target->content,
|
||||
extents->width, extents->height);
|
||||
if (surface->base.status)
|
||||
return _cairo_gl_context_release (ctx, surface->base.status);
|
||||
|
||||
_cairo_pattern_init_for_surface (&local_pattern, sub->target);
|
||||
cairo_matrix_init_translate (&local_pattern.base.matrix,
|
||||
sub->extents.x, sub->extents.y);
|
||||
local_pattern.base.filter = CAIRO_FILTER_NEAREST;
|
||||
status = _cairo_surface_paint (&surface->base,
|
||||
CAIRO_OPERATOR_SOURCE,
|
||||
&local_pattern.base,
|
||||
NULL);
|
||||
_cairo_pattern_fini (&local_pattern.base);
|
||||
_cairo_pattern_init_for_surface (&local_pattern, sub->target);
|
||||
cairo_matrix_init_translate (&local_pattern.base.matrix,
|
||||
sub->extents.x, sub->extents.y);
|
||||
local_pattern.base.filter = CAIRO_FILTER_NEAREST;
|
||||
status = _cairo_surface_paint (&surface->base,
|
||||
CAIRO_OPERATOR_SOURCE,
|
||||
&local_pattern.base,
|
||||
NULL);
|
||||
_cairo_pattern_fini (&local_pattern.base);
|
||||
|
||||
status = _cairo_gl_context_release (ctx, status);
|
||||
if (unlikely (status)) {
|
||||
cairo_surface_destroy (&surface->base);
|
||||
return status;
|
||||
status = _cairo_gl_context_release (ctx, status);
|
||||
if (unlikely (status)) {
|
||||
cairo_surface_destroy (&surface->base);
|
||||
return status;
|
||||
}
|
||||
|
||||
_cairo_surface_subsurface_set_snapshot (&sub->base, &surface->base);
|
||||
}
|
||||
|
||||
attributes = &operand->texture.attributes;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue