Merge "Preapre region tracking in layers" into honeycomb

This commit is contained in:
Romain Guy
2011-01-14 20:04:42 -08:00
committed by Android (Google) Code Review
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) { if ((mSnapshot->flags & Snapshot::kFlagFboTarget) && mSnapshot->region) {
Rect bounds(left, top, right, bottom); Rect bounds(left, top, right, bottom);
transform.mapRect(bounds); transform.mapRect(bounds);
if (bounds.intersect(*mSnapshot->clipRect)) { dirtyLayerUnchecked(bounds, mSnapshot->region);
bounds.snapToPixelBoundaries();
android::Rect dirty(bounds.left, bounds.top, bounds.right, bounds.bottom);
if (!dirty.isEmpty()) {
mSnapshot->region->orSelf(dirty);
}
}
} }
#endif #endif
} }
@@ -713,12 +707,18 @@ void OpenGLRenderer::dirtyLayer(const float left, const float top,
#if RENDER_LAYERS_AS_REGIONS #if RENDER_LAYERS_AS_REGIONS
if ((mSnapshot->flags & Snapshot::kFlagFboTarget) && mSnapshot->region) { if ((mSnapshot->flags & Snapshot::kFlagFboTarget) && mSnapshot->region) {
Rect bounds(left, top, right, bottom); Rect bounds(left, top, right, bottom);
dirtyLayerUnchecked(bounds, mSnapshot->region);
}
#endif
}
void OpenGLRenderer::dirtyLayerUnchecked(Rect& bounds, Region* region) {
#if RENDER_LAYERS_AS_REGIONS
if (bounds.intersect(*mSnapshot->clipRect)) { if (bounds.intersect(*mSnapshot->clipRect)) {
bounds.snapToPixelBoundaries(); bounds.snapToPixelBoundaries();
android::Rect dirty(bounds.left, bounds.top, bounds.right, bounds.bottom); android::Rect dirty(bounds.left, bounds.top, bounds.right, bounds.bottom);
if (!dirty.isEmpty()) { if (!dirty.isEmpty()) {
mSnapshot->region->orSelf(dirty); region->orSelf(dirty);
}
} }
} }
#endif #endif

View File

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