[go: nahoru, domu]

Add sampling parameter to drawImage[Rect]

This is a big change, but logically straight-forward: Migrate cc/blink to pass sampling explicitly to the drawImage calls (which no longer respect the paint's filter-quality).

This is part of a larger effort/migration to completely eliminate filter-quality from Skia. DrawImage calls already ignore it, and image-shaders soon will too. That shader migration is the subject of a separate CL in chrome.

Note: much of the motivation for this change in Skia is that we can now support finer control over filtering: explicit control of filter and mipmap choices (base, nearest, linear)
explicit coefficients for bicubic: you can control blur-vs-sharp with these.

Note also, that the current/legacy filter-quality has the subtle "bug" that it is treated differently between CPU and GPU backends in Skia (for kMedium). CPU used nearest for the miplevel, and gpu used trilerp. The new sampling struct eliminates this ambiguity, making the choice explicit (by the caller).

This last point is the cause of the diffs in this CL: these changes subtly affect when/where the legacy filter-quality is "interpreted" (i.e. converted logically to sampling). All of the diffs are tiny, and so I propose rebaselining them as part of this CL. When the final migration can land (converting all image-shaders to explicit sampling at construction time), then chrome will have complete control over this behavior, and (likely) there will be another subtle rebaselining effort.

Bug: 1169989
Bug: 1169871
Bug: skia:7650
Change-Id: Iabae6955a7da6287816ae6fd53f270cd58214aca
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2635080
Commit-Queue: Mike Reed <reed@google.com>
Reviewed-by: vmpstr <vmpstr@chromium.org>
Reviewed-by: Florin Malita <fmalita@chromium.org>
Reviewed-by: Vasiliy Telezhnikov <vasilyt@chromium.org>
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Cr-Commit-Position: refs/heads/master@{#846527}
diff --git a/cc/paint/paint_canvas.h b/cc/paint/paint_canvas.h
index d2afbad5..e22af81 100644
--- a/cc/paint/paint_canvas.h
+++ b/cc/paint/paint_canvas.h
@@ -145,16 +145,24 @@
   virtual void drawImage(const PaintImage& image,
                          SkScalar left,
                          SkScalar top,
+                         const SkSamplingOptions&,
                          const PaintFlags* flags) = 0;
   void drawImage(const PaintImage& image, SkScalar left, SkScalar top) {
-    drawImage(image, left, top, nullptr);
+    drawImage(image, left, top, SkSamplingOptions(), nullptr);
   }
 
   virtual void drawImageRect(const PaintImage& image,
                              const SkRect& src,
                              const SkRect& dst,
+                             const SkSamplingOptions&,
                              const PaintFlags* flags,
                              SkCanvas::SrcRectConstraint constraint) = 0;
+  void drawImageRect(const PaintImage& image,
+                     const SkRect& src,
+                     const SkRect& dst,
+                     SkCanvas::SrcRectConstraint constraint) {
+    drawImageRect(image, src, dst, SkSamplingOptions(), nullptr, constraint);
+  }
 
   // Draws the frame of the |skottie| animation specified by the normalized time
   // t [0->first frame..1->last frame] at the destination bounds given by |dst|