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/Stencil.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/Stencil.cpp')
-rw-r--r-- | libs/hwui/Stencil.cpp | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/libs/hwui/Stencil.cpp b/libs/hwui/Stencil.cpp index 84df82b7b08f..4fcd51d6a7f4 100644 --- a/libs/hwui/Stencil.cpp +++ b/libs/hwui/Stencil.cpp @@ -37,7 +37,7 @@ void Stencil::clear() { void Stencil::enableTest() { if (mState != kTest) { enable(); - glStencilFunc(GL_EQUAL, 0x1, 0x1); + glStencilFunc(GL_EQUAL, 0xff, 0xff); // We only want to test, let's keep everything glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); @@ -48,7 +48,7 @@ void Stencil::enableTest() { void Stencil::enableWrite() { if (mState != kWrite) { enable(); - glStencilFunc(GL_ALWAYS, 0x1, 0x1); + glStencilFunc(GL_ALWAYS, 0xff, 0xff); // The test always passes so the first two values are meaningless glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); |