Name common cubic resamplers
Useful in client code to document what we're doing as we switch away from SkFilterQuality. Change-Id: I05737beb99a567a46a3c3ec418b7f7da71b1ff62 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/366723 Reviewed-by: Mike Klein <mtklein@google.com> Reviewed-by: Florin Malita <fmalita@chromium.org> Commit-Queue: Mike Reed <reed@google.com>
This commit is contained in:
parent
ca21e14d77
commit
f3ac2afbb6
@ -22,7 +22,7 @@ namespace skiagm {
|
||||
// This GM exercises HighQuality anisotropic filtering.
|
||||
class AnisotropicGM : public GM {
|
||||
public:
|
||||
AnisotropicGM() : fSampling({1.0f/3, 1.0f/3}) {
|
||||
AnisotropicGM() : fSampling(SkCubicResampler::Mitchell()) {
|
||||
this->setBGColor(0xFFCCCCCC);
|
||||
}
|
||||
|
||||
|
@ -34,8 +34,8 @@ DEF_SIMPLE_GM(bicubic, canvas, 300, 320) {
|
||||
SkPaint paint;
|
||||
|
||||
SkImage::CubicResampler cubics[] = {
|
||||
{ 0, 1.0f/2 },
|
||||
{ 1.0f/3, 1.0f/3 },
|
||||
SkCubicResampler::CatmullRom(),
|
||||
SkCubicResampler::Mitchell(),
|
||||
};
|
||||
for (auto c : cubics) {
|
||||
paint.setShader(img->makeShader(SkTileMode::kClamp, SkTileMode::kClamp,
|
||||
|
@ -246,7 +246,7 @@ protected:
|
||||
|
||||
const SkSamplingOptions none(SkFilterMode::kNearest);
|
||||
const SkSamplingOptions low(SkFilterMode::kLinear);
|
||||
const SkSamplingOptions high({1.0f/3, 1.0f/3});
|
||||
const SkSamplingOptions high(SkCubicResampler::Mitchell());
|
||||
|
||||
SkScalar maxX = 0;
|
||||
for (bool antiAlias : {false, true}) {
|
||||
|
@ -92,7 +92,7 @@ protected:
|
||||
s.postTranslate(SLIDE_SIZE / 2, SLIDE_SIZE / 2);
|
||||
SkPaint paint;
|
||||
paint.setShader(bmp.makeShader(fMode, fMode,
|
||||
fHQ ? SkSamplingOptions({1.0f/3, 1.0f/3})
|
||||
fHQ ? SkSamplingOptions(SkCubicResampler::Mitchell())
|
||||
: SkSamplingOptions(),
|
||||
s));
|
||||
|
||||
|
@ -270,7 +270,7 @@ private:
|
||||
int numMipLevels = SkMipmap::ComputeLevelCount(levelDimensions.width(),
|
||||
levelDimensions.height()) + 1;
|
||||
|
||||
SkSamplingOptions sampling({1.0f/3, 1.0f/3});
|
||||
SkSamplingOptions sampling(SkCubicResampler::Mitchell());
|
||||
|
||||
bool isCompressed = false;
|
||||
if (image->isTextureBacked()) {
|
||||
|
@ -110,7 +110,7 @@ protected:
|
||||
// Create a base-layer FP for the const color processor to draw on top of.
|
||||
std::unique_ptr<GrFragmentProcessor> baseFP;
|
||||
if (paintType >= SK_ARRAY_COUNT(kPaintColors)) {
|
||||
SkSamplingOptions high({1.0f/3, 1.0f/3});
|
||||
SkSamplingOptions high(SkCubicResampler::Mitchell());
|
||||
GrColorInfo colorInfo;
|
||||
GrFPArgs args(context, SkSimpleMatrixProvider(SkMatrix::I()), high, &colorInfo);
|
||||
baseFP = as_SB(fShader)->asFragmentProcessor(args);
|
||||
|
@ -59,7 +59,7 @@ protected:
|
||||
}
|
||||
|
||||
void onDraw(SkCanvas* canvas) override {
|
||||
static const SkSamplingOptions kSampling({1.0f/3, 1.0f/3});
|
||||
static const SkSamplingOptions kSampling(SkCubicResampler::Mitchell());
|
||||
static const bool kDoAA = true;
|
||||
|
||||
{
|
||||
|
@ -41,7 +41,7 @@ static void draw_row(SkCanvas* canvas, const SkBitmap& bm, const SkMatrix& mat,
|
||||
draw_cell(canvas, bm, mat, 1 * dx, SkSamplingOptions(SkFilterMode::kLinear));
|
||||
draw_cell(canvas, bm, mat, 2 * dx, SkSamplingOptions(SkFilterMode::kLinear,
|
||||
SkMipmapMode::kLinear));
|
||||
draw_cell(canvas, bm, mat, 3 * dx, SkSamplingOptions({1.0f/3, 1.0f/3}));
|
||||
draw_cell(canvas, bm, mat, 3 * dx, SkSamplingOptions(SkCubicResampler::Mitchell()));
|
||||
}
|
||||
|
||||
class FilterIndiaBoxGM : public skiagm::GM {
|
||||
|
@ -190,7 +190,7 @@ static void draw_atlas(SkCanvas* canvas, SkImage* atlas, const SkRect& r,
|
||||
SkPaint paint;
|
||||
paint.setImageFilter(std::move(imf));
|
||||
paint.setAntiAlias(true);
|
||||
SkSamplingOptions sampling({1.0f/3, 1.0f/3});
|
||||
SkSamplingOptions sampling(SkCubicResampler::Mitchell());
|
||||
canvas->drawAtlas(atlas, &xform, &r, /*colors=*/nullptr, /*count=*/1, SkBlendMode::kSrc,
|
||||
sampling, /*cullRect=*/nullptr, &paint);
|
||||
}
|
||||
|
@ -243,7 +243,7 @@ protected:
|
||||
SkSamplingOptions(SkFilterMode::kNearest),
|
||||
SkSamplingOptions(SkFilterMode::kLinear),
|
||||
SkSamplingOptions(SkFilterMode::kLinear, SkMipmapMode::kNearest),
|
||||
SkSamplingOptions({1.0f/3, 1.0f/3})})
|
||||
SkSamplingOptions(SkCubicResampler::Mitchell())})
|
||||
{
|
||||
canvas->save();
|
||||
canvas->scale(scale, scale);
|
||||
|
@ -111,7 +111,7 @@ private:
|
||||
SkSamplingOptions(SkFilterMode::kNearest),
|
||||
SkSamplingOptions(SkFilterMode::kLinear),
|
||||
SkSamplingOptions(SkFilterMode::kLinear, SkMipmapMode::kLinear),
|
||||
SkSamplingOptions({1.0f/3, 1.0f/3}),
|
||||
SkSamplingOptions(SkCubicResampler::Mitchell()),
|
||||
};
|
||||
const bool AAs[] = { false, true };
|
||||
|
||||
|
@ -71,7 +71,8 @@ DEF_SIMPLE_GM(localmatriximageshader_filtering, canvas, 256, 256) {
|
||||
auto image = GetResourceAsImage("images/mandrill_256.png");
|
||||
SkPaint p;
|
||||
SkMatrix m = SkMatrix::Scale(2, 2);
|
||||
p.setShader(image->makeShader(SkSamplingOptions({1.0f/3, 1.0f/3}))->makeWithLocalMatrix(m));
|
||||
p.setShader(image->makeShader(SkSamplingOptions(SkCubicResampler::Mitchell()))
|
||||
->makeWithLocalMatrix(m));
|
||||
|
||||
canvas->drawRect(SkRect::MakeXYWH(0, 0, 256, 256), p);
|
||||
}
|
||||
|
@ -49,7 +49,7 @@ DEF_SIMPLE_GM(mipmap, canvas, 400, 200) {
|
||||
SkSamplingOptions(SkFilterMode::kNearest),
|
||||
SkSamplingOptions(SkFilterMode::kLinear),
|
||||
SkSamplingOptions(SkFilterMode::kLinear, SkMipmapMode::kLinear),
|
||||
SkSamplingOptions({1.0f/3, 1.0f/3}),
|
||||
SkSamplingOptions(SkCubicResampler::Mitchell()),
|
||||
};
|
||||
|
||||
canvas->translate(20, 20);
|
||||
|
@ -82,7 +82,7 @@ protected:
|
||||
SkSamplingOptions(SkFilterMode::kNearest),
|
||||
SkSamplingOptions(SkFilterMode::kLinear),
|
||||
SkSamplingOptions(SkFilterMode::kLinear, SkMipmapMode::kLinear),
|
||||
SkSamplingOptions({1.0f/3, 1.0f/3})}) {
|
||||
SkSamplingOptions(SkCubicResampler::Mitchell())}) {
|
||||
for (const auto& img : fImages) {
|
||||
canvas->save();
|
||||
canvas->concat(m);
|
||||
|
@ -157,7 +157,7 @@ protected:
|
||||
this->drawRow(canvas, SkSamplingOptions(SkFilterMode::kLinear,
|
||||
SkMipmapMode::kNearest));
|
||||
canvas->translate(0, SkIntToScalar(kCellSize));
|
||||
this->drawRow(canvas, SkSamplingOptions({1.0f/3, 1.0f/3}));
|
||||
this->drawRow(canvas, SkSamplingOptions(SkCubicResampler::Mitchell()));
|
||||
canvas->translate(0, SkIntToScalar(kCellSize));
|
||||
}
|
||||
private:
|
||||
|
@ -157,7 +157,7 @@ private:
|
||||
SkSamplingOptions(SkFilterMode::kNearest),
|
||||
SkSamplingOptions(SkFilterMode::kLinear),
|
||||
SkSamplingOptions(SkFilterMode::kLinear, SkMipmapMode::kLinear),
|
||||
SkSamplingOptions({1.0f/3, 1.0f/3}),
|
||||
SkSamplingOptions(SkCubicResampler::Mitchell()),
|
||||
};
|
||||
|
||||
constexpr SkScalar kScales[] = {1.0f, 1.2f, 0.75f};
|
||||
|
@ -77,7 +77,7 @@ protected:
|
||||
SkSamplingOptions(),
|
||||
SkSamplingOptions(SkFilterMode::kLinear),
|
||||
SkSamplingOptions(SkFilterMode::kLinear, SkMipmapMode::kLinear),
|
||||
SkSamplingOptions({1.0f/3, 1.0f/3}),
|
||||
SkSamplingOptions(SkCubicResampler::Mitchell()),
|
||||
};
|
||||
const SkRect srcRect = SkRect::MakeWH(96, 96);
|
||||
const SkSize deviceSize = SkSize::Make(16, 16);
|
||||
|
@ -98,7 +98,8 @@ DEF_SIMPLE_GPU_GM(sample_matrix_constant, ctx, rtCtx, canvas, 1024, 256) {
|
||||
SkMatrix matrix;
|
||||
SkSimpleMatrixProvider matrixProvider(matrix);
|
||||
GrColorInfo colorInfo;
|
||||
GrFPArgs args(ctx, matrixProvider, SkSamplingOptions({1.0f/3, 1.0f/3}), &colorInfo);
|
||||
GrFPArgs args(ctx, matrixProvider, SkSamplingOptions(SkCubicResampler::Mitchell()),
|
||||
&colorInfo);
|
||||
std::unique_ptr<GrFragmentProcessor> gradientFP = as_SB(shader)->asFragmentProcessor(args);
|
||||
draw(std::move(gradientFP), 512, 0);
|
||||
gradientFP = as_SB(shader)->asFragmentProcessor(args);
|
||||
|
@ -96,7 +96,8 @@ DEF_SIMPLE_GPU_GM(sample_matrix_variable, ctx, rtCtx, canvas, 512, 256) {
|
||||
SkMatrix matrix;
|
||||
SkSimpleMatrixProvider matrixProvider(matrix);
|
||||
GrColorInfo colorInfo;
|
||||
GrFPArgs args(ctx, matrixProvider, SkSamplingOptions({1.0f/3, 1.0f/3}), &colorInfo);
|
||||
GrFPArgs args(ctx, matrixProvider, SkSamplingOptions(SkCubicResampler::Mitchell()),
|
||||
&colorInfo);
|
||||
std::unique_ptr<GrFragmentProcessor> gradientFP = as_SB(shader)->asFragmentProcessor(args);
|
||||
draw(std::move(gradientFP), -128, 256, 256, 0);
|
||||
}
|
||||
|
@ -66,7 +66,7 @@ protected:
|
||||
mat.postTranslate(-72, -72);
|
||||
|
||||
paint.setShader(fBitmap.makeShader(SkTileMode::kRepeat, SkTileMode::kRepeat,
|
||||
SkSamplingOptions({1.0f/3, 1.0f/3}), mat));
|
||||
SkSamplingOptions(SkCubicResampler::Mitchell()), mat));
|
||||
canvas->drawRect({ 8, 8, 1008, 608 }, paint);
|
||||
}
|
||||
|
||||
|
@ -45,6 +45,10 @@ enum class SkMipmapMode {
|
||||
*/
|
||||
struct SkCubicResampler {
|
||||
float B, C;
|
||||
|
||||
// Historic default for kHigh_SkFilterQuality
|
||||
static constexpr SkCubicResampler Mitchell() { return {1/3.0f, 1/3.0f}; }
|
||||
static constexpr SkCubicResampler CatmullRom() { return {0.0f, 1/2.0f}; }
|
||||
};
|
||||
|
||||
struct SK_API SkSamplingOptions {
|
||||
|
Loading…
Reference in New Issue
Block a user