summaryrefslogtreecommitdiffstats
path: root/core/java/android/view
diff options
context:
space:
mode:
authorRomain Guy <romainguy@google.com>2013-01-15 18:51:42 -0800
committerRomain Guy <romainguy@google.com>2013-01-17 15:39:31 -0800
commit8ce00301a023eecaeb8891ce906f67b513ebb42a (patch)
tree3b14c80a49cbec537aad39aa4bb266cac41102f7 /core/java/android/view
parent0f8d155363c361199a9d9aa5dcdbc4088990f893 (diff)
downloadframeworks_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.java25
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[] {