From: dooglus Date: Sat, 31 Mar 2007 20:32:57 +0000 (+0000) Subject: Don't waste time rendering layers which are completely obscured by solid-colour recta... X-Git-Url: https://git.pterodactylus.net/?a=commitdiff_plain;h=bf9a7016492069205a1e17b641f886c659f6b594;p=synfig.git Don't waste time rendering layers which are completely obscured by solid-colour rectangles. git-svn-id: http://svn.voria.com/code@400 1f10aa63-cdf2-0310-b900-c93c546f37ac --- diff --git a/synfig-core/trunk/src/modules/mod_geometry/rectangle.cpp b/synfig-core/trunk/src/modules/mod_geometry/rectangle.cpp index 9925751..d5b861c 100644 --- a/synfig-core/trunk/src/modules/mod_geometry/rectangle.cpp +++ b/synfig-core/trunk/src/modules/mod_geometry/rectangle.cpp @@ -456,12 +456,7 @@ Rectangle::accelerated_render(Context context,Surface *surface,int quality, cons return true; } - // Render what is behind us - if(!context.accelerated_render(surface,quality,renddesc,cb)) - { - if(cb)cb->error(strprintf(__FILE__"%d: Accelerated Renderer Failure",__LINE__)); - return false; - } + // not inverted int left(ceil_to_int((min[0]-tl[0])/pw)); int right(floor_to_int((max[0]-tl[0])/pw)); @@ -488,8 +483,25 @@ Rectangle::accelerated_render(Context context,Surface *surface,int quality, cons Surface::alpha_pen pen; // In the case where there is nothing to render... - if(right-left<0||bottom-top<0) + if (right < left || bottom < top) + return true; + + // optimisation - if the whole tile is covered by this rectangle, + // and the rectangle is a solid colour, we don't need to render + // what's behind us + if (is_solid_color() && top == 0 && left == 0 && bottom == h && right == w) + { + surface->set_wh(w,h); + surface->fill(color); return true; + } + + // Render what is behind us + if(!context.accelerated_render(surface,quality,renddesc,cb)) + { + if(cb)cb->error(strprintf(__FILE__"%d: Accelerated Renderer Failure",__LINE__)); + return false; + } if(right-left>0&&bottom-top>0) {