Preapre region tracking in layers

Change-Id: Ied1fa0d36c99ef4e33cb8fde7e3106a793db3a4c
This commit is contained in:
Romain Guy
2011-01-14 20:07:20 -08:00
parent 739e34a362
commit 1bd1bad0b4
2 changed files with 15 additions and 13 deletions

View File

@@ -697,13 +697,7 @@ void OpenGLRenderer::dirtyLayer(const float left, const float top,
if ((mSnapshot->flags & Snapshot::kFlagFboTarget) && mSnapshot->region) {
Rect bounds(left, top, right, bottom);
transform.mapRect(bounds);
if (bounds.intersect(*mSnapshot->clipRect)) {
bounds.snapToPixelBoundaries();
android::Rect dirty(bounds.left, bounds.top, bounds.right, bounds.bottom);
if (!dirty.isEmpty()) {
mSnapshot->region->orSelf(dirty);
}
}
dirtyLayerUnchecked(bounds, mSnapshot->region);
}
#endif
}
@@ -713,12 +707,18 @@ void OpenGLRenderer::dirtyLayer(const float left, const float top,
#if RENDER_LAYERS_AS_REGIONS
if ((mSnapshot->flags & Snapshot::kFlagFboTarget) && mSnapshot->region) {
Rect bounds(left, top, right, bottom);
if (bounds.intersect(*mSnapshot->clipRect)) {
bounds.snapToPixelBoundaries();
android::Rect dirty(bounds.left, bounds.top, bounds.right, bounds.bottom);
if (!dirty.isEmpty()) {
mSnapshot->region->orSelf(dirty);
}
dirtyLayerUnchecked(bounds, mSnapshot->region);
}
#endif
}
void OpenGLRenderer::dirtyLayerUnchecked(Rect& bounds, Region* region) {
#if RENDER_LAYERS_AS_REGIONS
if (bounds.intersect(*mSnapshot->clipRect)) {
bounds.snapToPixelBoundaries();
android::Rect dirty(bounds.left, bounds.top, bounds.right, bounds.bottom);
if (!dirty.isEmpty()) {
region->orSelf(dirty);
}
}
#endif

View File

@@ -145,6 +145,8 @@ protected:
virtual void dirtyLayer(const float left, const float top,
const float right, const float bottom);
void dirtyLayerUnchecked(Rect& bounds, Region* region);
private:
/**
* Saves the current state of the renderer as a new snapshot.