diff options
author | 2013-01-15 18:51:42 -0800 | |
---|---|---|
committer | 2013-01-17 15:39:31 -0800 | |
commit | 8ce00301a023eecaeb8891ce906f67b513ebb42a (patch) | |
tree | 3b14c80a49cbec537aad39aa4bb266cac41102f7 /libs/hwui/LayerRenderer.cpp | |
parent | 0f8d155363c361199a9d9aa5dcdbc4088990f893 (diff) |
Implement clipRect with a transform, clipRegion & clipPath
Bug #7146141
When non-rectangular clipping occurs in a layer the render buffer
used as the stencil buffer is not cached. If this happens on a
View's hardware layer the render buffer will live for as long
as the layer is bound to the view. When a stencil buffer is
required because of a call to Canvas.saveLayer() it will be allocated
on every frame. A future change will address this problem.
If "show GPU overdraw" is enabled, non-rectangular clips are not
supported anymore and we fall back to rectangular clips instead.
This is a limitation imposed by OpenGL ES that cannot be worked
around at this time.
This change also improves the Matrix4 implementation to easily
detect when a rect remains a rect after transform.
Change-Id: I0e69fb901792d38bc0c4ca1bf9fdb02d7db415b9
Diffstat (limited to 'libs/hwui/LayerRenderer.cpp')
-rw-r--r-- | libs/hwui/LayerRenderer.cpp | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/libs/hwui/LayerRenderer.cpp b/libs/hwui/LayerRenderer.cpp index 3484d411c130..ba59bb391f1d 100644 --- a/libs/hwui/LayerRenderer.cpp +++ b/libs/hwui/LayerRenderer.cpp @@ -100,13 +100,21 @@ bool LayerRenderer::suppressErrorChecks() { } /////////////////////////////////////////////////////////////////////////////// -// Dirty region tracking +// Layer support /////////////////////////////////////////////////////////////////////////////// bool LayerRenderer::hasLayer() { return true; } +void LayerRenderer::ensureStencilBuffer() { + attachStencilBufferToLayer(mLayer); +} + +/////////////////////////////////////////////////////////////////////////////// +// Dirty region tracking +/////////////////////////////////////////////////////////////////////////////// + Region* LayerRenderer::getRegion() { if (getSnapshot()->flags & Snapshot::kFlagFboTarget) { return OpenGLRenderer::getRegion(); |