summaryrefslogtreecommitdiffstats
path: root/libs
diff options
context:
space:
mode:
authorChris Craik <ccraik@google.com>2014-05-15 02:00:36 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2014-05-15 02:00:36 +0000
commit96f266ee5ddb372eb3f5ac1200730d9403848907 (patch)
treef1b310a2f83ff022700883d6cf23015cc248d9e4 /libs
parente8b718c264a2752c475d3022d3cfd6d8dbbce494 (diff)
parent2bcad176757386d906157bb898167fbcebe9f55e (diff)
downloadframeworks_base-96f266ee5ddb372eb3f5ac1200730d9403848907.zip
frameworks_base-96f266ee5ddb372eb3f5ac1200730d9403848907.tar.gz
frameworks_base-96f266ee5ddb372eb3f5ac1200730d9403848907.tar.bz2
Merge "Remove Path based outline clipping"
Diffstat (limited to 'libs')
-rw-r--r--libs/hwui/RenderNode.cpp5
-rw-r--r--libs/hwui/RenderProperties.cpp42
-rw-r--r--libs/hwui/RenderProperties.h12
3 files changed, 7 insertions, 52 deletions
diff --git a/libs/hwui/RenderNode.cpp b/libs/hwui/RenderNode.cpp
index 9902ff1..fba482d 100644
--- a/libs/hwui/RenderNode.cpp
+++ b/libs/hwui/RenderNode.cpp
@@ -238,9 +238,8 @@ void RenderNode::setViewProperties(OpenGLRenderer& renderer, T& handler) {
}
if (CC_UNLIKELY(properties().hasClippingPath())) {
- // TODO: optimize for round rect/circle clipping
- const SkPath* path = properties().getClippingPath();
- ClipPathOp* op = new (handler.allocator()) ClipPathOp(path, SkRegion::kIntersect_Op);
+ ClipPathOp* op = new (handler.allocator()) ClipPathOp(
+ properties().getClippingPath(), properties().getClippingPathOp());
handler(op, PROPERTY_SAVECOUNT, properties().getClipToBounds());
}
}
diff --git a/libs/hwui/RenderProperties.cpp b/libs/hwui/RenderProperties.cpp
index 99de1fc..5f7d4e3 100644
--- a/libs/hwui/RenderProperties.cpp
+++ b/libs/hwui/RenderProperties.cpp
@@ -50,14 +50,11 @@ RenderProperties::PrimitiveFields::PrimitiveFields()
}
RenderProperties::ComputedFields::ComputedFields()
- : mTransformMatrix(NULL)
- , mClipPath(NULL)
- , mClipPathOp(SkRegion::kIntersect_Op) {
+ : mTransformMatrix(NULL) {
}
RenderProperties::ComputedFields::~ComputedFields() {
delete mTransformMatrix;
- delete mClipPath;
}
RenderProperties::RenderProperties()
@@ -77,9 +74,6 @@ RenderProperties& RenderProperties::operator=(const RenderProperties& other) {
setAnimationMatrix(other.getAnimationMatrix());
setCameraDistance(other.getCameraDistance());
- // Update the computed clip path
- updateClipPath();
-
// Force recalculation of the matrix, since other's dirty bit may be clear
mPrimitiveFields.mMatrixOrPivotDirty = true;
updateMatrix();
@@ -166,39 +160,5 @@ void RenderProperties::updateMatrix() {
}
}
-void RenderProperties::updateClipPath() {
- const SkPath* outlineClipPath = mPrimitiveFields.mOutline.willClip()
- ? mPrimitiveFields.mOutline.getPath() : NULL;
- const SkPath* revealClipPath = mPrimitiveFields.mRevealClip.getPath();
-
- if (!outlineClipPath && !revealClipPath) {
- // mComputedFields.mClipPath doesn't need to be updated, since it won't be used
- return;
- }
-
- if (mComputedFields.mClipPath == NULL) {
- mComputedFields.mClipPath = new SkPath();
- }
- SkPath* clipPath = mComputedFields.mClipPath;
- mComputedFields.mClipPathOp = SkRegion::kIntersect_Op;
-
- if (outlineClipPath && revealClipPath) {
- SkPathOp op = kIntersect_PathOp;
- if (mPrimitiveFields.mRevealClip.isInverseClip()) {
- op = kDifference_PathOp; // apply difference step in the Op below, instead of draw time
- }
-
- Op(*outlineClipPath, *revealClipPath, op, clipPath);
- } else if (outlineClipPath) {
- *clipPath = *outlineClipPath;
- } else {
- *clipPath = *revealClipPath;
- if (mPrimitiveFields.mRevealClip.isInverseClip()) {
- // apply difference step at draw time
- mComputedFields.mClipPathOp = SkRegion::kDifference_Op;
- }
- }
-}
-
} /* namespace uirenderer */
} /* namespace android */
diff --git a/libs/hwui/RenderProperties.h b/libs/hwui/RenderProperties.h
index 6fc8bce..c0e3ce7 100644
--- a/libs/hwui/RenderProperties.h
+++ b/libs/hwui/RenderProperties.h
@@ -437,19 +437,17 @@ public:
ANDROID_API void updateMatrix();
- ANDROID_API void updateClipPath();
-
- // signals that mComputedFields.mClipPath is up to date, and should be used for clipping
bool hasClippingPath() const {
- return mPrimitiveFields.mOutline.willClip() || mPrimitiveFields.mRevealClip.willClip();
+ return mPrimitiveFields.mRevealClip.willClip();
}
const SkPath* getClippingPath() const {
- return hasClippingPath() ? mComputedFields.mClipPath : NULL;
+ return mPrimitiveFields.mRevealClip.getPath();
}
SkRegion::Op getClippingPathOp() const {
- return mComputedFields.mClipPathOp;
+ return mPrimitiveFields.mRevealClip.isInverseClip()
+ ? SkRegion::kDifference_Op : SkRegion::kIntersect_Op;
}
Outline& mutableOutline() {
@@ -505,8 +503,6 @@ private:
SkMatrix* mTransformMatrix;
Sk3DView mTransformCamera;
- SkPath* mClipPath; // TODO: remove this, create new ops for efficient/special case clipping
- SkRegion::Op mClipPathOp;
} mComputedFields;
};