-------- Original Message -------- Subject: Re: [cairo] filters/image processing Date: Fri, 24 Mar 2006 08:31:17 -0800 From: Carl Worth <cworth@...573...> To: MenTaLguY <mental@...3...>
On Fri, 24 Mar 2006 10:23:31 -0500, MenTaLguY wrote:
We've been discussing "Cairoification" in Inkscape recently again,
Sounds like fun!
If we adopt Cairo, should we expect to always have to implement things like e.g. gaussian blur ourselves using intermediate image surfaces, or will Cairo eventually provide image processing operations like that in ways which can be accelerated in hardware?
We already have an API for specifying that a given filter should be applied to a pattern, (cairo_pattern_set_filter), but the current selection of filters is fairly limited here. So I see two things that need to be done:
1) We need to add more filter types. Gaussian blur is an obvious first one that needs to be added, and something I've been giving some thought to lately. One trick with this is that it requires at least one parameter, so the current cairo_filter_t enum is not going to be sufficient.
Oh, look, there is even a CAIRO_FILTER_GAUSSIAN there already. I'm not sure if that does anything useful or not yet.
2) We need to add support for filtering the implicit masks that cairo generates. This is the right place to put a filter for doing something like a drop shadow or for applying what Xara calls "feathering" to a filled shape.
There's still a mask pattern involved here, but the user doesn't get to see it since it is implicitly created by cairo. So I think all we need here is a simple new API:
cairo_public void cairo_set_mask_filter (cairo_t *cr, cairo_filter_t filter);
(Modulo the same enum limitations we discussed above.) So this filter would be applied to the implicit masks created by cairo_stroke, _fill, _show_text, and _show_glyphs. It would not apply to cairo_mask where the user has a pointer to a pattern already and can call cairo_pattern_set_filter.
As for what filter types to add, I think that "can be accelerated in hardware" is a pretty good criterion for inclusion in cairo. I think we've got Gaussian blur stuff just sitting there waiting in some existing backends already.
As for a bunch of the other SVG filter types, I'm less confident that we'll see a lot of hardware support for them. I don't think it makes sense to complicate the cairo API for these if they're all going to end up in software anyway. (Though, if someone can convince programmable GPUs to do these, then there's a different question to be asked---so let me know if you know someone that has figured that out.)
-Carl
participants (1)
-
MenTaLguY