pingus-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Pingus-CVS] r3801 - trunk/pingus/src/display


From: grumbel at BerliOS
Subject: [Pingus-CVS] r3801 - trunk/pingus/src/display
Date: Sun, 13 Jul 2008 07:26:31 +0200

Author: grumbel
Date: 2008-07-13 07:26:29 +0200 (Sun, 13 Jul 2008)
New Revision: 3801

Modified:
   trunk/pingus/src/display/delta_framebuffer.cpp
Log:
Improved scroll behaviour in delta-drawing mode

Modified: trunk/pingus/src/display/delta_framebuffer.cpp
===================================================================
--- trunk/pingus/src/display/delta_framebuffer.cpp      2008-07-12 17:31:49 UTC 
(rev 3800)
+++ trunk/pingus/src/display/delta_framebuffer.cpp      2008-07-13 05:26:29 UTC 
(rev 3801)
@@ -88,16 +88,27 @@
 
     // Merge rectangles
 
-    // Update all regions that need update
-    for(std::vector<SDL_Rect>::iterator i = update_rects.begin(); i != 
update_rects.end(); ++i)
-      {
-        fb.push_cliprect(Rect(Vector2i(i->x, i->y), Size(i->w, i->h)));
+    if (update_rects.size() == 0)
+      { // No screen update needed
+      }
+    else if (update_rects.size() < 250) // FIXME: Random Magic Number, need 
benchmarking to find proper value
+      { // Update all regions that need update
+        for(std::vector<SDL_Rect>::iterator i = update_rects.begin(); i != 
update_rects.end(); ++i)
+          {
+            fb.push_cliprect(Rect(Vector2i(i->x, i->y), Size(i->w, i->h)));
+            for(DrawOps::iterator j = draw_obs.begin(); j != draw_obs.end(); 
++j)
+              j->render(fb);
+            fb.pop_cliprect();
+          }
+    
+        fb.update_rects(update_rects);
+      }
+    else
+      { // Update the whole screen at once, since we have to many rects
         for(DrawOps::iterator j = draw_obs.begin(); j != draw_obs.end(); ++j)
           j->render(fb);
-        fb.pop_cliprect();
+        fb.flip();
       }
-    
-    fb.update_rects(update_rects);
   }
  
   void add(const SurfaceDrawOp& op) {





reply via email to

[Prev in Thread] Current Thread [Next in Thread]