[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Pingus-CVS] r3960 - trunk/pingus/src/display
From: |
grumbel at BerliOS |
Subject: |
[Pingus-CVS] r3960 - trunk/pingus/src/display |
Date: |
Tue, 24 Feb 2009 11:01:02 +0100 |
Author: grumbel
Date: 2009-02-24 11:01:02 +0100 (Tue, 24 Feb 2009)
New Revision: 3960
Modified:
trunk/pingus/src/display/delta_framebuffer.cpp
Log:
Stuff floating around in my working directory
Modified: trunk/pingus/src/display/delta_framebuffer.cpp
===================================================================
--- trunk/pingus/src/display/delta_framebuffer.cpp 2009-02-24 10:00:07 UTC
(rev 3959)
+++ trunk/pingus/src/display/delta_framebuffer.cpp 2009-02-24 10:01:02 UTC
(rev 3960)
@@ -24,6 +24,8 @@
enum DrawOpType { SURFACE_DRAWOP, FILLRECT_DRAWOP };
+/** Little id creation function that is meant to bring equal objects
+ close together when sorting */
uint32_t make_id(DrawOpType type, int x, int y)
{
return
@@ -222,12 +224,12 @@
}
}
-bool ops_id_sorter(DrawOp* lhs, DrawOp* rhs)
+inline bool ops_id_sorter(DrawOp* lhs, DrawOp* rhs)
{
return lhs->id < rhs->id;
}
-bool ops_xy_sorter(DrawOp* lhs, DrawOp* rhs)
+inline bool ops_xy_sorter(DrawOp* lhs, DrawOp* rhs)
{
return lhs->less(rhs);
}
@@ -310,6 +312,7 @@
std::vector<Rect>& changed_regions)
{
std::vector<DrawOp*> ops;
+ ops.reserve(backbuffer.draw_ops.size() + frontbuffer.draw_ops.size());
for(DrawOps::const_iterator i = backbuffer.draw_ops.begin(); i !=
backbuffer.draw_ops.end(); ++i)
ops.push_back(*i);
@@ -319,30 +322,22 @@
std::sort(ops.begin(), ops.end(), ops_id_sorter);
- for(DrawOps::const_iterator i = ops.begin(); i != ops.end();)
+ for(DrawOps::size_type i = 0; i < ops.size(); ++i)
{
- if (i+1 == ops.end())
+ bool is_equal = false;
+ for(DrawOps::size_type j = i+1; j < ops.size() && ops[i]->id ==
ops[j]->id; ++j)
{
- (*i)->mark_changed_regions(changed_regions);
- break;
- }
- else
- {
- // FIXME: Not exactly perfect, need to iterate over all
- // following element, till we reach a point where they
- // can't be equal
- if (!(*i)->equal(*(i+1)))
+ if (ops[i]->equal(ops[j]))
{
- (*i)->mark_changed_regions(changed_regions);
- ++i;
+ is_equal = true;
+ if (j == i+1) // FIXME: This is a bit fishy, since
ops_id_sorter() doesn't give a perfect sorting
+ i = j;
+ break;
}
- else
- {
- ++i;
- if (i == ops.end()) break;
- ++i;
- }
}
+
+ if (!is_equal)
+ ops[i]->mark_changed_regions(changed_regions);
}
}
@@ -371,7 +366,6 @@
// Merge rectangles
std::vector<Rect> update_rects;
merge_rectangles(changed_regions, update_rects);
- //update_rects = changed_regions;
int area = calculate_area(update_rects);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Pingus-CVS] r3960 - trunk/pingus/src/display,
grumbel at BerliOS <=