Merge any overlapping dirty rectangles before making them available to
outsiders. git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@553 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
//
|
//
|
||||||
// $Id: SpriteManager.java,v 1.15 2001/10/13 01:08:59 shaper Exp $
|
// $Id: SpriteManager.java,v 1.16 2001/10/25 01:40:26 shaper Exp $
|
||||||
|
|
||||||
package com.threerings.media.sprite;
|
package com.threerings.media.sprite;
|
||||||
|
|
||||||
@@ -98,14 +98,28 @@ public class SpriteManager
|
|||||||
*/
|
*/
|
||||||
public DirtyRectList getDirtyRects ()
|
public DirtyRectList getDirtyRects ()
|
||||||
{
|
{
|
||||||
// create a copy of the dirty rectangles
|
DirtyRectList merged = new DirtyRectList();
|
||||||
DirtyRectList dirty = (DirtyRectList)_dirty.clone();
|
|
||||||
|
|
||||||
// clear out the list
|
while (_dirty.size() > 0) {
|
||||||
_dirty.clear();
|
// pop the next rectangle from the dirty list
|
||||||
|
Rectangle mr = (Rectangle)_dirty.remove(0);
|
||||||
|
|
||||||
// return the full original list
|
// merge in any overlapping rectangles
|
||||||
return dirty;
|
for (int ii = 0; ii < _dirty.size(); ii++) {
|
||||||
|
Rectangle r = (Rectangle)_dirty.get(ii);
|
||||||
|
if (mr.intersects(r)) {
|
||||||
|
// remove the overlapping rectangle from the list
|
||||||
|
_dirty.remove(ii--);
|
||||||
|
// grow the merged dirty rectangle
|
||||||
|
mr.add(r);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// add the merged rectangle to the list
|
||||||
|
merged.add(mr);
|
||||||
|
}
|
||||||
|
|
||||||
|
return merged;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user