add makeShader() to SkBitmap, and deprecate SkShader version
Bug: skia:8937
Change-Id: I42f011e04937a751222bd8ecc6c69b45cf9626a2
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/206681
Reviewed-by: Brian Salomon <bsalomon@google.com>
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: Mike Reed <reed@google.com>
diff --git a/bench/AlternatingColorPatternBench.cpp b/bench/AlternatingColorPatternBench.cpp
index 639f1f6..b2735cf 100644
--- a/bench/AlternatingColorPatternBench.cpp
+++ b/bench/AlternatingColorPatternBench.cpp
@@ -113,7 +113,7 @@
int w = 40;
int h = 40;
makebm(&fBmp, w, h);
- fBmShader = SkShader::MakeBitmapShader(fBmp, SkTileMode::kRepeat, SkTileMode::kRepeat);
+ fBmShader = fBmp.makeShader(SkTileMode::kRepeat, SkTileMode::kRepeat);
int offset = 2;
int count = 0;
for (int j = 0; j < NY; ++j) {
diff --git a/bench/GameBench.cpp b/bench/GameBench.cpp
index ef1595f..4096e0d 100644
--- a/bench/GameBench.cpp
+++ b/bench/GameBench.cpp
@@ -141,7 +141,7 @@
SkPaint p2; // for drawVertices path
p2.setColor(0xFF000000);
p2.setFilterQuality(kLow_SkFilterQuality);
- p2.setShader(SkShader::MakeBitmapShader(fAtlas, SkTileMode::kClamp, SkTileMode::kClamp));
+ p2.setShader(fAtlas.makeShader());
for (int i = 0; i < loops; ++i, ++fNumSaved) {
if (0 == i % kNumBeforeClear) {
diff --git a/bench/RectBench.cpp b/bench/RectBench.cpp
index 4dcb3b7..0c30dc0 100644
--- a/bench/RectBench.cpp
+++ b/bench/RectBench.cpp
@@ -295,8 +295,7 @@
srcBM.allocN32Pixels(10, 1);
srcBM.eraseColor(0xFF00FF00);
- paint.setShader(SkShader::MakeBitmapShader(srcBM,
- SkTileMode::kClamp, SkTileMode::kClamp));
+ paint.setShader(srcBM.makeShader());
}
for (int loop = 0; loop < loops; loop++) {
for (size_t i = 0; i < sizes; i++) {
diff --git a/bench/RepeatTileBench.cpp b/bench/RepeatTileBench.cpp
index ccea88d..adec4f4 100644
--- a/bench/RepeatTileBench.cpp
+++ b/bench/RepeatTileBench.cpp
@@ -59,9 +59,7 @@
draw_into_bitmap(fBitmap);
- fPaint.setShader(SkShader::MakeBitmapShader(fBitmap,
- SkTileMode::kRepeat,
- SkTileMode::kRepeat));
+ fPaint.setShader(fBitmap.makeShader(SkTileMode::kRepeat, SkTileMode::kRepeat));
}
diff --git a/bench/TileBench.cpp b/bench/TileBench.cpp
index 0ce19ae..0679587 100644
--- a/bench/TileBench.cpp
+++ b/bench/TileBench.cpp
@@ -51,7 +51,7 @@
create_gradient(&bm);
- fPaint.setShader(SkShader::MakeBitmapShader(bm, xTile, yTile));
+ fPaint.setShader(bm.makeShader(xTile, yTile));
fName.printf("constXTile_");
diff --git a/docs/examples/Canvas_drawPatch.cpp b/docs/examples/Canvas_drawPatch.cpp
index b888fd4..83c3a81 100644
--- a/docs/examples/Canvas_drawPatch.cpp
+++ b/docs/examples/Canvas_drawPatch.cpp
@@ -14,8 +14,7 @@
/* { 1, 5 }, */ { 2, 4 }, { 1, 3 }, /* { 3, 1 } */ };
SkColor colors[] = { 0xbfff0000, 0xbf0000ff, 0xbfff00ff, 0xbf00ffff };
SkPoint texCoords[] = { { -30, -30 }, { 162, -30}, { 162, 162}, { -30, 162} };
- paint.setShader(SkShader::MakeBitmapShader(source, SkTileMode::kClamp,
- SkTileMode::kClamp, nullptr));
+ paint.setShader(source.makeShader());
canvas->scale(15, 15);
for (auto blend : { SkBlendMode::kSrcOver, SkBlendMode::kModulate, SkBlendMode::kXor } ) {
canvas->drawPatch(cubics, colors, texCoords, blend, paint);
diff --git a/docs/examples/Canvas_drawPatch_2_b.cpp b/docs/examples/Canvas_drawPatch_2_b.cpp
index 5863303..bb8175a 100644
--- a/docs/examples/Canvas_drawPatch_2_b.cpp
+++ b/docs/examples/Canvas_drawPatch_2_b.cpp
@@ -13,7 +13,7 @@
/* { 5, 7 }, */ { 4, 6 }, { 3, 7 }, { 1, 5 },
/* { 1, 5 }, */ { 2, 4 }, { 1, 3 }, /* { 3, 1 } */ };
SkPoint texCoords[] = { { 0, 0 }, { 0, 62}, { 62, 62}, { 62, 0 } };
- paint.setShader(SkShader::MakeBitmapShader(source, SkTileMode::kClamp, SkTileMode::kClamp));
+ paint.setShader(source.makeShader());
canvas->scale(30, 30);
canvas->drawPatch(cubics, nullptr, texCoords, paint);
}
diff --git a/docs/examples/Shader_Methods_b.cpp b/docs/examples/Shader_Methods_b.cpp
index 98885aa..f04ed31 100644
--- a/docs/examples/Shader_Methods_b.cpp
+++ b/docs/examples/Shader_Methods_b.cpp
@@ -9,7 +9,7 @@
bitmap.setInfo(SkImageInfo::MakeA8(5, 1), 5); // bitmap only contains alpha
uint8_t pixels[5] = { 0x22, 0x55, 0x88, 0xBB, 0xFF };
bitmap.setPixels(pixels);
- paint.setShader(SkShader::MakeBitmapShader(bitmap, SkTileMode::kMirror, SkTileMode::kMirror));
+ paint.setShader(bitmap.makeShader(SkTileMode::kMirror, SkTileMode::kMirror));
for (SkColor c : { SK_ColorRED, SK_ColorBLUE, SK_ColorGREEN } ) {
paint.setColor(c); // all components in color affect shader
canvas->drawCircle(50, 50, 50, paint);
diff --git a/fuzz/FuzzCanvas.cpp b/fuzz/FuzzCanvas.cpp
index c88fddf..891e0de 100644
--- a/fuzz/FuzzCanvas.cpp
+++ b/fuzz/FuzzCanvas.cpp
@@ -225,7 +225,7 @@
if (useMatrix) {
FuzzNiceMatrix(fuzz, &matrix);
}
- return SkShader::MakeBitmapShader(bitmap, tmX, tmY, useMatrix ? &matrix : nullptr);
+ return bitmap.makeShader(tmX, tmY, useMatrix ? &matrix : nullptr);
case 5:
shader1 = make_fuzz_shader(fuzz, depth - 1); // limit recursion.
FuzzNiceMatrix(fuzz, &matrix);
diff --git a/gm/aarectmodes.cpp b/gm/aarectmodes.cpp
index dbb6afb..9a39d04 100644
--- a/gm/aarectmodes.cpp
+++ b/gm/aarectmodes.cpp
@@ -111,7 +111,7 @@
0xCF, 0xCE);
const SkMatrix m = SkMatrix::MakeScale(SkIntToScalar(6), SkIntToScalar(6));
- return SkShader::MakeBitmapShader(bm, SkTileMode::kRepeat, SkTileMode::kRepeat, &m);
+ return bm.makeShader(SkTileMode::kRepeat, SkTileMode::kRepeat, &m);
}
DEF_SIMPLE_GM(aarectmodes, canvas, 640, 480) {
diff --git a/gm/badpaint.cpp b/gm/badpaint.cpp
index a1010b4..c0e5317 100644
--- a/gm/badpaint.cpp
+++ b/gm/badpaint.cpp
@@ -9,7 +9,6 @@
#include "SkCanvas.h"
#include "SkShader.h"
-
/** This GM draws with invalid paints. It should draw nothing other than the background. */
class BadPaintGM : public skiagm::GM {
public:
@@ -32,13 +31,11 @@
// Empty bitmap.
fPaints.push_back().setColor(SK_ColorGREEN);
- fPaints.back().setShader(SkShader::MakeBitmapShader(emptyBmp, SkTileMode::kClamp,
- SkTileMode::kClamp));
+ fPaints.back().setShader(emptyBmp.makeShader());
// Non-invertible local matrix.
fPaints.push_back().setColor(SK_ColorGREEN);
- fPaints.back().setShader(SkShader::MakeBitmapShader(blueBmp, SkTileMode::kClamp,
- SkTileMode::kClamp, &badMatrix));
+ fPaints.back().setShader(blueBmp.makeShader(&badMatrix));
}
void onDraw(SkCanvas* canvas) override {
diff --git a/gm/bigmatrix.cpp b/gm/bigmatrix.cpp
index fc2ea95..e54e04b 100644
--- a/gm/bigmatrix.cpp
+++ b/gm/bigmatrix.cpp
@@ -54,7 +54,7 @@
SkMatrix s;
s.reset();
s.setScale(SK_Scalar1 / 1000, SK_Scalar1 / 1000);
- paint.setShader(SkShader::MakeBitmapShader(bmp, SkTileMode::kRepeat, SkTileMode::kRepeat, &s));
+ paint.setShader(bmp.makeShader(SkTileMode::kRepeat, SkTileMode::kRepeat, &s));
paint.setAntiAlias(false);
paint.setFilterQuality(kLow_SkFilterQuality);
rect.setLTRB(pt.fX - small, pt.fY - small, pt.fX + small, pt.fY + small);
diff --git a/gm/bitmapshader.cpp b/gm/bitmapshader.cpp
index 98c864b..7143160 100644
--- a/gm/bitmapshader.cpp
+++ b/gm/bitmapshader.cpp
@@ -67,8 +67,7 @@
}
canvas->save();
- paint.setShader(SkShader::MakeBitmapShader(fBitmap, SkTileMode::kClamp,
- SkTileMode::kClamp, &s));
+ paint.setShader(fBitmap.makeShader(&s));
// draw the shader with a bitmap mask
canvas->drawBitmap(fMask, 0, 0, &paint);
@@ -90,8 +89,7 @@
canvas->translate(0, 25);
- paint.setShader(SkShader::MakeBitmapShader(fMask, SkTileMode::kRepeat,
- SkTileMode::kRepeat, &s));
+ paint.setShader(fMask.makeShader(SkTileMode::kRepeat, SkTileMode::kRepeat, &s));
paint.setColor(SK_ColorRED);
// draw the mask using the shader and a color
@@ -129,7 +127,7 @@
}
bitmap.setPixels(pixels);
- paint.setShader(SkShader::MakeBitmapShader(bitmap, SkTileMode::kMirror, SkTileMode::kMirror));
+ paint.setShader(bitmap.makeShader(SkTileMode::kMirror, SkTileMode::kMirror));
paint.setColor(SK_ColorRED);
paint.setAntiAlias(true);
canvas->drawCircle(50, 50, 50, paint);
diff --git a/gm/bmpfilterqualityrepeat.cpp b/gm/bmpfilterqualityrepeat.cpp
index 071b319..611420c 100644
--- a/gm/bmpfilterqualityrepeat.cpp
+++ b/gm/bmpfilterqualityrepeat.cpp
@@ -74,7 +74,7 @@
for (size_t q = 0; q < SK_ARRAY_COUNT(kQualities); ++q) {
constexpr SkTileMode kTM = SkTileMode::kRepeat;
- bmpPaint.setShader(SkShader::MakeBitmapShader(fBmp, kTM, kTM, &lm));
+ bmpPaint.setShader(fBmp.makeShader(kTM, kTM, &lm));
bmpPaint.setFilterQuality(kQualities[q].fQuality);
canvas->drawRect(rect, bmpPaint);
canvas->drawString(kQualities[q].fName, 20, 40, font, textPaint);
diff --git a/gm/clippedbitmapshaders.cpp b/gm/clippedbitmapshaders.cpp
index 583abb7..88499b1 100644
--- a/gm/clippedbitmapshaders.cpp
+++ b/gm/clippedbitmapshaders.cpp
@@ -84,7 +84,7 @@
s.setScale(8, 8);
s.postTranslate(SLIDE_SIZE / 2, SLIDE_SIZE / 2);
SkPaint paint;
- paint.setShader(SkShader::MakeBitmapShader(bmp, fMode, fMode, &s));
+ paint.setShader(bmp.makeShader(fMode, fMode, &s));
if (fHQ) {
paint.setFilterQuality(kHigh_SkFilterQuality);
diff --git a/gm/coloremoji_blendmodes.cpp b/gm/coloremoji_blendmodes.cpp
index b3f3f13..dccf55a 100644
--- a/gm/coloremoji_blendmodes.cpp
+++ b/gm/coloremoji_blendmodes.cpp
@@ -108,7 +108,7 @@
const SkScalar h = SkIntToScalar(H);
SkMatrix m;
m.setScale(SkIntToScalar(6), SkIntToScalar(6));
- auto s = SkShader::MakeBitmapShader(fBG, SkTileMode::kRepeat, SkTileMode::kRepeat, &m);
+ auto s = fBG.makeShader(SkTileMode::kRepeat, SkTileMode::kRepeat, &m);
SkFont labelFont(ToolUtils::create_portable_typeface());
diff --git a/gm/composeshader.cpp b/gm/composeshader.cpp
index 53003d0..3ab3828 100644
--- a/gm/composeshader.cpp
+++ b/gm/composeshader.cpp
@@ -161,10 +161,9 @@
draw_alpha8_bm(&fAlpha8Bitmap, squareLength);
SkMatrix s;
s.reset();
- fColorBitmapShader = SkShader::MakeBitmapShader(fColorBitmap, SkTileMode::kRepeat,
- SkTileMode::kRepeat, &s);
- fAlpha8BitmapShader = SkShader::MakeBitmapShader(fAlpha8Bitmap, SkTileMode::kRepeat,
- SkTileMode::kRepeat, &s);
+ fColorBitmapShader = fColorBitmap.makeShader(SkTileMode::kRepeat, SkTileMode::kRepeat, &s);
+ fAlpha8BitmapShader = fAlpha8Bitmap.makeShader(SkTileMode::kRepeat,
+ SkTileMode::kRepeat, &s);
fLinearGradientShader = make_linear_gradient_shader(squareLength);
}
diff --git a/gm/gamma.cpp b/gm/gamma.cpp
index 534f518..9cdd870 100644
--- a/gm/gamma.cpp
+++ b/gm/gamma.cpp
@@ -104,7 +104,7 @@
canvas->save();
// Black/white dither, pixel perfect. This is ground truth.
- p.setShader(SkShader::MakeBitmapShader(ditherBmp, rpt, rpt));
+ p.setShader(ditherBmp.makeShader(rpt, rpt));
p.setFilterQuality(SkFilterQuality::kNone_SkFilterQuality);
nextRect("Dither", "Reference");
@@ -113,19 +113,19 @@
// the raster pipeline into *not* snapping to nearest.
SkMatrix offsetMatrix = SkMatrix::Concat(
SkMatrix::MakeScale(-1.0f), SkMatrix::MakeTrans(0.5f, 0.0f));
- p.setShader(SkShader::MakeBitmapShader(ditherBmp, rpt, rpt, &offsetMatrix));
+ p.setShader(ditherBmp.makeShader(rpt, rpt, &offsetMatrix));
p.setFilterQuality(SkFilterQuality::kMedium_SkFilterQuality);
nextRect("Dither", "Bilerp");
// Black/white dither, scaled down by 2x. Tests minification.
SkMatrix scaleMatrix = SkMatrix::MakeScale(0.5f);
- p.setShader(SkShader::MakeBitmapShader(ditherBmp, rpt, rpt, &scaleMatrix));
+ p.setShader(ditherBmp.makeShader(rpt, rpt, &scaleMatrix));
p.setFilterQuality(SkFilterQuality::kMedium_SkFilterQuality);
nextRect("Dither", "Scale");
// 25%/75% dither, scaled down by 2x. Tests ALL aspects of minification. Specifically, are
// sRGB sources decoded to linear before computing mipmaps?
- p.setShader(SkShader::MakeBitmapShader(mipmapBmp, rpt, rpt, &scaleMatrix));
+ p.setShader(mipmapBmp.makeShader(rpt, rpt, &scaleMatrix));
p.setFilterQuality(SkFilterQuality::kMedium_SkFilterQuality);
nextRect("MipMaps", nullptr);
@@ -188,12 +188,12 @@
nextBitmap(srgbGreyBmp, "sRGB BMP");
// Bitmap wrapped in a shader (linear):
- p.setShader(SkShader::MakeBitmapShader(linearGreyBmp, rpt, rpt));
+ p.setShader(linearGreyBmp.makeShader(rpt, rpt));
p.setFilterQuality(SkFilterQuality::kMedium_SkFilterQuality);
nextRect("Lnr BMP", "Shader");
// Bitmap wrapped in a shader (sRGB):
- p.setShader(SkShader::MakeBitmapShader(srgbGreyBmp, rpt, rpt));
+ p.setShader(srgbGreyBmp.makeShader(rpt, rpt));
p.setFilterQuality(SkFilterQuality::kMedium_SkFilterQuality);
nextRect("sRGB BMP", "Shader");
diff --git a/gm/giantbitmap.cpp b/gm/giantbitmap.cpp
index 03a6b5d..17b6063 100644
--- a/gm/giantbitmap.cpp
+++ b/gm/giantbitmap.cpp
@@ -107,7 +107,7 @@
SkScalar scale = 11*SK_Scalar1/12;
m.setScale(scale, scale);
}
- paint.setShader(SkShader::MakeBitmapShader(getBitmap(), fMode, fMode, &m));
+ paint.setShader(getBitmap().makeShader(fMode, fMode, &m));
paint.setFilterQuality(fDoFilter ? kLow_SkFilterQuality : kNone_SkFilterQuality);
canvas->translate(SkIntToScalar(50), SkIntToScalar(50));
diff --git a/gm/gm.cpp b/gm/gm.cpp
index 59983a1..1831aaa 100644
--- a/gm/gm.cpp
+++ b/gm/gm.cpp
@@ -45,8 +45,7 @@
SkMatrix localM;
localM.setRotate(35.f);
localM.postTranslate(10.f, 0.f);
- paint.setShader(SkShader::MakeBitmapShader(
- bmp, SkTileMode::kMirror, SkTileMode::kMirror, &localM));
+ paint.setShader(bmp.makeShader(SkTileMode::kMirror, SkTileMode::kMirror, &localM));
paint.setFilterQuality(kMedium_SkFilterQuality);
canvas->drawPaint(paint);
}
diff --git a/gm/hairmodes.cpp b/gm/hairmodes.cpp
index 8d946be..9793e93 100644
--- a/gm/hairmodes.cpp
+++ b/gm/hairmodes.cpp
@@ -63,7 +63,7 @@
SkMatrix m;
m.setScale(SkIntToScalar(6), SkIntToScalar(6));
- return SkShader::MakeBitmapShader(bm, SkTileMode::kRepeat, SkTileMode::kRepeat, &m);
+ return bm.makeShader(SkTileMode::kRepeat, SkTileMode::kRepeat, &m);
}
namespace skiagm {
diff --git a/gm/lightingshader.cpp b/gm/lightingshader.cpp
index 586ed8f..a9c4383 100644
--- a/gm/lightingshader.cpp
+++ b/gm/lightingshader.cpp
@@ -96,10 +96,8 @@
const SkMatrix& ctm = canvas->getTotalMatrix();
SkPaint paint;
- sk_sp<SkShader> diffuseShader = SkShader::MakeBitmapShader(fDiffuse,
- SkTileMode::kClamp, SkTileMode::kClamp, &matrix);
- sk_sp<SkShader> normalMap = SkShader::MakeBitmapShader(fNormalMaps[mapType],
- SkTileMode::kClamp, SkTileMode::kClamp, &matrix);
+ sk_sp<SkShader> diffuseShader = fDiffuse.makeShader(&matrix);
+ sk_sp<SkShader> normalMap = fNormalMaps[mapType].makeShader(&matrix);
sk_sp<SkNormalSource> normalSource = SkNormalSource::MakeFromNormalMap(std::move(normalMap),
ctm);
paint.setShader(SkLightingShader::Make(std::move(diffuseShader), std::move(normalSource),
diff --git a/gm/lightingshader2.cpp b/gm/lightingshader2.cpp
index faf56f0..883fbbf 100644
--- a/gm/lightingshader2.cpp
+++ b/gm/lightingshader2.cpp
@@ -79,8 +79,7 @@
SkBitmap opaqueDiffuseMap = ToolUtils::create_checkerboard_bitmap(
kTexSize, kTexSize, SK_ColorBLACK, 0xFF808080, 8);
- fOpaqueDiffuse = SkShader::MakeBitmapShader(opaqueDiffuseMap, SkTileMode::kClamp,
- SkTileMode::kClamp, &matrix);
+ fOpaqueDiffuse = opaqueDiffuseMap.makeShader(&matrix);
SkBitmap translucentDiffuseMap =
ToolUtils::create_checkerboard_bitmap(kTexSize,
@@ -88,13 +87,10 @@
SkColorSetARGB(0x55, 0x00, 0x00, 0x00),
SkColorSetARGB(0x55, 0x80, 0x80, 0x80),
8);
- fTranslucentDiffuse = SkShader::MakeBitmapShader(translucentDiffuseMap,
- SkTileMode::kClamp,
- SkTileMode::kClamp, &matrix);
+ fTranslucentDiffuse = translucentDiffuseMap.makeShader(&matrix);
SkBitmap normalMap = make_frustum_normalmap(kTexSize);
- fNormalMapShader = SkShader::MakeBitmapShader(normalMap, SkTileMode::kClamp,
- SkTileMode::kClamp, &matrix);
+ fNormalMapShader = normalMap.makeShader(&matrix);
}
diff --git a/gm/modecolorfilters.cpp b/gm/modecolorfilters.cpp
index 8467ee4..6a14fec 100644
--- a/gm/modecolorfilters.cpp
+++ b/gm/modecolorfilters.cpp
@@ -49,7 +49,7 @@
SkIntToScalar(checkSize), SkIntToScalar(checkSize));
canvas.drawRect(rect1, paint);
canvas.drawRect(rect0, paint);
- return SkShader::MakeBitmapShader(bmp, SkTileMode::kRepeat, SkTileMode::kRepeat);
+ return bmp.makeShader(SkTileMode::kRepeat, SkTileMode::kRepeat);
}
class ModeColorFilterGM : public GM {
diff --git a/gm/p3.cpp b/gm/p3.cpp
index 8266de2..297a870 100644
--- a/gm/p3.cpp
+++ b/gm/p3.cpp
@@ -179,7 +179,7 @@
SkAssertResult(pm.erase({1,0,0,1} /*in p3*/));
SkPaint paint;
- paint.setShader(SkShader::MakeBitmapShader(bm, SkTileMode::kRepeat, SkTileMode::kRepeat));
+ paint.setShader(bm.makeShader(SkTileMode::kRepeat, SkTileMode::kRepeat));
canvas->drawRect({10,10,70,70}, paint);
compare_pixel("drawBitmapAsShader P3 red, from SkPixmap::erase",
@@ -345,8 +345,7 @@
SkPaint as_shader;
as_shader.setColor4f({1,0,0,1}, p3.get());
as_shader.setFilterQuality(kLow_SkFilterQuality);
- as_shader.setShader(SkShader::MakeBitmapShader(bm, SkTileMode::kClamp
- , SkTileMode::kClamp));
+ as_shader.setShader(bm.makeShader());
canvas->drawBitmap(bm, 10,10, &as_bitmap);
compare_pixel("A8 sprite bitmap P3 red",
diff --git a/gm/perspshaders.cpp b/gm/perspshaders.cpp
index 25c3345..aaecad8 100644
--- a/gm/perspshaders.cpp
+++ b/gm/perspshaders.cpp
@@ -43,7 +43,7 @@
fBitmap = ToolUtils::create_checkerboard_bitmap(
kCellSize, kCellSize, SK_ColorBLUE, SK_ColorYELLOW, kCellSize / 10);
- fBitmapShader = SkShader::MakeBitmapShader(fBitmap, SkTileMode::kClamp, SkTileMode::kClamp);
+ fBitmapShader = fBitmap.makeShader();
SkPoint pts1[] = {
{ 0, 0 },
{ SkIntToScalar(kCellSize), SkIntToScalar(kCellSize) }
diff --git a/gm/pictureshader.cpp b/gm/pictureshader.cpp
index 0bdbca1..bfadac1 100644
--- a/gm/pictureshader.cpp
+++ b/gm/pictureshader.cpp
@@ -162,7 +162,7 @@
canvas->translate(fSceneSize * 1.1f, 0);
- auto bitmapShader = SkShader::MakeBitmapShader(fBitmap,
+ auto bitmapShader = fBitmap.makeShader(
kTileConfigs[tileMode].tmx,
kTileConfigs[tileMode].tmy,
fUseLocalMatrixWrapper
diff --git a/gm/samplerstress.cpp b/gm/samplerstress.cpp
index 22404b9..3653bfd 100644
--- a/gm/samplerstress.cpp
+++ b/gm/samplerstress.cpp
@@ -72,7 +72,7 @@
createTexture();
- fShader = SkShader::MakeBitmapShader(fTexture, SkTileMode::kRepeat, SkTileMode::kRepeat);
+ fShader = fTexture.makeShader(SkTileMode::kRepeat, SkTileMode::kRepeat);
}
void createMaskFilter() {
diff --git a/gm/shadertext3.cpp b/gm/shadertext3.cpp
index eeab37e..1e54adc 100644
--- a/gm/shadertext3.cpp
+++ b/gm/shadertext3.cpp
@@ -100,8 +100,7 @@
SkPaint fillPaint;
fillPaint.setAntiAlias(true);
fillPaint.setFilterQuality(kLow_SkFilterQuality);
- fillPaint.setShader(SkShader::MakeBitmapShader(fBmp, kTileModes[tm0],
- kTileModes[tm1], &localM));
+ fillPaint.setShader(fBmp.makeShader(kTileModes[tm0], kTileModes[tm1], &localM));
constexpr char kText[] = "B";
canvas->drawString(kText, 0, 0, font, fillPaint);
diff --git a/gm/shadows.cpp b/gm/shadows.cpp
index 1688f83..4cd1076 100644
--- a/gm/shadows.cpp
+++ b/gm/shadows.cpp
@@ -108,9 +108,7 @@
canvas->drawBitmap(fBitmap, 10, 10, &paint);
canvas->translate(0, 40);
- paint.setShader(SkShader::MakeBitmapShader(
- fBitmap, SkTileMode::kRepeat,
- SkTileMode::kRepeat));
+ paint.setShader(fBitmap.makeShader(SkTileMode::kRepeat, SkTileMode::kRepeat));
// see bug.skia.org/562 (shows bug as reported)
paint.setStyle(SkPaint::kFill_Style);
diff --git a/gm/skbug_257.cpp b/gm/skbug_257.cpp
index f74ec62..296babf 100644
--- a/gm/skbug_257.cpp
+++ b/gm/skbug_257.cpp
@@ -23,8 +23,7 @@
SkMatrix matrix;
matrix.setScale(0.75f, 0.75f);
matrix.preRotate(30.0f);
- paint->setShader(
- SkShader::MakeBitmapShader(bm, SkTileMode::kRepeat, SkTileMode::kRepeat, &matrix));
+ paint->setShader(bm.makeShader(SkTileMode::kRepeat, SkTileMode::kRepeat, &matrix));
}
static void exercise_draw_pos_text(SkCanvas* canvas,
diff --git a/gm/strokedlines.cpp b/gm/strokedlines.cpp
index 2eac0f2..13862bc 100644
--- a/gm/strokedlines.cpp
+++ b/gm/strokedlines.cpp
@@ -153,10 +153,7 @@
m.preScale(3.0f, 3.0f);
SkPaint p;
- p.setShader(SkShader::MakeBitmapShader(bm,
- SkTileMode::kRepeat,
- SkTileMode::kRepeat,
- &m));
+ p.setShader(bm.makeShader(SkTileMode::kRepeat, SkTileMode::kRepeat, &m));
fPaints.push_back(p);
}
{
diff --git a/gm/subsetshader.cpp b/gm/subsetshader.cpp
index 5b49083..aa27c79 100644
--- a/gm/subsetshader.cpp
+++ b/gm/subsetshader.cpp
@@ -31,9 +31,9 @@
matrix.preRotate(30.0f);
SkTileMode tm = SkTileMode::kRepeat;
SkPaint paint;
- paint.setShader(SkShader::MakeBitmapShader(leftBitmap, tm, tm, &matrix));
+ paint.setShader(leftBitmap.makeShader(tm, tm, &matrix));
canvas->drawRect(SkRect::MakeWH(256.0f, 128.0f), paint);
- paint.setShader(SkShader::MakeBitmapShader(rightBitmap, tm, tm, &matrix));
+ paint.setShader(rightBitmap.makeShader(tm, tm, &matrix));
canvas->drawRect(SkRect::MakeXYWH(0, 128.0f, 256.0f, 128.0f), paint);
return skiagm::DrawResult::kOk;
}
diff --git a/gm/tiledscaledbitmap.cpp b/gm/tiledscaledbitmap.cpp
index 8550805..4bf827f 100644
--- a/gm/tiledscaledbitmap.cpp
+++ b/gm/tiledscaledbitmap.cpp
@@ -62,8 +62,7 @@
mat.setScale(121.f/360.f, 93.f/288.f);
mat.postTranslate(-72, -72);
- paint.setShader(SkShader::MakeBitmapShader(fBitmap, SkTileMode::kRepeat,
- SkTileMode::kRepeat, &mat));
+ paint.setShader(fBitmap.makeShader(SkTileMode::kRepeat, SkTileMode::kRepeat, &mat));
canvas->drawRect({ 8, 8, 1008, 608 }, paint);
}
diff --git a/gm/tilemodes.cpp b/gm/tilemodes.cpp
index 73d8cac..e9af37b 100644
--- a/gm/tilemodes.cpp
+++ b/gm/tilemodes.cpp
@@ -37,7 +37,7 @@
static void setup(SkPaint* paint, const SkBitmap& bm, bool filter,
SkTileMode tmx, SkTileMode tmy) {
- paint->setShader(SkShader::MakeBitmapShader(bm, tmx, tmy));
+ paint->setShader(bm.makeShader(tmx, tmy));
paint->setFilterQuality(filter ? kLow_SkFilterQuality : kNone_SkFilterQuality);
}
@@ -159,7 +159,7 @@
static sk_sp<SkShader> make_bm(SkTileMode tx, SkTileMode ty) {
SkBitmap bm;
makebm(&bm, kN32_SkColorType, gWidth, gHeight);
- return SkShader::MakeBitmapShader(bm, tx, ty);
+ return bm.makeShader(tx, ty);
}
static sk_sp<SkShader> make_grad(SkTileMode tx, SkTileMode ty) {
diff --git a/gm/tilemodes_scaled.cpp b/gm/tilemodes_scaled.cpp
index 0a5aec0..21d4754 100644
--- a/gm/tilemodes_scaled.cpp
+++ b/gm/tilemodes_scaled.cpp
@@ -36,7 +36,7 @@
static void setup(SkPaint* paint, const SkBitmap& bm, SkFilterQuality filter_level,
SkTileMode tmx, SkTileMode tmy) {
- paint->setShader(SkShader::MakeBitmapShader(bm, tmx, tmy));
+ paint->setShader(bm.makeShader(tmx, tmy));
paint->setFilterQuality(filter_level);
}
@@ -159,7 +159,7 @@
static sk_sp<SkShader> make_bm(SkTileMode tx, SkTileMode ty) {
SkBitmap bm;
makebm(&bm, kN32_SkColorType, gWidth, gHeight);
- return SkShader::MakeBitmapShader(bm, tx, ty);
+ return bm.makeShader(tx, ty);
}
static sk_sp<SkShader> make_grad(SkTileMode tx, SkTileMode ty) {
diff --git a/gm/tinybitmap.cpp b/gm/tinybitmap.cpp
index 75e5e75..0d99f9e 100644
--- a/gm/tinybitmap.cpp
+++ b/gm/tinybitmap.cpp
@@ -37,7 +37,7 @@
SkBitmap bm = make_bitmap();
SkPaint paint;
paint.setAlphaf(0.5f);
- paint.setShader(SkShader::MakeBitmapShader(bm, SkTileMode::kRepeat, SkTileMode::kMirror));
+ paint.setShader(bm.makeShader(SkTileMode::kRepeat, SkTileMode::kMirror));
canvas->drawPaint(paint);
}
diff --git a/gm/transparency.cpp b/gm/transparency.cpp
index 8a27572..645dfb9 100644
--- a/gm/transparency.cpp
+++ b/gm/transparency.cpp
@@ -42,7 +42,7 @@
bm.eraseColor(c1);
bm.eraseArea(SkIRect::MakeLTRB(0, 0, size, size), c2);
bm.eraseArea(SkIRect::MakeLTRB(size, size, 2 * size, 2 * size), c2);
- return SkShader::MakeBitmapShader(bm, SkTileMode::kRepeat, SkTileMode::kRepeat);
+ return bm.makeShader(SkTileMode::kRepeat, SkTileMode::kRepeat);
}
// http://crrev.com/834303005
diff --git a/gm/xfermodes.cpp b/gm/xfermodes.cpp
index 542e9d3..df58a84 100644
--- a/gm/xfermodes.cpp
+++ b/gm/xfermodes.cpp
@@ -222,7 +222,7 @@
const SkScalar h = SkIntToScalar(H);
SkMatrix m;
m.setScale(SkIntToScalar(6), SkIntToScalar(6));
- auto s = SkShader::MakeBitmapShader(fBG, SkTileMode::kRepeat, SkTileMode::kRepeat, &m);
+ auto s = fBG.makeShader(SkTileMode::kRepeat, SkTileMode::kRepeat, &m);
SkPaint labelP;
labelP.setAntiAlias(true);
diff --git a/gm/xfermodes2.cpp b/gm/xfermodes2.cpp
index 0088436..df6127c 100644
--- a/gm/xfermodes2.cpp
+++ b/gm/xfermodes2.cpp
@@ -95,7 +95,7 @@
SkMatrix lm;
lm.setScale(SkIntToScalar(16), SkIntToScalar(16));
- fBG = SkShader::MakeBitmapShader(bg, SkTileMode::kRepeat, SkTileMode::kRepeat, &lm);
+ fBG = bg.makeShader(SkTileMode::kRepeat, SkTileMode::kRepeat, &lm);
SkBitmap srcBmp;
srcBmp.allocN32Pixels(kSize, kSize);
@@ -108,7 +108,7 @@
pixels[kSize * y + x] = rowColor;
}
}
- fSrc = SkShader::MakeBitmapShader(srcBmp, SkTileMode::kClamp, SkTileMode::kClamp);
+ fSrc = srcBmp.makeShader();
SkBitmap dstBmp;
dstBmp.allocN32Pixels(kSize, kSize);
pixels = reinterpret_cast<SkPMColor*>(dstBmp.getPixels());
@@ -120,7 +120,7 @@
pixels[kSize * y + x] = colColor;
}
}
- fDst = SkShader::MakeBitmapShader(dstBmp, SkTileMode::kClamp, SkTileMode::kClamp);
+ fDst = dstBmp.makeShader();
}
enum {
diff --git a/gm/xfermodes3.cpp b/gm/xfermodes3.cpp
index c7bbe44..45eb568 100644
--- a/gm/xfermodes3.cpp
+++ b/gm/xfermodes3.cpp
@@ -169,7 +169,7 @@
SkMatrix lm;
lm.setScale(SkIntToScalar(kCheckSize), SkIntToScalar(kCheckSize));
- fBGShader = SkShader::MakeBitmapShader(bg, SkTileMode::kRepeat, SkTileMode::kRepeat, &lm);
+ fBGShader = bg.makeShader(SkTileMode::kRepeat, SkTileMode::kRepeat, &lm);
SkPaint bmpPaint;
const SkPoint kCenter = { SkIntToScalar(kSize) / 2, SkIntToScalar(kSize) / 2 };
@@ -189,7 +189,7 @@
7 * SkIntToScalar(kSize) / 8, 7 * SkIntToScalar(kSize) / 8};
bmpCanvas.drawRect(rect, bmpPaint);
- fBmpShader = SkShader::MakeBitmapShader(bmp, SkTileMode::kClamp, SkTileMode::kClamp);
+ fBmpShader = bmp.makeShader();
}
enum {
diff --git a/include/core/SkBitmap.h b/include/core/SkBitmap.h
index 096409a..76f255d 100644
--- a/include/core/SkBitmap.h
+++ b/include/core/SkBitmap.h
@@ -13,12 +13,14 @@
#include "SkPixmap.h"
#include "SkPoint.h"
#include "SkRefCnt.h"
+#include "SkTileMode.h"
struct SkMask;
struct SkIRect;
struct SkRect;
class SkPaint;
class SkPixelRef;
+class SkShader;
class SkString;
/** \class SkBitmap
@@ -1094,6 +1096,11 @@
*/
bool peekPixels(SkPixmap* pixmap) const;
+ sk_sp<SkShader> makeShader(SkTileMode tmx, SkTileMode tmy,
+ const SkMatrix* localMatrix = nullptr) const;
+ // defaults to Clamp in x, and y
+ sk_sp<SkShader> makeShader(const SkMatrix* localMatrix = nullptr) const;
+
/** Asserts if internal values are illegal or inconsistent. Only available if
SK_DEBUG is defined at compile time.
*/
diff --git a/include/core/SkShader.h b/include/core/SkShader.h
index dc8d08b..b5ca2da 100644
--- a/include/core/SkShader.h
+++ b/include/core/SkShader.h
@@ -28,6 +28,10 @@
class GrContext;
class GrFragmentProcessor;
+#ifndef SK_SUPPORT_LEGACY_BITMAPSHADER_FACTORY
+#define SK_SUPPORT_LEGACY_BITMAPSHADER_FACTORY
+#endif
+
/** \class SkShader
*
* Shaders specify the source color(s) for what is being drawn. If a paint
@@ -211,7 +215,9 @@
static sk_sp<SkShader> MakeMixer(sk_sp<SkShader> dst, sk_sp<SkShader> src, sk_sp<SkMixer>);
- /** Call this to create a new shader that will draw with the specified bitmap.
+#ifdef SK_SUPPORT_LEGACY_BITMAPSHADER_FACTORY
+ /** DEPRECATED. call bitmap.makeShader()
+ * Call this to create a new shader that will draw with the specified bitmap.
*
* If the bitmap cannot be used (e.g. has no pixels, or its dimensions
* exceed implementation limits (currently at 64K - 1)) then SkEmptyShader
@@ -227,6 +233,7 @@
*/
static sk_sp<SkShader> MakeBitmapShader(const SkBitmap& src, SkTileMode tmx, SkTileMode tmy,
const SkMatrix* localMatrix = nullptr);
+#endif
#ifdef SK_SUPPORT_LEGACY_TILEMODE_ENUM
static sk_sp<SkShader> MakeBitmapShader(const SkBitmap& src, TileMode tmx, TileMode tmy,
const SkMatrix* localMatrix = nullptr) {
diff --git a/samplecode/SampleAARectModes.cpp b/samplecode/SampleAARectModes.cpp
index 3b9bb76..c876712 100644
--- a/samplecode/SampleAARectModes.cpp
+++ b/samplecode/SampleAARectModes.cpp
@@ -65,7 +65,7 @@
SkMatrix m;
m.setScale(SkIntToScalar(6), SkIntToScalar(6));
- return SkShader::MakeBitmapShader(bm, SkTileMode::kRepeat, SkTileMode::kRepeat, &m);
+ return bm.makeShader(SkTileMode::kRepeat, SkTileMode::kRepeat, &m);
}
class AARectsModesView : public Sample {
diff --git a/samplecode/SampleAARects.cpp b/samplecode/SampleAARects.cpp
index d909af3..d556482 100644
--- a/samplecode/SampleAARects.cpp
+++ b/samplecode/SampleAARects.cpp
@@ -59,8 +59,7 @@
SkPaint bluePaint;
bluePaint.setARGB(0xff, 0x0, 0x0, 0xff);
SkPaint bmpPaint;
- bmpPaint.setShader(SkShader::MakeBitmapShader(fBitmap, SkTileMode::kRepeat,
- SkTileMode::kRepeat));
+ bmpPaint.setShader(fBitmap.makeShader(SkTileMode::kRepeat, SkTileMode::kRepeat));
bluePaint.setStrokeWidth(3);
bmpPaint.setStrokeWidth(3);
diff --git a/samplecode/SampleCamera.cpp b/samplecode/SampleCamera.cpp
index e3aca05..3b3b98c 100644
--- a/samplecode/SampleCamera.cpp
+++ b/samplecode/SampleCamera.cpp
@@ -39,10 +39,7 @@
SkMatrix matrix;
matrix.setRectToRect(src, dst, SkMatrix::kFill_ScaleToFit);
- fShaders.push_back(SkShader::MakeBitmapShader(bm,
- SkTileMode::kClamp,
- SkTileMode::kClamp,
- &matrix));
+ fShaders.push_back(bm.makeShader(&matrix));
} else {
break;
}
diff --git a/samplecode/SampleHairModes.cpp b/samplecode/SampleHairModes.cpp
index 3885bf2..781d212 100644
--- a/samplecode/SampleHairModes.cpp
+++ b/samplecode/SampleHairModes.cpp
@@ -64,7 +64,7 @@
SkMatrix m;
m.setScale(SkIntToScalar(6), SkIntToScalar(6));
- return SkShader::MakeBitmapShader(bm, SkTileMode::kRepeat, SkTileMode::kRepeat, &m);
+ return bm.makeShader(SkTileMode::kRepeat, SkTileMode::kRepeat, &m);
}
class HairModesView : public Sample {
diff --git a/samplecode/SampleLighting.cpp b/samplecode/SampleLighting.cpp
index a3dc621..154b7c3 100644
--- a/samplecode/SampleLighting.cpp
+++ b/samplecode/SampleLighting.cpp
@@ -38,17 +38,14 @@
fRect = SkRect::MakeIWH(diffuseBitmap.width(), diffuseBitmap.height());
- fDiffuseShader = SkShader::MakeBitmapShader(diffuseBitmap,
- SkTileMode::kClamp, SkTileMode::kClamp);
+ fDiffuseShader = diffuseBitmap.makeShader();
}
{
SkBitmap normalBitmap;
SkAssertResult(GetResourceAsBitmap("images/brickwork_normal-map.jpg", &normalBitmap));
- sk_sp<SkShader> normalMap = SkShader::MakeBitmapShader(normalBitmap,
- SkTileMode::kClamp,
- SkTileMode::kClamp);
+ sk_sp<SkShader> normalMap = normalBitmap.makeShader();
fNormalSource = SkNormalSource::MakeFromNormalMap(std::move(normalMap), SkMatrix::I());
}
}
diff --git a/samplecode/SampleLitAtlas.cpp b/samplecode/SampleLitAtlas.cpp
index a9e5762..b2d7f97 100644
--- a/samplecode/SampleLitAtlas.cpp
+++ b/samplecode/SampleLitAtlas.cpp
@@ -132,12 +132,10 @@
SkMatrix m;
m.setRSXform(xforms[i]);
- sk_sp<SkShader> normalMap = SkShader::MakeBitmapShader(fAtlas, SkTileMode::kClamp,
- SkTileMode::kClamp, &normalMat);
+ sk_sp<SkShader> normalMap = fAtlas.makeShader(&normalMat);
sk_sp<SkNormalSource> normalSource = SkNormalSource::MakeFromNormalMap(
std::move(normalMap), m);
- sk_sp<SkShader> diffuseShader = SkShader::MakeBitmapShader(fAtlas,
- SkTileMode::kClamp, SkTileMode::kClamp, &diffMat);
+ sk_sp<SkShader> diffuseShader = fAtlas.makeShader(&diffMat);
paint.setShader(SkLightingShader::Make(std::move(diffuseShader),
std::move(normalSource), fLights));
diff --git a/samplecode/SamplePatch.cpp b/samplecode/SamplePatch.cpp
index b7f5f36..9bd9dbd 100644
--- a/samplecode/SamplePatch.cpp
+++ b/samplecode/SamplePatch.cpp
@@ -33,7 +33,7 @@
// decode_file("/skimages/progressivejpg.jpg", &bm);
decode_file("/skimages/logo.png", &bm);
size->set(bm.width(), bm.height());
- return SkShader::MakeBitmapShader(bm, SkTileMode::kClamp, SkTileMode::kClamp);
+ return bm.makeShader();
}
static sk_sp<SkShader> make_shader1(const SkIPoint& size) {
diff --git a/samplecode/SampleRepeatTile.cpp b/samplecode/SampleRepeatTile.cpp
index f2d51de..dfde1cf 100644
--- a/samplecode/SampleRepeatTile.cpp
+++ b/samplecode/SampleRepeatTile.cpp
@@ -35,7 +35,7 @@
SkBitmap bm;
make_bitmap(&bm);
- paint->setShader(SkShader::MakeBitmapShader(bm, tm, tm));
+ paint->setShader(bm.makeShader(tm, tm));
}
class RepeatTileView : public Sample {
diff --git a/samplecode/SampleShaders.cpp b/samplecode/SampleShaders.cpp
index 65dbe07b..8bc0807 100644
--- a/samplecode/SampleShaders.cpp
+++ b/samplecode/SampleShaders.cpp
@@ -29,7 +29,7 @@
colors[1] = SkColorSetARGB(0, 0, 0, 0);
auto shaderA = SkGradientShader::MakeLinear(pts, colors, nullptr, 2, SkTileMode::kClamp);
- auto shaderB = SkShader::MakeBitmapShader(bm, SkTileMode::kClamp, SkTileMode::kClamp);
+ auto shaderB = bm.makeShader();
return SkShader::MakeComposeShader(std::move(shaderB), std::move(shaderA), SkBlendMode::kDstIn);
}
diff --git a/samplecode/SampleSlides.cpp b/samplecode/SampleSlides.cpp
index a69bead..2ede187 100644
--- a/samplecode/SampleSlides.cpp
+++ b/samplecode/SampleSlides.cpp
@@ -246,7 +246,7 @@
decode_file("/skimages/logo.gif", &bm);
size->set(bm.width(), bm.height());
- return SkShader::MakeBitmapShader(bm, SkTileMode::kClamp, SkTileMode::kClamp);
+ return bm.makeShader();
}
static sk_sp<SkShader> make_shader1(const SkIPoint& size) {
diff --git a/samplecode/SampleTiling.cpp b/samplecode/SampleTiling.cpp
index 169c5b7..3c219a2 100644
--- a/samplecode/SampleTiling.cpp
+++ b/samplecode/SampleTiling.cpp
@@ -42,7 +42,7 @@
}
static void setup(SkPaint* paint, const SkBitmap& bm, bool filter, SkTileMode tmx, SkTileMode tmy) {
- paint->setShader(SkShader::MakeBitmapShader(bm, tmx, tmy));
+ paint->setShader(bm.makeShader(tmx, tmy));
paint->setFilterQuality(filter ? kLow_SkFilterQuality : kNone_SkFilterQuality);
}
diff --git a/samplecode/SampleVertices.cpp b/samplecode/SampleVertices.cpp
index 0435f3e..a6c5ab3 100644
--- a/samplecode/SampleVertices.cpp
+++ b/samplecode/SampleVertices.cpp
@@ -34,7 +34,7 @@
pixels[0] = pixels[2] = color0;
pixels[1] = pixels[3] = color1;
- return SkShader::MakeBitmapShader(bm, SkTileMode::kRepeat, SkTileMode::kRepeat);
+ return bm.makeShader(SkTileMode::kRepeat, SkTileMode::kRepeat);
}
static sk_sp<SkShader> make_shader1(const SkIPoint& size) {
diff --git a/samplecode/SampleXfermodesBlur.cpp b/samplecode/SampleXfermodesBlur.cpp
index e5a0d89..079ba3c 100644
--- a/samplecode/SampleXfermodesBlur.cpp
+++ b/samplecode/SampleXfermodesBlur.cpp
@@ -104,7 +104,7 @@
const SkScalar h = SkIntToScalar(H);
SkMatrix m;
m.setScale(SkIntToScalar(6), SkIntToScalar(6));
- auto s = SkShader::MakeBitmapShader(fBG, SkTileMode::kRepeat, SkTileMode::kRepeat, &m);
+ auto s = fBG.makeShader(SkTileMode::kRepeat, SkTileMode::kRepeat, &m);
SkFont font;
font.setEdging(SkFont::Edging::kSubpixelAntiAlias);
diff --git a/src/core/SkBitmapDevice.cpp b/src/core/SkBitmapDevice.cpp
index ed284ce..8c21959 100644
--- a/src/core/SkBitmapDevice.cpp
+++ b/src/core/SkBitmapDevice.cpp
@@ -566,8 +566,7 @@
draw.fMatrix = &SkMatrix::I();
draw.fRC = &fRCStack.rc();
SkPaint paint(origPaint);
- paint.setShader(SkShader::MakeBitmapShader(src->fBitmap, SkTileMode::kClamp,
- SkTileMode::kClamp, nullptr));
+ paint.setShader(src->fBitmap.makeShader());
draw.drawBitmap(*src->fCoverage.get(),
SkMatrix::MakeTrans(SkIntToScalar(x),SkIntToScalar(y)), nullptr, paint);
} else {
diff --git a/src/shaders/SkShader.cpp b/src/shaders/SkShader.cpp
index f5f7a97..22321f4 100644
--- a/src/shaders/SkShader.cpp
+++ b/src/shaders/SkShader.cpp
@@ -142,6 +142,7 @@
sk_sp<SkShader> SkShader::MakeColorShader(SkColor color) { return sk_make_sp<SkColorShader>(color); }
+#ifdef SK_SUPPORT_LEGACY_BITMAPSHADER_FACTORY
sk_sp<SkShader> SkShader::MakeBitmapShader(const SkBitmap& src, SkTileMode tmx, SkTileMode tmy,
const SkMatrix* localMatrix) {
if (localMatrix && !localMatrix->invert(nullptr)) {
@@ -149,6 +150,18 @@
}
return SkMakeBitmapShader(src, tmx, tmy, localMatrix, kIfMutable_SkCopyPixelsMode);
}
+#endif
+
+sk_sp<SkShader> SkBitmap::makeShader(SkTileMode tmx, SkTileMode tmy, const SkMatrix* lm) const {
+ if (lm && !lm->invert(nullptr)) {
+ return nullptr;
+ }
+ return SkMakeBitmapShader(*this, tmx, tmy, lm, kIfMutable_SkCopyPixelsMode);
+}
+
+sk_sp<SkShader> SkBitmap::makeShader(const SkMatrix* lm) const {
+ return this->makeShader(SkTileMode::kClamp, SkTileMode::kClamp, lm);
+}
#ifdef SK_SUPPORT_LEGACY_TILEMODE_ENUM
sk_sp<SkShader> SkShader::MakePictureShader(sk_sp<SkPicture> src, TileMode tmx, TileMode tmy,
diff --git a/tests/CanvasTest.cpp b/tests/CanvasTest.cpp
index 3046c4d..8bd0092 100644
--- a/tests/CanvasTest.cpp
+++ b/tests/CanvasTest.cpp
@@ -476,7 +476,7 @@
pts[2].set(SkIntToScalar(d.fWidth), SkIntToScalar(d.fHeight));
pts[3].set(0, SkIntToScalar(d.fHeight));
SkPaint paint;
- paint.setShader(SkShader::MakeBitmapShader(d.fBitmap, SkTileMode::kClamp, SkTileMode::kClamp));
+ paint.setShader(d.fBitmap.makeShader());
canvas->drawVertices(SkVertices::MakeCopy(SkVertices::kTriangleFan_VertexMode, 4, pts, pts,
nullptr),
SkBlendMode::kModulate, paint);
diff --git a/tests/DrawBitmapRectTest.cpp b/tests/DrawBitmapRectTest.cpp
index 0fca8ff..6d3c1be 100644
--- a/tests/DrawBitmapRectTest.cpp
+++ b/tests/DrawBitmapRectTest.cpp
@@ -139,8 +139,7 @@
SkIntToScalar(239),
0, 0, SK_Scalar1);
SkPaint paint;
- paint.setShader(SkShader::MakeBitmapShader(bm, SkTileMode::kRepeat, SkTileMode::kRepeat,
- &matrix));
+ paint.setShader(bm.makeShader(SkTileMode::kRepeat, SkTileMode::kRepeat, &matrix));
SkRect r = SkRect::MakeXYWH(681, 239, 695, 253);
c.drawRect(r, paint);
diff --git a/tests/SerializationTest.cpp b/tests/SerializationTest.cpp
index 47a9550..ddfe073 100644
--- a/tests/SerializationTest.cpp
+++ b/tests/SerializationTest.cpp
@@ -603,12 +603,10 @@
normals.allocN32Pixels(kTexSize, kTexSize);
ToolUtils::create_frustum_normal_map(&normals, SkIRect::MakeWH(kTexSize, kTexSize));
- sk_sp<SkShader> normalMap = SkShader::MakeBitmapShader(normals, SkTileMode::kClamp,
- SkTileMode::kClamp, &matrix);
+ sk_sp<SkShader> normalMap = normals.makeShader(&matrix);
sk_sp<SkNormalSource> normalSource = SkNormalSource::MakeFromNormalMap(std::move(normalMap),
ctm);
- sk_sp<SkShader> diffuseShader = SkShader::MakeBitmapShader(diffuse,
- SkTileMode::kClamp, SkTileMode::kClamp, &matrix);
+ sk_sp<SkShader> diffuseShader = diffuse.makeShader(&matrix);
sk_sp<SkShader> lightingShader = SkLightingShader::Make(diffuseShader,
normalSource,
diff --git a/tests/ShaderOpacityTest.cpp b/tests/ShaderOpacityTest.cpp
index dd25429..53f3146 100644
--- a/tests/ShaderOpacityTest.cpp
+++ b/tests/ShaderOpacityTest.cpp
@@ -18,7 +18,7 @@
bmp.setInfo(info);
// test 1: bitmap without pixel data
- auto shader = SkShader::MakeBitmapShader(bmp, SkTileMode::kClamp, SkTileMode::kClamp);
+ auto shader = bmp.makeShader(SkTileMode::kClamp, SkTileMode::kClamp);
REPORTER_ASSERT(reporter, shader);
REPORTER_ASSERT(reporter, !shader->isOpaque());
@@ -26,19 +26,19 @@
bmp.allocPixels(info);
// test 2: not opaque by default
- shader = SkShader::MakeBitmapShader(bmp, SkTileMode::kClamp, SkTileMode::kClamp);
+ shader = bmp.makeShader();
REPORTER_ASSERT(reporter, shader);
REPORTER_ASSERT(reporter, !shader->isOpaque());
// test 3: explicitly opaque
bmp.setAlphaType(kOpaque_SkAlphaType);
- shader = SkShader::MakeBitmapShader(bmp, SkTileMode::kClamp, SkTileMode::kClamp);
+ shader = bmp.makeShader();
REPORTER_ASSERT(reporter, shader);
REPORTER_ASSERT(reporter, shader->isOpaque());
// test 4: explicitly not opaque
bmp.setAlphaType(kPremul_SkAlphaType);
- shader = SkShader::MakeBitmapShader(bmp, SkTileMode::kClamp, SkTileMode::kClamp);
+ shader = bmp.makeShader();
REPORTER_ASSERT(reporter, shader);
REPORTER_ASSERT(reporter, !shader->isOpaque());
}
diff --git a/tests/ShaderTest.cpp b/tests/ShaderTest.cpp
index 395fcdc..5305f6f 100644
--- a/tests/ShaderTest.cpp
+++ b/tests/ShaderTest.cpp
@@ -45,7 +45,7 @@
const SkTileMode tmx = SkTileMode::kRepeat;
const SkTileMode tmy = SkTileMode::kMirror;
- auto shader0 = SkShader::MakeBitmapShader(bm, tmx, tmy, &localM);
+ auto shader0 = bm.makeShader(tmx, tmy, &localM);
auto shader1 = SkImage::MakeFromBitmap(bm)->makeShader(tmx, tmy, &localM);
check_isaimage(reporter, shader0.get(), W, H, tmx, tmy, localM);
diff --git a/tools/ToolUtils.cpp b/tools/ToolUtils.cpp
index e9e8451..6bc0b09 100644
--- a/tools/ToolUtils.cpp
+++ b/tools/ToolUtils.cpp
@@ -83,7 +83,7 @@
bm.eraseColor(c1);
bm.eraseArea(SkIRect::MakeLTRB(0, 0, size, size), c2);
bm.eraseArea(SkIRect::MakeLTRB(size, size, 2 * size, 2 * size), c2);
- return SkShader::MakeBitmapShader(bm, SkTileMode::kRepeat, SkTileMode::kRepeat);
+ return bm.makeShader(SkTileMode::kRepeat, SkTileMode::kRepeat);
}
SkBitmap create_checkerboard_bitmap(int w, int h, SkColor c1, SkColor c2, int checkSize) {