Remove SkShaders::Lerp

It's entirely unused, and trivial for clients to create with SkSL.

Change-Id: I197986232d3706f5af3a197f0fb8e744e1009e5f
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/419796
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Kevin Lubick <kjlubick@google.com>
Reviewed-by: Mike Reed <reed@google.com>
This commit is contained in:
Brian Osman 2021-06-18 10:41:23 -04:00 committed by Skia Commit-Bot
parent 0eb35a9e35
commit f62632c7c3
11 changed files with 6 additions and 90 deletions

View File

@ -9,6 +9,9 @@ Milestone 93
* Removed SkPaint::getHash
https://review.skia.org/419336
* Removed SkShaders::Lerp. It was unused (and easy to replicate with SkRuntimeEffect).
https://review.skia.org/419796
* * *
Milestone 92

View File

@ -232,45 +232,3 @@ DEF_SIMPLE_GM(colorfiltershader, canvas, 610, 610) {
canvas->translate(0, 150);
}
}
template <typename Maker> void do_mixershader(SkCanvas* canvas, Maker&& maker) {
auto shaderA = GetResourceAsImage("images/mandrill_128.png")->makeShader(SkSamplingOptions());
const SkColor colors[] = { SK_ColorGREEN, 0 };
auto shaderB = SkGradientShader::MakeRadial({60, 60}, 55, colors, nullptr, 2,
SkTileMode::kClamp,
SkGradientShader::kInterpolateColorsInPremul_Flag,
nullptr);
const SkBlendMode modes[] = {
SkBlendMode::kSrc, SkBlendMode::kModulate, SkBlendMode::kColorBurn, SkBlendMode::kPlus,
SkBlendMode::kDstATop,
};
SkPaint paint;
SkRect r = SkRect::MakeWH(120, 120);
canvas->translate(10, 10);
for (auto mode : modes) {
canvas->save();
const int count = 6;
for (int x = 0; x < count; ++x) {
const float t = x * 1.0f / (count - 1);
paint.setShader(maker(shaderA, shaderB, mode, t));
canvas->drawRect(r, paint);
canvas->translate(r.width() + 10, 0);
}
canvas->restore();
canvas->translate(0, r.height() + 20);
}
}
DEF_SIMPLE_GM(mixershader, canvas, 800, 700) {
do_mixershader(canvas, [](sk_sp<SkShader> a, sk_sp<SkShader> b, SkBlendMode mode, float t) {
auto sh = SkShaders::Blend(mode, a, b);
return SkShaders::Lerp(t, a, sh);
});
}
DEF_SIMPLE_GM(mixershader2, canvas, 800, 700) {
do_mixershader(canvas, [](sk_sp<SkShader> a, sk_sp<SkShader> b, SkBlendMode mode, float t) {
return SkShaders::Lerp(t, a, SkShaders::Blend(mode, a, b));
});
}

View File

@ -138,7 +138,6 @@ public:
static sk_sp<SkShader> Color(SkColor);
static sk_sp<SkShader> Color(const SkColor4f&, sk_sp<SkColorSpace>);
static sk_sp<SkShader> Blend(SkBlendMode mode, sk_sp<SkShader> dst, sk_sp<SkShader> src);
static sk_sp<SkShader> Lerp(float t, sk_sp<SkShader> dst, sk_sp<SkShader> src);
private:
SkShaders() = delete;

View File

@ -21,6 +21,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
but can be an array, a TypedArray, or a MallocObj.
- `CanvasKit.*Builder` have all been removed. Clients should use Malloc instead.
### Removed
- `CanvasKit.Shader.MakeLerp`, the same effect can be easily generated with `RuntimeEffect`
### Known Bugs
- On legacy (non-ANGLE) SwiftShader, certain paths that require tessellation may not be drawn
correctly when using a WebGL-backed surface. (skbug.com/11965)

View File

@ -1584,7 +1584,6 @@ EMSCRIPTEN_BINDINGS(Skia) {
return SkShaders::Color(ptrToSkColor4f(cPtr), colorSpace);
})
)
.class_function("MakeLerp", select_overload<sk_sp<SkShader>(float, sk_sp<SkShader>, sk_sp<SkShader>)>(&SkShaders::Lerp))
.class_function("MakeFractalNoise", optional_override([](
SkScalar baseFreqX, SkScalar baseFreqY,
int numOctaves, SkScalar seed,

View File

@ -636,7 +636,6 @@ var CanvasKit = {
MakeBlend: function() {},
MakeColor: function() {},
MakeFractalNoise: function() {},
MakeLerp: function() {},
MakeLinearGradient: function() {},
MakeRadialGradient: function() {},
MakeSweepGradient: function() {},

View File

@ -884,7 +884,6 @@ CanvasKit.onRuntimeInitialized = function() {
// TODO(kjlubick) remove deprecated names.
CanvasKit.Shader.Blend = CanvasKit.Shader.MakeBlend;
CanvasKit.Shader.Color = CanvasKit.Shader.MakeColor;
CanvasKit.Shader.Lerp = CanvasKit.Shader.MakeLerp;
CanvasKit.Shader.MakeLinearGradient = function(start, end, colors, pos, mode, localMatrix, flags, colorSpace) {
colorSpace = colorSpace || null;

View File

@ -717,7 +717,6 @@ function shaderTests(CK: CanvasKit) {
const s1 = CK.Shader.MakeColor([0.8, 0.2, 0.5, 0.9], // $ExpectType Shader
CK.ColorSpace.SRGB);
const s2 = CK.Shader.MakeBlend(CK.BlendMode.Src, s1, s1); // $ExpectType Shader
const s3 = CK.Shader.MakeLerp(0.3, s1, s2); // $ExpectType Shader
const s4 = CK.Shader.MakeLinearGradient(// $ExpectType Shader
[0, 0], [50, 100],
Float32Array.of(

View File

@ -3363,14 +3363,6 @@ export interface ShaderFactory {
MakeFractalNoise(baseFreqX: number, baseFreqY: number, octaves: number, seed: number,
tileW: number, tileH: number): Shader;
/**
* Returns a shader is a linear interpolation combines the given shaders with a BlendMode.
* @param t - range of [0.0, 1.0], indicating how far we should be between one and two.
* @param one
* @param two
*/
MakeLerp(t: number, one: Shader, two: Shader): Shader;
/**
* Returns a shader that generates a linear gradient between the two specified points.
* See SkGradientShader.h for more.

View File

@ -944,7 +944,6 @@ describe('Core canvas behavior', () => {
gm('combined_shaders', (canvas) => {
const rShader = CanvasKit.Shader.Color(CanvasKit.Color(255, 0, 0, 1.0)); // deprecated
const gShader = CanvasKit.Shader.MakeColor(CanvasKit.Color(0, 255, 0, 0.6));
const bShader = CanvasKit.Shader.MakeColor(CanvasKit.Color(0, 0, 255, 1.0));
const rgShader = CanvasKit.Shader.MakeBlend(CanvasKit.BlendMode.SrcOver, rShader, gShader);
@ -952,15 +951,9 @@ describe('Core canvas behavior', () => {
p.setShader(rgShader);
canvas.drawPaint(p);
const gbShader = CanvasKit.Shader.MakeLerp(0.5, gShader, bShader);
p.setShader(gbShader);
canvas.drawRect(CanvasKit.LTRBRect(5, 100, 300, 400), p);
rShader.delete();
gShader.delete();
bShader.delete();
rgShader.delete();
gbShader.delete();
p.delete();
});

View File

@ -51,34 +51,6 @@ sk_sp<SkShader> SkShaders::Blend(SkBlendMode mode, sk_sp<SkShader> dst, sk_sp<Sk
return sk_sp<SkShader>(new SkShader_Blend(mode, std::move(dst), std::move(src)));
}
sk_sp<SkShader> SkShaders::Lerp(float weight, sk_sp<SkShader> dst, sk_sp<SkShader> src) {
if (SkScalarIsNaN(weight)) {
return nullptr;
}
if (dst == src || weight <= 0) {
return dst;
}
if (weight >= 1) {
return src;
}
sk_sp<SkRuntimeEffect> effect = SkMakeCachedRuntimeEffect(
SkRuntimeEffect::MakeForShader,
"uniform shader a;"
"uniform shader b;"
"uniform half w;"
"half4 main(float2 xy) { return mix(sample(a, xy), sample(b, xy), w); }"
);
SkASSERT(effect);
sk_sp<SkShader> inputs[] = {dst, src};
return effect->makeShader(SkData::MakeWithCopy(&weight, sizeof(weight)),
inputs,
SK_ARRAY_COUNT(inputs),
nullptr,
false);
}
///////////////////////////////////////////////////////////////////////////////
static bool append_shader_or_paint(const SkStageRec& rec, SkShader* shader) {