From bf9a7016492069205a1e17b641f886c659f6b594 Mon Sep 17 00:00:00 2001 From: dooglus Date: Sat, 31 Mar 2007 20:32:57 +0000 Subject: [PATCH] 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 --- .../trunk/src/modules/mod_geometry/rectangle.cpp | 26 ++++++++++++++++------ 1 file changed, 19 insertions(+), 7 deletions(-) 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) { -- 2.7.4