CVSROOT: /cvsroot/gnash Module name: gnash Branch: release_0_7_2 Changes by: Udo Giacomozzi <udog> 06/11/04 12:24:36
Modified files: . : ChangeLog backend : render_handler_agg.cpp Log message: optimized screen clearing CVSWeb URLs: http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&only_with_tag=release_0_7_2&r1=1.1412.2.72&r2=1.1412.2.73 http://cvs.savannah.gnu.org/viewcvs/gnash/backend/render_handler_agg.cpp?cvsroot=gnash&only_with_tag=release_0_7_2&r1=1.29.2.11&r2=1.29.2.12 Patches: Index: ChangeLog =================================================================== RCS file: /cvsroot/gnash/gnash/ChangeLog,v retrieving revision 1.1412.2.72 retrieving revision 1.1412.2.73 diff -u -b -r1.1412.2.72 -r1.1412.2.73 --- ChangeLog 4 Nov 2006 10:52:44 -0000 1.1412.2.72 +++ ChangeLog 4 Nov 2006 12:24:35 -0000 1.1412.2.73 @@ -1,7 +1,7 @@ 2006-11-04 Udo Giacomozzi <[EMAIL PROTECTED]> * backend/render_handler_agg.cpp: removed compatibility include as - it is not enough anyway + it is not enough anyway; optimized screen clearing 2006-11-04 Markus Gothe <[EMAIL PROTECTED]> Index: backend/render_handler_agg.cpp =================================================================== RCS file: /cvsroot/gnash/gnash/backend/render_handler_agg.cpp,v retrieving revision 1.29.2.11 retrieving revision 1.29.2.12 diff -u -b -r1.29.2.11 -r1.29.2.12 --- backend/render_handler_agg.cpp 4 Nov 2006 10:52:44 -0000 1.29.2.11 +++ backend/render_handler_agg.cpp 4 Nov 2006 12:24:36 -0000 1.29.2.12 @@ -16,7 +16,7 @@ -/* $Id: render_handler_agg.cpp,v 1.29.2.11 2006/11/04 10:52:44 udog Exp $ */ +/* $Id: render_handler_agg.cpp,v 1.29.2.12 2006/11/04 12:24:36 udog Exp $ */ // Original version by Udo Giacomozzi and Hannes Mayr, // INDUNET GmbH (www.indunet.it) @@ -485,9 +485,9 @@ assert(m_pixf != NULL); // clear the stage using the background color - renderer_base rbase(*m_pixf); - rbase.clip_box(m_clip_xmin, m_clip_ymin, m_clip_xmax, m_clip_ymax); - rbase.clear(agg::rgba8(background_color.m_r, background_color.m_g, + clear_framebuffer(m_clip_xmin, m_clip_ymin, + m_clip_xmax-m_clip_xmin+1, m_clip_ymax-m_clip_ymin+1, + agg::rgba8(background_color.m_r, background_color.m_g, background_color.m_b, background_color.m_a)); // calculate final pixel scale @@ -500,6 +500,23 @@ m_drawing_mask = false; } + /// renderer_base.clear() does no clipping which clears the whole framebuffer + /// even if we update just a small portion of the screen. The result would be + /// still correct, but slower. + /// This function clears only a certain portion of the screen, while /not/ + /// being notably slower for a fullscreen clear. + void clear_framebuffer(unsigned int left, unsigned int top, + unsigned int width, unsigned int height, agg::rgba8 color) { + + if (!width) return; + + unsigned int y; + const unsigned int max_y = top+height; // to be exact, it's one off the max. + + for (y=top; y<max_y; y++) + m_pixf->copy_hline(left, y, width, color); + } + bool allow_glyph_textures() { // We want to render all glyphs in place return false; _______________________________________________ Gnash-commit mailing list Gnash-commit@gnu.org http://lists.gnu.org/mailman/listinfo/gnash-commit