diff options
author | Leon Scroggins III <scroggo@google.com> | 2018-04-20 14:53:00 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-04-23 14:27:30 +0000 |
commit | 57e1f020116e9023b9dfd92478d46749b7248d6e (patch) | |
tree | 598fe9ee5bd039dea95cb774da7790c0c1431394 /src/gpu/SkGpuDevice.cpp | |
parent | 5c2ed720ec807aa7a79e8f5ee5be107a877015a8 (diff) |
(Mostly) respect FilterQuality in draw[stretchy]
Bug: b/77917978
For
drawImageLattice
drawBitmapLattice
drawImageNine
drawBitmapNine
, respect the SkFilterQuality on the SkPaint. Previously the GPU used
the lowest quality to avoid a bleeding effect, leading to ugly nine-
patches on Android.
For all backends, cap the filter quality at kLow_SkFilterQuality.
Update SkCanvas' documentation to specify this.
Change-Id: Id28c7753834975f039170f14bc51be4f2bd44d41
Reviewed-on: https://skia-review.googlesource.com/121891
Reviewed-by: Cary Clark <caryclark@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Leon Scroggins <scroggo@google.com>
Auto-Submit: Leon Scroggins <scroggo@google.com>
Diffstat (limited to 'src/gpu/SkGpuDevice.cpp')
-rw-r--r-- | src/gpu/SkGpuDevice.cpp | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp index 3a48e8cbe6..138d41f26a 100644 --- a/src/gpu/SkGpuDevice.cpp +++ b/src/gpu/SkGpuDevice.cpp @@ -1350,6 +1350,15 @@ void SkGpuDevice::drawImageRect(const SkImage* image, const SkRect* src, const S } } +// When drawing nine-patches or n-patches, cap the filter quality at kBilerp. +static GrSamplerState::Filter compute_lattice_filter_mode(const SkPaint& paint) { + if (paint.getFilterQuality() == kNone_SkFilterQuality) { + return GrSamplerState::Filter::kNearest; + } + + return GrSamplerState::Filter::kBilerp; +} + void SkGpuDevice::drawProducerNine(GrTextureProducer* producer, const SkIRect& center, const SkRect& dst, const SkPaint& paint) { GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawProducerNine", fContext.get()); @@ -1371,7 +1380,7 @@ void SkGpuDevice::drawProducerNine(GrTextureProducer* producer, return; } - static const GrSamplerState::Filter kMode = GrSamplerState::Filter::kNearest; + const GrSamplerState::Filter kMode = compute_lattice_filter_mode(paint); auto fp = producer->createFragmentProcessor( SkMatrix::I(), SkRect::MakeIWH(producer->width(), producer->height()), GrTextureProducer::kNo_FilterConstraint, true, &kMode, @@ -1426,7 +1435,7 @@ void SkGpuDevice::drawProducerLattice(GrTextureProducer* producer, const SkPaint& paint) { GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawProducerLattice", fContext.get()); - static const GrSamplerState::Filter kMode = GrSamplerState::Filter::kNearest; + const GrSamplerState::Filter kMode = compute_lattice_filter_mode(paint); std::unique_ptr<GrFragmentProcessor> fp(producer->createFragmentProcessor( SkMatrix::I(), SkRect::MakeIWH(producer->width(), producer->height()), GrTextureProducer::kNo_FilterConstraint, true, &kMode, |