summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Oliveira <itrindade.oliveira@gmail.com>2010-06-20 10:39:10 -0400
committerIgor Oliveira <igor.oliveira@openbossa.org>2010-06-20 10:39:10 -0400
commitd47de5a9b2e8a0680f9ed2185656ae5d6d99c009 (patch)
tree697e01216b479de52d7471d128f1c65ef9e9bdac
parentbd11c8f410f702f80a9add7137b82522554c4c07 (diff)
DRM/Gallium3D: initial mask implementation
-rw-r--r--src/drm/cairo-drm-gallium-surface.c25
1 files changed, 14 insertions, 11 deletions
diff --git a/src/drm/cairo-drm-gallium-surface.c b/src/drm/cairo-drm-gallium-surface.c
index 7597b9f3..393c80f5 100644
--- a/src/drm/cairo-drm-gallium-surface.c
+++ b/src/drm/cairo-drm-gallium-surface.c
@@ -925,22 +925,25 @@ gallium_surface_paint (void *abstract_surface,
}
static cairo_int_status_t
-gallium_surface_mask (void *abstract_surface,
- cairo_operator_t op,
- const cairo_pattern_t *source,
- const cairo_pattern_t *mask,
- cairo_clip_t *clip)
+gallium_surface_mask (void *abstract_surface,
+ cairo_operator_t op,
+ const cairo_pattern_t *source,
+ const cairo_pattern_t *mask,
+ cairo_clip_t *clip)
{
gallium_surface_t *surface = abstract_surface;
+ cairo_status_t status = CAIRO_INT_STATUS_UNSUPPORTED;
- if (surface->fallback == NULL) {
- /* XXX insert magic */
- surface->fallback = gallium_surface_map_to_image (surface);
+ if (mask->type == CAIRO_PATTERN_TYPE_SOLID) {
+ cairo_solid_pattern_t *solid_mask = (cairo_solid_pattern_t *) mask;
+ float alpha = surface->paint.solid_color[4];
+
+ surface->paint.solid_color[4] = solid_mask->color.alpha;
+ status = gallium_surface_paint(abstract_surface, op, source, clip);
+ surface->paint.solid_color[4] = alpha;
}
- return _cairo_surface_mask (surface->fallback,
- op, source, mask,
- clip);
+ return status;
}
static cairo_int_status_t