Great!

Carlos, you rock :)

2012/10/3 Carlos López González <genet...@gmail.com>

> Hi!
> This morning I came out with another simper solution for the STRAIGHT
> method!
> It is very exciting!
> The code I previously figured out was this:
>
> /////////////////////////////////////// OLD CODE
> cairo_save(cr);
>
> // This part would retrieve the current passed surface and copy it on
> destimage
> cairo_surface_t* dest=cairo_get_target(cr);
> cairo_surface_flush(dest);
> cairo_surface_t* destimage=cairo_surface_map_to_image(dest, NULL);
>
> // Then using destimage width and height create newdest
> int w=cairo_image_surface_get_width(destimage);
> int h=cairo_image_surface_get_height(destimage);
> cairo_surface_t* newdest=cairo_image_surface_create(CAIRO_FORMAT_ARGB32,
> w, h);
>
> // Now I paint destimage to newdest with a 1.0 -alpha mask
> cairo_t* destcr=cairo_create(newdest);
> cairo_set_source_surface(destcr, destimage, 0, 0);
> cairo_paint_with_alpha(destcr, 1.0-alpha);
> cairo_destroy(destcr);
>
> // Here I rewrite the newdest to destimage
> destcr=cairo_create(destimage);
> cairo_set_source_surface(destcr, newdest, 0, 0);
> cairo_set_operator(destcr, CAIRO_OPERATOR_SOURCE);
> cairo_paint(destcr);
> cairo_destroy(destcr);
>
> // and update the cr target (dest)
> cairo_surface_unmap_image(dest, destimage);
> cairo_surface_mark_dirty(dest);
>
> // destroy and restore
> cairo_surface_destroy(newdest);
> cairo_restore(cr);
>
> // Finally I paint with he ADD operator using alpha for the current
> cairo_t commands
> cairo_set_operator(cr, CAIRO_OPERATOR_ADD);
> cairo_paint_with_alpha(cr, alpha);
>
> ////////////////////////////// OLD CODE - end
>
> And I asked my self: Is there other way to fade out a given surface?
> The solution I did was: extract image, paint with 1.0-alpha, paint
> back and extract back.
>
> I think that I can directly paint on the given surface without need to
> map and unmap. Also I've found a way to fade out a surface in a single
> operation:
>
> // //////////////////////////////////// NEW CODE
> // First save the context status
> cairo_save(cr);
>
> // Second paint with the DEST_IN operator.
> // It would achieve the following result:
> // aR=aA*aB
> // xR=xB
> // which is exactly to fade out the destination surface
> // by the alpha of the source (1.0-alpha in this case)
> cairo_set_source_rgba(cr, 1.0, 1.0, 1.0, 1.0-alpha);
> cairo_set_operator(cr, CAIRO_OPERATOR_DEST_IN);
> cairo_paint(cr);
>
> // Then restore the cairo context
> cairo_restore(cr);
>
> // Then paint using the ADD operator and the alpha value
> cairo_set_operator(cr, CAIRO_OPERATOR_ADD);
> cairo_paint_with_alpha(cr, alpha);
> // //////////////////////////////////// NEW CODE end
>
> I cannot test it right now, but I'm very excited on I have found a way
> to perform the desired blending operation with atomic Cairo
> instructions!!
>
> Cheers!
>
> 2012/10/2 Carlos López González <genet...@gmail.com>:
> > Thanks Konstantin. Your backing helps a lot.
> >
> > I've finally figured out how to emulate the STRAIGHT blend method
> > operation in Cairo.
> > It is an important milestone because I'm confident on being able to
> > emulate the Synfig's
> > blend methods that aren't directly supported by Cairo just using a
> > combination of Cairo's operators.
> > This means that the performance when blending can have the full
> > benefit of use Cairo native API.
> > It is possible that some of the Synfig's blend methods gets difficult
> > to emulate or impossible but
> > I hope they would be the less used.
> >
> > Cheers!
> >
> > 2012/9/29 Konstantin Dmitriev <ksee.zelga...@gmail.com>:
> >> 2012/9/29 Carlos López González <genet...@gmail.com>:
> >>> Hi!
> >>> I've added Cairo support for Shade and Bevel layers.
> >>> Again the results are very similar but slightly slower. These kind of
> layers
> >>> that manipulate pixels directly doesn't seem to improve much using
> Cairo
> >>> colors. In fact they loose time doing some unwanted operations (due
> >>> premultiplied and due to need to convert alpha to a 0-1 range) that
> doesn't
> >>> compensate the supposed speed increase for handling unsigned char in
> memory.
> >>>
> >>> I've seen that there are room for some improvements in the Paste Canvas
> >>> layer because in Cairo I didn't clip the Paste Canvas's canvas's
> context
> >>> because I didn't understand what was doing the Software. Now that I
> know
> >>> more about Cairo and that I understand what does Paste Canvas do, I
> could
> >>> try to use clip in Cairo render and so the things should improve the
> speed
> >>> for all the encapsulated layers that have defined boundaries.
> >>
> >> Hi, Carlos!
> >> It's awesom to see such a progress.
> >> >From some moment this week I've got a strong feeling that  the
> >> finished cairo implementation is somewhere near, on the horizon. That
> >> is awesome. Of course, there's still a lot of work, I understand. But
> >> it will be such a significant step even if we will not gain desired
> >> speed increase!
> >> Please keep your hard work!
> >> Thank you!
> >> K.
> >>
> >>
> >>
> >> --
> >> http://morevnaproject.org/
> >>
> >>
> ------------------------------------------------------------------------------
> >> How fast is your code?
> >> 3 out of 4 devs don\\\'t know how their code performs in production.
> >> Find out how slow your code is with AppDynamics Lite.
> >> http://ad.doubleclick.net/clk;262219672;13503038;z?
> >> http://info.appdynamics.com/FreeJavaPerformanceDownload.html
> >> _______________________________________________
> >> Synfig-devl mailing list
> >> Synfig-devl@lists.sourceforge.net
> >> https://lists.sourceforge.net/lists/listinfo/synfig-devl
> >
> >
> >
> > --
> > Carlos
> > http://synfig.org
>
>
>
> --
> Carlos
> http://synfig.org
>
>
> ------------------------------------------------------------------------------
> Don't let slow site performance ruin your business. Deploy New Relic APM
> Deploy New Relic app performance management and know exactly
> what is happening inside your Ruby, Python, PHP, Java, and .NET app
> Try New Relic at no cost today and get our sweet Data Nerd shirt too!
> http://p.sf.net/sfu/newrelic-dev2dev
> _______________________________________________
> Synfig-devl mailing list
> Synfig-devl@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/synfig-devl
>
------------------------------------------------------------------------------
Don't let slow site performance ruin your business. Deploy New Relic APM
Deploy New Relic app performance management and know exactly
what is happening inside your Ruby, Python, PHP, Java, and .NET app
Try New Relic at no cost today and get our sweet Data Nerd shirt too!
http://p.sf.net/sfu/newrelic-dev2dev
_______________________________________________
Synfig-devl mailing list
Synfig-devl@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/synfig-devl

Reply via email to