diff options
author | Romain Guy <romainguy@google.com> | 2013-01-15 18:51:42 -0800 |
---|---|---|
committer | Romain Guy <romainguy@google.com> | 2013-01-17 15:39:31 -0800 |
commit | 8ce00301a023eecaeb8891ce906f67b513ebb42a (patch) | |
tree | 3b14c80a49cbec537aad39aa4bb266cac41102f7 /core/java/android/view | |
parent | 0f8d155363c361199a9d9aa5dcdbc4088990f893 (diff) | |
download | frameworks_base-8ce00301a023eecaeb8891ce906f67b513ebb42a.zip frameworks_base-8ce00301a023eecaeb8891ce906f67b513ebb42a.tar.gz frameworks_base-8ce00301a023eecaeb8891ce906f67b513ebb42a.tar.bz2 |
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 'core/java/android/view')
-rw-r--r-- | core/java/android/view/HardwareRenderer.java | 25 |
1 files changed, 2 insertions, 23 deletions
diff --git a/core/java/android/view/HardwareRenderer.java b/core/java/android/view/HardwareRenderer.java index 0d45bbc..2b4260d 100644 --- a/core/java/android/view/HardwareRenderer.java +++ b/core/java/android/view/HardwareRenderer.java @@ -173,17 +173,6 @@ public abstract class HardwareRenderer { public static final String DEBUG_SHOW_OVERDRAW_PROPERTY = "debug.hwui.show_overdraw"; /** - * Turn on to allow region clipping (see - * {@link android.graphics.Canvas#clipPath(android.graphics.Path)} and - * {@link android.graphics.Canvas#clipRegion(android.graphics.Region)}. - * - * When this option is turned on a stencil buffer is always required. - * If this option is off a stencil buffer is only created when the overdraw - * debugging mode is turned on. - */ - private static final boolean REGION_CLIPPING_ENABLED = false; - - /** * A process can set this flag to false to prevent the use of hardware * rendering. * @@ -885,15 +874,6 @@ public abstract class HardwareRenderer { if (value != mShowOverdraw) { changed = true; mShowOverdraw = value; - - if (!REGION_CLIPPING_ENABLED) { - if (surface != null && isEnabled()) { - if (validate()) { - sEglConfig = loadEglConfig(); - invalidate(surface); - } - } - } } if (nLoadProperties()) { @@ -1764,9 +1744,8 @@ public abstract class HardwareRenderer { @Override int[] getConfig(boolean dirtyRegions) { - //noinspection PointlessBooleanExpression - final int stencilSize = mShowOverdraw || REGION_CLIPPING_ENABLED ? - GLES20Canvas.getStencilSize() : 0; + //noinspection PointlessBooleanExpression,ConstantConditions + final int stencilSize = GLES20Canvas.getStencilSize(); final int swapBehavior = dirtyRegions ? EGL14.EGL_SWAP_BEHAVIOR_PRESERVED_BIT : 0; return new int[] { |