diff options
author | Chris Craik <ccraik@google.com> | 2014-05-15 02:00:36 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2014-05-15 02:00:36 +0000 |
commit | 96f266ee5ddb372eb3f5ac1200730d9403848907 (patch) | |
tree | f1b310a2f83ff022700883d6cf23015cc248d9e4 /libs | |
parent | e8b718c264a2752c475d3022d3cfd6d8dbbce494 (diff) | |
parent | 2bcad176757386d906157bb898167fbcebe9f55e (diff) | |
download | frameworks_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.cpp | 5 | ||||
-rw-r--r-- | libs/hwui/RenderProperties.cpp | 42 | ||||
-rw-r--r-- | libs/hwui/RenderProperties.h | 12 |
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; }; |