diff options
author | Mike Reed <reed@google.com> | 2018-04-25 13:04:05 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-04-25 17:34:27 +0000 |
commit | 910ca0fd014ad9263e54e0cfa4199768b6c7fade (patch) | |
tree | 4e8556bb2e6f27868dbc32e173c682ce8dc91e42 /gm | |
parent | f0db23633f754cc3888494ea8d37e5dd8d495bfd (diff) |
Experiment to track coverage in a layer
Bug: skia:
Change-Id: I5ed334f63e64991944394dc8103092a2c6280546
Reviewed-on: https://skia-review.googlesource.com/122000
Commit-Queue: Mike Reed <reed@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
Diffstat (limited to 'gm')
-rw-r--r-- | gm/savelayer.cpp | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/gm/savelayer.cpp b/gm/savelayer.cpp index 32f95bfc7d..77218206c7 100644 --- a/gm/savelayer.cpp +++ b/gm/savelayer.cpp @@ -238,3 +238,42 @@ DEF_SIMPLE_GM(savelayer_clipmask, canvas, 1200, 1200) { } } } + +DEF_SIMPLE_GM(savelayer_coverage, canvas, 500, 500) { + canvas->saveLayer(nullptr, nullptr); + + SkRect r = { 0, 0, 200, 200 }; + SkPaint layerPaint; + layerPaint.setBlendMode(SkBlendMode::kModulate); + + auto image = GetResourceAsImage("images/mandrill_128.png"); + + auto proc = [layerPaint](SkCanvas* canvas, SkCanvas::SaveLayerRec& rec) { + SkPaint paint; + paint.setColor(SK_ColorRED); + + canvas->saveLayer(rec); + canvas->drawCircle(100, 100, 50, paint); + paint.setColor(0x8800FF00); + canvas->drawRect({10, 90, 190, 110}, paint); + canvas->restore(); + }; + + const int yflags[] = { 0, SkCanvas::kInitWithPrevious_SaveLayerFlag }; + for (int y = 0; y <= 1; ++y) { + const int xflags[] = { 0, SkCanvas::kMaskAgainstCoverage_EXPERIMENTAL_DONT_USE_SaveLayerFlag }; + for (int x = 0; x <= 1; ++x) { + canvas->save(); + canvas->translate(x * 200.f, y * 200.f); + + SkCanvas::SaveLayerRec rec(&r, &layerPaint, yflags[y] | xflags[x]); + canvas->drawImageRect(image, r, nullptr); + proc(canvas, rec); + + canvas->restore(); + } + } + + canvas->restore(); +} + |