Merge "Revert "try to stop using exotic clipps""
This commit is contained in:
committed by
Android (Google) Code Review
commit
6df179cd73
@@ -187,6 +187,10 @@ static jboolean quickRejectPath(JNIEnv* env, jobject, jlong canvasHandle, jlong
|
||||
// from one to the other (though SkClipOp is destined to become a strict subset)
|
||||
static_assert(SkRegion::kDifference_Op == static_cast<SkRegion::Op>(SkClipOp::kDifference), "");
|
||||
static_assert(SkRegion::kIntersect_Op == static_cast<SkRegion::Op>(SkClipOp::kIntersect), "");
|
||||
static_assert(SkRegion::kUnion_Op == static_cast<SkRegion::Op>(SkClipOp::kUnion), "");
|
||||
static_assert(SkRegion::kXOR_Op == static_cast<SkRegion::Op>(SkClipOp::kXOR), "");
|
||||
static_assert(SkRegion::kReverseDifference_Op == static_cast<SkRegion::Op>(SkClipOp::kReverseDifference), "");
|
||||
static_assert(SkRegion::kReplace_Op == static_cast<SkRegion::Op>(SkClipOp::kReplace), "");
|
||||
|
||||
static SkClipOp opHandleToClipOp(jint opHandle) {
|
||||
// The opHandle is defined in Canvas.java to be Region::Op
|
||||
|
||||
@@ -100,7 +100,7 @@ void SkiaPipeline::renderLayersImpl(const LayerUpdateQueue& layers, bool opaque)
|
||||
int saveCount = layerCanvas->save();
|
||||
SkASSERT(saveCount == 1);
|
||||
|
||||
layerCanvas->clipRect(layerDamage.toSkRect(), SkClipOp::kReplace_private_internal_do_not_use);
|
||||
layerCanvas->clipRect(layerDamage.toSkRect(), SkClipOp::kReplace);
|
||||
|
||||
auto savedLightCenter = mLightCenter;
|
||||
// map current light center into RenderNode's coordinate space
|
||||
@@ -234,7 +234,7 @@ void SkiaPipeline::renderFrameImpl(const LayerUpdateQueue& layers, const SkRect&
|
||||
const std::vector<sp<RenderNode>>& nodes, bool opaque, const Rect &contentDrawBounds,
|
||||
SkCanvas* canvas) {
|
||||
|
||||
canvas->clipRect(clip, SkClipOp::kReplace_private_internal_do_not_use);
|
||||
canvas->clipRect(clip, SkClipOp::kReplace);
|
||||
|
||||
if (!opaque) {
|
||||
canvas->clear(SK_ColorTRANSPARENT);
|
||||
|
||||
@@ -74,7 +74,7 @@ TEST(CanvasState, simpleClipping) {
|
||||
state.clipRect(10, 10, 200, 200, SkClipOp::kIntersect);
|
||||
ASSERT_EQ(state.getRenderTargetClipBounds(), Rect(10, 10, 100, 100));
|
||||
|
||||
state.clipRect(50, 50, 150, 150, SkClipOp::kReplace_private_internal_do_not_use);
|
||||
state.clipRect(50, 50, 150, 150, SkClipOp::kReplace);
|
||||
ASSERT_EQ(state.getRenderTargetClipBounds(), Rect(50, 50, 150, 150));
|
||||
}
|
||||
|
||||
|
||||
@@ -453,28 +453,20 @@ RENDERTHREAD_TEST(FrameBuilder, clippedMerging) {
|
||||
sk_sp<Bitmap> bitmap(TestUtils::createBitmap(20, 20));
|
||||
|
||||
// left side clipped (to inset left half)
|
||||
canvas.save(SaveFlags::MatrixClip);
|
||||
canvas.clipRect(10, 0, 50, 100, SkClipOp::kIntersect);
|
||||
canvas.clipRect(10, 0, 50, 100, SkClipOp::kReplace);
|
||||
canvas.drawBitmap(*bitmap, 0, 40, nullptr);
|
||||
canvas.restore();
|
||||
|
||||
// top side clipped (to inset top half)
|
||||
canvas.save(SaveFlags::MatrixClip);
|
||||
canvas.clipRect(0, 10, 100, 50, SkClipOp::kIntersect);
|
||||
canvas.clipRect(0, 10, 100, 50, SkClipOp::kReplace);
|
||||
canvas.drawBitmap(*bitmap, 40, 0, nullptr);
|
||||
canvas.restore();
|
||||
|
||||
// right side clipped (to inset right half)
|
||||
canvas.save(SaveFlags::MatrixClip);
|
||||
canvas.clipRect(50, 0, 90, 100, SkClipOp::kIntersect);
|
||||
canvas.clipRect(50, 0, 90, 100, SkClipOp::kReplace);
|
||||
canvas.drawBitmap(*bitmap, 80, 40, nullptr);
|
||||
canvas.restore();
|
||||
|
||||
// bottom not clipped, just abutting (inset bottom half)
|
||||
canvas.save(SaveFlags::MatrixClip);
|
||||
canvas.clipRect(0, 50, 100, 90, SkClipOp::kIntersect);
|
||||
canvas.clipRect(0, 50, 100, 90, SkClipOp::kReplace);
|
||||
canvas.drawBitmap(*bitmap, 40, 70, nullptr);
|
||||
canvas.restore();
|
||||
});
|
||||
|
||||
FrameBuilder frameBuilder(SkRect::MakeWH(100, 100), 100, 100,
|
||||
@@ -2260,7 +2252,7 @@ RENDERTHREAD_TEST(FrameBuilder, clip_replace) {
|
||||
};
|
||||
auto node = TestUtils::createNode<RecordingCanvas>(20, 20, 30, 30,
|
||||
[](RenderProperties& props, RecordingCanvas& canvas) {
|
||||
canvas.clipRect(0, -20, 10, 30, SkClipOp::kReplace_private_internal_do_not_use);
|
||||
canvas.clipRect(0, -20, 10, 30, SkClipOp::kReplace);
|
||||
canvas.drawColor(SK_ColorWHITE, SkBlendMode::kSrcOver);
|
||||
});
|
||||
|
||||
|
||||
@@ -459,6 +459,9 @@ TEST(RecordingCanvas, saveLayer_addClipFlag) {
|
||||
|
||||
TEST(RecordingCanvas, saveLayer_viewportCrop) {
|
||||
auto dl = TestUtils::createDisplayList<RecordingCanvas>(200, 200, [](RecordingCanvas& canvas) {
|
||||
// shouldn't matter, since saveLayer will clip to its bounds
|
||||
canvas.clipRect(-1000, -1000, 1000, 1000, SkClipOp::kReplace);
|
||||
|
||||
canvas.saveLayerAlpha(100, 100, 300, 300, 128, SaveFlags::ClipToLayer);
|
||||
canvas.drawRect(0, 0, 400, 400, SkPaint());
|
||||
canvas.restore();
|
||||
@@ -635,7 +638,7 @@ TEST(RecordingCanvas, firstClipWillReplace) {
|
||||
TEST(RecordingCanvas, replaceClipIntersectWithRoot) {
|
||||
auto dl = TestUtils::createDisplayList<RecordingCanvas>(100, 100, [](RecordingCanvas& canvas) {
|
||||
canvas.save(SaveFlags::MatrixClip);
|
||||
canvas.clipRect(-10, -10, 110, 110, SkClipOp::kReplace_private_internal_do_not_use);
|
||||
canvas.clipRect(-10, -10, 110, 110, SkClipOp::kReplace);
|
||||
canvas.drawColor(SK_ColorWHITE, SkBlendMode::kSrcOver);
|
||||
canvas.restore();
|
||||
});
|
||||
|
||||
@@ -336,7 +336,7 @@ RENDERTHREAD_TEST(SkiaPipeline, clip_replace) {
|
||||
std::vector<sp<RenderNode>> nodes;
|
||||
nodes.push_back(TestUtils::createSkiaNode(20, 20, 30, 30,
|
||||
[](RenderProperties& props, SkiaRecordingCanvas& canvas) {
|
||||
canvas.clipRect(0, -20, 10, 30, SkClipOp::kReplace_private_internal_do_not_use);
|
||||
canvas.clipRect(0, -20, 10, 30, SkClipOp::kReplace);
|
||||
canvas.drawColor(SK_ColorWHITE, SkBlendMode::kSrcOver);
|
||||
}));
|
||||
|
||||
|
||||
@@ -89,15 +89,11 @@ public:
|
||||
mProxy->setup(800.0f, 255 * 0.075f, 255 * 0.15f);
|
||||
mProxy->setLightCenter(lightVector);
|
||||
mCanvas.reset(new android::uirenderer::RecordingCanvas(mSize.width(), mSize.height()));
|
||||
|
||||
mCanvas->save(SaveFlags::MatrixClip); // balanced in prepareToDraw()
|
||||
}
|
||||
|
||||
SkCanvas* prepareToDraw() {
|
||||
//mCanvas->reset(mSize.width(), mSize.height());
|
||||
mCanvas->restore(); // balancing inital save in constructor
|
||||
mCanvas->save(SaveFlags::MatrixClip);
|
||||
mCanvas->clipRect(0, 0, mSize.width(), mSize.height(), SkClipOp::kIntersect);
|
||||
mCanvas->clipRect(0, 0, mSize.width(), mSize.height(), SkClipOp::kReplace);
|
||||
return mCanvas->asSkCanvas();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user