Migrate to drawImage w/ sampling
Bug: skia:7650
Change-Id: Icb99ee9f7142fe1ca22f9fa66b1467486ce576a6
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/357598
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Reed <reed@google.com>
diff --git a/samplecode/SampleAtlas.cpp b/samplecode/SampleAtlas.cpp
index add15bf..8f7f116 100644
--- a/samplecode/SampleAtlas.cpp
+++ b/samplecode/SampleAtlas.cpp
@@ -16,25 +16,27 @@
#include "src/core/SkPaintPriv.h"
typedef void (*DrawAtlasProc)(SkCanvas*, SkImage*, const SkRSXform[], const SkRect[],
- const SkColor[], int, const SkRect*, const SkPaint*);
+ const SkColor[], int, const SkRect*, const SkSamplingOptions&,
+ const SkPaint*);
static void draw_atlas(SkCanvas* canvas, SkImage* atlas, const SkRSXform xform[],
const SkRect tex[], const SkColor colors[], int count, const SkRect* cull,
- const SkPaint* paint) {
- canvas->drawAtlas(atlas, xform, tex, colors, count, SkBlendMode::kModulate, cull, paint);
+ const SkSamplingOptions& sampling, const SkPaint* paint) {
+ canvas->drawAtlas(atlas, xform, tex, colors, count, SkBlendMode::kModulate,
+ sampling, cull, paint);
}
static void draw_atlas_sim(SkCanvas* canvas, SkImage* atlas, const SkRSXform xform[],
const SkRect tex[], const SkColor colors[], int count, const SkRect* cull,
- const SkPaint* paint) {
+ const SkSamplingOptions& sampling, const SkPaint* paint) {
for (int i = 0; i < count; ++i) {
SkMatrix matrix;
matrix.setRSXform(xform[i]);
canvas->save();
canvas->concat(matrix);
- canvas->drawImageRect(atlas, tex[i], tex[i].makeOffset(-tex[i].x(), -tex[i].y()), paint,
- SkCanvas::kFast_SrcRectConstraint);
+ canvas->drawImageRect(atlas, tex[i], tex[i].makeOffset(-tex[i].x(), -tex[i].y()),
+ sampling, paint, SkCanvas::kFast_SrcRectConstraint);
canvas->restore();
}
}
@@ -184,12 +186,11 @@
}
}
SkPaint paint;
- // TODO: add sampling options to drawAtlas
- SkPaintPriv::SetFQ(&paint, kLow_SkFilterQuality);
+ SkSamplingOptions sampling(SkFilterMode::kLinear);
const SkRect cull = this->getBounds();
const SkColor* colorsPtr = fUseColors ? colors : nullptr;
- fProc(canvas, fAtlas.get(), xform, fTex, colorsPtr, N, &cull, &paint);
+ fProc(canvas, fAtlas.get(), xform, fTex, colorsPtr, N, &cull, sampling, &paint);
}
SkRect onGetBounds() override {
diff --git a/samplecode/SampleChineseFling.cpp b/samplecode/SampleChineseFling.cpp
index 74c9ebc..081433c 100644
--- a/samplecode/SampleChineseFling.cpp
+++ b/samplecode/SampleChineseFling.cpp
@@ -142,19 +142,23 @@
sk_sp<SkImage> image = direct->priv().testingOnly_getFontAtlasImage(
GrMaskFormat::kA8_GrMaskFormat, 0);
canvas->drawImageRect(image,
- SkRect::MakeXYWH(10.0f, 10.0f, 512.0f, 512.0), &paint);
+ SkRect::MakeXYWH(10.0f, 10.0f, 512.0f, 512.0),
+ SkSamplingOptions(), &paint);
image = direct->priv().testingOnly_getFontAtlasImage(
GrMaskFormat::kA8_GrMaskFormat, 1);
canvas->drawImageRect(image,
- SkRect::MakeXYWH(522.0f, 10.0f, 512.f, 512.0f), &paint);
+ SkRect::MakeXYWH(522.0f, 10.0f, 512.f, 512.0f),
+ SkSamplingOptions(), &paint);
image = direct->priv().testingOnly_getFontAtlasImage(
GrMaskFormat::kA8_GrMaskFormat, 2);
canvas->drawImageRect(image,
- SkRect::MakeXYWH(10.0f, 522.0f, 512.0f, 512.0f), &paint);
+ SkRect::MakeXYWH(10.0f, 522.0f, 512.0f, 512.0f),
+ SkSamplingOptions(), &paint);
image = direct->priv().testingOnly_getFontAtlasImage(
GrMaskFormat::kA8_GrMaskFormat, 3);
canvas->drawImageRect(image,
- SkRect::MakeXYWH(522.0f, 522.0f, 512.0f, 512.0f), &paint);
+ SkRect::MakeXYWH(522.0f, 522.0f, 512.0f, 512.0f),
+ SkSamplingOptions(), &paint);
}
#endif
}
diff --git a/samplecode/SampleFilterQuality.cpp b/samplecode/SampleFilterQuality.cpp
index adbb0f2..546ff7c 100644
--- a/samplecode/SampleFilterQuality.cpp
+++ b/samplecode/SampleFilterQuality.cpp
@@ -68,7 +68,7 @@
canvas->scale(S, S);
canvas->translate(-SkScalarHalf(orig->width()) * (S - D) / S,
-SkScalarHalf(orig->height()) * (S - D) / S);
- canvas->drawImage(orig, 0, 0, nullptr);
+ canvas->drawImage(orig, 0, 0);
if (S > 3) {
SkPaint paint;
diff --git a/samplecode/SampleLayers.cpp b/samplecode/SampleLayers.cpp
index f7c1818..39282f9 100644
--- a/samplecode/SampleLayers.cpp
+++ b/samplecode/SampleLayers.cpp
@@ -190,7 +190,7 @@
SkString name() override { return SkString("Backdrop"); }
void onDrawContent(SkCanvas* canvas) override {
- canvas->drawImage(fImage.get(), 0, 0, nullptr);
+ canvas->drawImage(fImage.get(), 0, 0);
const SkScalar w = 250;
const SkScalar h = 150;
diff --git a/samplecode/SampleMixer.cpp b/samplecode/SampleMixer.cpp
index aa6d831..aa164b4 100644
--- a/samplecode/SampleMixer.cpp
+++ b/samplecode/SampleMixer.cpp
@@ -40,13 +40,14 @@
void dodraw(SkCanvas* canvas, sk_sp<SkColorFilter> cf0, sk_sp<SkColorFilter> cf1, float gap) {
SkPaint paint;
paint.setColorFilter(cf0);
- canvas->drawImage(fImg, 0, 0, &paint);
+ canvas->drawImage(fImg, 0, 0, SkSamplingOptions(), &paint);
paint.setColorFilter(SkColorFilters::Lerp(fWeight, cf0, cf1));
- canvas->drawImage(fImg, fImg->width() + gap * fWeight, 0, &paint);
+ canvas->drawImage(fImg, fImg->width() + gap * fWeight, 0,
+ SkSamplingOptions(), &paint);
paint.setColorFilter(cf1);
- canvas->drawImage(fImg, 2*fImg->width() + gap, 0, &paint);
+ canvas->drawImage(fImg, 2*fImg->width() + gap, 0, SkSamplingOptions(), &paint);
}
void onDrawContent(SkCanvas* canvas) override {
diff --git a/samplecode/SampleTextureUpload.cpp b/samplecode/SampleTextureUpload.cpp
index 026cb4a..4f0757e 100644
--- a/samplecode/SampleTextureUpload.cpp
+++ b/samplecode/SampleTextureUpload.cpp
@@ -107,8 +107,6 @@
void onDrawContent(SkCanvas* canvas) override {
#if SK_SUPPORT_GPU
- SkPaint paint;
-
auto direct = GrAsDirectContext(canvas->recordingContext());
if (direct) {
// One-time context-specific setup.
@@ -133,7 +131,7 @@
for (int x = 0; x < fTileCols; x++) {
int currentIndex = y * fTileCols + x;
canvas->drawImage(fTextures[currentIndex]->getImage(),
- x * fTileSize, y * fTileSize, &paint);
+ x * fTileSize, y * fTileSize);
}
}
}
diff --git a/samplecode/SampleTiming.cpp b/samplecode/SampleTiming.cpp
index 4dce6d1..9e237a0 100644
--- a/samplecode/SampleTiming.cpp
+++ b/samplecode/SampleTiming.cpp
@@ -72,9 +72,12 @@
for (int y = 0; y < H; y++)
for (int x = 0; x < W; x++) {
auto start = std::chrono::steady_clock::now();
- offscreen->getCanvas()->drawImageRect(fImg, SkRect::MakeXYWH(x,y,1,1)
- , SkRect::MakeXYWH(0,0,1024,1024)
- , /*paint=*/nullptr);
+ offscreen->getCanvas()->drawImageRect(fImg,
+ SkRect::MakeXYWH(x,y,1,1),
+ SkRect::MakeXYWH(0,0,1024,1024),
+ SkSamplingOptions(),
+ /*paint=*/nullptr,
+ SkCanvas::kStrict_SrcRectConstraint);
auto elapsed = std::chrono::steady_clock::now() - start;
cost[y][x] = elapsed.count();