Hi!
After the Warp layer bug hiatus I'm back on the Cairo render road. ^__^
I've been working on implement the Blur layer. Very interesting! This is
the summary of changes:

1) I've needed to add a new member function to the etl::surface:

void etl::surface::copy(const etl::surface &rhs);

to allow to copy one surface to other when both are already with the data
memory allocated. This would prevent to allocate memory for the receiving
surface (as the operator=() does) and so it can be used to copy one surface
to other when it is CairoSurface type.

2) CairoColor has an unsigned char value per channel. This makes CairoColor
unusable for accumulate values of colors like in a pixel subsampling or a
blur filter. I've created a CairoColorAccumulator class that is simply a
float color with interface to convert from and to CairoColor. From now on,
all the etl::surfaces and etl::generic_pen and derivatives must use
CairoColorAccumulator as Accumulator type when a CairoSurface is needed. It
is needed for the blur operations. Possibly it would improve some other
subsamplig areas.

3) I've added Cairo render support for the Blur layer. The gaussian blur
doesn't work yet because it needs some changes on the etl::gaussian*
templates. Currently gaussians templates expect to receive pointers to the
value_type of the etl::generic_pen class for further calculations on each
gaussian blur template. It is perfect for Color class but not for
CairoColor due to its value range limitation. Instead of expect a pointer
to the value_type, it should expect a pointer to the accumulator_type, that
is not typedefined yet. It will be my next commits.

For the performance results, in general, Cairo render is slower than
Software (as expected), basically because the calculations are the same
plus the needed operations to convert between CairoColorAccumulator and
CairoColor. Only Boxblur looks to be slightly faster in Cairo. Results are
very good in any case.

One thing that I particularly liked from this coding session is that I've
learned a lot of how the blurs operations are performed. This would allow
me to implement in the future a new blur type that would use variable size
on each pixel and so it could be possible to emulate differential blur in
one scene.

Well, that's all for today!
Cheers!

-- 
Carlos
http://synfig.org
------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Synfig-devl mailing list
Synfig-devl@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/synfig-devl

Reply via email to