From: Mike Reed Date: Fri, 28 Oct 2016 19:42:34 +0000 (-0400) Subject: remove xfermode from public api X-Git-Tag: accepted/tizen/5.0/unified/20181102.025319~73^2~365 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=7d954ad797176afedb9262fdea4507d0fc60eb9d;p=platform%2Fupstream%2FlibSkiaSharp.git remove xfermode from public api BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=4020 CQ_INCLUDE_TRYBOTS=master.client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot Change-Id: I19cd056f2af778f10e8c6c2b7b2735593b43dbac Reviewed-on: https://skia-review.googlesource.com/4020 Reviewed-by: Florin Malita Reviewed-by: Mike Klein Commit-Queue: Mike Reed --- diff --git a/bench/BlurRoundRectBench.cpp b/bench/BlurRoundRectBench.cpp index 713996c..123e889 100644 --- a/bench/BlurRoundRectBench.cpp +++ b/bench/BlurRoundRectBench.cpp @@ -45,7 +45,7 @@ public: SkLayerDrawLooper::LayerInfo info; info.fPaintBits = SkLayerDrawLooper::kMaskFilter_Bit | SkLayerDrawLooper::kColorFilter_Bit; - info.fColorMode = SkXfermode::kSrc_Mode; + info.fColorMode = (SK_XFERMODE_MODE_PARAM)SkBlendMode::kSrc; info.fOffset = SkPoint::Make(SkIntToScalar(-1), SkIntToScalar(0)); info.fPostTranslate = false; SkPaint* paint = looperBuilder.addLayerOnTop(info); @@ -53,7 +53,7 @@ public: SkBlurMask::ConvertRadiusToSigma(0.5), SkBlurMaskFilter::kHighQuality_BlurFlag)); paint->setColorFilter(SkColorFilter::MakeModeFilter(SK_ColorLTGRAY, - SkXfermode::kSrcIn_Mode)); + SkBlendMode::kSrcIn)); paint->setColor(SK_ColorGRAY); } { diff --git a/bench/ColorFilterBench.cpp b/bench/ColorFilterBench.cpp index 7d942ce..40ec644 100644 --- a/bench/ColorFilterBench.cpp +++ b/bench/ColorFilterBench.cpp @@ -37,8 +37,7 @@ static sk_sp make_grayscale(sk_sp input) { } static sk_sp make_mode_blue(sk_sp input) { - sk_sp filter(SkColorFilter::MakeModeFilter(SK_ColorBLUE, - SkXfermode::kSrcIn_Mode)); + sk_sp filter(SkColorFilter::MakeModeFilter(SK_ColorBLUE, SkBlendMode::kSrcIn)); return SkColorFilterImageFilter::Make(std::move(filter), std::move(input)); } diff --git a/bench/GameBench.cpp b/bench/GameBench.cpp index 84da73e..9b811f0 100644 --- a/bench/GameBench.cpp +++ b/bench/GameBench.cpp @@ -201,8 +201,7 @@ protected: { SkIntToScalar(src.fRight), SkIntToScalar(src.fBottom) }, }; canvas->drawVertices(SkCanvas::kTriangles_VertexMode, - 4, verts, uvs, nullptr, nullptr, - indices, 6, p2); + 4, verts, uvs, nullptr, indices, 6, p2); } else { canvas->drawBitmapRect(fAtlas, src, dst, &p, SkCanvas::kFast_SrcRectConstraint); diff --git a/bench/ImageFilterDAGBench.cpp b/bench/ImageFilterDAGBench.cpp index 60bcb62..719e87b 100644 --- a/bench/ImageFilterDAGBench.cpp +++ b/bench/ImageFilterDAGBench.cpp @@ -31,11 +31,13 @@ protected: for (int j = 0; j < loops; j++) { sk_sp blur(SkBlurImageFilter::Make(20.0f, 20.0f, nullptr)); sk_sp inputs[kNumInputs]; + SkBlendMode modes[kNumInputs]; for (int i = 0; i < kNumInputs; ++i) { inputs[i] = blur; + modes[i] = SkBlendMode::kSrcOver; } SkPaint paint; - paint.setImageFilter(SkMergeImageFilter::Make(inputs, kNumInputs)); + paint.setImageFilter(SkMergeImageFilter::MakeN(inputs, kNumInputs, modes)); canvas->drawRect(rect, paint); } } @@ -68,10 +70,12 @@ protected: for (int j = 0; j < loops; j++) { sk_sp blur(SkBlurImageFilter::Make(20.0f, 20.0f, nullptr)); sk_sp inputs[kNumInputs]; + SkBlendMode modes[kNumInputs]; for (int i = 0; i < kNumInputs; ++i) { inputs[i] = blur; + modes[i] = SkBlendMode::kSrcOver; } - sk_sp mergeFilter = SkMergeImageFilter::Make(inputs, kNumInputs); + sk_sp mergeFilter = SkMergeImageFilter::MakeN(inputs, kNumInputs, modes); image = image->makeWithFilter(mergeFilter.get(), subset, subset, &discardSubset, &offset); SkASSERT(image && image->dimensions() == fImage->dimensions()); diff --git a/bench/MergeBench.cpp b/bench/MergeBench.cpp index 70b4744..8b6004d 100644 --- a/bench/MergeBench.cpp +++ b/bench/MergeBench.cpp @@ -81,7 +81,7 @@ protected: private: sk_sp mergeBitmaps() { return SkMergeImageFilter::Make(SkImageSource::Make(fCheckerboard), - SkImageSource::Make(fImage)); + SkImageSource::Make(fImage), SkBlendMode::kSrcOver); } bool fIsSmall; diff --git a/bench/PatchBench.cpp b/bench/PatchBench.cpp index f029584..d1d253b 100644 --- a/bench/PatchBench.cpp +++ b/bench/PatchBench.cpp @@ -127,16 +127,16 @@ protected: for (int i = 0; i < loops; i++) { switch (fVertexMode) { case kNone_VertexMode: - canvas->drawPatch(fCubics, nullptr, nullptr, nullptr, fPaint); + canvas->drawPatch(fCubics, nullptr, nullptr, fPaint); break; case kColors_VertexMode: - canvas->drawPatch(fCubics, fColors, nullptr, nullptr, fPaint); + canvas->drawPatch(fCubics, fColors, nullptr, fPaint); break; case kTexCoords_VertexMode: - canvas->drawPatch(fCubics, nullptr, fTexCoords, nullptr, fPaint); + canvas->drawPatch(fCubics, nullptr, fTexCoords, fPaint); break; case kBoth_VertexMode: - canvas->drawPatch(fCubics, fColors, fTexCoords, nullptr, fPaint); + canvas->drawPatch(fCubics, fColors, fTexCoords, fPaint); break; default: break; diff --git a/bench/PatchGridBench.cpp b/bench/PatchGridBench.cpp index db7865b..9892658 100644 --- a/bench/PatchGridBench.cpp +++ b/bench/PatchGridBench.cpp @@ -96,7 +96,7 @@ public: static const int kRows = 3; static const int kCols = 4; - fGrid.reset(kRows, kCols, SkPatchGrid::kColors_VertexType, nullptr); + fGrid.reset(kRows, kCols, SkPatchGrid::kColors_VertexType, SkBlendMode::kModulate); for (int i = 0; i < kRows; i++) { for (int j = 0; j < kCols; j++) { SkPoint points[12]; diff --git a/bench/RectoriBench.cpp b/bench/RectoriBench.cpp index ad3d4c2..86304ae 100644 --- a/bench/RectoriBench.cpp +++ b/bench/RectoriBench.cpp @@ -80,7 +80,7 @@ private: // TODO: add a color filter to better match what is seen in the wild info.fPaintBits = /* SkLayerDrawLooper::kColorFilter_Bit |*/ SkLayerDrawLooper::kMaskFilter_Bit; - info.fColorMode = SkXfermode::kDst_Mode; + info.fColorMode = (SK_XFERMODE_MODE_PARAM)SkBlendMode::kDst; info.fOffset.set(xOff, 0); info.fPostTranslate = false; diff --git a/bench/VertBench.cpp b/bench/VertBench.cpp index daff26e..0744f94 100644 --- a/bench/VertBench.cpp +++ b/bench/VertBench.cpp @@ -83,7 +83,7 @@ protected: for (int i = 0; i < loops; i++) { canvas->drawVertices(SkCanvas::kTriangles_VertexMode, PTS, - fPts, nullptr, fColors, nullptr, fIdx, IDX, paint); + fPts, nullptr, fColors, fIdx, IDX, paint); } } private: diff --git a/fuzz/FilterFuzz.cpp b/fuzz/FilterFuzz.cpp index e6f9cb3..ed47d06 100644 --- a/fuzz/FilterFuzz.cpp +++ b/fuzz/FilterFuzz.cpp @@ -369,7 +369,7 @@ static sk_sp make_color_filter() { return SkTableColorFilter::MakeARGB(tableA, tableR, tableG, tableB); } case 3: - return SkColorFilter::MakeModeFilter(make_color(), (SkXfermode::Mode)make_blendmode()); + return SkColorFilter::MakeModeFilter(make_color(), make_blendmode()); case 4: return SkColorMatrixFilter::MakeLightingFilter(make_color(), make_color()); case 5: @@ -554,7 +554,7 @@ static sk_sp make_image_filter(bool canBeNull) { case MERGE: filter = SkMergeImageFilter::Make(make_image_filter(), make_image_filter(), - (SkXfermode::Mode)make_blendmode()); + make_blendmode()); break; case COLOR: { sk_sp cf(make_color_filter()); diff --git a/gm/beziereffects.cpp b/gm/beziereffects.cpp index 0005857..6c0049b 100644 --- a/gm/beziereffects.cpp +++ b/gm/beziereffects.cpp @@ -190,7 +190,7 @@ protected: canvas->drawRect(bounds, boundsPaint); GrPaint grPaint; - grPaint.setXPFactory(GrPorterDuffXPFactory::Make(SkXfermode::kSrc_Mode)); + grPaint.setXPFactory(GrPorterDuffXPFactory::Make(SkBlendMode::kSrc)); SkAutoTUnref batch( new BezierCubicOrConicTestBatch(gp, bounds, color, klmEqs, klmSigns[c])); @@ -322,7 +322,7 @@ protected: canvas->drawRect(bounds, boundsPaint); GrPaint grPaint; - grPaint.setXPFactory(GrPorterDuffXPFactory::Make(SkXfermode::kSrc_Mode)); + grPaint.setXPFactory(GrPorterDuffXPFactory::Make(SkBlendMode::kSrc)); SkAutoTUnref batch( new BezierCubicOrConicTestBatch(gp, bounds, color, klmEqs, 1.f)); @@ -532,7 +532,7 @@ protected: canvas->drawRect(bounds, boundsPaint); GrPaint grPaint; - grPaint.setXPFactory(GrPorterDuffXPFactory::Make(SkXfermode::kSrc_Mode)); + grPaint.setXPFactory(GrPorterDuffXPFactory::Make(SkBlendMode::kSrc)); GrPathUtils::QuadUVMatrix DevToUV(pts); diff --git a/gm/bigrrectaaeffect.cpp b/gm/bigrrectaaeffect.cpp index 82ba7cb..be37d70 100644 --- a/gm/bigrrectaaeffect.cpp +++ b/gm/bigrrectaaeffect.cpp @@ -75,7 +75,7 @@ protected: canvas->drawRect(testBounds, paint); GrPaint grPaint; - grPaint.setXPFactory(GrPorterDuffXPFactory::Make(SkXfermode::kSrc_Mode)); + grPaint.setXPFactory(GrPorterDuffXPFactory::Make(SkBlendMode::kSrc)); SkRRect rrect = fRRect; rrect.offset(SkIntToScalar(x + kGap), SkIntToScalar(y + kGap)); diff --git a/gm/blurredclippedcircle.cpp b/gm/blurredclippedcircle.cpp index a0359c3..e2cb288 100644 --- a/gm/blurredclippedcircle.cpp +++ b/gm/blurredclippedcircle.cpp @@ -69,7 +69,7 @@ protected: SkBlurMaskFilter::kHighQuality_BlurFlag)); paint.setColorFilter(SkColorFilter::MakeModeFilter( SK_ColorRED, - SkXfermode::kSrcIn_Mode)); + SkBlendMode::kSrcIn)); paint.setAntiAlias(true); canvas->drawRRect(rr, paint); diff --git a/gm/blurroundrect.cpp b/gm/blurroundrect.cpp index 5982d06..8e5b89d 100644 --- a/gm/blurroundrect.cpp +++ b/gm/blurroundrect.cpp @@ -51,7 +51,7 @@ public: SkLayerDrawLooper::LayerInfo info; info.fPaintBits = SkLayerDrawLooper::kMaskFilter_Bit | SkLayerDrawLooper::kColorFilter_Bit; - info.fColorMode = SkXfermode::kSrc_Mode; + info.fColorMode = (SK_XFERMODE_MODE_PARAM)SkBlendMode::kSrc; info.fOffset = SkPoint::Make(SkIntToScalar(-1), SkIntToScalar(0)); info.fPostTranslate = false; SkPaint* paint = looperBuilder.addLayerOnTop(info); @@ -61,7 +61,7 @@ public: SkBlurMaskFilter::kHighQuality_BlurFlag)); paint->setColorFilter(SkColorFilter::MakeModeFilter( sk_tool_utils::color_to_565(SK_ColorLTGRAY), - SkXfermode::kSrcIn_Mode)); + SkBlendMode::kSrcIn)); paint->setColor(sk_tool_utils::color_to_565(SK_ColorGRAY)); } { diff --git a/gm/color4f.cpp b/gm/color4f.cpp index c1535cc..b5cda9f 100644 --- a/gm/color4f.cpp +++ b/gm/color4f.cpp @@ -47,7 +47,7 @@ static sk_sp make_cf1() { } static sk_sp make_cf2() { - return SkColorFilter::MakeModeFilter(0x8044CC88, SkXfermode::kSrcATop_Mode); + return SkColorFilter::MakeModeFilter(0x8044CC88, SkBlendMode::kSrcATop); } static void draw_into_canvas(SkCanvas* canvas) { diff --git a/gm/colorfilterimagefilter.cpp b/gm/colorfilterimagefilter.cpp index 7b54e5e..6e07ed3 100644 --- a/gm/colorfilterimagefilter.cpp +++ b/gm/colorfilterimagefilter.cpp @@ -39,7 +39,7 @@ static sk_sp cf_make_grayscale() { } static sk_sp cf_make_colorize(SkColor color) { - return SkColorFilter::MakeModeFilter(color, SkXfermode::kSrc_Mode); + return SkColorFilter::MakeModeFilter(color, SkBlendMode::kSrc); } static void sk_gm_get_colorfilters(SkTArray>* array) { diff --git a/gm/composeshader.cpp b/gm/composeshader.cpp index b58f91f..785f2bf 100644 --- a/gm/composeshader.cpp +++ b/gm/composeshader.cpp @@ -14,7 +14,7 @@ #include "SkString.h" #include "SkXfermode.h" -static sk_sp make_shader(SkXfermode::Mode mode) { +static sk_sp make_shader(SkBlendMode mode) { SkPoint pts[2]; SkColor colors[2]; @@ -30,14 +30,13 @@ static sk_sp make_shader(SkXfermode::Mode mode) { colors[1] = SkColorSetARGB(0x80, 0, 0, 0); auto shaderB = SkGradientShader::MakeLinear(pts, colors, nullptr, 2, SkShader::kClamp_TileMode); - return SkShader::MakeComposeShader(std::move(shaderA), std::move(shaderB), - SkXfermode::Make(mode)); + return SkShader::MakeComposeShader(std::move(shaderA), std::move(shaderB), mode); } class ComposeShaderGM : public skiagm::GM { public: ComposeShaderGM() { - fShader = make_shader(SkXfermode::kDstIn_Mode); + fShader = make_shader(SkBlendMode::kDstIn); } protected: @@ -79,8 +78,8 @@ protected: void onDraw(SkCanvas* canvas) override { sk_sp shaders[] = { - make_shader(SkXfermode::kDstIn_Mode), - make_shader(SkXfermode::kSrcOver_Mode), + make_shader(SkBlendMode::kDstIn), + make_shader(SkBlendMode::kSrcOver), }; SkPaint paint; @@ -175,13 +174,13 @@ protected: } void onDraw(SkCanvas* canvas) override { - auto xfer(SkXfermode::Make(SkXfermode::kDstOver_Mode)); + SkBlendMode mode = SkBlendMode::kDstOver; sk_sp shaders[] = { // gradient should appear over color bitmap - SkShader::MakeComposeShader(fLinearGradientShader, fColorBitmapShader, xfer), + SkShader::MakeComposeShader(fLinearGradientShader, fColorBitmapShader, mode), // gradient should appear over alpha8 bitmap colorized by the paint color - SkShader::MakeComposeShader(fLinearGradientShader, fAlpha8BitmapShader, xfer), + SkShader::MakeComposeShader(fLinearGradientShader, fAlpha8BitmapShader, mode), }; SkPaint paint; @@ -253,9 +252,8 @@ DEF_SIMPLE_GM(composeshader_bitmap2, canvas, 200, 200) { sk_sp skMaskImage = SkImage::MakeFromBitmap(skMask); sk_sp skMaskShader = skMaskImage->makeShader( SkShader::kClamp_TileMode, SkShader::kClamp_TileMode); - sk_sp dstInMode = SkXfermode::Make(SkXfermode::kSrcIn_Mode); paint.setShader( - SkShader::MakeComposeShader(skMaskShader, skSrcShader, dstInMode)); + SkShader::MakeComposeShader(skMaskShader, skSrcShader, SkBlendMode::kSrcIn)); canvas->drawRect(r, paint); } diff --git a/gm/convexpolyeffect.cpp b/gm/convexpolyeffect.cpp index f169639..d62838d 100644 --- a/gm/convexpolyeffect.cpp +++ b/gm/convexpolyeffect.cpp @@ -180,7 +180,7 @@ protected: } GrPaint grPaint; - grPaint.setXPFactory(GrPorterDuffXPFactory::Make(SkXfermode::kSrc_Mode)); + grPaint.setXPFactory(GrPorterDuffXPFactory::Make(SkBlendMode::kSrc)); grPaint.addCoverageFragmentProcessor(std::move(fp)); SkAutoTUnref batch(new PolyBoundsBatch(p.getBounds(), 0xff000000)); @@ -219,7 +219,7 @@ protected: } GrPaint grPaint; - grPaint.setXPFactory(GrPorterDuffXPFactory::Make(SkXfermode::kSrc_Mode)); + grPaint.setXPFactory(GrPorterDuffXPFactory::Make(SkBlendMode::kSrc)); grPaint.addCoverageFragmentProcessor(std::move(fp)); SkAutoTUnref batch(new PolyBoundsBatch(rect, 0xff000000)); diff --git a/gm/drawatlas.cpp b/gm/drawatlas.cpp index 43b103c..c098e15 100644 --- a/gm/drawatlas.cpp +++ b/gm/drawatlas.cpp @@ -89,7 +89,7 @@ protected: canvas->drawAtlas(atlas.get(), xform, tex, N, nullptr, &paint); canvas->translate(0, 100); - canvas->drawAtlas(atlas.get(), xform, tex, colors, N, SkXfermode::kSrcIn_Mode, nullptr, &paint); + canvas->drawAtlas(atlas.get(), xform, tex, colors, N, SkBlendMode::kSrcIn, nullptr, &paint); } private: diff --git a/gm/drawatlascolor.cpp b/gm/drawatlascolor.cpp index bf76c48..990bdcb 100644 --- a/gm/drawatlascolor.cpp +++ b/gm/drawatlascolor.cpp @@ -75,38 +75,38 @@ protected: auto atlas = make_atlas(canvas, kAtlasSize); const struct { - SkXfermode::Mode fMode; - const char* fLabel; + SkBlendMode fMode; + const char* fLabel; } gModes[] = { - { SkXfermode::kClear_Mode, "Clear" }, - { SkXfermode::kSrc_Mode, "Src" }, - { SkXfermode::kDst_Mode, "Dst" }, - { SkXfermode::kSrcOver_Mode, "SrcOver" }, - { SkXfermode::kDstOver_Mode, "DstOver" }, - { SkXfermode::kSrcIn_Mode, "SrcIn" }, - { SkXfermode::kDstIn_Mode, "DstIn" }, - { SkXfermode::kSrcOut_Mode, "SrcOut" }, - { SkXfermode::kDstOut_Mode, "DstOut" }, - { SkXfermode::kSrcATop_Mode, "SrcATop" }, - { SkXfermode::kDstATop_Mode, "DstATop" }, - { SkXfermode::kXor_Mode, "Xor" }, - { SkXfermode::kPlus_Mode, "Plus" }, - { SkXfermode::kModulate_Mode, "Mod" }, - { SkXfermode::kScreen_Mode, "Screen" }, - { SkXfermode::kOverlay_Mode, "Overlay" }, - { SkXfermode::kDarken_Mode, "Darken" }, - { SkXfermode::kLighten_Mode, "Lighten" }, - { SkXfermode::kColorDodge_Mode, "Dodge" }, - { SkXfermode::kColorBurn_Mode, "Burn" }, - { SkXfermode::kHardLight_Mode, "Hard" }, - { SkXfermode::kSoftLight_Mode, "Soft" }, - { SkXfermode::kDifference_Mode, "Diff" }, - { SkXfermode::kExclusion_Mode, "Exclusion" }, - { SkXfermode::kMultiply_Mode, "Multiply" }, - { SkXfermode::kHue_Mode, "Hue" }, - { SkXfermode::kSaturation_Mode, "Sat" }, - { SkXfermode::kColor_Mode, "Color" }, - { SkXfermode::kLuminosity_Mode, "Luminosity"}, + { SkBlendMode::kClear, "Clear" }, + { SkBlendMode::kSrc, "Src" }, + { SkBlendMode::kDst, "Dst" }, + { SkBlendMode::kSrcOver, "SrcOver" }, + { SkBlendMode::kDstOver, "DstOver" }, + { SkBlendMode::kSrcIn, "SrcIn" }, + { SkBlendMode::kDstIn, "DstIn" }, + { SkBlendMode::kSrcOut, "SrcOut" }, + { SkBlendMode::kDstOut, "DstOut" }, + { SkBlendMode::kSrcATop, "SrcATop" }, + { SkBlendMode::kDstATop, "DstATop" }, + { SkBlendMode::kXor, "Xor" }, + { SkBlendMode::kPlus, "Plus" }, + { SkBlendMode::kModulate, "Mod" }, + { SkBlendMode::kScreen, "Screen" }, + { SkBlendMode::kOverlay, "Overlay" }, + { SkBlendMode::kDarken, "Darken" }, + { SkBlendMode::kLighten, "Lighten" }, + { SkBlendMode::kColorDodge, "Dodge" }, + { SkBlendMode::kColorBurn, "Burn" }, + { SkBlendMode::kHardLight, "Hard" }, + { SkBlendMode::kSoftLight, "Soft" }, + { SkBlendMode::kDifference, "Diff" }, + { SkBlendMode::kExclusion, "Exclusion" }, + { SkBlendMode::kMultiply, "Multiply" }, + { SkBlendMode::kHue, "Hue" }, + { SkBlendMode::kSaturation, "Sat" }, + { SkBlendMode::kColor, "Color" }, + { SkBlendMode::kLuminosity, "Luminosity"}, }; SkColor gColors[] = { diff --git a/gm/drawlooper.cpp b/gm/drawlooper.cpp index df8256f..8275939 100644 --- a/gm/drawlooper.cpp +++ b/gm/drawlooper.cpp @@ -73,7 +73,7 @@ private: SkLayerDrawLooper::LayerInfo info; info.fPaintBits = SkLayerDrawLooper::kStyle_Bit | SkLayerDrawLooper::kMaskFilter_Bit; - info.fColorMode = SkXfermode::kSrc_Mode; + info.fColorMode = (SK_XFERMODE_MODE_PARAM)SkBlendMode::kSrc; for (size_t i = 0; i < SK_ARRAY_COUNT(gParams); i++) { info.fOffset.set(gParams[i].fOffset, gParams[i].fOffset); diff --git a/gm/dropshadowimagefilter.cpp b/gm/dropshadowimagefilter.cpp index 370b569..fff318e 100644 --- a/gm/dropshadowimagefilter.cpp +++ b/gm/dropshadowimagefilter.cpp @@ -87,7 +87,7 @@ protected: }; sk_sp cf(SkColorFilter::MakeModeFilter(SK_ColorMAGENTA, - SkXfermode::kSrcIn_Mode)); + SkBlendMode::kSrcIn)); sk_sp cfif(SkColorFilterImageFilter::Make(std::move(cf), nullptr)); SkImageFilter::CropRect cropRect(SkRect::Make(SkIRect::MakeXYWH(10, 10, 44, 44)), SkImageFilter::CropRect::kHasAll_CropEdge); diff --git a/gm/emboss.cpp b/gm/emboss.cpp index e7c5800..c4c6209 100644 --- a/gm/emboss.cpp +++ b/gm/emboss.cpp @@ -49,7 +49,7 @@ protected: // this combination of emboss+colorfilter used to crash -- so we exercise it to // confirm that we have a fix. - paint.setColorFilter(SkColorFilter::MakeModeFilter(0xFFFF0000, SkXfermode::kSrcATop_Mode)); + paint.setColorFilter(SkColorFilter::MakeModeFilter(0xFFFF0000, SkBlendMode::kSrcATop)); canvas->translate(bm.width() + SkIntToScalar(10), 0); canvas->drawBitmap(bm, 10, 10, &paint); } diff --git a/gm/gamut.cpp b/gm/gamut.cpp index a54214e..9f45d6e 100644 --- a/gm/gamut.cpp +++ b/gm/gamut.cpp @@ -104,7 +104,7 @@ struct VerticesCellRenderer : public CellRenderer { SkPoint::Make(0, gScalarSize) }; canvas->drawVertices(SkCanvas::kTriangleFan_VertexMode, 4, vertices, nullptr, fColors, - nullptr, nullptr, 0, paint); + SkBlendMode::kModulate, nullptr, 0, paint); } const char* label() override { return "Vertices"; diff --git a/gm/imagefiltersbase.cpp b/gm/imagefiltersbase.cpp index b30267a..440f6b2 100644 --- a/gm/imagefiltersbase.cpp +++ b/gm/imagefiltersbase.cpp @@ -194,7 +194,7 @@ protected: draw_bitmap, }; - auto cf = SkColorFilter::MakeModeFilter(SK_ColorRED, SkXfermode::kSrcIn_Mode); + auto cf = SkColorFilter::MakeModeFilter(SK_ColorRED, SkBlendMode::kSrcIn); sk_sp filters[] = { nullptr, IdentityImageFilter::Make(nullptr), @@ -318,7 +318,7 @@ public: ImageFiltersText_CF() : ImageFiltersTextBaseGM("color") {} void installFilter(SkPaint* paint) override { - paint->setColorFilter(SkColorFilter::MakeModeFilter(SK_ColorBLUE, SkXfermode::kSrcIn_Mode)); + paint->setColorFilter(SkColorFilter::MakeModeFilter(SK_ColorBLUE, SkBlendMode::kSrcIn)); } }; DEF_GM( return new ImageFiltersText_CF; ) diff --git a/gm/imagefilterscropped.cpp b/gm/imagefilterscropped.cpp index 0f36c83..e5702aa 100644 --- a/gm/imagefilterscropped.cpp +++ b/gm/imagefilterscropped.cpp @@ -115,7 +115,7 @@ protected: }; sk_sp cf(SkColorFilter::MakeModeFilter(SK_ColorBLUE, - SkXfermode::kSrcIn_Mode)); + SkBlendMode::kSrcIn)); SkImageFilter::CropRect cropRect(SkRect::Make(SkIRect::MakeXYWH(10, 10, 44, 44)), SkImageFilter::CropRect::kHasAll_CropEdge); SkImageFilter::CropRect bogusRect(SkRect::Make(SkIRect::MakeXYWH(-100, -100, 10, 10)), @@ -144,7 +144,7 @@ protected: SkErodeImageFilter::Make(8, 8, nullptr, &cropRect), SkMergeImageFilter::Make(nullptr, std::move(cfOffset), - SkXfermode::kSrcOver_Mode, + SkBlendMode::kSrcOver, &cropRect), SkBlurImageFilter::Make(8.0f, 8.0f, nullptr, &bogusRect), SkColorFilterImageFilter::Make(cf, nullptr, &bogusRect), diff --git a/gm/imagefiltersgraph.cpp b/gm/imagefiltersgraph.cpp index 2d27728..fd4d5cf 100644 --- a/gm/imagefiltersgraph.cpp +++ b/gm/imagefiltersgraph.cpp @@ -45,12 +45,13 @@ protected: { sk_sp bitmapSource(SkImageSource::Make(fImage)); sk_sp cf(SkColorFilter::MakeModeFilter(SK_ColorRED, - SkXfermode::kSrcIn_Mode)); + SkBlendMode::kSrcIn)); sk_sp blur(SkBlurImageFilter::Make(4.0f, 4.0f, std::move(bitmapSource))); sk_sp erode(SkErodeImageFilter::Make(4, 4, blur)); sk_sp color(SkColorFilterImageFilter::Make(std::move(cf), std::move(erode))); - sk_sp merge(SkMergeImageFilter::Make(blur, color)); + sk_sp merge(SkMergeImageFilter::Make(blur, color, + SkBlendMode::kSrcOver)); SkPaint paint; paint.setImageFilter(std::move(merge)); @@ -143,9 +144,9 @@ protected: { // Test that crop offsets are absolute, not relative to the parent's crop rect. sk_sp cf1(SkColorFilter::MakeModeFilter(SK_ColorBLUE, - SkXfermode::kSrcIn_Mode)); + SkBlendMode::kSrcIn)); sk_sp cf2(SkColorFilter::MakeModeFilter(SK_ColorGREEN, - SkXfermode::kSrcIn_Mode)); + SkBlendMode::kSrcIn)); SkImageFilter::CropRect outerRect(SkRect::MakeXYWH(SkIntToScalar(10), SkIntToScalar(10), SkIntToScalar(80), SkIntToScalar(80))); SkImageFilter::CropRect innerRect(SkRect::MakeXYWH(SkIntToScalar(20), SkIntToScalar(20), diff --git a/gm/imagemakewithfilter.cpp b/gm/imagemakewithfilter.cpp index 9620e0d..48b1740 100644 --- a/gm/imagemakewithfilter.cpp +++ b/gm/imagemakewithfilter.cpp @@ -44,7 +44,7 @@ protected: SkISize onISize() override { return SkISize::Make(440, 530); } void onDraw(SkCanvas* canvas) override { - auto cf = SkColorFilter::MakeModeFilter(SK_ColorGREEN, SkXfermode::kSrc_Mode); + auto cf = SkColorFilter::MakeModeFilter(SK_ColorGREEN, SkBlendMode::kSrc); sk_sp filters[] = { SkColorFilterImageFilter::Make(std::move(cf), nullptr), SkBlurImageFilter::Make(2.0f, 2.0f, nullptr), diff --git a/gm/megalooper.cpp b/gm/megalooper.cpp index 86dd617..fd8757b 100644 --- a/gm/megalooper.cpp +++ b/gm/megalooper.cpp @@ -167,7 +167,7 @@ private: info.fPaintBits = SkLayerDrawLooper::kColorFilter_Bit | SkLayerDrawLooper::kMaskFilter_Bit; - info.fColorMode = SkXfermode::kSrc_Mode; + info.fColorMode = (SK_XFERMODE_MODE_PARAM)SkBlendMode::kSrc; info.fOffset.set(xOff, yOff); info.fPostTranslate = false; @@ -175,7 +175,7 @@ private: paint->setMaskFilter(MakeBlur()); - paint->setColorFilter(SkColorFilter::MakeModeFilter(color, SkXfermode::kSrcIn_Mode)); + paint->setColorFilter(SkColorFilter::MakeModeFilter(color, SkBlendMode::kSrcIn)); return looperBuilder.detach(); } @@ -210,7 +210,7 @@ private: info.fPaintBits = SkLayerDrawLooper::kColorFilter_Bit | SkLayerDrawLooper::kMaskFilter_Bit; - info.fColorMode = SkXfermode::kSrc_Mode; + info.fColorMode = (SK_XFERMODE_MODE_PARAM)SkBlendMode::kSrc; info.fPostTranslate = false; SkPaint* paint; @@ -221,8 +221,7 @@ private: paint->setMaskFilter(MakeBlur()); - paint->setColorFilter(SkColorFilter::MakeModeFilter(gColors[i], - SkXfermode::kSrcIn_Mode)); + paint->setColorFilter(SkColorFilter::MakeModeFilter(gColors[i], SkBlendMode::kSrcIn)); } return looperBuilder.detach(); diff --git a/gm/modecolorfilters.cpp b/gm/modecolorfilters.cpp index ae926ef..cc54e76 100644 --- a/gm/modecolorfilters.cpp +++ b/gm/modecolorfilters.cpp @@ -99,21 +99,21 @@ protected: // used with shaders SkColor alphas[] = {0xFFFFFFFF, 0x80808080}; - SkXfermode::Mode modes[] = { // currently just doing the Modes expressible as Coeffs - SkXfermode::kClear_Mode, - SkXfermode::kSrc_Mode, - SkXfermode::kDst_Mode, - SkXfermode::kSrcOver_Mode, - SkXfermode::kDstOver_Mode, - SkXfermode::kSrcIn_Mode, - SkXfermode::kDstIn_Mode, - SkXfermode::kSrcOut_Mode, - SkXfermode::kDstOut_Mode, - SkXfermode::kSrcATop_Mode, - SkXfermode::kDstATop_Mode, - SkXfermode::kXor_Mode, - SkXfermode::kPlus_Mode, - SkXfermode::kModulate_Mode, + const SkBlendMode modes[] = { // currently just doing the Modes expressible as Coeffs + SkBlendMode::kClear, + SkBlendMode::kSrc, + SkBlendMode::kDst, + SkBlendMode::kSrcOver, + SkBlendMode::kDstOver, + SkBlendMode::kSrcIn, + SkBlendMode::kDstIn, + SkBlendMode::kSrcOut, + SkBlendMode::kDstOut, + SkBlendMode::kSrcATop, + SkBlendMode::kDstATop, + SkBlendMode::kXor, + SkBlendMode::kPlus, + SkBlendMode::kModulate, }; SkPaint paint; diff --git a/gm/multipicturedraw.cpp b/gm/multipicturedraw.cpp index d7d81f2..35f4c12 100644 --- a/gm/multipicturedraw.cpp +++ b/gm/multipicturedraw.cpp @@ -412,7 +412,7 @@ static void tiled(SkCanvas* finalCanvas, SkMultiPictureDraw* mpd, step.fY = SkIntToScalar(y*kTileHeight); step.fPaint = new SkPaint; step.fPaint->setColorFilter( - SkColorFilter::MakeModeFilter(colors[x][y], SkXfermode::kModulate_Mode)); + SkColorFilter::MakeModeFilter(colors[x][y], SkBlendMode::kModulate)); step.fSurf = create_compat_surface(finalCanvas, kTileWidth, kTileHeight); diff --git a/gm/patch.cpp b/gm/patch.cpp index 6b2d298..c9831c4 100644 --- a/gm/patch.cpp +++ b/gm/patch.cpp @@ -85,36 +85,34 @@ DEF_SIMPLE_GM(patch_primitive, canvas, 1500, 1100) { {0.0f, 0.0f}, {100.0f, 0.0f}, {100.0f,100.0f}, {0.0f, 100.0f}} ; - const SkXfermode::Mode modes[] = { - SkXfermode::kSrc_Mode, - SkXfermode::kDst_Mode, - SkXfermode::kModulate_Mode, + const SkBlendMode modes[] = { + SkBlendMode::kSrc, + SkBlendMode::kDst, + SkBlendMode::kModulate, }; sk_sp shader(make_shader()); canvas->save(); for (int y = 0; y < 3; y++) { - sk_sp xfer(SkXfermode::Make(modes[y])); - for (int x = 0; x < 4; x++) { canvas->save(); canvas->translate(x * 350.0f, y * 350.0f); switch (x) { case 0: - canvas->drawPatch(cubics, nullptr, nullptr, xfer, paint); + canvas->drawPatch(cubics, nullptr, nullptr, modes[y], paint); break; case 1: - canvas->drawPatch(cubics, colors, nullptr, xfer, paint); + canvas->drawPatch(cubics, colors, nullptr, modes[y], paint); break; case 2: paint.setShader(shader); - canvas->drawPatch(cubics, nullptr, texCoords, xfer, paint); + canvas->drawPatch(cubics, nullptr, texCoords, modes[y], paint); paint.setShader(nullptr); break; case 3: paint.setShader(shader); - canvas->drawPatch(cubics, colors, texCoords, xfer, paint); + canvas->drawPatch(cubics, colors, texCoords, modes[y], paint); paint.setShader(nullptr); break; default: diff --git a/gm/patchgrid.cpp b/gm/patchgrid.cpp index a36e58f..6f32231 100644 --- a/gm/patchgrid.cpp +++ b/gm/patchgrid.cpp @@ -109,7 +109,7 @@ protected: constexpr int kCols = 4; canvas->scale(3, 3); - SkPatchGrid grid(kRows, kCols, SkPatchGrid::kColors_VertexType, nullptr); + SkPatchGrid grid(kRows, kCols, SkPatchGrid::kColors_VertexType); for (int i = 0; i < kRows; i++) { for (int j = 0; j < kCols; j++) { SkPoint points[12]; diff --git a/gm/rrects.cpp b/gm/rrects.cpp index f012145..c252ec6 100644 --- a/gm/rrects.cpp +++ b/gm/rrects.cpp @@ -103,7 +103,7 @@ protected: if (kEffect_Type == fType) { #if SK_SUPPORT_GPU GrPaint grPaint; - grPaint.setXPFactory(GrPorterDuffXPFactory::Make(SkXfermode::kSrc_Mode)); + grPaint.setXPFactory(GrPorterDuffXPFactory::Make(SkBlendMode::kSrc)); SkRRect rrect = fRRects[curRRect]; rrect.offset(SkIntToScalar(x), SkIntToScalar(y)); diff --git a/gm/skbug1719.cpp b/gm/skbug1719.cpp index 3c49aaa..9d6d98b 100644 --- a/gm/skbug1719.cpp +++ b/gm/skbug1719.cpp @@ -63,7 +63,7 @@ DEF_SIMPLE_GM_BG(skbug1719, canvas, 300, 100, paint.setMaskFilter( SkBlurMaskFilter::Make(kNormal_SkBlurStyle, 0.78867501f, SkBlurMaskFilter::kHighQuality_BlurFlag)); - paint.setColorFilter(SkColorFilter::MakeModeFilter(0xBFFFFFFF, SkXfermode::kSrcIn_Mode)); + paint.setColorFilter(SkColorFilter::MakeModeFilter(0xBFFFFFFF, SkBlendMode::kSrcIn)); canvas->clipPath(clipPath, true); canvas->drawPath(drawPath, paint); diff --git a/gm/tablecolorfilter.cpp b/gm/tablecolorfilter.cpp index 26a3c2c..0f870c6 100644 --- a/gm/tablecolorfilter.cpp +++ b/gm/tablecolorfilter.cpp @@ -198,12 +198,12 @@ class ComposeColorFilterGM : public skiagm::GM { COLOR_COUNT = 3, MODE_COUNT = 4, }; - const SkColor* fColors; - const SkXfermode::Mode* fModes; - SkString fName; + const SkColor* fColors; + const SkBlendMode* fModes; + SkString fName; public: - ComposeColorFilterGM(const SkColor colors[], const SkXfermode::Mode modes[], + ComposeColorFilterGM(const SkColor colors[], const SkBlendMode modes[], const char suffix[]) : fColors(colors), fModes(modes) { @@ -276,19 +276,19 @@ private: }; const SkColor gColors0[] = { SK_ColorCYAN, SK_ColorMAGENTA, SK_ColorYELLOW }; -const SkXfermode::Mode gModes0[] = { - SkXfermode::kOverlay_Mode, - SkXfermode::kDarken_Mode, - SkXfermode::kColorBurn_Mode, - SkXfermode::kExclusion_Mode, +const SkBlendMode gModes0[] = { + SkBlendMode::kOverlay, + SkBlendMode::kDarken, + SkBlendMode::kColorBurn, + SkBlendMode::kExclusion, }; DEF_GM( return new ComposeColorFilterGM(gColors0, gModes0, "wacky"); ) const SkColor gColors1[] = { 0x80FF0000, 0x8000FF00, 0x800000FF }; -const SkXfermode::Mode gModes1[] = { - SkXfermode::kSrcOver_Mode, - SkXfermode::kXor_Mode, - SkXfermode::kDstOut_Mode, - SkXfermode::kSrcATop_Mode, +const SkBlendMode gModes1[] = { + SkBlendMode::kSrcOver, + SkBlendMode::kXor, + SkBlendMode::kDstOut, + SkBlendMode::kSrcATop, }; DEF_GM( return new ComposeColorFilterGM(gColors1, gModes1, "alpha"); ) diff --git a/gm/texdata.cpp b/gm/texdata.cpp index c269448..05441ac 100644 --- a/gm/texdata.cpp +++ b/gm/texdata.cpp @@ -87,7 +87,7 @@ DEF_SIMPLE_GM_BG(texdata, canvas, 2 * S, 2 * S, SK_ColorBLACK) { GrFixedClip clip(SkIRect::MakeWH(2*S, 2*S)); GrPaint paint; - paint.setPorterDuffXPFactory(SkXfermode::kSrcOver_Mode); + paint.setPorterDuffXPFactory(SkBlendMode::kSrcOver); SkMatrix vm; if (i) { diff --git a/gm/textbloblooper.cpp b/gm/textbloblooper.cpp index 37eae66..29f9756 100644 --- a/gm/textbloblooper.cpp +++ b/gm/textbloblooper.cpp @@ -115,7 +115,7 @@ static sk_sp setupLooper(SkLayerDrawLooper::BitFlags bits, SkLayerDrawLooper::LayerInfo info; info.fPaintBits = bits; - info.fColorMode = SkXfermode::kSrc_Mode; + info.fColorMode = (SK_XFERMODE_MODE_PARAM)SkBlendMode::kSrc; for (size_t i = 0; i < size; i++) { info.fOffset.set(settings[i].fOffset, settings[i].fOffset); diff --git a/gm/texturedomaineffect.cpp b/gm/texturedomaineffect.cpp index 70d1420..06c6518 100644 --- a/gm/texturedomaineffect.cpp +++ b/gm/texturedomaineffect.cpp @@ -114,7 +114,7 @@ protected: for (int m = 0; m < GrTextureDomain::kModeCount; ++m) { GrTextureDomain::Mode mode = (GrTextureDomain::Mode) m; GrPaint grPaint; - grPaint.setXPFactory(GrPorterDuffXPFactory::Make(SkXfermode::kSrc_Mode)); + grPaint.setXPFactory(GrPorterDuffXPFactory::Make(SkBlendMode::kSrc)); sk_sp fp( GrTextureDomainEffect::Make(texture, nullptr, textureMatrices[tm], GrTextureDomain::MakeTexelDomain(texture, diff --git a/gm/tileimagefilter.cpp b/gm/tileimagefilter.cpp index 58542b7..c7d3e37 100644 --- a/gm/tileimagefilter.cpp +++ b/gm/tileimagefilter.cpp @@ -114,7 +114,7 @@ protected: dstRect = SkRect::MakeXYWH(0, 0, 100, 100); SkImageFilter::CropRect cropRect(SkRect::MakeXYWH(5, 5, 40, 40)); sk_sp greenCF = SkColorFilter::MakeModeFilter(SK_ColorGREEN, - SkXfermode::kSrc_Mode); + SkBlendMode::kSrc); sk_sp green(SkColorFilterImageFilter::Make(std::move(greenCF), nullptr, &cropRect)); diff --git a/gm/vertices.cpp b/gm/vertices.cpp index 2d6e37d..da79d7d 100644 --- a/gm/vertices.cpp +++ b/gm/vertices.cpp @@ -27,7 +27,7 @@ static sk_sp make_shader2() { } static sk_sp make_color_filter() { - return SkColorFilter::MakeModeFilter(0xFFAABBCC, SkXfermode::kDarken_Mode); + return SkColorFilter::MakeModeFilter(0xFFAABBCC, SkBlendMode::kDarken); } class VerticesGM : public skiagm::GM { @@ -117,36 +117,36 @@ protected: { fColors, fTexs , fShader2, fColorFilter, 0x80 }, }; - const SkXfermode::Mode modes[] = { - SkXfermode::kClear_Mode, - SkXfermode::kSrc_Mode, - SkXfermode::kDst_Mode, - SkXfermode::kSrcOver_Mode, - SkXfermode::kDstOver_Mode, - SkXfermode::kSrcIn_Mode, - SkXfermode::kDstIn_Mode, - SkXfermode::kSrcOut_Mode, - SkXfermode::kDstOut_Mode, - SkXfermode::kSrcATop_Mode, - SkXfermode::kDstATop_Mode, - SkXfermode::kXor_Mode, - SkXfermode::kPlus_Mode, - SkXfermode::kModulate_Mode, - SkXfermode::kScreen_Mode, - SkXfermode::kOverlay_Mode, - SkXfermode::kDarken_Mode, - SkXfermode::kLighten_Mode, - SkXfermode::kColorDodge_Mode, - SkXfermode::kColorBurn_Mode, - SkXfermode::kHardLight_Mode, - SkXfermode::kSoftLight_Mode, - SkXfermode::kDifference_Mode, - SkXfermode::kExclusion_Mode, - SkXfermode::kMultiply_Mode, - SkXfermode::kHue_Mode, - SkXfermode::kSaturation_Mode, - SkXfermode::kColor_Mode, - SkXfermode::kLuminosity_Mode, + const SkBlendMode modes[] = { + SkBlendMode::kClear, + SkBlendMode::kSrc, + SkBlendMode::kDst, + SkBlendMode::kSrcOver, + SkBlendMode::kDstOver, + SkBlendMode::kSrcIn, + SkBlendMode::kDstIn, + SkBlendMode::kSrcOut, + SkBlendMode::kDstOut, + SkBlendMode::kSrcATop, + SkBlendMode::kDstATop, + SkBlendMode::kXor, + SkBlendMode::kPlus, + SkBlendMode::kModulate, + SkBlendMode::kScreen, + SkBlendMode::kOverlay, + SkBlendMode::kDarken, + SkBlendMode::kLighten, + SkBlendMode::kColorDodge, + SkBlendMode::kColorBurn, + SkBlendMode::kHardLight, + SkBlendMode::kSoftLight, + SkBlendMode::kDifference, + SkBlendMode::kExclusion, + SkBlendMode::kMultiply, + SkBlendMode::kHue, + SkBlendMode::kSaturation, + SkBlendMode::kColor, + SkBlendMode::kLuminosity, }; SkPaint paint; @@ -154,7 +154,6 @@ protected: canvas->translate(4, 4); int x = 0; for (size_t j = 0; j < SK_ARRAY_COUNT(modes); ++j) { - auto xfer = SkXfermode::Make(modes[j]); canvas->save(); for (size_t i = 0; i < SK_ARRAY_COUNT(rec); ++i) { paint.setShader(rec[i].fShader); @@ -164,7 +163,7 @@ protected: canvas->drawVertices(SkCanvas::kTriangleFan_VertexMode, SK_ARRAY_COUNT(fPts), fPts, rec[i].fTexs, rec[i].fColors, - xfer, fan, SK_ARRAY_COUNT(fan), paint); + modes[j], fan, SK_ARRAY_COUNT(fan), paint); canvas->translate(40, 0); ++x; } diff --git a/gm/yuvtorgbeffect.cpp b/gm/yuvtorgbeffect.cpp index d094bdf..34f5e2b 100644 --- a/gm/yuvtorgbeffect.cpp +++ b/gm/yuvtorgbeffect.cpp @@ -114,7 +114,7 @@ protected: for (int i = 0; i < 6; ++i) { GrPaint grPaint; - grPaint.setXPFactory(GrPorterDuffXPFactory::Make(SkXfermode::kSrc_Mode)); + grPaint.setXPFactory(GrPorterDuffXPFactory::Make(SkBlendMode::kSrc)); sk_sp fp(GrYUVEffect::MakeYUVToRGB( texture[indices[i][0]], texture[indices[i][1]], texture[indices[i][2]], sizes, static_cast(space), false)); @@ -227,7 +227,7 @@ protected: SkScalar x = kDrawPad + kTestPad; GrPaint grPaint; - grPaint.setXPFactory(GrPorterDuffXPFactory::Make(SkXfermode::kSrc_Mode)); + grPaint.setXPFactory(GrPorterDuffXPFactory::Make(SkBlendMode::kSrc)); sk_sp fp( GrYUVEffect::MakeYUVToRGB(texture[0], texture[1], texture[2], sizes, static_cast(space), true)); diff --git a/gn/android_framework_defines.gni b/gn/android_framework_defines.gni index 7e87131..7ff8381 100644 --- a/gn/android_framework_defines.gni +++ b/gn/android_framework_defines.gni @@ -16,4 +16,5 @@ android_framework_defines = [ "SK_SUPPORT_LEGACY_SHADER_ISABITMAP", "SK_SUPPORT_LEGACY_COLOR_SPACE_FACTORIES", "SK_SUPPORT_LEGACY_SHADER_ASALOCALMATRIXSHADER", + "SK_SUPPORT_LEGACY_XFERMODE_PARAM", ] diff --git a/include/core/SkBitmapDevice.h b/include/core/SkBitmapDevice.h index 31c0aa3..24a9992 100644 --- a/include/core/SkBitmapDevice.h +++ b/include/core/SkBitmapDevice.h @@ -114,7 +114,7 @@ protected: const SkPoint& offset, const SkPaint& paint) override; virtual void drawVertices(const SkDraw&, SkCanvas::VertexMode, int vertexCount, const SkPoint verts[], const SkPoint texs[], - const SkColor colors[], SkXfermode* xmode, + const SkColor colors[], SK_XFERMODE_PARAM xmode, const uint16_t indices[], int indexCount, const SkPaint& paint) override; virtual void drawDevice(const SkDraw&, SkBaseDevice*, int x, int y, const SkPaint&) override; diff --git a/include/core/SkCanvas.h b/include/core/SkCanvas.h index c233d91..a8db417 100644 --- a/include/core/SkCanvas.h +++ b/include/core/SkCanvas.h @@ -1196,10 +1196,9 @@ public: in _texture_ space (not uv space) for each vertex. @param colors May be null. If not null, specifies a color for each vertex, to be interpolated across the triangle. - @param xmode Used if both texs and colors are present. In this + @param mode Used if both texs and colors are present. In this case the colors are combined with the texture using mode, - before being drawn using the paint. If mode is null, then - kModulate_Mode is used. + before being drawn using the paint. @param indices If not null, array of indices to reference into the vertex (texs, colors) array. @param indexCount number of entries in the indices array (if not null) @@ -1207,17 +1206,36 @@ public: */ void drawVertices(VertexMode vmode, int vertexCount, const SkPoint vertices[], const SkPoint texs[], - const SkColor colors[], SkXfermode* xmode, + const SkColor colors[], SkBlendMode mode, const uint16_t indices[], int indexCount, const SkPaint& paint); void drawVertices(VertexMode vmode, int vertexCount, const SkPoint vertices[], const SkPoint texs[], + const SkColor colors[], const uint16_t indices[], int indexCount, + const SkPaint& paint) { + this->drawVertices(vmode, vertexCount, vertices, texs, colors, SkBlendMode::kModulate, + indices, indexCount, paint); + } + +#ifdef SK_SUPPORT_LEGACY_XFERMODE_PARAM + void drawVertices(VertexMode vmode, int vertexCount, + const SkPoint vertices[], const SkPoint texs[], + const SkColor colors[], SkXfermode* xmode, + const uint16_t indices[], int indexCount, + const SkPaint& paint) { + this->drawVertices(vmode, vertexCount, vertices, texs, colors, + xmode ? xmode->blend() : SkBlendMode::kModulate, + indices, indexCount, paint); + } + void drawVertices(VertexMode vmode, int vertexCount, + const SkPoint vertices[], const SkPoint texs[], const SkColor colors[], const sk_sp& xmode, const uint16_t indices[], int indexCount, const SkPaint& paint) { this->drawVertices(vmode, vertexCount, vertices, texs, colors, xmode.get(), indices, indexCount, paint); } +#endif /** Draw a cubic coons patch @@ -1228,16 +1246,28 @@ public: their order is clockwise starting at the top left corner. @param texCoords specifies the texture coordinates that will be bilerp across the patch, their order is the same as the colors. - @param xmode specifies how are the colors and the textures combined if both of them are + @param mode specifies how are the colors and the textures combined if both of them are present. @param paint Specifies the shader/texture if present. */ void drawPatch(const SkPoint cubics[12], const SkColor colors[4], - const SkPoint texCoords[4], SkXfermode* xmode, const SkPaint& paint); + const SkPoint texCoords[4], SkBlendMode mode, const SkPaint& paint); + void drawPatch(const SkPoint cubics[12], const SkColor colors[4], + const SkPoint texCoords[4], const SkPaint& paint) { + this->drawPatch(cubics, colors, texCoords, SkBlendMode::kModulate, paint); + } + +#ifdef SK_SUPPORT_LEGACY_XFERMODE_PARAM + void drawPatch(const SkPoint cubics[12], const SkColor colors[4], + const SkPoint texCoords[4], SkXfermode* xmode, const SkPaint& paint) { + this->drawPatch(cubics, colors, texCoords, xmode ? xmode->blend() : SkBlendMode::kModulate, + paint); + } void drawPatch(const SkPoint cubics[12], const SkColor colors[4], const SkPoint texCoords[4], const sk_sp& xmode, const SkPaint& paint) { this->drawPatch(cubics, colors, texCoords, xmode.get(), paint); } +#endif /** * Draw a set of sprites from the atlas. Each is specified by a tex rectangle in the @@ -1247,34 +1277,46 @@ public: * xform maps [0, 0, tex.width, tex.height] -> quad * * The color array is optional. When specified, each color modulates the pixels in its - * corresponding quad (via the specified SkXfermode::Mode). + * corresponding quad (via the specified SkBlendMode). * * The cullRect is optional. When specified, it must be a conservative bounds of all of the * resulting transformed quads, allowing the canvas to skip drawing if the cullRect does not * intersect the current clip. * * The paint is optional. If specified, its antialiasing, alpha, color-filter, image-filter - * and xfermode are used to affect each of the quads. + * and blendmode are used to affect each of the quads. */ void drawAtlas(const SkImage* atlas, const SkRSXform xform[], const SkRect tex[], - const SkColor colors[], int count, SkXfermode::Mode, const SkRect* cullRect, + const SkColor colors[], int count, SkBlendMode, const SkRect* cullRect, const SkPaint* paint); - + void drawAtlas(const sk_sp& atlas, const SkRSXform xform[], const SkRect tex[], + const SkColor colors[], int count, SkBlendMode mode, const SkRect* cullRect, + const SkPaint* paint) { + this->drawAtlas(atlas.get(), xform, tex, colors, count, mode, cullRect, paint); + } void drawAtlas(const SkImage* atlas, const SkRSXform xform[], const SkRect tex[], int count, const SkRect* cullRect, const SkPaint* paint) { - this->drawAtlas(atlas, xform, tex, NULL, count, SkXfermode::kDst_Mode, cullRect, paint); + this->drawAtlas(atlas, xform, tex, nullptr, count, SkBlendMode::kDst, cullRect, paint); } - void drawAtlas(const sk_sp& atlas, const SkRSXform xform[], const SkRect tex[], - const SkColor colors[], int count, SkXfermode::Mode mode, const SkRect* cull, + int count, const SkRect* cullRect, const SkPaint* paint) { + this->drawAtlas(atlas.get(), xform, tex, nullptr, count, SkBlendMode::kDst, + cullRect, paint); + } + +#ifdef SK_SUPPORT_LEGACY_XFERMODE_PARAM + void drawAtlas(const SkImage* atlas, const SkRSXform xform[], const SkRect tex[], + const SkColor colors[], int count, SkXfermode::Mode mode, const SkRect* cullRect, const SkPaint* paint) { - this->drawAtlas(atlas.get(), xform, tex, colors, count, mode, cull, paint); + this->drawAtlas(atlas, xform, tex, colors, count, (SkBlendMode)mode, cullRect, paint); } + void drawAtlas(const sk_sp& atlas, const SkRSXform xform[], const SkRect tex[], - int count, const SkRect* cullRect, const SkPaint* paint) { - this->drawAtlas(atlas.get(), xform, tex, nullptr, count, SkXfermode::kDst_Mode, - cullRect, paint); + const SkColor colors[], int count, SkXfermode::Mode mode, const SkRect* cull, + const SkPaint* paint) { + this->drawAtlas(atlas.get(), xform, tex, colors, count, (SkBlendMode)mode, cull, paint); } +#endif /** * Draw the contents of this drawable into the canvas. If the canvas is async @@ -1460,7 +1502,7 @@ protected: const SkPaint& paint); virtual void onDrawPatch(const SkPoint cubics[12], const SkColor colors[4], - const SkPoint texCoords[4], SkXfermode* xmode, const SkPaint& paint); + const SkPoint texCoords[4], SK_XFERMODE_PARAM, const SkPaint& paint); virtual void onDrawDrawable(SkDrawable*, const SkMatrix*); @@ -1473,11 +1515,11 @@ protected: virtual void onDrawRRect(const SkRRect&, const SkPaint&); virtual void onDrawPoints(PointMode, size_t count, const SkPoint pts[], const SkPaint&); virtual void onDrawVertices(VertexMode, int vertexCount, const SkPoint vertices[], - const SkPoint texs[], const SkColor colors[], SkXfermode*, + const SkPoint texs[], const SkColor colors[], SK_XFERMODE_PARAM, const uint16_t indices[], int indexCount, const SkPaint&); virtual void onDrawAtlas(const SkImage*, const SkRSXform[], const SkRect[], const SkColor[], - int count, SkXfermode::Mode, const SkRect* cull, const SkPaint*); + int count, SK_XFERMODE_MODE_PARAM, const SkRect* cull, const SkPaint*); virtual void onDrawPath(const SkPath&, const SkPaint&); virtual void onDrawImage(const SkImage*, SkScalar dx, SkScalar dy, const SkPaint*); virtual void onDrawImageRect(const SkImage*, const SkRect*, const SkRect&, const SkPaint*, diff --git a/include/core/SkColorFilter.h b/include/core/SkColorFilter.h index f265998..e2ff406 100644 --- a/include/core/SkColorFilter.h +++ b/include/core/SkColorFilter.h @@ -34,7 +34,7 @@ public: * returns true, and sets (if not NULL) the color and mode appropriately. * If not, this returns false and ignores the parameters. */ - virtual bool asColorMode(SkColor* color, SkXfermode::Mode* mode) const; + virtual bool asColorMode(SkColor* color, SK_XFERMODE_MODE_PARAM* mode) const; /** * If the filter can be represented by a 5x4 matrix, this @@ -110,15 +110,17 @@ public: If the Mode is DST, this function will return NULL (since that mode will have no effect on the result). @param c The source color used with the specified mode - @param mode The xfermode mode that is applied to each color in + @param mode The blend that is applied to each color in the colorfilter's filterSpan[16,32] methods @return colorfilter object that applies the src color and mode, or NULL if the mode will have no effect. */ - static sk_sp MakeModeFilter(SkColor c, SkXfermode::Mode mode); - static sk_sp MakeModeFilter(SkColor c, SkBlendMode mode) { - return MakeModeFilter(c, (SkXfermode::Mode)mode); + static sk_sp MakeModeFilter(SkColor c, SkBlendMode mode); +#ifdef SK_SUPPORT_LEGACY_XFERMODE_PARAM + static sk_sp MakeModeFilter(SkColor c, SkXfermode::Mode mode) { + return MakeModeFilter(c, (SkBlendMode)mode); } +#endif /** Construct a colorfilter whose effect is to first apply the inner filter and then apply * the outer filter to the result of the inner's. diff --git a/include/core/SkDevice.h b/include/core/SkDevice.h index 2884622..d8fa2f2 100644 --- a/include/core/SkDevice.h +++ b/include/core/SkDevice.h @@ -206,7 +206,7 @@ protected: const SkPoint& offset, const SkPaint& paint) = 0; virtual void drawVertices(const SkDraw&, SkCanvas::VertexMode, int vertexCount, const SkPoint verts[], const SkPoint texs[], - const SkColor colors[], SkXfermode* xmode, + const SkColor colors[], SK_XFERMODE_PARAM xmode, const uint16_t indices[], int indexCount, const SkPaint& paint) = 0; // default implementation unrolls the blob runs. @@ -214,11 +214,11 @@ protected: const SkPaint& paint, SkDrawFilter* drawFilter); // default implementation calls drawVertices virtual void drawPatch(const SkDraw&, const SkPoint cubics[12], const SkColor colors[4], - const SkPoint texCoords[4], SkXfermode* xmode, const SkPaint& paint); + const SkPoint texCoords[4], SK_XFERMODE_PARAM, const SkPaint& paint); // default implementation calls drawPath virtual void drawAtlas(const SkDraw&, const SkImage* atlas, const SkRSXform[], const SkRect[], - const SkColor[], int count, SkXfermode::Mode, const SkPaint&); + const SkColor[], int count, SK_XFERMODE_MODE_PARAM, const SkPaint&); virtual void drawAnnotation(const SkDraw&, const SkRect&, const char[], SkData*) {} diff --git a/include/core/SkDraw.h b/include/core/SkDraw.h index d7068fd..8a2c2d4 100644 --- a/include/core/SkDraw.h +++ b/include/core/SkDraw.h @@ -70,7 +70,7 @@ public: const SkPoint& offset, const SkPaint& paint) const; void drawVertices(SkCanvas::VertexMode mode, int count, const SkPoint vertices[], const SkPoint textures[], - const SkColor colors[], SkXfermode* xmode, + const SkColor colors[], SkBlendMode bmode, const uint16_t indices[], int ptCount, const SkPaint& paint) const; diff --git a/include/core/SkPicture.h b/include/core/SkPicture.h index c2d05f9..088e7dc 100644 --- a/include/core/SkPicture.h +++ b/include/core/SkPicture.h @@ -225,10 +225,11 @@ private: // V48: Read and write extended SkTextBlobs. // V49: Gradients serialized as SkColor4f + SkColorSpace // V50: SkXfermode -> SkBlendMode + // V51: more SkXfermode -> SkBlendMode // Only SKPs within the min/current picture version range (inclusive) can be read. static const uint32_t MIN_PICTURE_VERSION = 35; // Produced by Chrome M39. - static const uint32_t CURRENT_PICTURE_VERSION = 50; + static const uint32_t CURRENT_PICTURE_VERSION = 51; static_assert(MIN_PICTURE_VERSION <= 41, "Remove kFontFileName and related code from SkFontDescriptor.cpp."); diff --git a/include/core/SkShader.h b/include/core/SkShader.h index c31ce73..6c4ee0a 100644 --- a/include/core/SkShader.h +++ b/include/core/SkShader.h @@ -320,7 +320,10 @@ public: struct ComposeRec { const SkShader* fShaderA; const SkShader* fShaderB; +#ifdef SK_SUPPORT_LEGACY_XFERMODE_PARAM const SkXfermode* fMode; +#endif + SkBlendMode fBlendMode; }; virtual bool asACompose(ComposeRec*) const { return false; } @@ -420,8 +423,13 @@ public: */ static sk_sp MakeColorShader(const SkColor4f&, sk_sp); + static sk_sp MakeComposeShader(sk_sp dst, sk_sp src, SkBlendMode); + +#ifdef SK_SUPPORT_LEGACY_XFERMODE_PARAM static sk_sp MakeComposeShader(sk_sp dst, sk_sp src, - SkXfermode::Mode); + SkXfermode::Mode mode) { + return MakeComposeShader(dst, src, (SkBlendMode)mode); + } /** * Create a new compose shader, given shaders dst, src, and a combining xfermode mode. @@ -431,7 +439,10 @@ public: * The caller is responsible for managing its reference-count for the xfer (if not null). */ static sk_sp MakeComposeShader(sk_sp dst, sk_sp src, - sk_sp xfer); + sk_sp xfer) { + return MakeComposeShader(dst, src, xfer ? xfer->blend() : SkBlendMode::kSrcOver); + } +#endif /** Call this to create a new shader that will draw with the specified bitmap. * diff --git a/include/core/SkTypes.h b/include/core/SkTypes.h index 0a3e3ac..9eacfcc 100644 --- a/include/core/SkTypes.h +++ b/include/core/SkTypes.h @@ -35,6 +35,14 @@ #include +#ifdef SK_SUPPORT_LEGACY_XFERMODE_PARAM + #define SK_XFERMODE_PARAM SkXfermode* + #define SK_XFERMODE_MODE_PARAM SkXfermode::Mode +#else + #define SK_XFERMODE_PARAM SkBlendMode + #define SK_XFERMODE_MODE_PARAM SkBlendMode +#endif + /** * sk_careful_memcpy() is just like memcpy(), but guards against undefined behavior. * diff --git a/include/core/SkXfermode.h b/include/core/SkXfermode.h index aa24366..371c7d7 100644 --- a/include/core/SkXfermode.h +++ b/include/core/SkXfermode.h @@ -152,7 +152,8 @@ public: /** Return an SkXfermode object for the specified mode. */ - static sk_sp Make(Mode); + static sk_sp Make(SkBlendMode); + static sk_sp Make(Mode m) { return Make((SkBlendMode)m); } /** * Skia maintains global xfermode objects corresponding to each BlendMode. This returns a @@ -169,10 +170,6 @@ public: return xfer.get(); } - static sk_sp Make(SkBlendMode bm) { - return Make((Mode)bm); - } - SkBlendMode blend() const { Mode mode; SkAssertResult(this->asMode(&mode)); @@ -194,6 +191,9 @@ public: * src and dst parameters. */ static bool ModeAsCoeff(Mode mode, Coeff* src, Coeff* dst); + static bool ModeAsCoeff(SkBlendMode mode, Coeff* src, Coeff* dst) { + return ModeAsCoeff((Mode)mode, src, dst); + } /** * Returns whether or not the xfer mode can support treating coverage as alpha diff --git a/include/effects/SkLayerDrawLooper.h b/include/effects/SkLayerDrawLooper.h index 186d44a..a6b5332 100644 --- a/include/effects/SkLayerDrawLooper.h +++ b/include/effects/SkLayerDrawLooper.h @@ -57,7 +57,7 @@ public: */ struct SK_API LayerInfo { BitFlags fPaintBits; - SkXfermode::Mode fColorMode; + SK_XFERMODE_MODE_PARAM fColorMode; SkVector fOffset; bool fPostTranslate; //!< applies to fOffset diff --git a/include/effects/SkMergeImageFilter.h b/include/effects/SkMergeImageFilter.h index 5dfa578..3245016 100644 --- a/include/effects/SkMergeImageFilter.h +++ b/include/effects/SkMergeImageFilter.h @@ -17,12 +17,24 @@ public: ~SkMergeImageFilter() override; static sk_sp Make(sk_sp first, sk_sp second, - SkXfermode::Mode mode = SkXfermode::kSrcOver_Mode, + SkBlendMode, const CropRect* cropRect = nullptr); + static sk_sp MakeN(sk_sp[], int count, const SkBlendMode[], const CropRect* cropRect = nullptr); + +#ifdef SK_SUPPORT_LEGACY_XFERMODE_PARAM + static sk_sp Make(sk_sp first, sk_sp second, + SkXfermode::Mode mode = SkXfermode::kSrcOver_Mode, + const CropRect* cropRect = nullptr) { + return Make(first, second, (SkBlendMode)mode, cropRect); + } static sk_sp Make(sk_sp filters[], int count, const SkXfermode::Mode modes[] = nullptr, - const CropRect* cropRect = nullptr); + const CropRect* cropRect = nullptr) { + static_assert(sizeof(SkXfermode::Mode) == sizeof(SkBlendMode), "size mismatch"); + return MakeN(filters, count, (const SkBlendMode*)modes, cropRect); + } +#endif SK_TO_STRING_OVERRIDE() SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkMergeImageFilter) @@ -34,7 +46,7 @@ protected: bool onCanHandleComplexCTM() const override { return true; } private: - SkMergeImageFilter(sk_sp filters[], int count, const SkXfermode::Mode modes[], + SkMergeImageFilter(sk_sp filters[], int count, const SkBlendMode modes[], const CropRect* cropRect); uint8_t* fModes; // SkXfermode::Mode @@ -44,7 +56,7 @@ private: intptr_t fStorage[16]; void initAllocModes(); - void initModes(const SkXfermode::Mode []); + void initModes(const SkBlendMode[]); typedef SkImageFilter INHERITED; }; diff --git a/include/gpu/GrPaint.h b/include/gpu/GrPaint.h index a8af3c2..ade2319 100644 --- a/include/gpu/GrPaint.h +++ b/include/gpu/GrPaint.h @@ -96,10 +96,6 @@ public: } void setPorterDuffXPFactory(SkBlendMode mode) { - fXPFactory = GrPorterDuffXPFactory::Make((SkXfermode::Mode)mode); - } - - void setPorterDuffXPFactory(SkXfermode::Mode mode) { fXPFactory = GrPorterDuffXPFactory::Make(mode); } diff --git a/include/gpu/effects/GrCustomXfermode.h b/include/gpu/effects/GrCustomXfermode.h index 3bd3214..8632093 100644 --- a/include/gpu/effects/GrCustomXfermode.h +++ b/include/gpu/effects/GrCustomXfermode.h @@ -17,8 +17,8 @@ class GrTexture; * coefficients. */ namespace GrCustomXfermode { - bool IsSupportedMode(SkXfermode::Mode mode); - sk_sp MakeXPFactory(SkXfermode::Mode mode); + bool IsSupportedMode(SkBlendMode mode); + sk_sp MakeXPFactory(SkBlendMode mode); }; #endif diff --git a/include/gpu/effects/GrPorterDuffXferProcessor.h b/include/gpu/effects/GrPorterDuffXferProcessor.h index 6777d76..c55eed3 100644 --- a/include/gpu/effects/GrPorterDuffXferProcessor.h +++ b/include/gpu/effects/GrPorterDuffXferProcessor.h @@ -16,10 +16,7 @@ class GrProcOptInfo; class GrPorterDuffXPFactory : public GrXPFactory { public: - static sk_sp Make(SkXfermode::Mode mode); - static sk_sp Make(SkBlendMode mode) { - return Make((SkXfermode::Mode)mode); - } + static sk_sp Make(SkBlendMode mode); void getInvariantBlendedColor(const GrProcOptInfo& colorPOI, GrXPFactory::InvariantBlendedColor*) const override; @@ -54,7 +51,7 @@ public: static bool SrcOverWillNeedDstTexture(const GrCaps&, const GrPipelineOptimizations&); private: - GrPorterDuffXPFactory(SkXfermode::Mode); + GrPorterDuffXPFactory(SkBlendMode); GrXferProcessor* onCreateXferProcessor(const GrCaps& caps, const GrPipelineOptimizations& optimizations, @@ -71,7 +68,7 @@ private: GR_DECLARE_XP_FACTORY_TEST; static void TestGetXPOutputTypes(const GrXferProcessor*, int* outPrimary, int* outSecondary); - SkXfermode::Mode fXfermode; + SkBlendMode fXfermode; friend class GrPorterDuffTest; // for TestGetXPOutputTypes() typedef GrXPFactory INHERITED; diff --git a/include/gpu/effects/GrXfermodeFragmentProcessor.h b/include/gpu/effects/GrXfermodeFragmentProcessor.h index 0e2435e..edc5ae7 100644 --- a/include/gpu/effects/GrXfermodeFragmentProcessor.h +++ b/include/gpu/effects/GrXfermodeFragmentProcessor.h @@ -8,7 +8,8 @@ #ifndef GrXfermodeFragmentProcessor_DEFINED #define GrXfermodeFragmentProcessor_DEFINED -#include "SkXfermode.h" +#include "SkRefCnt.h" +#include "SkBlendMode.h" class GrFragmentProcessor; @@ -16,19 +17,19 @@ namespace GrXfermodeFragmentProcessor { /** The color input to the returned processor is treated as the src and the passed in processor is the dst. */ sk_sp MakeFromDstProcessor(sk_sp dst, - SkXfermode::Mode mode); + SkBlendMode mode); /** The color input to the returned processor is treated as the dst and the passed in processor is the src. */ sk_sp MakeFromSrcProcessor(sk_sp src, - SkXfermode::Mode mode); + SkBlendMode mode); /** Takes the input color, which is assumed to be unpremultiplied, passes it as an opaque color to both src and dst. The outputs of a src and dst are blended using mode and the original input's alpha is applied to the blended color to produce a premul output. */ sk_sp MakeFromTwoProcessors(sk_sp src, sk_sp dst, - SkXfermode::Mode mode); + SkBlendMode mode); }; #endif diff --git a/include/private/SkRecords.h b/include/private/SkRecords.h index 05f935b..447764f 100644 --- a/include/private/SkRecords.h +++ b/include/private/SkRecords.h @@ -327,7 +327,7 @@ RECORD(DrawPatch, kDraw_Tag|kHasPaint_Tag, PODArray cubics; PODArray colors; PODArray texCoords; - sk_sp xmode); + SkBlendMode bmode); RECORD(DrawAtlas, kDraw_Tag|kHasImage_Tag|kHasPaint_Tag, Optional paint; sk_sp atlas; @@ -335,7 +335,7 @@ RECORD(DrawAtlas, kDraw_Tag|kHasImage_Tag|kHasPaint_Tag, PODArray texs; PODArray colors; int count; - SkXfermode::Mode mode; + SkBlendMode mode; Optional cull); RECORD(DrawVertices, kDraw_Tag|kHasPaint_Tag, SkPaint paint; @@ -344,7 +344,7 @@ RECORD(DrawVertices, kDraw_Tag|kHasPaint_Tag, PODArray vertices; PODArray texs; PODArray colors; - sk_sp xmode; + SkBlendMode bmode; PODArray indices; int indexCount); RECORD(DrawAnnotation, 0, // TODO: kDraw_Tag, skia:5548 diff --git a/include/utils/SkDumpCanvas.h b/include/utils/SkDumpCanvas.h index e111853..a25f2b8 100644 --- a/include/utils/SkDumpCanvas.h +++ b/include/utils/SkDumpCanvas.h @@ -93,7 +93,7 @@ protected: virtual void onDrawTextBlob(const SkTextBlob* blob, SkScalar x, SkScalar y, const SkPaint& paint) override; virtual void onDrawPatch(const SkPoint cubics[12], const SkColor colors[4], - const SkPoint texCoords[4], SkXfermode* xmode, + const SkPoint texCoords[4], SK_XFERMODE_PARAM xmode, const SkPaint& paint) override; void onDrawPaint(const SkPaint&) override; @@ -113,7 +113,7 @@ protected: const SkPaint*) override; void onDrawVertices(VertexMode vmode, int vertexCount, const SkPoint vertices[], const SkPoint texs[], - const SkColor colors[], SkXfermode* xmode, + const SkColor colors[], SK_XFERMODE_PARAM xmode, const uint16_t indices[], int indexCount, const SkPaint&) override; diff --git a/include/utils/SkLuaCanvas.h b/include/utils/SkLuaCanvas.h index ac29f6f..6342fba 100644 --- a/include/utils/SkLuaCanvas.h +++ b/include/utils/SkLuaCanvas.h @@ -59,7 +59,7 @@ protected: const SkPaint*) override; void onDrawVertices(VertexMode vmode, int vertexCount, const SkPoint vertices[], const SkPoint texs[], - const SkColor colors[], SkXfermode* xmode, + const SkColor colors[], SK_XFERMODE_PARAM xmode, const uint16_t indices[], int indexCount, const SkPaint&) override; diff --git a/include/utils/SkNWayCanvas.h b/include/utils/SkNWayCanvas.h index 4e7f422..6a3728b 100644 --- a/include/utils/SkNWayCanvas.h +++ b/include/utils/SkNWayCanvas.h @@ -52,7 +52,7 @@ protected: void onDrawTextRSXform(const void* text, size_t byteLength, const SkRSXform xform[], const SkRect* cull, const SkPaint& paint) override; virtual void onDrawPatch(const SkPoint cubics[12], const SkColor colors[4], - const SkPoint texCoords[4], SkXfermode* xmode, + const SkPoint texCoords[4], SK_XFERMODE_PARAM xmode, const SkPaint& paint) override; void onDrawPaint(const SkPaint&) override; @@ -72,7 +72,7 @@ protected: const SkPaint*) override; void onDrawVertices(VertexMode vmode, int vertexCount, const SkPoint vertices[], const SkPoint texs[], - const SkColor colors[], SkXfermode* xmode, + const SkColor colors[], SK_XFERMODE_PARAM xmode, const uint16_t indices[], int indexCount, const SkPaint&) override; diff --git a/include/utils/SkPaintFilterCanvas.h b/include/utils/SkPaintFilterCanvas.h index d0a79fd..69cdff4 100644 --- a/include/utils/SkPaintFilterCanvas.h +++ b/include/utils/SkPaintFilterCanvas.h @@ -76,11 +76,11 @@ protected: const SkPaint*) override; void onDrawVertices(VertexMode vmode, int vertexCount, const SkPoint vertices[], const SkPoint texs[], - const SkColor colors[], SkXfermode* xmode, + const SkColor colors[], SK_XFERMODE_PARAM xmode, const uint16_t indices[], int indexCount, const SkPaint&) override; void onDrawPatch(const SkPoint cubics[12], const SkColor colors[4], - const SkPoint texCoords[4], SkXfermode* xmode, + const SkPoint texCoords[4], SK_XFERMODE_PARAM xmode, const SkPaint& paint) override; void onDrawPicture(const SkPicture*, const SkMatrix*, const SkPaint*) override; diff --git a/public.bzl b/public.bzl index 7b16f38..5f3d73d 100644 --- a/public.bzl +++ b/public.bzl @@ -615,6 +615,7 @@ DEFINES_ALL = [ "SK_SUPPORT_LEGACY_XFERMODE_OBJECT", "SK_SUPPORT_LEGACY_COLOR_SPACE_FACTORIES", "SK_SUPPORT_LEGACY_SHADER_ASALOCALMATRIXSHADER", + "SK_SUPPORT_LEGACY_XFERMODE_PARAM", ] ################################################################################ diff --git a/samplecode/PerlinPatch.cpp b/samplecode/PerlinPatch.cpp index a2033c3..9adb08a 100644 --- a/samplecode/PerlinPatch.cpp +++ b/samplecode/PerlinPatch.cpp @@ -148,12 +148,10 @@ protected: { fTexX - texWidth, fTexY + texHeight}} ; - sk_sp xfer(SkXfermode::Make(SkXfermode::kSrc_Mode)); - SkScalar scaleFreq = 2.0; fShader1 = SkPerlinNoiseShader2::MakeImprovedNoise(fXFreq/scaleFreq, fYFreq/scaleFreq, 4, fSeed); - fShaderCompose = SkShader::MakeComposeShader(fShader0, fShader1, nullptr); + fShaderCompose = SkShader::MakeComposeShader(fShader0, fShader1, SkBlendMode::kSrcOver); paint.setShader(fShaderCompose); @@ -161,7 +159,7 @@ protected: if (fShowGrid) { tex = nullptr; } - canvas->drawPatch(fPts, nullptr, tex, xfer, paint); + canvas->drawPatch(fPts, nullptr, tex, SkBlendMode::kSrc, paint); draw_control_points(canvas, fPts); } diff --git a/samplecode/SampleAll.cpp b/samplecode/SampleAll.cpp index 8c1ace5..94c12cd 100644 --- a/samplecode/SampleAll.cpp +++ b/samplecode/SampleAll.cpp @@ -504,7 +504,7 @@ protected: auto shaderB = SkGradientShader::MakeLinear(pts, colors2, nullptr, 2, SkShader::kClamp_TileMode); return SkShader::MakeComposeShader(std::move(shaderA), std::move(shaderB), - SkXfermode::Make(SkXfermode::kDstIn_Mode)); + SkBlendMode::kDstIn); } virtual void startTest() { diff --git a/samplecode/SampleAtlas.cpp b/samplecode/SampleAtlas.cpp index 3daf312..f89b37d 100644 --- a/samplecode/SampleAtlas.cpp +++ b/samplecode/SampleAtlas.cpp @@ -21,7 +21,7 @@ typedef void (*DrawAtlasProc)(SkCanvas*, SkImage*, const SkRSXform[], const SkRe 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, SkXfermode::kModulate_Mode, cull, paint); + canvas->drawAtlas(atlas, xform, tex, colors, count, SkBlendMode::kModulate, cull, paint); } static void draw_atlas_sim(SkCanvas* canvas, SkImage* atlas, const SkRSXform xform[], diff --git a/samplecode/SampleColorFilter.cpp b/samplecode/SampleColorFilter.cpp index 67c7b2e..60ab013 100644 --- a/samplecode/SampleColorFilter.cpp +++ b/samplecode/SampleColorFilter.cpp @@ -151,21 +151,21 @@ protected: return; } - static const SkXfermode::Mode gModes[] = { - SkXfermode::kClear_Mode, - SkXfermode::kSrc_Mode, - SkXfermode::kDst_Mode, - SkXfermode::kSrcOver_Mode, - SkXfermode::kDstOver_Mode, - SkXfermode::kSrcIn_Mode, - SkXfermode::kDstIn_Mode, - SkXfermode::kSrcOut_Mode, - SkXfermode::kDstOut_Mode, - SkXfermode::kSrcATop_Mode, - SkXfermode::kDstATop_Mode, - SkXfermode::kXor_Mode, - SkXfermode::kPlus_Mode, - SkXfermode::kModulate_Mode, + static const SkBlendMode gModes[] = { + SkBlendMode::kClear, + SkBlendMode::kSrc, + SkBlendMode::kDst, + SkBlendMode::kSrcOver, + SkBlendMode::kDstOver, + SkBlendMode::kSrcIn, + SkBlendMode::kDstIn, + SkBlendMode::kSrcOut, + SkBlendMode::kDstOut, + SkBlendMode::kSrcATop, + SkBlendMode::kDstATop, + SkBlendMode::kXor, + SkBlendMode::kPlus, + SkBlendMode::kModulate, }; static const SkColor gColors[] = { diff --git a/samplecode/SampleFilterFuzz.cpp b/samplecode/SampleFilterFuzz.cpp index 28aa5f4..139166f 100644 --- a/samplecode/SampleFilterFuzz.cpp +++ b/samplecode/SampleFilterFuzz.cpp @@ -558,7 +558,7 @@ static sk_sp make_image_filter(bool canBeNull) { case MERGE: filter = SkMergeImageFilter::Make(make_image_filter(), make_image_filter(), - (SkXfermode::Mode)make_xfermode()); + make_xfermode()); break; case COLOR: { sk_sp cf(make_color_filter()); diff --git a/samplecode/SamplePatch.cpp b/samplecode/SamplePatch.cpp index 641e1e9..243d106 100644 --- a/samplecode/SamplePatch.cpp +++ b/samplecode/SamplePatch.cpp @@ -188,8 +188,7 @@ void Patch::draw(SkCanvas* canvas, const SkPaint& paint, int nu, int nv, t += dt; canvas->drawVertices(SkCanvas::kTriangleStrip_VertexMode, stripCount, strip, doTextures ? tex : nullptr, - doColors ? colors : nullptr, nullptr, - nullptr, 0, paint); + doColors ? colors : nullptr, nullptr, 0, paint); } } diff --git a/samplecode/SampleShaders.cpp b/samplecode/SampleShaders.cpp index 608199d..ba3b80d 100644 --- a/samplecode/SampleShaders.cpp +++ b/samplecode/SampleShaders.cpp @@ -34,8 +34,7 @@ static sk_sp make_bitmapfade(const SkBitmap& bm) { auto shaderB = SkShader::MakeBitmapShader(bm, SkShader::kClamp_TileMode, SkShader::kClamp_TileMode); - return SkShader::MakeComposeShader(std::move(shaderB), std::move(shaderA), - SkXfermode::Make(SkXfermode::kDstIn_Mode)); + return SkShader::MakeComposeShader(std::move(shaderB), std::move(shaderA), SkBlendMode::kDstIn); } class ShaderView : public SampleView { @@ -62,7 +61,7 @@ public: auto shaderB = SkGradientShader::MakeLinear(pts, colors, nullptr, 2, SkShader::kClamp_TileMode); fShader = SkShader::MakeComposeShader(std::move(shaderA), std::move(shaderB), - SkXfermode::Make(SkXfermode::kDstIn_Mode)); + SkBlendMode::kDstIn); } protected: diff --git a/samplecode/SampleShip.cpp b/samplecode/SampleShip.cpp index 1335c31..9d65b6f 100644 --- a/samplecode/SampleShip.cpp +++ b/samplecode/SampleShip.cpp @@ -26,7 +26,7 @@ const SkColor[], int, const SkRect*, 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, SkXfermode::kModulate_Mode, cull, paint); + canvas->drawAtlas(atlas, xform, tex, colors, count, SkBlendMode::kModulate, cull, paint); } static void draw_atlas_sim(SkCanvas* canvas, SkImage* atlas, const SkRSXform xform[], diff --git a/samplecode/SampleSlides.cpp b/samplecode/SampleSlides.cpp index 521e9f6..43221d4 100644 --- a/samplecode/SampleSlides.cpp +++ b/samplecode/SampleSlides.cpp @@ -436,21 +436,21 @@ static void mesh_slide(SkCanvas* canvas) { paint.setShader(nullptr); canvas->drawVertices(fRecs[i].fMode, fRecs[i].fCount, fRecs[i].fVerts, fRecs[i].fTexs, - nullptr, nullptr, nullptr, 0, paint); + nullptr, nullptr, 0, paint); canvas->translate(SkIntToScalar(210), 0); paint.setShader(fShader0); canvas->drawVertices(fRecs[i].fMode, fRecs[i].fCount, fRecs[i].fVerts, fRecs[i].fTexs, - nullptr, nullptr, nullptr, 0, paint); + nullptr, nullptr, 0, paint); canvas->translate(SkIntToScalar(210), 0); paint.setShader(fShader1); canvas->drawVertices(fRecs[i].fMode, fRecs[i].fCount, fRecs[i].fVerts, fRecs[i].fTexs, - nullptr, nullptr, nullptr, 0, paint); + nullptr, nullptr, 0, paint); canvas->restore(); canvas->translate(0, SkIntToScalar(250)); diff --git a/samplecode/SampleVertices.cpp b/samplecode/SampleVertices.cpp index 0d43962..3ba98bb 100644 --- a/samplecode/SampleVertices.cpp +++ b/samplecode/SampleVertices.cpp @@ -90,21 +90,21 @@ protected: paint.setShader(nullptr); canvas->drawVertices(fRecs[i].fMode, fRecs[i].fCount, fRecs[i].fVerts, fRecs[i].fTexs, - nullptr, nullptr, nullptr, 0, paint); + nullptr, nullptr, 0, paint); canvas->translate(SkIntToScalar(250), 0); paint.setShader(fShader0); canvas->drawVertices(fRecs[i].fMode, fRecs[i].fCount, fRecs[i].fVerts, fRecs[i].fTexs, - nullptr, nullptr, nullptr, 0, paint); + nullptr, nullptr, 0, paint); canvas->translate(SkIntToScalar(250), 0); paint.setShader(fShader1); canvas->drawVertices(fRecs[i].fMode, fRecs[i].fCount, fRecs[i].fVerts, fRecs[i].fTexs, - nullptr, nullptr, nullptr, 0, paint); + nullptr, nullptr, 0, paint); canvas->restore(); canvas->translate(0, SkIntToScalar(250)); diff --git a/src/core/SkBitmapDevice.cpp b/src/core/SkBitmapDevice.cpp index e663cce..cb177e0 100644 --- a/src/core/SkBitmapDevice.cpp +++ b/src/core/SkBitmapDevice.cpp @@ -367,10 +367,16 @@ void SkBitmapDevice::drawPosText(const SkDraw& draw, const void* text, size_t le void SkBitmapDevice::drawVertices(const SkDraw& draw, SkCanvas::VertexMode vmode, int vertexCount, const SkPoint verts[], const SkPoint textures[], - const SkColor colors[], SkXfermode* xmode, + const SkColor colors[], SK_XFERMODE_PARAM xmode, const uint16_t indices[], int indexCount, const SkPaint& paint) { - draw.drawVertices(vmode, vertexCount, verts, textures, colors, xmode, + SkBlendMode bmode; +#ifdef SK_SUPPORT_LEGACY_XFERMODE_PARAM + bmode = xmode ? xmode->blend() : SkBlendMode::kModulate; +#else + bmode = xmode; +#endif + draw.drawVertices(vmode, vertexCount, verts, textures, colors, bmode, indices, indexCount, paint); } diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp index 4e74a77..0fdbc58 100644 --- a/src/core/SkCanvas.cpp +++ b/src/core/SkCanvas.cpp @@ -1879,8 +1879,13 @@ void SkCanvas::drawPoints(PointMode mode, size_t count, const SkPoint pts[], con } void SkCanvas::drawVertices(VertexMode vmode, int vertexCount, const SkPoint vertices[], - const SkPoint texs[], const SkColor colors[], SkXfermode* xmode, + const SkPoint texs[], const SkColor colors[], SkBlendMode bmode, const uint16_t indices[], int indexCount, const SkPaint& paint) { +#ifdef SK_SUPPORT_LEGACY_XFERMODE_PARAM + SkXfermode* xmode = SkXfermode::Peek(bmode); +#else + SkBlendMode xmode = bmode; +#endif this->onDrawVertices(vmode, vertexCount, vertices, texs, colors, xmode, indices, indexCount, paint); } @@ -2009,16 +2014,15 @@ void SkCanvas::drawBitmapLattice(const SkBitmap& bitmap, const Lattice& lattice, } void SkCanvas::drawAtlas(const SkImage* atlas, const SkRSXform xform[], const SkRect tex[], - const SkColor colors[], int count, SkXfermode::Mode mode, + const SkColor colors[], int count, SkBlendMode mode, const SkRect* cull, const SkPaint* paint) { RETURN_ON_NULL(atlas); if (count <= 0) { return; } SkASSERT(atlas); - SkASSERT(xform); SkASSERT(tex); - this->onDrawAtlas(atlas, xform, tex, colors, count, mode, cull, paint); + this->onDrawAtlas(atlas, xform, tex, colors, count, (SK_XFERMODE_MODE_PARAM)mode, cull, paint); } void SkCanvas::drawAnnotation(const SkRect& rect, const char key[], SkData* value) { @@ -2827,7 +2831,7 @@ void SkCanvas::drawTextBlob(const SkTextBlob* blob, SkScalar x, SkScalar y, void SkCanvas::onDrawVertices(VertexMode vmode, int vertexCount, const SkPoint verts[], const SkPoint texs[], - const SkColor colors[], SkXfermode* xmode, + const SkColor colors[], SK_XFERMODE_PARAM xmode, const uint16_t indices[], int indexCount, const SkPaint& paint) { TRACE_EVENT0("disabled-by-default-skia", "SkCanvas::drawVertices()"); @@ -2843,17 +2847,24 @@ void SkCanvas::onDrawVertices(VertexMode vmode, int vertexCount, } void SkCanvas::drawPatch(const SkPoint cubics[12], const SkColor colors[4], - const SkPoint texCoords[4], SkXfermode* xmode, const SkPaint& paint) { + const SkPoint texCoords[4], SkBlendMode bmode, + const SkPaint& paint) { TRACE_EVENT0("disabled-by-default-skia", "SkCanvas::drawPatch()"); if (nullptr == cubics) { return; } +#ifdef SK_SUPPORT_LEGACY_XFERMODE_PARAM + SkXfermode* xmode = SkXfermode::Peek(bmode); +#else + SkBlendMode xmode = bmode; +#endif this->onDrawPatch(cubics, colors, texCoords, xmode, paint); } void SkCanvas::onDrawPatch(const SkPoint cubics[12], const SkColor colors[4], - const SkPoint texCoords[4], SkXfermode* xmode, const SkPaint& paint) { + const SkPoint texCoords[4], SK_XFERMODE_PARAM xmode, + const SkPaint& paint) { // Since a patch is always within the convex hull of the control points, we discard it when its // bounding rectangle is completely outside the current clip. SkRect bounds; @@ -2896,7 +2907,7 @@ void SkCanvas::onDrawDrawable(SkDrawable* dr, const SkMatrix* matrix) { } void SkCanvas::onDrawAtlas(const SkImage* atlas, const SkRSXform xform[], const SkRect tex[], - const SkColor colors[], int count, SkXfermode::Mode mode, + const SkColor colors[], int count, SK_XFERMODE_MODE_PARAM mode, const SkRect* cull, const SkPaint* paint) { if (cull && this->quickReject(*cull)) { return; diff --git a/src/core/SkColorFilter.cpp b/src/core/SkColorFilter.cpp index b23b100..23def9f 100644 --- a/src/core/SkColorFilter.cpp +++ b/src/core/SkColorFilter.cpp @@ -19,7 +19,7 @@ #include "GrFragmentProcessor.h" #endif -bool SkColorFilter::asColorMode(SkColor* color, SkXfermode::Mode* mode) const { +bool SkColorFilter::asColorMode(SkColor* color, SK_XFERMODE_MODE_PARAM* mode) const { return false; } diff --git a/src/core/SkComposeShader.cpp b/src/core/SkComposeShader.cpp index 51e30ea..8c21453 100644 --- a/src/core/SkComposeShader.cpp +++ b/src/core/SkComposeShader.cpp @@ -14,6 +14,20 @@ #include "SkXfermode.h" #include "SkString.h" +sk_sp SkShader::MakeComposeShader(sk_sp dst, sk_sp src, + SkBlendMode mode) { + if (!src || !dst) { + return nullptr; + } + if (SkBlendMode::kSrc == mode) { + return src; + } + if (SkBlendMode::kDst == mode) { + return dst; + } + return sk_sp(new SkComposeShader(std::move(dst), std::move(src), mode)); +} + /////////////////////////////////////////////////////////////////////////////// size_t SkComposeShader::onContextSize(const ContextRec& rec) const { @@ -42,17 +56,23 @@ private: sk_sp SkComposeShader::CreateProc(SkReadBuffer& buffer) { sk_sp shaderA(buffer.readShader()); sk_sp shaderB(buffer.readShader()); - sk_sp mode(buffer.readXfermode()); + SkBlendMode mode; + if (buffer.isVersionLT(SkReadBuffer::kXfermodeToBlendMode2_Version)) { + sk_sp xfer = buffer.readXfermode(); + mode = xfer ? xfer->blend() : SkBlendMode::kSrcOver; + } else { + mode = (SkBlendMode)buffer.read32(); + } if (!shaderA || !shaderB) { return nullptr; } - return sk_make_sp(std::move(shaderA), std::move(shaderB), std::move(mode)); + return sk_make_sp(std::move(shaderA), std::move(shaderB), mode); } void SkComposeShader::flatten(SkWriteBuffer& buffer) const { buffer.writeFlattenable(fShaderA.get()); buffer.writeFlattenable(fShaderB.get()); - buffer.writeFlattenable(fMode.get()); + buffer.write32((int)fMode); } template void safe_call_destructor(T* obj) { @@ -107,7 +127,10 @@ bool SkComposeShader::asACompose(ComposeRec* rec) const { if (rec) { rec->fShaderA = fShaderA.get(); rec->fShaderB = fShaderB.get(); - rec->fMode = fMode.get(); +#ifdef SK_SUPPORT_LEGACY_XFERMODE_PARAM + rec->fMode = SkXfermode::Peek(fMode); +#endif + rec->fBlendMode = fMode; } return true; } @@ -120,12 +143,13 @@ bool SkComposeShader::asACompose(ComposeRec* rec) const { void SkComposeShader::ComposeShaderContext::shadeSpan(int x, int y, SkPMColor result[], int count) { SkShader::Context* shaderContextA = fShaderContextA; SkShader::Context* shaderContextB = fShaderContextB; - SkXfermode* mode = static_cast(fShader).fMode.get(); + SkBlendMode mode = static_cast(fShader).fMode; unsigned scale = SkAlpha255To256(this->getPaintAlpha()); SkPMColor tmp[TMP_COLOR_COUNT]; - if (nullptr == mode) { // implied SRC_OVER + SkXfermode* xfer = SkXfermode::Peek(mode); + if (nullptr == xfer) { // implied SRC_OVER // TODO: when we have a good test-case, should use SkBlitRow::Proc32 // for these loops do { @@ -161,7 +185,7 @@ void SkComposeShader::ComposeShaderContext::shadeSpan(int x, int y, SkPMColor re shaderContextA->shadeSpan(x, y, result, n); shaderContextB->shadeSpan(x, y, tmp, n); - mode->xfer32(result, tmp, n, nullptr); + xfer->xfer32(result, tmp, n, nullptr); if (256 != scale) { for (int i = 0; i < n; i++) { @@ -184,21 +208,15 @@ void SkComposeShader::ComposeShaderContext::shadeSpan(int x, int y, SkPMColor re ///////////////////////////////////////////////////////////////////// sk_sp SkComposeShader::asFragmentProcessor(const AsFPArgs& args) const { - // Fragment processor will only support SkXfermode::Mode modes currently. - SkXfermode::Mode mode; - if (!(SkXfermode::AsMode(fMode, &mode))) { - return nullptr; - } - - switch (mode) { - case SkXfermode::kClear_Mode: + switch (fMode) { + case SkBlendMode::kClear: return GrConstColorProcessor::Make(GrColor4f::TransparentBlack(), GrConstColorProcessor::kIgnore_InputMode); break; - case SkXfermode::kSrc_Mode: + case SkBlendMode::kSrc: return fShaderB->asFragmentProcessor(args); break; - case SkXfermode::kDst_Mode: + case SkBlendMode::kDst: return fShaderA->asFragmentProcessor(args); break; default: @@ -211,7 +229,7 @@ sk_sp SkComposeShader::asFragmentProcessor(const AsFPArgs& return nullptr; } return GrXfermodeFragmentProcessor::MakeFromTwoProcessors(std::move(fpB), - std::move(fpA), mode); + std::move(fpA), fMode); } } #endif @@ -224,9 +242,8 @@ void SkComposeShader::toString(SkString* str) const { fShaderA->toString(str); str->append(" ShaderB: "); fShaderB->toString(str); - if (fMode) { - str->append(" Xfermode: "); - fMode->toString(str); + if (SkBlendMode::kSrcOver != fMode) { + str->appendf(" Xfermode: %s", SkXfermode::ModeName(fMode)); } this->INHERITED::toString(str); @@ -234,18 +251,3 @@ void SkComposeShader::toString(SkString* str) const { str->append(")"); } #endif - -/////////////////////////////////////////////////////////////////////////////////////////////////// - -sk_sp SkShader::MakeComposeShader(sk_sp dst, sk_sp src, - sk_sp xfer) { - if (!dst || !src) { - return nullptr; - } - return sk_make_sp(std::move(dst), std::move(src), std::move(xfer)); -} - -sk_sp SkShader::MakeComposeShader(sk_sp dst, sk_sp src, - SkXfermode::Mode mode) { - return MakeComposeShader(std::move(dst), std::move(src), SkXfermode::Make(mode)); -} diff --git a/src/core/SkComposeShader.h b/src/core/SkComposeShader.h index d1b095e..95da9c8 100644 --- a/src/core/SkComposeShader.h +++ b/src/core/SkComposeShader.h @@ -9,7 +9,7 @@ #define SkComposeShader_DEFINED #include "SkShader.h" -#include "SkXfermode.h" +#include "SkBlendMode.h" /////////////////////////////////////////////////////////////////////////////////////////// @@ -28,10 +28,10 @@ public: @param mode The xfermode that combines the colors from the two shaders. If mode is null, then SRC_OVER is assumed. */ - SkComposeShader(sk_sp sA, sk_sp sB, sk_sp mode) + SkComposeShader(sk_sp sA, sk_sp sB, SkBlendMode mode) : fShaderA(std::move(sA)) , fShaderB(std::move(sB)) - , fMode(std::move(mode)) + , fMode(mode) {} #if SK_SUPPORT_GPU @@ -78,7 +78,7 @@ protected: private: sk_sp fShaderA; sk_sp fShaderB; - sk_sp fMode; + SkBlendMode fMode; typedef SkShader INHERITED; }; diff --git a/src/core/SkDevice.cpp b/src/core/SkDevice.cpp index 70eabab..30da202 100644 --- a/src/core/SkDevice.cpp +++ b/src/core/SkDevice.cpp @@ -119,7 +119,7 @@ void SkBaseDevice::drawDRRect(const SkDraw& draw, const SkRRect& outer, } void SkBaseDevice::drawPatch(const SkDraw& draw, const SkPoint cubics[12], const SkColor colors[4], - const SkPoint texCoords[4], SkXfermode* xmode, const SkPaint& paint) { + const SkPoint texCoords[4], SK_XFERMODE_PARAM xmode, const SkPaint& paint) { SkPatchUtils::VertexData data; SkISize lod = SkPatchUtils::GetLevelOfDetail(cubics, draw.fMatrix); @@ -240,7 +240,7 @@ void SkBaseDevice::drawBitmapLattice(const SkDraw& draw, const SkBitmap& bitmap, void SkBaseDevice::drawAtlas(const SkDraw& draw, const SkImage* atlas, const SkRSXform xform[], const SkRect tex[], const SkColor colors[], int count, - SkXfermode::Mode mode, const SkPaint& paint) { + SK_XFERMODE_MODE_PARAM mode, const SkPaint& paint) { SkPath path; path.setIsVolatile(true); @@ -262,7 +262,7 @@ void SkBaseDevice::drawAtlas(const SkDraw& draw, const SkImage* atlas, const SkR pnt.setShader(std::move(shader)); if (colors) { - pnt.setColorFilter(SkColorFilter::MakeModeFilter(colors[i], mode)); + pnt.setColorFilter(SkColorFilter::MakeModeFilter(colors[i], (SkBlendMode)mode)); } path.rewind(); diff --git a/src/core/SkDraw.cpp b/src/core/SkDraw.cpp index 2a88781..44e31c4 100644 --- a/src/core/SkDraw.cpp +++ b/src/core/SkDraw.cpp @@ -1888,7 +1888,7 @@ void SkTriColorShader::toString(SkString* str) const { void SkDraw::drawVertices(SkCanvas::VertexMode vmode, int count, const SkPoint vertices[], const SkPoint textures[], - const SkColor colors[], SkXfermode* xmode, + const SkColor colors[], SkBlendMode bmode, const uint16_t indices[], int indexCount, const SkPaint& paint) const { SkASSERT(0 == count || vertices); @@ -1935,9 +1935,7 @@ void SkDraw::drawVertices(SkCanvas::VertexMode vmode, int count, } else { // colors * texture SkASSERT(shader); - sk_sp xfer = xmode ? sk_ref_sp(xmode) - : SkXfermode::Make(SkXfermode::kModulate_Mode); - p.setShader(SkShader::MakeComposeShader(triShader, sk_ref_sp(shader), std::move(xfer))); + p.setShader(SkShader::MakeComposeShader(triShader, sk_ref_sp(shader), bmode)); } } diff --git a/src/core/SkLiteDL.cpp b/src/core/SkLiteDL.cpp index ea9180b..fd20885 100644 --- a/src/core/SkLiteDL.cpp +++ b/src/core/SkLiteDL.cpp @@ -454,8 +454,13 @@ namespace { struct DrawPatch final : Op { static const auto kType = Type::DrawPatch; DrawPatch(const SkPoint cubics[12], const SkColor colors[4], const SkPoint texs[4], - SkXfermode* xfermode, const SkPaint& paint) - : xfermode(sk_ref_sp(xfermode)), paint(paint) { + SK_XFERMODE_PARAM xfermode, const SkPaint& paint) +#ifdef SK_SUPPORT_LEGACY_XFERMODE_PARAM + : xfermode(sk_ref_sp(xfermode)), paint(paint) +#else + : xfermode(xfermode), paint(paint) +#endif + { copy_v(this->cubics, cubics, 12); if (colors) { copy_v(this->colors, colors, 4); has_colors = true; } if (texs ) { copy_v(this->texs , texs , 4); has_texs = true; } @@ -463,13 +468,17 @@ namespace { SkPoint cubics[12]; SkColor colors[4]; SkPoint texs[4]; +#ifdef SK_SUPPORT_LEGACY_XFERMODE_PARAM sk_sp xfermode; +#else + SkBlendMode xfermode; +#endif SkPaint paint; bool has_colors = false; bool has_texs = false; void draw(SkCanvas* c, const SkMatrix&) { c->drawPatch(cubics, has_colors ? colors : nullptr, has_texs ? texs : nullptr, - xfermode.get(), paint); + xfermode, paint); } }; struct DrawPoints final : Op { @@ -485,13 +494,21 @@ namespace { }; struct DrawVertices final : Op { static const auto kType = Type::DrawVertices; - DrawVertices(SkCanvas::VertexMode mode, int count, SkXfermode* xfermode, int nindices, + DrawVertices(SkCanvas::VertexMode mode, int count, SK_XFERMODE_PARAM xfermode, int nindices, const SkPaint& paint, bool has_texs, bool has_colors, bool has_indices) +#ifdef SK_SUPPORT_LEGACY_XFERMODE_PARAM : mode(mode), count(count), xfermode(sk_ref_sp(xfermode)), nindices(nindices) +#else + : mode(mode), count(count), xfermode(xfermode), nindices(nindices) +#endif , paint(paint), has_texs(has_texs), has_colors(has_colors), has_indices(has_indices) {} SkCanvas::VertexMode mode; int count; +#ifdef SK_SUPPORT_LEGACY_XFERMODE_PARAM sk_sp xfermode; +#else + SkBlendMode xfermode; +#endif int nindices; SkPaint paint; bool has_texs; @@ -517,13 +534,13 @@ namespace { if (has_indices) { indices = pod(this, offset); } - c->drawVertices(mode, count, vertices, texs, colors, xfermode.get(), + c->drawVertices(mode, count, vertices, texs, colors, xfermode, indices, nindices, paint); } }; struct DrawAtlas final : Op { static const auto kType = Type::DrawAtlas; - DrawAtlas(const SkImage* atlas, int count, SkXfermode::Mode xfermode, + DrawAtlas(const SkImage* atlas, int count, SK_XFERMODE_MODE_PARAM xfermode, const SkRect* cull, const SkPaint* paint, bool has_colors) : atlas(sk_ref_sp(atlas)), count(count), xfermode(xfermode), has_colors(has_colors) { if (cull) { this->cull = *cull; } @@ -531,7 +548,7 @@ namespace { } sk_sp atlas; int count; - SkXfermode::Mode xfermode; + SK_XFERMODE_MODE_PARAM xfermode; SkRect cull = kUnset; SkPaint paint; bool has_colors; @@ -711,7 +728,7 @@ void SkLiteDL::drawTextBlob(const SkTextBlob* blob, SkScalar x, SkScalar y, cons } void SkLiteDL::drawPatch(const SkPoint points[12], const SkColor colors[4], const SkPoint texs[4], - SkXfermode* xfermode, const SkPaint& paint) { + SK_XFERMODE_PARAM xfermode, const SkPaint& paint) { this->push(0, points, colors, texs, xfermode, paint); } void SkLiteDL::drawPoints(SkCanvas::PointMode mode, size_t count, const SkPoint points[], @@ -720,7 +737,7 @@ void SkLiteDL::drawPoints(SkCanvas::PointMode mode, size_t count, const SkPoint copy_v(pod, points,count); } void SkLiteDL::drawVertices(SkCanvas::VertexMode mode, int count, const SkPoint vertices[], - const SkPoint texs[], const SkColor colors[], SkXfermode* xfermode, + const SkPoint texs[], const SkColor colors[], SK_XFERMODE_PARAM xfermode, const uint16_t indices[], int nindices, const SkPaint& paint) { size_t bytes = count * sizeof(SkPoint); if (texs ) { bytes += count * sizeof(SkPoint); } @@ -734,7 +751,7 @@ void SkLiteDL::drawVertices(SkCanvas::VertexMode mode, int count, const SkPoint indices, indices ? nindices : 0); } void SkLiteDL::drawAtlas(const SkImage* atlas, const SkRSXform xforms[], const SkRect texs[], - const SkColor colors[], int count, SkXfermode::Mode xfermode, + const SkColor colors[], int count, SK_XFERMODE_MODE_PARAM xfermode, const SkRect* cull, const SkPaint* paint) { size_t bytes = count*(sizeof(SkRSXform) + sizeof(SkRect)); if (colors) { diff --git a/src/core/SkLiteDL.h b/src/core/SkLiteDL.h index 3e9eb5e..30211a6 100644 --- a/src/core/SkLiteDL.h +++ b/src/core/SkLiteDL.h @@ -78,12 +78,12 @@ public: const SkRect&, const SkPaint*); void drawPatch(const SkPoint[12], const SkColor[4], const SkPoint[4], - SkXfermode*, const SkPaint&); + SK_XFERMODE_PARAM, const SkPaint&); void drawPoints(SkCanvas::PointMode, size_t, const SkPoint[], const SkPaint&); void drawVertices(SkCanvas::VertexMode, int, const SkPoint[], const SkPoint[], const SkColor[], - SkXfermode*, const uint16_t[], int, const SkPaint&); + SK_XFERMODE_PARAM, const uint16_t[], int, const SkPaint&); void drawAtlas(const SkImage*, const SkRSXform[], const SkRect[], const SkColor[], int, - SkXfermode::Mode, const SkRect*, const SkPaint*); + SK_XFERMODE_MODE_PARAM, const SkRect*, const SkPaint*); void setBounds(const SkRect& bounds); diff --git a/src/core/SkLiteRecorder.cpp b/src/core/SkLiteRecorder.cpp index 49b1984..4c3de18 100644 --- a/src/core/SkLiteRecorder.cpp +++ b/src/core/SkLiteRecorder.cpp @@ -171,7 +171,7 @@ void SkLiteRecorder::onDrawImageLattice(const SkImage* img, void SkLiteRecorder::onDrawPatch(const SkPoint cubics[12], const SkColor colors[4], const SkPoint texCoords[4], - SkXfermode* xfermode, const SkPaint& paint) { + SK_XFERMODE_PARAM xfermode, const SkPaint& paint) { fDL->drawPatch(cubics, colors, texCoords, xfermode, paint); } void SkLiteRecorder::onDrawPoints(SkCanvas::PointMode mode, @@ -182,7 +182,7 @@ void SkLiteRecorder::onDrawPoints(SkCanvas::PointMode mode, void SkLiteRecorder::onDrawVertices(SkCanvas::VertexMode mode, int count, const SkPoint vertices[], const SkPoint texs[], const SkColor colors[], - SkXfermode* xfermode, + SK_XFERMODE_PARAM xfermode, const uint16_t indices[], int indexCount, const SkPaint& paint) { fDL->drawVertices(mode, count, vertices, texs, colors, xfermode, indices, indexCount, paint); @@ -192,7 +192,7 @@ void SkLiteRecorder::onDrawAtlas(const SkImage* atlas, const SkRect texs[], const SkColor colors[], int count, - SkXfermode::Mode xfermode, + SK_XFERMODE_MODE_PARAM xfermode, const SkRect* cull, const SkPaint* paint) { fDL->drawAtlas(atlas, xforms, texs, colors, count, xfermode, cull, paint); diff --git a/src/core/SkLiteRecorder.h b/src/core/SkLiteRecorder.h index be27854..9010a42 100644 --- a/src/core/SkLiteRecorder.h +++ b/src/core/SkLiteRecorder.h @@ -72,12 +72,12 @@ public: SrcRectConstraint) override; void onDrawPatch(const SkPoint[12], const SkColor[4], - const SkPoint[4], SkXfermode*, const SkPaint&) override; + const SkPoint[4], SK_XFERMODE_PARAM, const SkPaint&) override; void onDrawPoints(PointMode, size_t count, const SkPoint pts[], const SkPaint&) override; void onDrawVertices(VertexMode, int, const SkPoint[], const SkPoint[], const SkColor[], - SkXfermode*, const uint16_t[], int, const SkPaint&) override; + SK_XFERMODE_PARAM, const uint16_t[], int, const SkPaint&) override; void onDrawAtlas(const SkImage*, const SkRSXform[], const SkRect[], const SkColor[], - int, SkXfermode::Mode, const SkRect*, const SkPaint*) override; + int, SK_XFERMODE_MODE_PARAM, const SkRect*, const SkPaint*) override; #ifdef SK_EXPERIMENTAL_SHADOWING void didTranslateZ(SkScalar) override; diff --git a/src/core/SkModeColorFilter.cpp b/src/core/SkModeColorFilter.cpp index f000e7c..acfd328 100644 --- a/src/core/SkModeColorFilter.cpp +++ b/src/core/SkModeColorFilter.cpp @@ -29,12 +29,12 @@ void SkModeColorFilter::toString(SkString* str) const { } #endif -bool SkModeColorFilter::asColorMode(SkColor* color, SkXfermode::Mode* mode) const { +bool SkModeColorFilter::asColorMode(SkColor* color, SK_XFERMODE_MODE_PARAM* mode) const { if (color) { *color = fColor; } if (mode) { - *mode = fMode; + *mode = (SK_XFERMODE_MODE_PARAM)fMode; } return true; } @@ -42,8 +42,8 @@ bool SkModeColorFilter::asColorMode(SkColor* color, SkXfermode::Mode* mode) cons uint32_t SkModeColorFilter::getFlags() const { uint32_t flags = 0; switch (fMode) { - case SkXfermode::kDst_Mode: //!< [Da, Dc] - case SkXfermode::kSrcATop_Mode: //!< [Da, Sc * Da + (1 - Sa) * Dc] + case SkBlendMode::kDst: //!< [Da, Dc] + case SkBlendMode::kSrcATop: //!< [Da, Sc * Da + (1 - Sa) * Dc] flags |= kAlphaUnchanged_Flag; default: break; @@ -61,7 +61,7 @@ void SkModeColorFilter::filterSpan(const SkPMColor shader[], int count, SkPMColo } void SkModeColorFilter::filterSpan4f(const SkPM4f shader[], int count, SkPM4f result[]) const { - SkXfermodeProc4f proc = SkXfermode::GetProc4f(fMode); + SkXfermodeProc4f proc = SkXfermode::GetProc4f((SkXfermode::Mode)fMode); for (int i = 0; i < count; i++) { result[i] = proc(fPM4f, shader[i]); @@ -70,18 +70,18 @@ void SkModeColorFilter::filterSpan4f(const SkPM4f shader[], int count, SkPM4f re void SkModeColorFilter::flatten(SkWriteBuffer& buffer) const { buffer.writeColor(fColor); - buffer.writeUInt(fMode); + buffer.writeUInt((int)fMode); } void SkModeColorFilter::updateCache() { fPMColor = SkPreMultiplyColor(fColor); - fProc = SkXfermode::GetProc(fMode); + fProc = SkXfermode::GetProc((SkXfermode::Mode)fMode); fPM4f = SkColor4f::FromColor(fColor).premul(); } sk_sp SkModeColorFilter::CreateProc(SkReadBuffer& buffer) { SkColor color = buffer.readColor(); - SkXfermode::Mode mode = (SkXfermode::Mode)buffer.readUInt(); + SkBlendMode mode = (SkBlendMode)buffer.readUInt(); return SkColorFilter::MakeModeFilter(color, mode); } @@ -108,7 +108,7 @@ bool SkModeColorFilter::onAppendStages(SkRasterPipeline* p) const { sk_sp SkModeColorFilter::asFragmentProcessor( GrContext*, SkColorSpace* dstColorSpace) const { - if (SkXfermode::kDst_Mode == fMode) { + if (SkBlendMode::kDst == fMode) { return nullptr; } @@ -123,7 +123,7 @@ sk_sp SkModeColorFilter::asFragmentProcessor( #ifdef SK_DEBUG // With a solid color input this should always be able to compute the blended color // (at least for coeff modes) - if (fMode <= SkXfermode::kLastCoeffMode) { + if ((unsigned)fMode <= (unsigned)SkBlendMode::kLastCoeffMode) { static SkRandom gRand; GrInvariantOutput io(GrPremulColor(gRand.nextU()), kRGBA_GrColorComponentFlags, false); @@ -140,7 +140,7 @@ sk_sp SkModeColorFilter::asFragmentProcessor( class Src_SkModeColorFilter final : public SkModeColorFilter { public: - Src_SkModeColorFilter(SkColor color) : INHERITED(color, SkXfermode::kSrc_Mode) {} + Src_SkModeColorFilter(SkColor color) : INHERITED(color, SkBlendMode::kSrc) {} void filterSpan(const SkPMColor shader[], int count, SkPMColor result[]) const override { sk_memset32(result, this->getPMColor(), count); @@ -152,7 +152,7 @@ private: class SrcOver_SkModeColorFilter final : public SkModeColorFilter { public: - SrcOver_SkModeColorFilter(SkColor color) : INHERITED(color, SkXfermode::kSrcOver_Mode) { } + SrcOver_SkModeColorFilter(SkColor color) : INHERITED(color, SkBlendMode::kSrcOver) { } void filterSpan(const SkPMColor shader[], int count, SkPMColor result[]) const override { SkBlitRow::Color32(result, shader, count, this->getPMColor()); @@ -164,7 +164,7 @@ private: /////////////////////////////////////////////////////////////////////////////// -sk_sp SkColorFilter::MakeModeFilter(SkColor color, SkXfermode::Mode mode) { +sk_sp SkColorFilter::MakeModeFilter(SkColor color, SkBlendMode mode) { if (!SkIsValidMode(mode)) { return nullptr; } @@ -173,34 +173,34 @@ sk_sp SkColorFilter::MakeModeFilter(SkColor color, SkXfermode::Mo // first collaps some modes if possible - if (SkXfermode::kClear_Mode == mode) { + if (SkBlendMode::kClear == mode) { color = 0; - mode = SkXfermode::kSrc_Mode; - } else if (SkXfermode::kSrcOver_Mode == mode) { + mode = SkBlendMode::kSrc; + } else if (SkBlendMode::kSrcOver == mode) { if (0 == alpha) { - mode = SkXfermode::kDst_Mode; + mode = SkBlendMode::kDst; } else if (255 == alpha) { - mode = SkXfermode::kSrc_Mode; + mode = SkBlendMode::kSrc; } // else just stay srcover } // weed out combinations that are noops, and just return null - if (SkXfermode::kDst_Mode == mode || - (0 == alpha && (SkXfermode::kSrcOver_Mode == mode || - SkXfermode::kDstOver_Mode == mode || - SkXfermode::kDstOut_Mode == mode || - SkXfermode::kSrcATop_Mode == mode || - SkXfermode::kXor_Mode == mode || - SkXfermode::kDarken_Mode == mode)) || - (0xFF == alpha && SkXfermode::kDstIn_Mode == mode)) { + if (SkBlendMode::kDst == mode || + (0 == alpha && (SkBlendMode::kSrcOver == mode || + SkBlendMode::kDstOver == mode || + SkBlendMode::kDstOut == mode || + SkBlendMode::kSrcATop == mode || + SkBlendMode::kXor == mode || + SkBlendMode::kDarken == mode)) || + (0xFF == alpha && SkBlendMode::kDstIn == mode)) { return nullptr; } switch (mode) { - case SkXfermode::kSrc_Mode: + case SkBlendMode::kSrc: return sk_make_sp(color); - case SkXfermode::kSrcOver_Mode: + case SkBlendMode::kSrcOver: return sk_make_sp(color); default: return SkModeColorFilter::Make(color, mode); diff --git a/src/core/SkModeColorFilter.h b/src/core/SkModeColorFilter.h index cd8fe7c..afb96e2 100644 --- a/src/core/SkModeColorFilter.h +++ b/src/core/SkModeColorFilter.h @@ -14,15 +14,15 @@ class SkModeColorFilter : public SkColorFilter { public: - static sk_sp Make(SkColor color, SkXfermode::Mode mode) { + static sk_sp Make(SkColor color, SkBlendMode mode) { return sk_sp(new SkModeColorFilter(color, mode)); } SkColor getColor() const { return fColor; } - SkXfermode::Mode getMode() const { return fMode; } + SkBlendMode getMode() const { return fMode; } SkPMColor getPMColor() const { return fPMColor; } - bool asColorMode(SkColor*, SkXfermode::Mode*) const override; + bool asColorMode(SkColor*, SK_XFERMODE_MODE_PARAM*) const override; uint32_t getFlags() const override; void filterSpan(const SkPMColor shader[], int count, SkPMColor result[]) const override; void filterSpan4f(const SkPM4f shader[], int count, SkPM4f result[]) const override; @@ -37,7 +37,7 @@ public: SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkModeColorFilter) protected: - SkModeColorFilter(SkColor color, SkXfermode::Mode mode) { + SkModeColorFilter(SkColor color, SkBlendMode mode) { fColor = color; fMode = mode; this->updateCache(); @@ -49,7 +49,7 @@ protected: private: SkColor fColor; - SkXfermode::Mode fMode; + SkBlendMode fMode; // cache SkPMColor fPMColor; SkXfermodeProc fProc; diff --git a/src/core/SkOpts.h b/src/core/SkOpts.h index 8e1b7fe..76ca68a 100644 --- a/src/core/SkOpts.h +++ b/src/core/SkOpts.h @@ -25,7 +25,7 @@ namespace SkOpts { // Declare function pointers here... // May return nullptr if we haven't specialized the given Mode. - extern SkXfermode* (*create_xfermode)(const ProcCoeff&, SkXfermode::Mode); + extern SkXfermode* (*create_xfermode)(const ProcCoeff&, SkBlendMode); typedef void (*BoxBlur)(const SkPMColor*, int, const SkIRect& srcBounds, SkPMColor*, int, int, int, int, int); extern BoxBlur box_blur_xx, box_blur_xy, box_blur_yx; diff --git a/src/core/SkPicturePlayback.cpp b/src/core/SkPicturePlayback.cpp index bede601..51e1c98 100644 --- a/src/core/SkPicturePlayback.cpp +++ b/src/core/SkPicturePlayback.cpp @@ -232,10 +232,10 @@ void SkPicturePlayback::handleOp(SkReadBuffer* reader, const SkRSXform* xform = (const SkRSXform*)reader->skip(count * sizeof(SkRSXform)); const SkRect* tex = (const SkRect*)reader->skip(count * sizeof(SkRect)); const SkColor* colors = nullptr; - SkXfermode::Mode mode = SkXfermode::kDst_Mode; + SkBlendMode mode = SkBlendMode::kDst; if (flags & DRAW_ATLAS_HAS_COLORS) { colors = (const SkColor*)reader->skip(count * sizeof(SkColor)); - mode = (SkXfermode::Mode)reader->readUInt(); + mode = (SkBlendMode)reader->readUInt(); } const SkRect* cull = nullptr; if (flags & DRAW_ATLAS_HAS_CULL) { @@ -436,18 +436,17 @@ void SkPicturePlayback::handleOp(SkReadBuffer* reader, texCoords = (const SkPoint*)reader->skip(SkPatchUtils::kNumCorners * sizeof(SkPoint)); } - sk_sp xfer; + SkBlendMode bmode = SkBlendMode::kModulate; if (flag & DRAW_VERTICES_HAS_XFER) { - int mode = reader->readInt(); - if (mode < 0 || mode > SkXfermode::kLastMode) { - mode = SkXfermode::kModulate_Mode; + unsigned mode = reader->readInt(); + if (mode <= (unsigned)SkBlendMode::kLastMode) { + bmode = (SkBlendMode)mode; } - xfer = SkXfermode::Make((SkXfermode::Mode)mode); } BREAK_ON_READ_ERROR(reader); if (paint) { - canvas->drawPatch(cubics, colors, texCoords, std::move(xfer), *paint); + canvas->drawPatch(cubics, colors, texCoords, bmode, *paint); } } break; case DRAW_PATH: { @@ -653,7 +652,6 @@ void SkPicturePlayback::handleOp(SkReadBuffer* reader, } } break; case DRAW_VERTICES: { - sk_sp xfer; const SkPaint* paint = fPictureData->getPaint(reader); DrawVertexFlags flags = (DrawVertexFlags)reader->readInt(); SkCanvas::VertexMode vmode = (SkCanvas::VertexMode)reader->readInt(); @@ -673,18 +671,18 @@ void SkPicturePlayback::handleOp(SkReadBuffer* reader, iCount = reader->readInt(); indices = (const uint16_t*)reader->skip(iCount * sizeof(uint16_t)); } + SkBlendMode bmode = SkBlendMode::kModulate; if (flags & DRAW_VERTICES_HAS_XFER) { - int mode = reader->readInt(); - if (mode < 0 || mode > SkXfermode::kLastMode) { - mode = SkXfermode::kModulate_Mode; + unsigned mode = reader->readInt(); + if (mode <= (unsigned)SkBlendMode::kLastMode) { + bmode = (SkBlendMode)mode; } - xfer = SkXfermode::Make((SkXfermode::Mode)mode); } BREAK_ON_READ_ERROR(reader); if (paint) { canvas->drawVertices(vmode, vCount, verts, texs, colors, - xfer, indices, iCount, *paint); + bmode, indices, iCount, *paint); } } break; case RESTORE: diff --git a/src/core/SkPictureRecord.cpp b/src/core/SkPictureRecord.cpp index 6325eda..8b8ee23 100644 --- a/src/core/SkPictureRecord.cpp +++ b/src/core/SkPictureRecord.cpp @@ -722,7 +722,7 @@ void SkPictureRecord::onDrawDrawable(SkDrawable* drawable, const SkMatrix* matri void SkPictureRecord::onDrawVertices(VertexMode vmode, int vertexCount, const SkPoint vertices[], const SkPoint texs[], - const SkColor colors[], SkXfermode* xfer, + const SkColor colors[], SK_XFERMODE_PARAM xmode, const uint16_t indices[], int indexCount, const SkPaint& paint) { uint32_t flags = 0; @@ -735,11 +735,16 @@ void SkPictureRecord::onDrawVertices(VertexMode vmode, int vertexCount, if (indexCount > 0) { flags |= DRAW_VERTICES_HAS_INDICES; } - if (xfer) { - SkXfermode::Mode mode; - if (xfer->asMode(&mode) && SkXfermode::kModulate_Mode != mode) { - flags |= DRAW_VERTICES_HAS_XFER; - } + SkBlendMode bmode = SkBlendMode::kModulate; +#ifdef SK_SUPPORT_LEGACY_XFERMODE_PARAM + if (xmode) { + bmode = xmode->blend(); + } +#else + bmode = xmode; +#endif + if (SkBlendMode::kModulate != bmode) { + flags |= DRAW_VERTICES_HAS_XFER; } // op + paint index + flags + vmode + vCount + vertices @@ -775,15 +780,13 @@ void SkPictureRecord::onDrawVertices(VertexMode vmode, int vertexCount, fWriter.writePad(indices, indexCount * sizeof(uint16_t)); } if (flags & DRAW_VERTICES_HAS_XFER) { - SkXfermode::Mode mode = SkXfermode::kModulate_Mode; - (void)xfer->asMode(&mode); - this->addInt(mode); + this->addInt((int)bmode); } this->validate(initialOffset, size); } void SkPictureRecord::onDrawPatch(const SkPoint cubics[12], const SkColor colors[4], - const SkPoint texCoords[4], SkXfermode* xmode, + const SkPoint texCoords[4], SK_XFERMODE_PARAM xmode, const SkPaint& paint) { // op + paint index + patch 12 control points + flag + patch 4 colors + 4 texture coordinates size_t size = 2 * kUInt32Size + SkPatchUtils::kNumCtrlPts * sizeof(SkPoint) + kUInt32Size; @@ -796,12 +799,17 @@ void SkPictureRecord::onDrawPatch(const SkPoint cubics[12], const SkColor colors flag |= DRAW_VERTICES_HAS_TEXS; size += SkPatchUtils::kNumCorners * sizeof(SkPoint); } + SkBlendMode bmode = SkBlendMode::kModulate; +#ifdef SK_SUPPORT_LEGACY_XFERMODE_PARAM if (xmode) { - SkXfermode::Mode mode; - if (xmode->asMode(&mode) && SkXfermode::kModulate_Mode != mode) { - flag |= DRAW_VERTICES_HAS_XFER; - size += kUInt32Size; - } + bmode = xmode->blend(); + } +#else + bmode = xmode; +#endif + if (SkBlendMode::kModulate != bmode) { + flag |= DRAW_VERTICES_HAS_XFER; + size += kUInt32Size; } size_t initialOffset = this->addDraw(DRAW_PATCH, &size); @@ -817,15 +825,13 @@ void SkPictureRecord::onDrawPatch(const SkPoint cubics[12], const SkColor colors fWriter.write(texCoords, SkPatchUtils::kNumCorners * sizeof(SkPoint)); } if (flag & DRAW_VERTICES_HAS_XFER) { - SkXfermode::Mode mode = SkXfermode::kModulate_Mode; - xmode->asMode(&mode); - this->addInt(mode); + this->addInt((int)bmode); } this->validate(initialOffset, size); } void SkPictureRecord::onDrawAtlas(const SkImage* atlas, const SkRSXform xform[], const SkRect tex[], - const SkColor colors[], int count, SkXfermode::Mode mode, + const SkColor colors[], int count, SK_XFERMODE_MODE_PARAM mode, const SkRect* cull, const SkPaint* paint) { // [op + paint-index + atlas-index + flags + count] + [xform] + [tex] + [*colors + mode] + cull size_t size = 5 * kUInt32Size + count * sizeof(SkRSXform) + count * sizeof(SkRect); @@ -851,7 +857,7 @@ void SkPictureRecord::onDrawAtlas(const SkImage* atlas, const SkRSXform xform[], // write optional parameters if (colors) { fWriter.write(colors, count * sizeof(SkColor)); - this->addInt(mode); + this->addInt((int)mode); } if (cull) { fWriter.write(cull, sizeof(SkRect)); diff --git a/src/core/SkPictureRecord.h b/src/core/SkPictureRecord.h index 6d75609..0db9b8b 100644 --- a/src/core/SkPictureRecord.h +++ b/src/core/SkPictureRecord.h @@ -178,10 +178,10 @@ protected: const SkPaint& paint) override; void onDrawPatch(const SkPoint cubics[12], const SkColor colors[4], - const SkPoint texCoords[4], SkXfermode* xmode, + const SkPoint texCoords[4], SK_XFERMODE_PARAM xmode, const SkPaint& paint) override; void onDrawAtlas(const SkImage*, const SkRSXform[], const SkRect[], const SkColor[], int, - SkXfermode::Mode, const SkRect*, const SkPaint*) override; + SK_XFERMODE_MODE_PARAM, const SkRect*, const SkPaint*) override; void onDrawPaint(const SkPaint&) override; void onDrawPoints(PointMode, size_t count, const SkPoint pts[], const SkPaint&) override; @@ -201,7 +201,7 @@ protected: void onDrawVertices(VertexMode vmode, int vertexCount, const SkPoint vertices[], const SkPoint texs[], - const SkColor colors[], SkXfermode* xmode, + const SkColor colors[], SK_XFERMODE_PARAM xmode, const uint16_t indices[], int indexCount, const SkPaint&) override; diff --git a/src/core/SkReadBuffer.h b/src/core/SkReadBuffer.h index 6b0d332..c49b01c 100644 --- a/src/core/SkReadBuffer.h +++ b/src/core/SkReadBuffer.h @@ -70,6 +70,7 @@ public: kBlurMaskFilterWritesOccluder = 47, kGradientShaderFloatColor_Version = 49, kXfermodeToBlendMode_Version = 50, + kXfermodeToBlendMode2_Version = 51, }; /** diff --git a/src/core/SkRecordDraw.cpp b/src/core/SkRecordDraw.cpp index dca19df..05261bb 100644 --- a/src/core/SkRecordDraw.cpp +++ b/src/core/SkRecordDraw.cpp @@ -116,7 +116,7 @@ DRAW(DrawImageNine, drawImageNine(r.image.get(), r.center, r.dst, r.paint)); DRAW(DrawOval, drawOval(r.oval, r.paint)); DRAW(DrawPaint, drawPaint(r.paint)); DRAW(DrawPath, drawPath(r.path, r.paint)); -DRAW(DrawPatch, drawPatch(r.cubics, r.colors, r.texCoords, r.xmode, r.paint)); +DRAW(DrawPatch, drawPatch(r.cubics, r.colors, r.texCoords, r.bmode, r.paint)); DRAW(DrawPicture, drawPicture(r.picture.get(), &r.matrix, r.paint)); #ifdef SK_EXPERIMENTAL_SHADOWING @@ -138,7 +138,7 @@ DRAW(DrawTextRSXform, drawTextRSXform(r.text, r.byteLength, r.xforms, r.cull, r. DRAW(DrawAtlas, drawAtlas(r.atlas.get(), r.xforms, r.texs, r.colors, r.count, r.mode, r.cull, r.paint)); DRAW(DrawVertices, drawVertices(r.vmode, r.vertexCount, r.vertices, r.texs, r.colors, - r.xmode, r.indices, r.indexCount, r.paint)); + r.bmode, r.indices, r.indexCount, r.paint)); DRAW(DrawAnnotation, drawAnnotation(r.rect, r.key.c_str(), r.value.get())); #undef DRAW diff --git a/src/core/SkRecorder.cpp b/src/core/SkRecorder.cpp index 08c7370..5720186 100644 --- a/src/core/SkRecorder.cpp +++ b/src/core/SkRecorder.cpp @@ -330,30 +330,41 @@ void SkRecorder::onDrawShadowedPicture(const SkPicture* pic, const SkMatrix* mat void SkRecorder::onDrawVertices(VertexMode vmode, int vertexCount, const SkPoint vertices[], const SkPoint texs[], const SkColor colors[], - SkXfermode* xmode, + SK_XFERMODE_PARAM xmode, const uint16_t indices[], int indexCount, const SkPaint& paint) { +#ifdef SK_SUPPORT_LEGACY_XFERMODE_PARAM + SkBlendMode bmode = xmode ? xmode->blend() : SkBlendMode::kModulate; +#else + SkBlendMode bmode = xmode; +#endif APPEND(DrawVertices, paint, vmode, vertexCount, this->copy(vertices, vertexCount), texs ? this->copy(texs, vertexCount) : nullptr, colors ? this->copy(colors, vertexCount) : nullptr, - sk_ref_sp(xmode), + bmode, this->copy(indices, indexCount), indexCount); } void SkRecorder::onDrawPatch(const SkPoint cubics[12], const SkColor colors[4], - const SkPoint texCoords[4], SkXfermode* xmode, const SkPaint& paint) { + const SkPoint texCoords[4], SK_XFERMODE_PARAM xmode, + const SkPaint& paint) { +#ifdef SK_SUPPORT_LEGACY_XFERMODE_PARAM + SkBlendMode bmode = xmode ? xmode->blend() : SkBlendMode::kModulate; +#else + SkBlendMode bmode = xmode; +#endif APPEND(DrawPatch, paint, cubics ? this->copy(cubics, SkPatchUtils::kNumCtrlPts) : nullptr, colors ? this->copy(colors, SkPatchUtils::kNumCorners) : nullptr, texCoords ? this->copy(texCoords, SkPatchUtils::kNumCorners) : nullptr, - sk_ref_sp(xmode)); + bmode); } void SkRecorder::onDrawAtlas(const SkImage* atlas, const SkRSXform xform[], const SkRect tex[], - const SkColor colors[], int count, SkXfermode::Mode mode, + const SkColor colors[], int count, SK_XFERMODE_MODE_PARAM mode, const SkRect* cull, const SkPaint* paint) { APPEND(DrawAtlas, this->copy(paint), sk_ref_sp(atlas), @@ -361,7 +372,7 @@ void SkRecorder::onDrawAtlas(const SkImage* atlas, const SkRSXform xform[], cons this->copy(tex, count), this->copy(colors, count), count, - mode, + (SkBlendMode)mode, this->copy(cull)); } diff --git a/src/core/SkRecorder.h b/src/core/SkRecorder.h index 715fc93..7015167 100644 --- a/src/core/SkRecorder.h +++ b/src/core/SkRecorder.h @@ -99,7 +99,7 @@ public: SkScalar y, const SkPaint& paint) override; void onDrawPatch(const SkPoint cubics[12], const SkColor colors[4], - const SkPoint texCoords[4], SkXfermode* xmode, + const SkPoint texCoords[4], SK_XFERMODE_PARAM xmode, const SkPaint& paint) override; void onDrawPaint(const SkPaint&) override; @@ -126,11 +126,11 @@ public: const SkPaint*) override; void onDrawVertices(VertexMode vmode, int vertexCount, const SkPoint vertices[], const SkPoint texs[], - const SkColor colors[], SkXfermode* xmode, + const SkColor colors[], SK_XFERMODE_PARAM xmode, const uint16_t indices[], int indexCount, const SkPaint&) override; void onDrawAtlas(const SkImage*, const SkRSXform[], const SkRect[], const SkColor[], - int count, SkXfermode::Mode, const SkRect* cull, const SkPaint*) override; + int count, SK_XFERMODE_MODE_PARAM, const SkRect* cull, const SkPaint*) override; void onClipRect(const SkRect& rect, ClipOp, ClipEdgeStyle) override; void onClipRRect(const SkRRect& rrect, ClipOp, ClipEdgeStyle) override; diff --git a/src/core/SkValidationUtils.h b/src/core/SkValidationUtils.h index e9e5986..d71666c 100644 --- a/src/core/SkValidationUtils.h +++ b/src/core/SkValidationUtils.h @@ -9,7 +9,7 @@ #define SkValidationUtils_DEFINED #include "SkBitmap.h" -#include "SkXfermode.h" +#include "SkBlendMode.h" /** Returns true if coeff's value is in the SkXfermode::Coeff enum. */ @@ -17,10 +17,10 @@ static inline bool SkIsValidCoeff(SkXfermode::Coeff coeff) { return coeff >= 0 && coeff < SkXfermode::kCoeffCount; } -/** Returns true if mode's value is in the SkXfermode::Mode enum. +/** Returns true if mode's value is in the SkBlendMode enum. */ -static inline bool SkIsValidMode(SkXfermode::Mode mode) { - return (mode >= 0) && (mode <= SkXfermode::kLastMode); +static inline bool SkIsValidMode(SkBlendMode mode) { + return (unsigned)mode <= (unsigned)SkBlendMode::kLastMode; } /** Returns true if the rect's dimensions are between 0 and SK_MaxS32 diff --git a/src/core/SkXfermode.cpp b/src/core/SkXfermode.cpp index 7180824..8632fdf 100644 --- a/src/core/SkXfermode.cpp +++ b/src/core/SkXfermode.cpp @@ -1109,12 +1109,12 @@ sk_sp SkProcCoeffXfermode::CreateProc(SkReadBuffer& buffer) { } void SkProcCoeffXfermode::flatten(SkWriteBuffer& buffer) const { - buffer.write32(fMode); + buffer.write32((int)fMode); } bool SkProcCoeffXfermode::asMode(Mode* mode) const { if (mode) { - *mode = fMode; + *mode = (Mode)fMode; } return true; } @@ -1307,32 +1307,33 @@ void SkProcCoeffXfermode::toString(SkString* str) const { #endif -sk_sp SkXfermode::Make(Mode mode) { - if ((unsigned)mode >= kModeCount) { +sk_sp SkXfermode::Make(SkBlendMode mode) { + if ((unsigned)mode > (unsigned)SkBlendMode::kLastMode) { // report error return nullptr; } // Skia's "default" mode is srcover. nullptr in SkPaint is interpreted as srcover // so we can just return nullptr from the factory. - if (kSrcOver_Mode == mode) { + if (SkBlendMode::kSrcOver == mode) { return nullptr; } - SkASSERT(SK_ARRAY_COUNT(gProcCoeffs) == kModeCount); + const int COUNT_BLENDMODES = (int)SkBlendMode::kLastMode + 1; + SkASSERT(SK_ARRAY_COUNT(gProcCoeffs) == COUNT_BLENDMODES); - static SkOnce once[SkXfermode::kLastMode+1]; - static SkXfermode* cached[SkXfermode::kLastMode+1]; + static SkOnce once[COUNT_BLENDMODES]; + static SkXfermode* cached[COUNT_BLENDMODES]; - once[mode]([mode] { - ProcCoeff rec = gProcCoeffs[mode]; + once[(int)mode]([mode] { + ProcCoeff rec = gProcCoeffs[(int)mode]; if (auto xfermode = SkOpts::create_xfermode(rec, mode)) { - cached[mode] = xfermode; + cached[(int)mode] = xfermode; } else { - cached[mode] = new SkProcCoeffXfermode(rec, mode); + cached[(int)mode] = new SkProcCoeffXfermode(rec, mode); } }); - return sk_ref_sp(cached[mode]); + return sk_ref_sp(cached[(int)mode]); } SkXfermodeProc SkXfermode::GetProc(Mode mode) { @@ -1481,8 +1482,8 @@ sk_sp SkBlendMode_AsXPFactory(SkBlendMode mode) { return result; } - SkASSERT(GrCustomXfermode::IsSupportedMode((SkXfermode::Mode)mode)); - return GrCustomXfermode::MakeXPFactory((SkXfermode::Mode)mode); + SkASSERT(GrCustomXfermode::IsSupportedMode(mode)); + return GrCustomXfermode::MakeXPFactory(mode); } #endif diff --git a/src/core/SkXfermode_proccoeff.h b/src/core/SkXfermode_proccoeff.h index 357de43..8d70957 100644 --- a/src/core/SkXfermode_proccoeff.h +++ b/src/core/SkXfermode_proccoeff.h @@ -23,7 +23,7 @@ struct ProcCoeff { class SK_API SkProcCoeffXfermode : public SkXfermode { public: - SkProcCoeffXfermode(const ProcCoeff& rec, Mode mode) { + SkProcCoeffXfermode(const ProcCoeff& rec, SkBlendMode mode) { fMode = mode; fProc = rec.fProc; // these may be valid, or may be CANNOT_USE_COEFF @@ -56,13 +56,13 @@ public: protected: void flatten(SkWriteBuffer& buffer) const override; - Mode getMode() const { return fMode; } + SkBlendMode getMode() const { return fMode; } SkXfermodeProc getProc() const { return fProc; } private: SkXfermodeProc fProc; - Mode fMode; + SkBlendMode fMode; Coeff fSrcCoeff, fDstCoeff; friend class SkXfermode; diff --git a/src/effects/SkBlurDrawLooper.cpp b/src/effects/SkBlurDrawLooper.cpp index 3058374..e554295 100644 --- a/src/effects/SkBlurDrawLooper.cpp +++ b/src/effects/SkBlurDrawLooper.cpp @@ -44,7 +44,7 @@ void SkBlurDrawLooper::initEffects() { // be baked into the blurred mask. SkColor opaqueColor = SkColorSetA(fBlurColor, 255); //The SrcIn xfer mode will multiply 'color' by the incoming alpha - fColorFilter = SkColorFilter::MakeModeFilter(opaqueColor, SkXfermode::kSrcIn_Mode); + fColorFilter = SkColorFilter::MakeModeFilter(opaqueColor, SkBlendMode::kSrcIn); } else { fColorFilter = nullptr; } diff --git a/src/effects/SkColorMatrixFilter.cpp b/src/effects/SkColorMatrixFilter.cpp index 32cb3d9..0a2f08f 100644 --- a/src/effects/SkColorMatrixFilter.cpp +++ b/src/effects/SkColorMatrixFilter.cpp @@ -20,8 +20,7 @@ sk_sp SkColorMatrixFilter::MakeLightingFilter(SkColor mul, SkColo const SkColor opaqueAlphaMask = SK_ColorBLACK; // omit the alpha and compare only the RGB values if (0 == (add & ~opaqueAlphaMask)) { - return SkColorFilter::MakeModeFilter(mul | opaqueAlphaMask, - SkXfermode::Mode::kModulate_Mode); + return SkColorFilter::MakeModeFilter(mul | opaqueAlphaMask, SkBlendMode::kModulate); } SkColorMatrix matrix; diff --git a/src/effects/SkDropShadowImageFilter.cpp b/src/effects/SkDropShadowImageFilter.cpp index cc43db7..f2a41ee 100644 --- a/src/effects/SkDropShadowImageFilter.cpp +++ b/src/effects/SkDropShadowImageFilter.cpp @@ -94,7 +94,7 @@ sk_sp SkDropShadowImageFilter::onFilterImage(SkSpecialImage* sou SkPaint paint; paint.setImageFilter(SkBlurImageFilter::Make(sigma.fX, sigma.fY, nullptr)); - paint.setColorFilter(SkColorFilter::MakeModeFilter(fColor, SkXfermode::kSrcIn_Mode)); + paint.setColorFilter(SkColorFilter::MakeModeFilter(fColor, SkBlendMode::kSrcIn)); SkVector offsetVec = SkVector::Make(fDx, fDy); ctx.ctm().mapVectors(&offsetVec, 1); diff --git a/src/effects/SkLayerDrawLooper.cpp b/src/effects/SkLayerDrawLooper.cpp index 784228f..51a3f77 100644 --- a/src/effects/SkLayerDrawLooper.cpp +++ b/src/effects/SkLayerDrawLooper.cpp @@ -15,7 +15,7 @@ SkLayerDrawLooper::LayerInfo::LayerInfo() { fPaintBits = 0; // ignore our paint fields - fColorMode = SkXfermode::kDst_Mode; // ignore our color + fColorMode = (SK_XFERMODE_MODE_PARAM)SkBlendMode::kDst; // ignore our color fOffset.set(0, 0); fPostTranslate = false; } @@ -39,16 +39,16 @@ SkLayerDrawLooper::Context* SkLayerDrawLooper::createContext(SkCanvas* canvas, v return new (storage) LayerDrawLooperContext(this); } -static SkColor xferColor(SkColor src, SkColor dst, SkXfermode::Mode mode) { +static SkColor xferColor(SkColor src, SkColor dst, SkBlendMode mode) { switch (mode) { - case SkXfermode::kSrc_Mode: + case SkBlendMode::kSrc: return src; - case SkXfermode::kDst_Mode: + case SkBlendMode::kDst: return dst; default: { SkPMColor pmS = SkPreMultiplyColor(src); SkPMColor pmD = SkPreMultiplyColor(dst); - SkPMColor result = SkXfermode::GetProc(mode)(pmS, pmD); + SkPMColor result = SkXfermode::GetProc((SkXfermode::Mode)mode)(pmS, pmD); return SkUnPreMultiply::PMColorToColor(result); } } @@ -60,7 +60,7 @@ static SkColor xferColor(SkColor src, SkColor dst, SkXfermode::Mode mode) { void SkLayerDrawLooper::LayerDrawLooperContext::ApplyInfo( SkPaint* dst, const SkPaint& src, const LayerInfo& info) { - dst->setColor(xferColor(src.getColor(), dst->getColor(), info.fColorMode)); + dst->setColor(xferColor(src.getColor(), dst->getColor(), (SkBlendMode)info.fColorMode)); BitFlags bits = info.fPaintBits; SkPaint::TextEncoding encoding = dst->getTextEncoding(); @@ -161,7 +161,7 @@ bool SkLayerDrawLooper::asABlurShadow(BlurShadowRec* bsRec) const { if ((rec->fInfo.fPaintBits & ~kMaskFilter_Bit)) { return false; } - if (SkXfermode::kSrc_Mode != rec->fInfo.fColorMode) { + if (SkBlendMode::kSrc != (SkBlendMode)rec->fInfo.fColorMode) { return false; } const SkMaskFilter* mf = rec->fPaint.getMaskFilter(); @@ -178,7 +178,7 @@ bool SkLayerDrawLooper::asABlurShadow(BlurShadowRec* bsRec) const { if (rec->fInfo.fPaintBits) { return false; } - if (SkXfermode::kDst_Mode != rec->fInfo.fColorMode) { + if (SkBlendMode::kDst != (SkBlendMode)rec->fInfo.fColorMode) { return false; } if (!rec->fInfo.fOffset.equals(0, 0)) { @@ -206,7 +206,7 @@ void SkLayerDrawLooper::flatten(SkWriteBuffer& buffer) const { buffer.writeInt(0); buffer.writeInt(rec->fInfo.fPaintBits); - buffer.writeInt(rec->fInfo.fColorMode); + buffer.writeInt((int)rec->fInfo.fColorMode); buffer.writePoint(rec->fInfo.fOffset); buffer.writeBool(rec->fInfo.fPostTranslate); buffer.writePaint(rec->fPaint); @@ -224,7 +224,7 @@ sk_sp SkLayerDrawLooper::CreateProc(SkReadBuffer& buffer) { (void)buffer.readInt(); info.fPaintBits = buffer.readInt(); - info.fColorMode = (SkXfermode::Mode)buffer.readInt(); + info.fColorMode = (SK_XFERMODE_MODE_PARAM)buffer.readInt(); buffer.readPoint(&info.fOffset); info.fPostTranslate = buffer.readBool(); buffer.readPaint(builder.addLayerOnTop(info)); @@ -262,14 +262,14 @@ void SkLayerDrawLooper::toString(SkString* str) const { } str->append(") "); - static const char* gModeStrings[SkXfermode::kLastMode+1] = { + static const char* gModeStrings[(int)SkBlendMode::kLastMode+1] = { "kClear", "kSrc", "kDst", "kSrcOver", "kDstOver", "kSrcIn", "kDstIn", "kSrcOut", "kDstOut", "kSrcATop", "kDstATop", "kXor", "kPlus", "kMultiply", "kScreen", "kOverlay", "kDarken", "kLighten", "kColorDodge", "kColorBurn", "kHardLight", "kSoftLight", "kDifference", "kExclusion" }; - str->appendf("mode: %s ", gModeStrings[rec->fInfo.fColorMode]); + str->appendf("mode: %s ", gModeStrings[(int)rec->fInfo.fColorMode]); str->append("offset: ("); str->appendScalar(rec->fInfo.fOffset.fX); diff --git a/src/effects/SkMergeImageFilter.cpp b/src/effects/SkMergeImageFilter.cpp index 9830669..9043620 100644 --- a/src/effects/SkMergeImageFilter.cpp +++ b/src/effects/SkMergeImageFilter.cpp @@ -16,17 +16,16 @@ sk_sp SkMergeImageFilter::Make(sk_sp first, sk_sp second, - SkXfermode::Mode mode, + SkBlendMode mode, const CropRect* cropRect) { sk_sp inputs[2] = { first, second }; - SkXfermode::Mode modes[2] = { mode, mode }; + SkBlendMode modes[2] = { mode, mode }; return sk_sp(new SkMergeImageFilter(inputs, 2, modes, cropRect)); } -sk_sp SkMergeImageFilter::Make(sk_sp filters[], - int count, - const SkXfermode::Mode modes[], - const CropRect* cropRect) { +sk_sp SkMergeImageFilter::MakeN(sk_sp filters[], int count, + const SkBlendMode modes[], + const CropRect* cropRect) { return sk_sp(new SkMergeImageFilter(filters, count, modes, cropRect)); } @@ -46,12 +45,12 @@ void SkMergeImageFilter::initAllocModes() { } } -void SkMergeImageFilter::initModes(const SkXfermode::Mode modes[]) { +void SkMergeImageFilter::initModes(const SkBlendMode modes[]) { if (modes) { this->initAllocModes(); int inputCount = this->countInputs(); for (int i = 0; i < inputCount; ++i) { - fModes[i] = SkToU8(modes[i]); + fModes[i] = SkToU8((unsigned)modes[i]); } } else { fModes = nullptr; @@ -59,7 +58,7 @@ void SkMergeImageFilter::initModes(const SkXfermode::Mode modes[]) { } SkMergeImageFilter::SkMergeImageFilter(sk_sp filters[], int count, - const SkXfermode::Mode modes[], + const SkBlendMode modes[], const CropRect* cropRect) : INHERITED(filters, count, cropRect) { SkASSERT(count >= 0); @@ -153,21 +152,21 @@ sk_sp SkMergeImageFilter::CreateProc(SkReadBuffer& buffer) { const int count = common.inputCount(); bool hasModes = buffer.readBool(); if (hasModes) { - SkAutoSTArray<4, SkXfermode::Mode> modes(count); + SkAutoSTArray<4, SkBlendMode> modes(count); SkAutoSTArray<4, uint8_t> modes8(count); if (!buffer.readByteArray(modes8.get(), count)) { return nullptr; } for (int i = 0; i < count; ++i) { - modes[i] = (SkXfermode::Mode)modes8[i]; + modes[i] = (SkBlendMode)modes8[i]; buffer.validate(SkIsValidMode(modes[i])); } if (!buffer.isValid()) { return nullptr; } - return Make(common.inputs(), count, modes.get(), &common.cropRect()); + return MakeN(common.inputs(), count, modes.get(), &common.cropRect()); } - return Make(common.inputs(), count, nullptr, &common.cropRect()); + return MakeN(common.inputs(), count, nullptr, &common.cropRect()); } void SkMergeImageFilter::flatten(SkWriteBuffer& buffer) const { diff --git a/src/effects/SkXfermodeImageFilter.cpp b/src/effects/SkXfermodeImageFilter.cpp index 6587b74..7484869 100644 --- a/src/effects/SkXfermodeImageFilter.cpp +++ b/src/effects/SkXfermodeImageFilter.cpp @@ -333,7 +333,7 @@ SkXfermodeImageFilter_Base::makeFGFrag(sk_sp bgFP) const { rec.fProc = SkXfermode::GetProc(SkXfermode::kSrcOver_Mode); SkXfermode::ModeAsCoeff(SkXfermode::kSrcOver_Mode, &rec.fSC, &rec.fDC); - srcover.reset(new SkProcCoeffXfermode(rec, SkXfermode::kSrcOver_Mode)); + srcover.reset(new SkProcCoeffXfermode(rec, SkBlendMode::kSrcOver)); xfer = srcover.get(); } diff --git a/src/gpu/GrFragmentProcessor.cpp b/src/gpu/GrFragmentProcessor.cpp index 1844983..820b428 100644 --- a/src/gpu/GrFragmentProcessor.cpp +++ b/src/gpu/GrFragmentProcessor.cpp @@ -104,8 +104,7 @@ sk_sp GrFragmentProcessor::MulOutputByInputAlpha( if (!fp) { return nullptr; } - return GrXfermodeFragmentProcessor::MakeFromDstProcessor(std::move(fp), - SkXfermode::kDstIn_Mode); + return GrXfermodeFragmentProcessor::MakeFromDstProcessor(std::move(fp), SkBlendMode::kDstIn); } sk_sp GrFragmentProcessor::PremulInput(sk_sp fp) { diff --git a/src/gpu/GrRenderTargetContext.cpp b/src/gpu/GrRenderTargetContext.cpp index 937910f..ad8adb0 100644 --- a/src/gpu/GrRenderTargetContext.cpp +++ b/src/gpu/GrRenderTargetContext.cpp @@ -252,7 +252,7 @@ void GrRenderTargetContext::internalClear(const GrFixedClip& clip, GrPaint paint; paint.setColor4f(GrColor4f::FromGrColor(color)); - paint.setXPFactory(GrPorterDuffXPFactory::Make(SkXfermode::Mode::kSrc_Mode)); + paint.setXPFactory(GrPorterDuffXPFactory::Make(SkBlendMode::kSrc)); this->drawRect(clip, paint, SkMatrix::I(), clearRect); } else if (isFull) { diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp index dbb4699..b49687f 100644 --- a/src/gpu/SkGpuDevice.cpp +++ b/src/gpu/SkGpuDevice.cpp @@ -1564,7 +1564,7 @@ static const GrPrimitiveType gVertexMode2PrimitiveType[] = { void SkGpuDevice::drawVertices(const SkDraw& draw, SkCanvas::VertexMode vmode, int vertexCount, const SkPoint vertices[], const SkPoint texs[], const SkColor colors[], - SkXfermode* xmode, + SK_XFERMODE_PARAM xmode, const uint16_t indices[], int indexCount, const SkPaint& paint) { ASSERT_SINGLE_OWNER @@ -1646,14 +1646,11 @@ void SkGpuDevice::drawVertices(const SkDraw& draw, SkCanvas::VertexMode vmode, if (colors) { // When there are texs and colors the shader and colors are combined using xmode. A null // xmode is defined to mean modulate. - SkXfermode::Mode colorMode; - if (xmode) { - if (!xmode->asMode(&colorMode)) { - return; - } - } else { - colorMode = SkXfermode::kModulate_Mode; - } +#ifdef SK_SUPPORT_LEGACY_XFERMODE_PARAM + SkBlendMode colorMode = xmode ? xmode->blend() : SkBlendMode::kModulate; +#else + SkBlendMode colorMode = xmode; +#endif if (!SkPaintToGrPaintWithXfermode(this->context(), fRenderTargetContext.get(), paint, *draw.fMatrix, colorMode, false, &grPaint)) { return; @@ -1698,7 +1695,7 @@ void SkGpuDevice::drawVertices(const SkDraw& draw, SkCanvas::VertexMode vmode, void SkGpuDevice::drawAtlas(const SkDraw& draw, const SkImage* atlas, const SkRSXform xform[], const SkRect texRect[], const SkColor colors[], int count, - SkXfermode::Mode mode, const SkPaint& paint) { + SK_XFERMODE_MODE_PARAM mode, const SkPaint& paint) { ASSERT_SINGLE_OWNER if (paint.isAntiAlias()) { this->INHERITED::drawAtlas(draw, atlas, xform, texRect, colors, count, mode, paint); @@ -1714,7 +1711,7 @@ void SkGpuDevice::drawAtlas(const SkDraw& draw, const SkImage* atlas, const SkRS GrPaint grPaint; if (colors) { if (!SkPaintToGrPaintWithXfermode(this->context(), fRenderTargetContext.get(), p, - *draw.fMatrix, mode, true, &grPaint)) { + *draw.fMatrix, (SkBlendMode)mode, true, &grPaint)) { return; } } else { diff --git a/src/gpu/SkGpuDevice.h b/src/gpu/SkGpuDevice.h index 0b50dee..77afda7 100644 --- a/src/gpu/SkGpuDevice.h +++ b/src/gpu/SkGpuDevice.h @@ -92,10 +92,10 @@ public: void drawTextBlob(const SkDraw&, const SkTextBlob*, SkScalar x, SkScalar y, const SkPaint& paint, SkDrawFilter* drawFilter) override; void drawVertices(const SkDraw&, SkCanvas::VertexMode, int vertexCount, const SkPoint verts[], - const SkPoint texs[], const SkColor colors[], SkXfermode* xmode, + const SkPoint texs[], const SkColor colors[], SK_XFERMODE_PARAM, const uint16_t indices[], int indexCount, const SkPaint&) override; void drawAtlas(const SkDraw&, const SkImage* atlas, const SkRSXform[], const SkRect[], - const SkColor[], int count, SkXfermode::Mode, const SkPaint&) override; + const SkColor[], int count, SK_XFERMODE_MODE_PARAM, const SkPaint&) override; void drawDevice(const SkDraw&, SkBaseDevice*, int x, int y, const SkPaint&) override; void drawImage(const SkDraw&, const SkImage*, SkScalar x, SkScalar y, const SkPaint&) override; diff --git a/src/gpu/SkGr.cpp b/src/gpu/SkGr.cpp index 95bd30c..270be46 100644 --- a/src/gpu/SkGr.cpp +++ b/src/gpu/SkGr.cpp @@ -566,11 +566,11 @@ GrPixelConfig GrRenderableConfigForColorSpace(const SkColorSpace* colorSpace) { //////////////////////////////////////////////////////////////////////////////////////////////// -static inline bool blend_requires_shader(const SkXfermode::Mode mode, bool primitiveIsSrc) { +static inline bool blend_requires_shader(const SkBlendMode mode, bool primitiveIsSrc) { if (primitiveIsSrc) { - return SkXfermode::kSrc_Mode != mode; + return SkBlendMode::kSrc != mode; } else { - return SkXfermode::kDst_Mode != mode; + return SkBlendMode::kDst != mode; } } @@ -579,7 +579,7 @@ static inline bool skpaint_to_grpaint_impl(GrContext* context, const SkPaint& skPaint, const SkMatrix& viewM, sk_sp* shaderProcessor, - SkXfermode::Mode* primColorMode, + SkBlendMode* primColorMode, bool primitiveIsSrc, GrPaint* grPaint) { grPaint->setAntiAlias(skPaint.isAntiAlias()); @@ -760,12 +760,12 @@ bool SkPaintToGrPaintNoShader(GrContext* context, } /** Blends the SkPaint's shader (or color if no shader) with a per-primitive color which must -be setup as a vertex attribute using the specified SkXfermode::Mode. */ +be setup as a vertex attribute using the specified SkBlendMode. */ bool SkPaintToGrPaintWithXfermode(GrContext* context, GrRenderTargetContext* rtc, const SkPaint& skPaint, const SkMatrix& viewM, - SkXfermode::Mode primColorMode, + SkBlendMode primColorMode, bool primitiveIsSrc, GrPaint* grPaint) { return skpaint_to_grpaint_impl(context, rtc, skPaint, viewM, nullptr, &primColorMode, diff --git a/src/gpu/SkGrPriv.h b/src/gpu/SkGrPriv.h index 1a976f1..3aa8a0c 100644 --- a/src/gpu/SkGrPriv.h +++ b/src/gpu/SkGrPriv.h @@ -75,7 +75,7 @@ bool SkPaintToGrPaintWithXfermode(GrContext* context, GrRenderTargetContext* rtc, const SkPaint& skPaint, const SkMatrix& viewM, - SkXfermode::Mode primColorMode, + SkBlendMode primColorMode, bool primitiveIsSrc, GrPaint* grPaint); @@ -85,7 +85,7 @@ bool SkPaintToGrPaintWithXfermode(GrContext* context, applied to the primitive color after interpolation. */ inline bool SkPaintToGrPaintWithPrimitiveColor(GrContext* context, GrRenderTargetContext* rtc, const SkPaint& skPaint, GrPaint* grPaint) { - return SkPaintToGrPaintWithXfermode(context, rtc, skPaint, SkMatrix::I(), SkXfermode::kDst_Mode, + return SkPaintToGrPaintWithXfermode(context, rtc, skPaint, SkMatrix::I(), SkBlendMode::kDst, false, grPaint); } diff --git a/src/gpu/effects/GrCustomXfermode.cpp b/src/gpu/effects/GrCustomXfermode.cpp index 1b94a6b..3895f57 100644 --- a/src/gpu/effects/GrCustomXfermode.cpp +++ b/src/gpu/effects/GrCustomXfermode.cpp @@ -24,33 +24,34 @@ #include "glsl/GrGLSLUniformHandler.h" #include "glsl/GrGLSLXferProcessor.h" -bool GrCustomXfermode::IsSupportedMode(SkXfermode::Mode mode) { - return mode > SkXfermode::kLastCoeffMode && mode <= SkXfermode::kLastMode; +bool GrCustomXfermode::IsSupportedMode(SkBlendMode mode) { + return (int)mode > (int)SkBlendMode::kLastCoeffMode && + (int)mode <= (int)SkBlendMode::kLastMode; } /////////////////////////////////////////////////////////////////////////////// // Static helpers /////////////////////////////////////////////////////////////////////////////// -static GrBlendEquation hw_blend_equation(SkXfermode::Mode mode) { - enum { kOffset = kOverlay_GrBlendEquation - SkXfermode::kOverlay_Mode }; - return static_cast(mode + kOffset); - - GR_STATIC_ASSERT(kOverlay_GrBlendEquation == SkXfermode::kOverlay_Mode + kOffset); - GR_STATIC_ASSERT(kDarken_GrBlendEquation == SkXfermode::kDarken_Mode + kOffset); - GR_STATIC_ASSERT(kLighten_GrBlendEquation == SkXfermode::kLighten_Mode + kOffset); - GR_STATIC_ASSERT(kColorDodge_GrBlendEquation == SkXfermode::kColorDodge_Mode + kOffset); - GR_STATIC_ASSERT(kColorBurn_GrBlendEquation == SkXfermode::kColorBurn_Mode + kOffset); - GR_STATIC_ASSERT(kHardLight_GrBlendEquation == SkXfermode::kHardLight_Mode + kOffset); - GR_STATIC_ASSERT(kSoftLight_GrBlendEquation == SkXfermode::kSoftLight_Mode + kOffset); - GR_STATIC_ASSERT(kDifference_GrBlendEquation == SkXfermode::kDifference_Mode + kOffset); - GR_STATIC_ASSERT(kExclusion_GrBlendEquation == SkXfermode::kExclusion_Mode + kOffset); - GR_STATIC_ASSERT(kMultiply_GrBlendEquation == SkXfermode::kMultiply_Mode + kOffset); - GR_STATIC_ASSERT(kHSLHue_GrBlendEquation == SkXfermode::kHue_Mode + kOffset); - GR_STATIC_ASSERT(kHSLSaturation_GrBlendEquation == SkXfermode::kSaturation_Mode + kOffset); - GR_STATIC_ASSERT(kHSLColor_GrBlendEquation == SkXfermode::kColor_Mode + kOffset); - GR_STATIC_ASSERT(kHSLLuminosity_GrBlendEquation == SkXfermode::kLuminosity_Mode + kOffset); - GR_STATIC_ASSERT(kGrBlendEquationCnt == SkXfermode::kLastMode + 1 + kOffset); +static GrBlendEquation hw_blend_equation(SkBlendMode mode) { + enum { kOffset = kOverlay_GrBlendEquation - (int)SkBlendMode::kOverlay }; + return static_cast((int)mode + kOffset); + + GR_STATIC_ASSERT(kOverlay_GrBlendEquation == (int)SkBlendMode::kOverlay + kOffset); + GR_STATIC_ASSERT(kDarken_GrBlendEquation == (int)SkBlendMode::kDarken + kOffset); + GR_STATIC_ASSERT(kLighten_GrBlendEquation == (int)SkBlendMode::kLighten + kOffset); + GR_STATIC_ASSERT(kColorDodge_GrBlendEquation == (int)SkBlendMode::kColorDodge + kOffset); + GR_STATIC_ASSERT(kColorBurn_GrBlendEquation == (int)SkBlendMode::kColorBurn + kOffset); + GR_STATIC_ASSERT(kHardLight_GrBlendEquation == (int)SkBlendMode::kHardLight + kOffset); + GR_STATIC_ASSERT(kSoftLight_GrBlendEquation == (int)SkBlendMode::kSoftLight + kOffset); + GR_STATIC_ASSERT(kDifference_GrBlendEquation == (int)SkBlendMode::kDifference + kOffset); + GR_STATIC_ASSERT(kExclusion_GrBlendEquation == (int)SkBlendMode::kExclusion + kOffset); + GR_STATIC_ASSERT(kMultiply_GrBlendEquation == (int)SkBlendMode::kMultiply + kOffset); + GR_STATIC_ASSERT(kHSLHue_GrBlendEquation == (int)SkBlendMode::kHue + kOffset); + GR_STATIC_ASSERT(kHSLSaturation_GrBlendEquation == (int)SkBlendMode::kSaturation + kOffset); + GR_STATIC_ASSERT(kHSLColor_GrBlendEquation == (int)SkBlendMode::kColor + kOffset); + GR_STATIC_ASSERT(kHSLLuminosity_GrBlendEquation == (int)SkBlendMode::kLuminosity + kOffset); + GR_STATIC_ASSERT(kGrBlendEquationCnt == (int)SkBlendMode::kLastMode + 1 + kOffset); } static bool can_use_hw_blend_equation(GrBlendEquation equation, @@ -77,13 +78,13 @@ static bool can_use_hw_blend_equation(GrBlendEquation equation, class CustomXP : public GrXferProcessor { public: - CustomXP(SkXfermode::Mode mode, GrBlendEquation hwBlendEquation) + CustomXP(SkBlendMode mode, GrBlendEquation hwBlendEquation) : fMode(mode), fHWBlendEquation(hwBlendEquation) { this->initClassID(); } - CustomXP(const DstTexture* dstTexture, bool hasMixedSamples, SkXfermode::Mode mode) + CustomXP(const DstTexture* dstTexture, bool hasMixedSamples, SkBlendMode mode) : INHERITED(dstTexture, true, hasMixedSamples), fMode(mode), fHWBlendEquation(static_cast(-1)) { @@ -94,7 +95,7 @@ public: GrGLSLXferProcessor* createGLSLInstance() const override; - SkXfermode::Mode mode() const { return fMode; } + SkBlendMode mode() const { return fMode; } bool hasHWBlendEquation() const { return -1 != static_cast(fHWBlendEquation); } GrBlendEquation hwBlendEquation() const { @@ -116,7 +117,7 @@ private: bool onIsEqual(const GrXferProcessor& xpBase) const override; - const SkXfermode::Mode fMode; + const SkBlendMode fMode; const GrBlendEquation fHWBlendEquation; typedef GrXferProcessor INHERITED; @@ -138,7 +139,7 @@ public: GR_STATIC_ASSERT(GrGLSLCaps::kLast_AdvBlendEqInteraction < 4); } if (!xp.hasHWBlendEquation() || caps.mustEnableSpecificAdvBlendEqs()) { - key |= xp.mode() << 3; + key |= (int)xp.mode() << 3; } b->add32(key); } @@ -326,7 +327,7 @@ void CustomXP::onGetBlendInfo(BlendInfo* blendInfo) const { /////////////////////////////////////////////////////////////////////////////// class CustomXPFactory : public GrXPFactory { public: - CustomXPFactory(SkXfermode::Mode mode); + CustomXPFactory(SkBlendMode mode); void getInvariantBlendedColor(const GrProcOptInfo& colorPOI, GrXPFactory::InvariantBlendedColor*) const override; @@ -346,13 +347,13 @@ private: GR_DECLARE_XP_FACTORY_TEST; - SkXfermode::Mode fMode; - GrBlendEquation fHWBlendEquation; + SkBlendMode fMode; + GrBlendEquation fHWBlendEquation; typedef GrXPFactory INHERITED; }; -CustomXPFactory::CustomXPFactory(SkXfermode::Mode mode) +CustomXPFactory::CustomXPFactory(SkBlendMode mode) : fMode(mode), fHWBlendEquation(hw_blend_equation(mode)) { SkASSERT(GrCustomXfermode::IsSupportedMode(fMode)); @@ -386,12 +387,12 @@ sk_sp CustomXPFactory::TestCreate(GrProcessorTestData* d) { int mode = d->fRandom->nextRangeU(SkXfermode::kLastCoeffMode + 1, SkXfermode::kLastSeparableMode); - return sk_sp(new CustomXPFactory(static_cast(mode))); + return sk_sp(new CustomXPFactory(static_cast(mode))); } /////////////////////////////////////////////////////////////////////////////// -sk_sp GrCustomXfermode::MakeXPFactory(SkXfermode::Mode mode) { +sk_sp GrCustomXfermode::MakeXPFactory(SkBlendMode mode) { if (!GrCustomXfermode::IsSupportedMode(mode)) { return nullptr; } else { diff --git a/src/gpu/effects/GrPorterDuffXferProcessor.cpp b/src/gpu/effects/GrPorterDuffXferProcessor.cpp index f51e94b..d511fae 100644 --- a/src/gpu/effects/GrPorterDuffXferProcessor.cpp +++ b/src/gpu/effects/GrPorterDuffXferProcessor.cpp @@ -323,20 +323,20 @@ static const BlendFormula gLCDBlendTable[SkXfermode::kLastCoeffMode + 1] = { static BlendFormula get_blend_formula(const GrProcOptInfo& colorPOI, const GrProcOptInfo& coveragePOI, bool hasMixedSamples, - SkXfermode::Mode xfermode) { - SkASSERT(xfermode >= 0 && xfermode <= SkXfermode::kLastCoeffMode); + SkBlendMode xfermode) { + SkASSERT((unsigned)xfermode <= (unsigned)SkBlendMode::kLastCoeffMode); SkASSERT(!coveragePOI.isFourChannelOutput()); bool conflatesCoverage = !coveragePOI.isSolidWhite() || hasMixedSamples; - return gBlendTable[colorPOI.isOpaque()][conflatesCoverage][xfermode]; + return gBlendTable[colorPOI.isOpaque()][conflatesCoverage][(int)xfermode]; } static BlendFormula get_lcd_blend_formula(const GrProcOptInfo& coveragePOI, - SkXfermode::Mode xfermode) { - SkASSERT(xfermode >= 0 && xfermode <= SkXfermode::kLastCoeffMode); + SkBlendMode xfermode) { + SkASSERT((unsigned)xfermode <= (unsigned)SkBlendMode::kLastCoeffMode); SkASSERT(coveragePOI.isFourChannelOutput()); - return gLCDBlendTable[xfermode]; + return gLCDBlendTable[(int)xfermode]; } /////////////////////////////////////////////////////////////////////////////// @@ -506,7 +506,7 @@ class ShaderPDXferProcessor : public GrXferProcessor { public: ShaderPDXferProcessor(const DstTexture* dstTexture, bool hasMixedSamples, - SkXfermode::Mode xfermode) + SkBlendMode xfermode) : INHERITED(dstTexture, true, hasMixedSamples) , fXfermode(xfermode) { this->initClassID(); @@ -516,7 +516,7 @@ public: GrGLSLXferProcessor* createGLSLInstance() const override; - SkXfermode::Mode getXfermode() const { return fXfermode; } + SkBlendMode getXfermode() const { return fXfermode; } private: GrXferProcessor::OptFlags onGetOptimizations(const GrPipelineOptimizations&, bool, GrColor*, @@ -531,7 +531,7 @@ private: return fXfermode == xp.fXfermode; } - const SkXfermode::Mode fXfermode; + const SkBlendMode fXfermode; typedef GrXferProcessor INHERITED; }; @@ -542,7 +542,7 @@ class GLShaderPDXferProcessor : public GrGLSLXferProcessor { public: static void GenKey(const GrProcessor& processor, GrProcessorKeyBuilder* b) { const ShaderPDXferProcessor& xp = processor.cast(); - b->add32(xp.getXfermode()); + b->add32((int)xp.getXfermode()); } private: @@ -583,7 +583,7 @@ GrGLSLXferProcessor* ShaderPDXferProcessor::createGLSLInstance() const { class PDLCDXferProcessor : public GrXferProcessor { public: - static GrXferProcessor* Create(SkXfermode::Mode xfermode, const GrProcOptInfo& colorPOI); + static GrXferProcessor* Create(SkBlendMode xfermode, const GrProcOptInfo& colorPOI); ~PDLCDXferProcessor() override; @@ -654,9 +654,9 @@ PDLCDXferProcessor::PDLCDXferProcessor(GrColor blendConstant, uint8_t alpha) this->initClassID(); } -GrXferProcessor* PDLCDXferProcessor::Create(SkXfermode::Mode xfermode, +GrXferProcessor* PDLCDXferProcessor::Create(SkBlendMode xfermode, const GrProcOptInfo& colorPOI) { - if (SkXfermode::kSrcOver_Mode != xfermode) { + if (SkBlendMode::kSrcOver != xfermode) { return nullptr; } @@ -698,40 +698,40 @@ PDLCDXferProcessor::onGetOptimizations(const GrPipelineOptimizations& optimizati /////////////////////////////////////////////////////////////////////////////// -GrPorterDuffXPFactory::GrPorterDuffXPFactory(SkXfermode::Mode xfermode) +GrPorterDuffXPFactory::GrPorterDuffXPFactory(SkBlendMode xfermode) : fXfermode(xfermode) { - SkASSERT(fXfermode <= SkXfermode::kLastCoeffMode); + SkASSERT((unsigned)fXfermode <= (unsigned)SkBlendMode::kLastCoeffMode); this->initClassID(); } -sk_sp GrPorterDuffXPFactory::Make(SkXfermode::Mode xfermode) { - static GrPorterDuffXPFactory gClearPDXPF(SkXfermode::kClear_Mode); - static GrPorterDuffXPFactory gSrcPDXPF(SkXfermode::kSrc_Mode); - static GrPorterDuffXPFactory gDstPDXPF(SkXfermode::kDst_Mode); - static GrPorterDuffXPFactory gSrcOverPDXPF(SkXfermode::kSrcOver_Mode); - static GrPorterDuffXPFactory gDstOverPDXPF(SkXfermode::kDstOver_Mode); - static GrPorterDuffXPFactory gSrcInPDXPF(SkXfermode::kSrcIn_Mode); - static GrPorterDuffXPFactory gDstInPDXPF(SkXfermode::kDstIn_Mode); - static GrPorterDuffXPFactory gSrcOutPDXPF(SkXfermode::kSrcOut_Mode); - static GrPorterDuffXPFactory gDstOutPDXPF(SkXfermode::kDstOut_Mode); - static GrPorterDuffXPFactory gSrcATopPDXPF(SkXfermode::kSrcATop_Mode); - static GrPorterDuffXPFactory gDstATopPDXPF(SkXfermode::kDstATop_Mode); - static GrPorterDuffXPFactory gXorPDXPF(SkXfermode::kXor_Mode); - static GrPorterDuffXPFactory gPlusPDXPF(SkXfermode::kPlus_Mode); - static GrPorterDuffXPFactory gModulatePDXPF(SkXfermode::kModulate_Mode); - static GrPorterDuffXPFactory gScreenPDXPF(SkXfermode::kScreen_Mode); +sk_sp GrPorterDuffXPFactory::Make(SkBlendMode xfermode) { + static GrPorterDuffXPFactory gClearPDXPF(SkBlendMode::kClear); + static GrPorterDuffXPFactory gSrcPDXPF(SkBlendMode::kSrc); + static GrPorterDuffXPFactory gDstPDXPF(SkBlendMode::kDst); + static GrPorterDuffXPFactory gSrcOverPDXPF(SkBlendMode::kSrcOver); + static GrPorterDuffXPFactory gDstOverPDXPF(SkBlendMode::kDstOver); + static GrPorterDuffXPFactory gSrcInPDXPF(SkBlendMode::kSrcIn); + static GrPorterDuffXPFactory gDstInPDXPF(SkBlendMode::kDstIn); + static GrPorterDuffXPFactory gSrcOutPDXPF(SkBlendMode::kSrcOut); + static GrPorterDuffXPFactory gDstOutPDXPF(SkBlendMode::kDstOut); + static GrPorterDuffXPFactory gSrcATopPDXPF(SkBlendMode::kSrcATop); + static GrPorterDuffXPFactory gDstATopPDXPF(SkBlendMode::kDstATop); + static GrPorterDuffXPFactory gXorPDXPF(SkBlendMode::kXor); + static GrPorterDuffXPFactory gPlusPDXPF(SkBlendMode::kPlus); + static GrPorterDuffXPFactory gModulatePDXPF(SkBlendMode::kModulate); + static GrPorterDuffXPFactory gScreenPDXPF(SkBlendMode::kScreen); static GrPorterDuffXPFactory* gFactories[] = { &gClearPDXPF, &gSrcPDXPF, &gDstPDXPF, &gSrcOverPDXPF, &gDstOverPDXPF, &gSrcInPDXPF, &gDstInPDXPF, &gSrcOutPDXPF, &gDstOutPDXPF, &gSrcATopPDXPF, &gDstATopPDXPF, &gXorPDXPF, &gPlusPDXPF, &gModulatePDXPF, &gScreenPDXPF }; - GR_STATIC_ASSERT(SK_ARRAY_COUNT(gFactories) == SkXfermode::kLastCoeffMode + 1); + GR_STATIC_ASSERT(SK_ARRAY_COUNT(gFactories) == (int)SkBlendMode::kLastCoeffMode + 1); - if (xfermode < 0 || xfermode > SkXfermode::kLastCoeffMode) { + if ((int)xfermode < 0 || (int)xfermode > (int)SkBlendMode::kLastCoeffMode) { return nullptr; } - return sk_sp(SkRef(gFactories[xfermode])); + return sk_sp(SkRef(gFactories[(int)xfermode])); } GrXferProcessor* @@ -744,7 +744,7 @@ GrPorterDuffXPFactory::onCreateXferProcessor(const GrCaps& caps, } BlendFormula blendFormula; if (optimizations.fCoveragePOI.isFourChannelOutput()) { - if (SkXfermode::kSrcOver_Mode == fXfermode && + if (SkBlendMode::kSrcOver == fXfermode && kRGBA_GrColorComponentFlags == optimizations.fColorPOI.validFlags() && !caps.shaderCaps()->dualSourceBlendingSupport() && !caps.shaderCaps()->dstReadInShaderSupport()) { @@ -770,7 +770,7 @@ GrPorterDuffXPFactory::onCreateXferProcessor(const GrCaps& caps, void GrPorterDuffXPFactory::getInvariantBlendedColor(const GrProcOptInfo& colorPOI, InvariantBlendedColor* blendedColor) const { // Find the blended color info based on the formula that does not have coverage. - BlendFormula colorFormula = gBlendTable[colorPOI.isOpaque()][0][fXfermode]; + BlendFormula colorFormula = gBlendTable[colorPOI.isOpaque()][0][(int)fXfermode]; if (colorFormula.usesDstColor()) { blendedColor->fWillBlendWithDst = true; blendedColor->fKnownColorFlags = kNone_GrColorComponentFlags; @@ -808,7 +808,7 @@ bool GrPorterDuffXPFactory::onWillReadDstColor(const GrCaps& caps, // blend. The one exception is when we are using srcover mode and we know the input color into // the XP. if (optimizations.fCoveragePOI.isFourChannelOutput()) { - if (SkXfermode::kSrcOver_Mode == fXfermode && + if (SkBlendMode::kSrcOver == fXfermode && kRGBA_GrColorComponentFlags == optimizations.fColorPOI.validFlags() && !caps.shaderCaps()->dstReadInShaderSupport()) { return false; @@ -827,7 +827,7 @@ bool GrPorterDuffXPFactory::onWillReadDstColor(const GrCaps& caps, GR_DEFINE_XP_FACTORY_TEST(GrPorterDuffXPFactory); sk_sp GrPorterDuffXPFactory::TestCreate(GrProcessorTestData* d) { - SkXfermode::Mode mode = SkXfermode::Mode(d->fRandom->nextULessThan(SkXfermode::kLastCoeffMode)); + SkBlendMode mode = SkBlendMode(d->fRandom->nextULessThan((int)SkBlendMode::kLastCoeffMode)); return GrPorterDuffXPFactory::Make(mode); } @@ -860,7 +860,7 @@ GrXferProcessor* GrPorterDuffXPFactory::CreateSrcOverXferProcessor( bool hasMixedSamples, const GrXferProcessor::DstTexture* dstTexture) { if (optimizations.fOverrides.fUsePLSDstRead) { - return new ShaderPDXferProcessor(dstTexture, hasMixedSamples, SkXfermode::kSrcOver_Mode); + return new ShaderPDXferProcessor(dstTexture, hasMixedSamples, SkBlendMode::kSrcOver); } // We want to not make an xfer processor if possible. Thus for the simple case where we are not @@ -882,13 +882,13 @@ GrXferProcessor* GrPorterDuffXPFactory::CreateSrcOverXferProcessor( // back to this trick for rendering SrcOver LCD text instead of doing a // dst copy. SkASSERT(!dstTexture || !dstTexture->texture()); - return PDLCDXferProcessor::Create(SkXfermode::kSrcOver_Mode, optimizations.fColorPOI); + return PDLCDXferProcessor::Create(SkBlendMode::kSrcOver, optimizations.fColorPOI); } BlendFormula blendFormula; - blendFormula = get_lcd_blend_formula(optimizations.fCoveragePOI, SkXfermode::kSrcOver_Mode); + blendFormula = get_lcd_blend_formula(optimizations.fCoveragePOI, SkBlendMode::kSrcOver); if (blendFormula.hasSecondaryOutput() && !caps.shaderCaps()->dualSourceBlendingSupport()) { - return new ShaderPDXferProcessor(dstTexture, hasMixedSamples, SkXfermode::kSrcOver_Mode); + return new ShaderPDXferProcessor(dstTexture, hasMixedSamples, SkBlendMode::kSrcOver); } SkASSERT(!dstTexture || !dstTexture->texture()); @@ -911,7 +911,7 @@ bool GrPorterDuffXPFactory::SrcOverWillNeedDstTexture(const GrCaps& caps, return false; } return get_lcd_blend_formula(optimizations.fCoveragePOI, - SkXfermode::kSrcOver_Mode).hasSecondaryOutput(); + SkBlendMode::kSrcOver).hasSecondaryOutput(); } // We fallback on the shader XP when the blend formula would use dual source blending but we @@ -919,5 +919,5 @@ bool GrPorterDuffXPFactory::SrcOverWillNeedDstTexture(const GrCaps& caps, static const bool kHasMixedSamples = false; SkASSERT(!caps.usesMixedSamples()); // We never use mixed samples without dual source blending. return get_blend_formula(optimizations.fColorPOI, optimizations.fCoveragePOI, - kHasMixedSamples, SkXfermode::kSrcOver_Mode).hasSecondaryOutput(); + kHasMixedSamples, SkBlendMode::kSrcOver).hasSecondaryOutput(); } diff --git a/src/gpu/effects/GrXfermodeFragmentProcessor.cpp b/src/gpu/effects/GrXfermodeFragmentProcessor.cpp index 935747b..0e8e16c 100644 --- a/src/gpu/effects/GrXfermodeFragmentProcessor.cpp +++ b/src/gpu/effects/GrXfermodeFragmentProcessor.cpp @@ -18,7 +18,7 @@ class ComposeTwoFragmentProcessor : public GrFragmentProcessor { public: ComposeTwoFragmentProcessor(sk_sp src, sk_sp dst, - SkXfermode::Mode mode) + SkBlendMode mode) : fMode(mode) { this->initClassID(); SkDEBUGCODE(int shaderAChildIndex = )this->registerChildProcessor(std::move(src)); @@ -30,10 +30,10 @@ public: const char* name() const override { return "ComposeTwo"; } void onGetGLSLProcessorKey(const GrGLSLCaps& caps, GrProcessorKeyBuilder* b) const override { - b->add32(fMode); + b->add32((int)fMode); } - SkXfermode::Mode getMode() const { return fMode; } + SkBlendMode getMode() const { return fMode; } protected: bool onIsEqual(const GrFragmentProcessor& other) const override { @@ -48,7 +48,7 @@ protected: private: GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; - SkXfermode::Mode fMode; + SkBlendMode fMode; GR_DECLARE_FRAGMENT_PROCESSOR_TEST; @@ -74,8 +74,8 @@ sk_sp ComposeTwoFragmentProcessor::TestCreate(GrProcessorTe sk_sp fpA(GrProcessorUnitTest::MakeChildFP(d)); sk_sp fpB(GrProcessorUnitTest::MakeChildFP(d)); - SkXfermode::Mode mode = static_cast( - d->fRandom->nextRangeU(0, SkXfermode::kLastMode)); + SkBlendMode mode = static_cast( + d->fRandom->nextRangeU(0, (int)SkBlendMode::kLastMode)); return sk_sp( new ComposeTwoFragmentProcessor(std::move(fpA), std::move(fpB), mode)); } @@ -105,7 +105,7 @@ void GLComposeTwoFragmentProcessor::emitCode(EmitArgs& args) { this->emitChild(1, inputColor, &dstColor, args); // emit blend code - SkXfermode::Mode mode = cs.getMode(); + SkBlendMode mode = cs.getMode(); fragBuilder->codeAppendf("// Compose Xfer Mode: %s\n", SkXfermode::ModeName(mode)); GrGLSLBlend::AppendMode(fragBuilder, srcColor.c_str(), @@ -120,14 +120,14 @@ void GLComposeTwoFragmentProcessor::emitCode(EmitArgs& args) { } sk_sp GrXfermodeFragmentProcessor::MakeFromTwoProcessors( - sk_sp src, sk_sp dst, SkXfermode::Mode mode) { + sk_sp src, sk_sp dst, SkBlendMode mode) { switch (mode) { - case SkXfermode::kClear_Mode: + case SkBlendMode::kClear: return GrConstColorProcessor::Make(GrColor4f::TransparentBlack(), GrConstColorProcessor::kIgnore_InputMode); - case SkXfermode::kSrc_Mode: + case SkBlendMode::kSrc: return src; - case SkXfermode::kDst_Mode: + case SkBlendMode::kDst: return dst; default: return sk_sp( @@ -144,7 +144,7 @@ public: kSrc_Child, }; - ComposeOneFragmentProcessor(sk_sp dst, SkXfermode::Mode mode, Child child) + ComposeOneFragmentProcessor(sk_sp dst, SkBlendMode mode, Child child) : fMode(mode) , fChild(child) { this->initClassID(); @@ -164,11 +164,11 @@ public: } void onGetGLSLProcessorKey(const GrGLSLCaps& caps, GrProcessorKeyBuilder* b) const override { - GR_STATIC_ASSERT((SkXfermode::kLastMode & SK_MaxU16) == SkXfermode::kLastMode); - b->add32(fMode | (fChild << 16)); + GR_STATIC_ASSERT(((int)SkBlendMode::kLastMode & SK_MaxU16) == (int)SkBlendMode::kLastMode); + b->add32((int)fMode | (fChild << 16)); } - SkXfermode::Mode mode() const { return fMode; } + SkBlendMode mode() const { return fMode; } Child child() const { return fChild; } @@ -217,8 +217,8 @@ protected: private: GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; - SkXfermode::Mode fMode; - Child fChild; + SkBlendMode fMode; + Child fChild; GR_DECLARE_FRAGMENT_PROCESSOR_TEST; @@ -231,7 +231,7 @@ class GLComposeOneFragmentProcessor : public GrGLSLFragmentProcessor { public: void emitCode(EmitArgs& args) override { GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; - SkXfermode::Mode mode = args.fFp.cast().mode(); + SkBlendMode mode = args.fFp.cast().mode(); ComposeOneFragmentProcessor::Child child = args.fFp.cast().child(); SkString childColor("child"); @@ -267,8 +267,8 @@ sk_sp ComposeOneFragmentProcessor::TestCreate(GrProcessorTe // For now, we'll prevent either children from being a shader with children to prevent the // possibility of an arbitrarily large tree of procs. sk_sp dst(GrProcessorUnitTest::MakeChildFP(d)); - SkXfermode::Mode mode = static_cast( - d->fRandom->nextRangeU(0, SkXfermode::kLastMode)); + SkBlendMode mode = static_cast( + d->fRandom->nextRangeU(0, (int)SkBlendMode::kLastMode)); ComposeOneFragmentProcessor::Child child = d->fRandom->nextBool() ? ComposeOneFragmentProcessor::kDst_Child : ComposeOneFragmentProcessor::kSrc_Child; @@ -282,12 +282,12 @@ GrGLSLFragmentProcessor* ComposeOneFragmentProcessor::onCreateGLSLInstance() con ////////////////////////////////////////////////////////////////////////////// sk_sp GrXfermodeFragmentProcessor::MakeFromDstProcessor( - sk_sp dst, SkXfermode::Mode mode) { + sk_sp dst, SkBlendMode mode) { switch (mode) { - case SkXfermode::kClear_Mode: + case SkBlendMode::kClear: return GrConstColorProcessor::Make(GrColor4f::TransparentBlack(), GrConstColorProcessor::kIgnore_InputMode); - case SkXfermode::kSrc_Mode: + case SkBlendMode::kSrc: return nullptr; default: return sk_sp( @@ -297,12 +297,12 @@ sk_sp GrXfermodeFragmentProcessor::MakeFromDstProcessor( } sk_sp GrXfermodeFragmentProcessor::MakeFromSrcProcessor( - sk_sp src, SkXfermode::Mode mode) { + sk_sp src, SkBlendMode mode) { switch (mode) { - case SkXfermode::kClear_Mode: + case SkBlendMode::kClear: return GrConstColorProcessor::Make(GrColor4f::TransparentBlack(), GrConstColorProcessor::kIgnore_InputMode); - case SkXfermode::kDst_Mode: + case SkBlendMode::kDst: return nullptr; default: return sk_sp( diff --git a/src/gpu/glsl/GrGLSLBlend.cpp b/src/gpu/glsl/GrGLSLBlend.cpp index d2c3640..73a145b 100644 --- a/src/gpu/glsl/GrGLSLBlend.cpp +++ b/src/gpu/glsl/GrGLSLBlend.cpp @@ -237,7 +237,7 @@ static void add_sat_function(GrGLSLFragmentBuilder* fsBuilder, SkString* setSatF static void emit_advanced_xfermode_code(GrGLSLFragmentBuilder* fsBuilder, const char* srcColor, const char* dstColor, const char* outputColor, - SkXfermode::Mode mode) { + SkBlendMode mode) { SkASSERT(srcColor); SkASSERT(dstColor); SkASSERT(outputColor); @@ -246,38 +246,38 @@ static void emit_advanced_xfermode_code(GrGLSLFragmentBuilder* fsBuilder, const outputColor, srcColor, srcColor, dstColor); switch (mode) { - case SkXfermode::kOverlay_Mode: + case SkBlendMode::kOverlay: // Overlay is Hard-Light with the src and dst reversed hard_light(fsBuilder, outputColor, dstColor, srcColor); break; - case SkXfermode::kDarken_Mode: + case SkBlendMode::kDarken: fsBuilder->codeAppendf("%s.rgb = min((1.0 - %s.a) * %s.rgb + %s.rgb, " "(1.0 - %s.a) * %s.rgb + %s.rgb);", outputColor, srcColor, dstColor, srcColor, dstColor, srcColor, dstColor); break; - case SkXfermode::kLighten_Mode: + case SkBlendMode::kLighten: fsBuilder->codeAppendf("%s.rgb = max((1.0 - %s.a) * %s.rgb + %s.rgb, " "(1.0 - %s.a) * %s.rgb + %s.rgb);", outputColor, srcColor, dstColor, srcColor, dstColor, srcColor, dstColor); break; - case SkXfermode::kColorDodge_Mode: + case SkBlendMode::kColorDodge: color_dodge_component(fsBuilder, outputColor, srcColor, dstColor, 'r'); color_dodge_component(fsBuilder, outputColor, srcColor, dstColor, 'g'); color_dodge_component(fsBuilder, outputColor, srcColor, dstColor, 'b'); break; - case SkXfermode::kColorBurn_Mode: + case SkBlendMode::kColorBurn: color_burn_component(fsBuilder, outputColor, srcColor, dstColor, 'r'); color_burn_component(fsBuilder, outputColor, srcColor, dstColor, 'g'); color_burn_component(fsBuilder, outputColor, srcColor, dstColor, 'b'); break; - case SkXfermode::kHardLight_Mode: + case SkBlendMode::kHardLight: hard_light(fsBuilder, outputColor, srcColor, dstColor); break; - case SkXfermode::kSoftLight_Mode: + case SkBlendMode::kSoftLight: fsBuilder->codeAppendf("if (0.0 == %s.a) {", dstColor); fsBuilder->codeAppendf("%s.rgba = %s;", outputColor, srcColor); fsBuilder->codeAppendf("} else {"); @@ -286,25 +286,25 @@ static void emit_advanced_xfermode_code(GrGLSLFragmentBuilder* fsBuilder, const soft_light_component_pos_dst_alpha(fsBuilder, outputColor, srcColor, dstColor, 'b'); fsBuilder->codeAppendf("}"); break; - case SkXfermode::kDifference_Mode: + case SkBlendMode::kDifference: fsBuilder->codeAppendf("%s.rgb = %s.rgb + %s.rgb -" "2.0 * min(%s.rgb * %s.a, %s.rgb * %s.a);", outputColor, srcColor, dstColor, srcColor, dstColor, dstColor, srcColor); break; - case SkXfermode::kExclusion_Mode: + case SkBlendMode::kExclusion: fsBuilder->codeAppendf("%s.rgb = %s.rgb + %s.rgb - " "2.0 * %s.rgb * %s.rgb;", outputColor, dstColor, srcColor, dstColor, srcColor); break; - case SkXfermode::kMultiply_Mode: + case SkBlendMode::kMultiply: fsBuilder->codeAppendf("%s.rgb = (1.0 - %s.a) * %s.rgb + " "(1.0 - %s.a) * %s.rgb + " "%s.rgb * %s.rgb;", outputColor, srcColor, dstColor, dstColor, srcColor, srcColor, dstColor); break; - case SkXfermode::kHue_Mode: { + case SkBlendMode::kHue: { // SetLum(SetSat(S * Da, Sat(D * Sa)), Sa*Da, D*Sa) + (1 - Sa) * D + (1 - Da) * S SkString setSat, setLum; add_sat_function(fsBuilder, &setSat); @@ -319,7 +319,7 @@ static void emit_advanced_xfermode_code(GrGLSLFragmentBuilder* fsBuilder, const outputColor, srcColor, dstColor, dstColor, srcColor); break; } - case SkXfermode::kSaturation_Mode: { + case SkBlendMode::kSaturation: { // SetLum(SetSat(D * Sa, Sat(S * Da)), Sa*Da, D*Sa)) + (1 - Sa) * D + (1 - Da) * S SkString setSat, setLum; add_sat_function(fsBuilder, &setSat); @@ -334,7 +334,7 @@ static void emit_advanced_xfermode_code(GrGLSLFragmentBuilder* fsBuilder, const outputColor, srcColor, dstColor, dstColor, srcColor); break; } - case SkXfermode::kColor_Mode: { + case SkBlendMode::kColor: { // SetLum(S * Da, Sa* Da, D * Sa) + (1 - Sa) * D + (1 - Da) * S SkString setLum; add_lum_function(fsBuilder, &setLum); @@ -346,7 +346,7 @@ static void emit_advanced_xfermode_code(GrGLSLFragmentBuilder* fsBuilder, const outputColor, srcColor, dstColor, dstColor, srcColor); break; } - case SkXfermode::kLuminosity_Mode: { + case SkBlendMode::kLuminosity: { // SetLum(D * Sa, Sa* Da, S * Da) + (1 - Sa) * D + (1 - Da) * S SkString setLum; add_lum_function(fsBuilder, &setLum); @@ -416,7 +416,7 @@ static bool append_porterduff_term(GrGLSLFragmentBuilder* fsBuilder, SkXfermode: void GrGLSLBlend::AppendMode(GrGLSLFragmentBuilder* fsBuilder, const char* srcColor, const char* dstColor, const char* outColor, - SkXfermode::Mode mode) { + SkBlendMode mode) { SkXfermode::Coeff srcCoeff, dstCoeff; if (SkXfermode::ModeAsCoeff(mode, &srcCoeff, &dstCoeff)) { diff --git a/src/gpu/glsl/GrGLSLBlend.h b/src/gpu/glsl/GrGLSLBlend.h index c8047f8..63d6762 100644 --- a/src/gpu/glsl/GrGLSLBlend.h +++ b/src/gpu/glsl/GrGLSLBlend.h @@ -19,7 +19,7 @@ namespace GrGLSLBlend { * variables to the outColor variable. */ void AppendMode(GrGLSLFragmentBuilder* fsBuilder, const char* srcColor, - const char* dstColor, const char* outColor, SkXfermode::Mode mode); + const char* dstColor, const char* outColor, SkBlendMode mode); void AppendRegionOp(GrGLSLFragmentBuilder* fsBuilder, const char* srcColor, const char* dstColor, const char* outColor, SkRegion::Op regionOp); diff --git a/src/image/SkImage_Gpu.cpp b/src/image/SkImage_Gpu.cpp index cd26c8b..d7bdc9c 100644 --- a/src/image/SkImage_Gpu.cpp +++ b/src/image/SkImage_Gpu.cpp @@ -263,7 +263,7 @@ static sk_sp make_from_yuv_textures_copy(GrContext* ctx, SkYUVColorSpac } GrPaint paint; - paint.setPorterDuffXPFactory(SkXfermode::kSrc_Mode); + paint.setPorterDuffXPFactory(SkBlendMode::kSrc); paint.addColorFragmentProcessor( GrYUVEffect::MakeYUVToRGB(yTex.get(), uTex.get(), vTex.get(), yuvSizes, colorSpace, nv12)); diff --git a/src/opts/SkXfermode_opts.h b/src/opts/SkXfermode_opts.h index 54f906e..81e5bb9 100644 --- a/src/opts/SkXfermode_opts.h +++ b/src/opts/SkXfermode_opts.h @@ -217,7 +217,7 @@ template <> void mark_dst_initialized_if_safe(void* dst, void* end) { template class Sk4pxXfermode : public SkProcCoeffXfermode { public: - Sk4pxXfermode(const ProcCoeff& rec, SkXfermode::Mode mode) + Sk4pxXfermode(const ProcCoeff& rec, SkBlendMode mode) : INHERITED(rec, mode) {} void xfer32(SkPMColor dst[], const SkPMColor src[], int n, const SkAlpha aa[]) const override { @@ -269,7 +269,7 @@ private: template class Sk4fXfermode : public SkProcCoeffXfermode { public: - Sk4fXfermode(const ProcCoeff& rec, SkXfermode::Mode mode) + Sk4fXfermode(const ProcCoeff& rec, SkBlendMode mode) : INHERITED(rec, mode) {} void xfer32(SkPMColor dst[], const SkPMColor src[], int n, const SkAlpha aa[]) const override { @@ -315,10 +315,10 @@ private: namespace SK_OPTS_NS { -static SkXfermode* create_xfermode(const ProcCoeff& rec, SkXfermode::Mode mode) { +static SkXfermode* create_xfermode(const ProcCoeff& rec, SkBlendMode mode) { switch (mode) { #define CASE(Xfermode) \ - case SkXfermode::k##Xfermode##_Mode: return new Sk4pxXfermode(rec, mode) + case SkBlendMode::k##Xfermode: return new Sk4pxXfermode(rec, mode) CASE(Clear); CASE(Src); CASE(Dst); @@ -344,7 +344,7 @@ static SkXfermode* create_xfermode(const ProcCoeff& rec, SkXfermode::Mode mode) #undef CASE #define CASE(Xfermode) \ - case SkXfermode::k##Xfermode##_Mode: return new Sk4fXfermode(rec, mode) + case SkBlendMode::k##Xfermode: return new Sk4fXfermode(rec, mode) CASE(ColorDodge); CASE(ColorBurn); CASE(SoftLight); diff --git a/src/pdf/SkPDFDevice.cpp b/src/pdf/SkPDFDevice.cpp index 217dd3f..8b80de2 100644 --- a/src/pdf/SkPDFDevice.cpp +++ b/src/pdf/SkPDFDevice.cpp @@ -1427,7 +1427,7 @@ void SkPDFDevice::drawTextBlob(const SkDraw& draw, const SkTextBlob* blob, SkSca void SkPDFDevice::drawVertices(const SkDraw& d, SkCanvas::VertexMode, int vertexCount, const SkPoint verts[], const SkPoint texs[], const SkColor colors[], - SkXfermode* xmode, const uint16_t indices[], + SK_XFERMODE_PARAM xmode, const uint16_t indices[], int indexCount, const SkPaint& paint) { if (d.fRC->isEmpty()) { return; diff --git a/src/pdf/SkPDFDevice.h b/src/pdf/SkPDFDevice.h index 7d207e7..4bf4a58 100644 --- a/src/pdf/SkPDFDevice.h +++ b/src/pdf/SkPDFDevice.h @@ -116,7 +116,7 @@ public: void drawVertices(const SkDraw&, SkCanvas::VertexMode, int vertexCount, const SkPoint verts[], const SkPoint texs[], const SkColor colors[], - SkXfermode* xmode, const uint16_t indices[], + SK_XFERMODE_PARAM, const uint16_t indices[], int indexCount, const SkPaint& paint) override; void drawDevice(const SkDraw&, SkBaseDevice*, int x, int y, const SkPaint&) override; diff --git a/src/pipe/SkPipeCanvas.cpp b/src/pipe/SkPipeCanvas.cpp index 31014ff..e7b04ce 100644 --- a/src/pipe/SkPipeCanvas.cpp +++ b/src/pipe/SkPipeCanvas.cpp @@ -352,7 +352,7 @@ void SkPipeCanvas::onDrawArc(const SkRect& bounds, SkScalar startAngle, SkScalar } void SkPipeCanvas::onDrawAtlas(const SkImage* image, const SkRSXform xform[], const SkRect rect[], - const SkColor colors[], int count, SkXfermode::Mode mode, + const SkColor colors[], int count, SK_XFERMODE_MODE_PARAM mode, const SkRect* cull, const SkPaint* paint) { unsigned extra = (unsigned)mode; SkASSERT(0 == (extra & ~kMode_DrawAtlasMask)); @@ -732,7 +732,7 @@ void SkPipeCanvas::onDrawRegion(const SkRegion& region, const SkPaint& paint) { void SkPipeCanvas::onDrawVertices(VertexMode vmode, int vertexCount, const SkPoint vertices[], const SkPoint texs[], - const SkColor colors[], SkXfermode* xmode, + const SkColor colors[], SK_XFERMODE_PARAM xmode, const uint16_t indices[], int indexCount, const SkPaint& paint) { SkASSERT(vertexCount > 0); @@ -743,11 +743,12 @@ void SkPipeCanvas::onDrawVertices(VertexMode vmode, int vertexCount, } extra |= (unsigned)vmode << kVMode_DrawVerticesShift; - SkXfermode::Mode mode = SkXfermode::kModulate_Mode; - if (xmode && !SkXfermode::AsMode(xmode, &mode)) { - mode = (SkXfermode::Mode)0xFF; // sentinel for read the xfer later - } - extra |= (unsigned)mode << kXMode_DrawVerticesShift; +#ifdef SK_SUPPORT_LEGACY_XFERMODE_PARAM + SkBlendMode bmode = xmode ? xmode->blend() : SkBlendMode::kModulate; +#else + SkBlendMode bmode = xmode; +#endif + extra |= (unsigned)bmode << kXMode_DrawVerticesShift; if (texs) { extra |= kHasTex_DrawVerticesMask; @@ -764,9 +765,6 @@ void SkPipeCanvas::onDrawVertices(VertexMode vmode, int vertexCount, if (vertexCount > kVCount_DrawVerticesMask) { writer.write32(vertexCount); } - if (mode == (SkXfermode::Mode)0xFF) { - writer.writeFlattenable(xmode); - } writer.write(vertices, vertexCount * sizeof(SkPoint)); if (texs) { writer.write(texs, vertexCount * sizeof(SkPoint)); @@ -783,18 +781,17 @@ void SkPipeCanvas::onDrawVertices(VertexMode vmode, int vertexCount, } void SkPipeCanvas::onDrawPatch(const SkPoint cubics[12], const SkColor colors[4], - const SkPoint texCoords[4], SkXfermode* xfer, + const SkPoint texCoords[4], SK_XFERMODE_PARAM xmode, const SkPaint& paint) { SkPipeWriter writer(this); unsigned extra = 0; - SkXfermode::Mode mode = SkXfermode::kModulate_Mode; - if (xfer && !xfer->asMode(&mode)) { - mode = (SkXfermode::Mode)kExplicitXfer_DrawPatchExtraValue; - } else { - xfer = nullptr; // signal that we're using the mode enum - } - SkASSERT(0 == (mode & ~kModeEnum_DrawPatchExtraMask)); - extra = (unsigned)mode; +#ifdef SK_SUPPORT_LEGACY_XFERMODE_PARAM + SkBlendMode bmode = xmode ? xmode->blend() : SkBlendMode::kModulate; +#else + SkBlendMode bmode = xmode; +#endif + SkASSERT(0 == ((int)bmode & ~kModeEnum_DrawPatchExtraMask)); + extra = (unsigned)bmode; if (colors) { extra |= kHasColors_DrawPatchExtraMask; } @@ -809,9 +806,6 @@ void SkPipeCanvas::onDrawPatch(const SkPoint cubics[12], const SkColor colors[4] if (texCoords) { writer.write(texCoords, sizeof(SkPoint) * 4); } - if (xfer) { - xfer->flatten(writer); - } write_paint(writer, paint, kGeometry_PaintUsage); } diff --git a/src/pipe/SkPipeCanvas.h b/src/pipe/SkPipeCanvas.h index 33f7821..87a906f 100644 --- a/src/pipe/SkPipeCanvas.h +++ b/src/pipe/SkPipeCanvas.h @@ -105,7 +105,7 @@ protected: void onDrawArc(const SkRect&, SkScalar startAngle, SkScalar sweepAngle, bool useCenter, const SkPaint&) override; void onDrawAtlas(const SkImage*, const SkRSXform[], const SkRect[], const SkColor[], - int count, SkXfermode::Mode, const SkRect* cull, const SkPaint*) override; + int count, SK_XFERMODE_MODE_PARAM, const SkRect* cull, const SkPaint*) override; void onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&) override; void onDrawText(const void* text, size_t byteLength, SkScalar x, SkScalar y, const SkPaint&) override; @@ -119,7 +119,7 @@ protected: void onDrawTextRSXform(const void* text, size_t byteLength, const SkRSXform xform[], const SkRect* cull, const SkPaint& paint) override; void onDrawPatch(const SkPoint cubics[12], const SkColor colors[4], const SkPoint texCoords[4], - SkXfermode*, const SkPaint&) override; + SK_XFERMODE_PARAM, const SkPaint&) override; void onDrawPaint(const SkPaint&) override; void onDrawPoints(PointMode, size_t count, const SkPoint pts[], const SkPaint&) override; @@ -138,7 +138,7 @@ protected: const SkPaint*) override; void onDrawVertices(VertexMode vmode, int vertexCount, const SkPoint vertices[], const SkPoint texs[], - const SkColor colors[], SkXfermode* xmode, + const SkColor colors[], SK_XFERMODE_PARAM, const uint16_t indices[], int indexCount, const SkPaint&) override; diff --git a/src/pipe/SkPipeReader.cpp b/src/pipe/SkPipeReader.cpp index 31718e9..2039bf2 100644 --- a/src/pipe/SkPipeReader.cpp +++ b/src/pipe/SkPipeReader.cpp @@ -310,7 +310,7 @@ static void drawArc_handler(SkPipeReader& reader, uint32_t packedVerb, SkCanvas* static void drawAtlas_handler(SkPipeReader& reader, uint32_t packedVerb, SkCanvas* canvas) { SkASSERT(SkPipeVerb::kDrawAtlas == unpack_verb(packedVerb)); - SkXfermode::Mode mode = (SkXfermode::Mode)(packedVerb & kMode_DrawAtlasMask); + SkBlendMode mode = (SkBlendMode)(packedVerb & kMode_DrawAtlasMask); sk_sp image(reader.readImage()); int count = reader.read32(); const SkRSXform* xform = skip(reader, count); @@ -433,16 +433,8 @@ static void drawPatch_handler(SkPipeReader& reader, uint32_t packedVerb, SkCanva if (packedVerb & kHasTexture_DrawPatchExtraMask) { tex = skip(reader, 4); } - sk_sp xfer; - unsigned mode = packedVerb & kModeEnum_DrawPatchExtraMask; - if (kExplicitXfer_DrawPatchExtraValue == mode) { - xfer = reader.readXfermode(); - } else { - if (mode != SkXfermode::kSrcOver_Mode) { - xfer = SkXfermode::Make((SkXfermode::Mode)mode); - } - } - canvas->drawPatch(cubics, colors, tex, xfer.get(), read_paint(reader)); + SkBlendMode mode = (SkBlendMode)(packedVerb & kModeEnum_DrawPatchExtraMask); + canvas->drawPatch(cubics, colors, tex, mode, read_paint(reader)); } static void drawPaint_handler(SkPipeReader& reader, uint32_t packedVerb, SkCanvas* canvas) { @@ -581,13 +573,8 @@ static void drawVertices_handler(SkPipeReader& reader, uint32_t packedVerb, SkCa if (0 == vertexCount) { vertexCount = reader.read32(); } - sk_sp xfer; - unsigned xmode = (packedVerb & kXMode_DrawVerticesMask) >> kXMode_DrawVerticesShift; - if (0xFF == xmode) { - xfer = reader.readXfermode(); - } else { - xfer = SkXfermode::Make((SkXfermode::Mode)xmode); - } + SkBlendMode bmode = (SkBlendMode) + ((packedVerb & kXMode_DrawVerticesMask) >> kXMode_DrawVerticesShift); const SkPoint* vertices = skip(reader, vertexCount); const SkPoint* texs = nullptr; if (packedVerb & kHasTex_DrawVerticesMask) { @@ -604,7 +591,7 @@ static void drawVertices_handler(SkPipeReader& reader, uint32_t packedVerb, SkCa indices = skip(reader, indexCount); } - canvas->drawVertices(vmode, vertexCount, vertices, texs, colors, xfer.get(), + canvas->drawVertices(vmode, vertexCount, vertices, texs, colors, bmode, indices, indexCount, read_paint(reader)); } diff --git a/src/svg/SkSVGDevice.cpp b/src/svg/SkSVGDevice.cpp index 16e2b3f..b07e0aa 100644 --- a/src/svg/SkSVGDevice.cpp +++ b/src/svg/SkSVGDevice.cpp @@ -799,7 +799,7 @@ void SkSVGDevice::drawTextOnPath(const SkDraw&, const void* text, size_t len, co void SkSVGDevice::drawVertices(const SkDraw&, SkCanvas::VertexMode, int vertexCount, const SkPoint verts[], const SkPoint texs[], - const SkColor colors[], SkXfermode* xmode, + const SkColor colors[], SK_XFERMODE_PARAM xmode, const uint16_t indices[], int indexCount, const SkPaint& paint) { // todo diff --git a/src/svg/SkSVGDevice.h b/src/svg/SkSVGDevice.h index cb13ffd..d0b9a24 100644 --- a/src/svg/SkSVGDevice.h +++ b/src/svg/SkSVGDevice.h @@ -47,7 +47,7 @@ protected: const SkPaint& paint) override; void drawVertices(const SkDraw&, SkCanvas::VertexMode, int vertexCount, const SkPoint verts[], const SkPoint texs[], - const SkColor colors[], SkXfermode* xmode, + const SkColor colors[], SK_XFERMODE_PARAM xmode, const uint16_t indices[], int indexCount, const SkPaint& paint) override; diff --git a/src/utils/SkDeferredCanvas.cpp b/src/utils/SkDeferredCanvas.cpp index d2d75fe..6a6af0f 100644 --- a/src/utils/SkDeferredCanvas.cpp +++ b/src/utils/SkDeferredCanvas.cpp @@ -513,7 +513,7 @@ void SkDeferredCanvas::onDrawDrawable(SkDrawable* drawable, const SkMatrix* matr void SkDeferredCanvas::onDrawAtlas(const SkImage* image, const SkRSXform xform[], const SkRect rects[], const SkColor colors[], - int count, SkXfermode::Mode mode, + int count, SK_XFERMODE_MODE_PARAM mode, const SkRect* cull, const SkPaint* paint) { this->flush_before_saves(); fCanvas->drawAtlas(image, xform, rects, colors, count, mode, cull, paint); @@ -521,7 +521,7 @@ void SkDeferredCanvas::onDrawAtlas(const SkImage* image, const SkRSXform xform[] void SkDeferredCanvas::onDrawVertices(VertexMode vmode, int vertexCount, const SkPoint vertices[], const SkPoint texs[], - const SkColor colors[], SkXfermode* xmode, + const SkColor colors[], SK_XFERMODE_PARAM xmode, const uint16_t indices[], int indexCount, const SkPaint& paint) { this->flush_before_saves(); @@ -530,7 +530,7 @@ void SkDeferredCanvas::onDrawVertices(VertexMode vmode, int vertexCount, } void SkDeferredCanvas::onDrawPatch(const SkPoint cubics[12], const SkColor colors[4], - const SkPoint texCoords[4], SkXfermode* xmode, + const SkPoint texCoords[4], SK_XFERMODE_PARAM xmode, const SkPaint& paint) { this->flush_before_saves(); fCanvas->drawPatch(cubics, colors, texCoords, xmode, paint); diff --git a/src/utils/SkDeferredCanvas.h b/src/utils/SkDeferredCanvas.h index 68574ca..b48b9b6 100644 --- a/src/utils/SkDeferredCanvas.h +++ b/src/utils/SkDeferredCanvas.h @@ -57,7 +57,7 @@ protected: virtual void onDrawTextBlob(const SkTextBlob* blob, SkScalar x, SkScalar y, const SkPaint& paint) override; virtual void onDrawPatch(const SkPoint cubics[12], const SkColor colors[4], - const SkPoint texCoords[4], SkXfermode* xmode, + const SkPoint texCoords[4], SK_XFERMODE_PARAM xmode, const SkPaint& paint) override; void onDrawPaint(const SkPaint&) override; @@ -87,12 +87,12 @@ protected: void onDrawVertices(VertexMode vmode, int vertexCount, const SkPoint vertices[], const SkPoint texs[], - const SkColor colors[], SkXfermode* xmode, + const SkColor colors[], SK_XFERMODE_PARAM xmode, const uint16_t indices[], int indexCount, const SkPaint&) override; void onDrawAtlas(const SkImage* image, const SkRSXform xform[], const SkRect rects[], const SkColor colors[], - int count, SkXfermode::Mode mode, + int count, SK_XFERMODE_MODE_PARAM mode, const SkRect* cull, const SkPaint* paint) override; void onClipRect(const SkRect&, ClipOp, ClipEdgeStyle) override; diff --git a/src/utils/SkDumpCanvas.cpp b/src/utils/SkDumpCanvas.cpp index eb56068..8b71975 100644 --- a/src/utils/SkDumpCanvas.cpp +++ b/src/utils/SkDumpCanvas.cpp @@ -468,7 +468,7 @@ void SkDumpCanvas::onDrawPicture(const SkPicture* picture, const SkMatrix* matri void SkDumpCanvas::onDrawVertices(VertexMode vmode, int vertexCount, const SkPoint vertices[], const SkPoint texs[], - const SkColor colors[], SkXfermode* xmode, + const SkColor colors[], SK_XFERMODE_PARAM xmode, const uint16_t indices[], int indexCount, const SkPaint& paint) { this->dump(kDrawVertices_Verb, &paint, "drawVertices(%s [%d] %g %g ...)", @@ -477,7 +477,7 @@ void SkDumpCanvas::onDrawVertices(VertexMode vmode, int vertexCount, } void SkDumpCanvas::onDrawPatch(const SkPoint cubics[12], const SkColor colors[4], - const SkPoint texCoords[4], SkXfermode* xmode, + const SkPoint texCoords[4], SK_XFERMODE_PARAM xmode, const SkPaint& paint) { //dumps corner points and colors in clockwise order starting on upper-left corner this->dump(kDrawPatch_Verb, &paint, "drawPatch(Vertices{[%f, %f], [%f, %f], [%f, %f], [%f, %f]}\ diff --git a/src/utils/SkLua.cpp b/src/utils/SkLua.cpp index ba311af..14f074c 100644 --- a/src/utils/SkLua.cpp +++ b/src/utils/SkLua.cpp @@ -573,7 +573,7 @@ static int lcanvas_drawPatch(lua_State* L) { texs = texStorage; } - get_ref(L, 1)->drawPatch(cubics, colors, texs, nullptr, *get_obj(L, 5)); + get_ref(L, 1)->drawPatch(cubics, colors, texs, *get_obj(L, 5)); return 0; } diff --git a/src/utils/SkLuaCanvas.cpp b/src/utils/SkLuaCanvas.cpp index 6b769f0..10fc3b4 100644 --- a/src/utils/SkLuaCanvas.cpp +++ b/src/utils/SkLuaCanvas.cpp @@ -309,7 +309,7 @@ void SkLuaCanvas::onDrawPicture(const SkPicture* picture, const SkMatrix* matrix void SkLuaCanvas::onDrawVertices(VertexMode vmode, int vertexCount, const SkPoint vertices[], const SkPoint texs[], - const SkColor colors[], SkXfermode* xmode, + const SkColor colors[], SK_XFERMODE_PARAM, const uint16_t indices[], int indexCount, const SkPaint& paint) { AUTO_LUA("drawVertices"); diff --git a/src/utils/SkMeshUtils.cpp b/src/utils/SkMeshUtils.cpp index 27eccc2..4c9c0d0 100644 --- a/src/utils/SkMeshUtils.cpp +++ b/src/utils/SkMeshUtils.cpp @@ -95,7 +95,7 @@ void SkMeshUtils::Draw(SkCanvas* canvas, const SkBitmap& bitmap, SkShader::kClamp_TileMode, SkShader::kClamp_TileMode)); canvas->drawVertices(SkCanvas::kTriangles_VertexMode, - rows * cols, verts, idx.tex(), colors, nullptr, + rows * cols, verts, idx.tex(), colors, SkBlendMode::kModulate, idx.indices(), idx.indexCount(), p); } } diff --git a/src/utils/SkNWayCanvas.cpp b/src/utils/SkNWayCanvas.cpp index e19e7a8..aa9f767 100644 --- a/src/utils/SkNWayCanvas.cpp +++ b/src/utils/SkNWayCanvas.cpp @@ -288,7 +288,7 @@ void SkNWayCanvas::onDrawPicture(const SkPicture* picture, const SkMatrix* matri void SkNWayCanvas::onDrawVertices(VertexMode vmode, int vertexCount, const SkPoint vertices[], const SkPoint texs[], - const SkColor colors[], SkXfermode* xmode, + const SkColor colors[], SK_XFERMODE_PARAM xmode, const uint16_t indices[], int indexCount, const SkPaint& paint) { Iter iter(fList); @@ -299,7 +299,7 @@ void SkNWayCanvas::onDrawVertices(VertexMode vmode, int vertexCount, } void SkNWayCanvas::onDrawPatch(const SkPoint cubics[12], const SkColor colors[4], - const SkPoint texCoords[4], SkXfermode* xmode, + const SkPoint texCoords[4], SK_XFERMODE_PARAM xmode, const SkPaint& paint) { Iter iter(fList); while (iter.next()) { diff --git a/src/utils/SkPaintFilterCanvas.cpp b/src/utils/SkPaintFilterCanvas.cpp index 910647d..d3cc4c7 100644 --- a/src/utils/SkPaintFilterCanvas.cpp +++ b/src/utils/SkPaintFilterCanvas.cpp @@ -151,7 +151,7 @@ void SkPaintFilterCanvas::onDrawImageNine(const SkImage* image, const SkIRect& c void SkPaintFilterCanvas::onDrawVertices(VertexMode vmode, int vertexCount, const SkPoint vertices[], const SkPoint texs[], - const SkColor colors[], SkXfermode* xmode, + const SkColor colors[], SK_XFERMODE_PARAM xmode, const uint16_t indices[], int indexCount, const SkPaint& paint) { AutoPaintFilter apf(this, kVertices_Type, paint); @@ -162,7 +162,7 @@ void SkPaintFilterCanvas::onDrawVertices(VertexMode vmode, int vertexCount, } void SkPaintFilterCanvas::onDrawPatch(const SkPoint cubics[], const SkColor colors[], - const SkPoint texCoords[], SkXfermode* xmode, + const SkPoint texCoords[], SK_XFERMODE_PARAM xmode, const SkPaint& paint) { AutoPaintFilter apf(this, kPatch_Type, paint); if (apf.shouldDraw()) { diff --git a/src/utils/SkPatchGrid.cpp b/src/utils/SkPatchGrid.cpp index 3b7c06e..ee30ce1 100644 --- a/src/utils/SkPatchGrid.cpp +++ b/src/utils/SkPatchGrid.cpp @@ -8,7 +8,7 @@ #include "SkPatchGrid.h" #include "SkPatchUtils.h" -SkPatchGrid::SkPatchGrid(int rows, int cols, VertexType flags, SkXfermode* xfer) +SkPatchGrid::SkPatchGrid(int rows, int cols, VertexType flags) : fRows(0) , fCols(0) , fModeFlags(kNone_VertexType) @@ -17,8 +17,8 @@ SkPatchGrid::SkPatchGrid(int rows, int cols, VertexType flags, SkXfermode* xfer) , fTexCoords(nullptr) , fHrzCtrlPts(nullptr) , fVrtCtrlPts(nullptr) - , fXferMode(nullptr) { - this->reset(rows, cols, flags, xfer); +{ + this->reset(rows, cols, flags, SkBlendMode::kModulate); } SkPatchGrid::~SkPatchGrid() { @@ -119,7 +119,7 @@ bool SkPatchGrid::getPatch(int x, int y, SkPoint cubics[12], SkColor colors[4], return true; } -void SkPatchGrid::reset(int rows, int cols, VertexType flags, SkXfermode* xMode) { +void SkPatchGrid::reset(int rows, int cols, VertexType flags, SkBlendMode blendmode) { delete[] fCornerPts; delete[] fCornerColors; delete[] fTexCoords; @@ -129,7 +129,7 @@ void SkPatchGrid::reset(int rows, int cols, VertexType flags, SkXfermode* xMode) fCols = cols; fRows = rows; fModeFlags = flags; - fXferMode = xMode; + fBlendMode = blendmode; fCornerPts = new SkPoint[(fRows + 1) * (fCols + 1)]; fHrzCtrlPts = new SkPoint[(fRows + 1) * fCols * 2]; @@ -179,7 +179,7 @@ void SkPatchGrid::draw(SkCanvas* canvas, SkPaint& paint) { fModeFlags & kTexs_VertexType ? texCoords : nullptr, maxCols[x], maxRows[y])) { canvas->drawVertices(SkCanvas::kTriangles_VertexMode, data.fVertexCount, - data.fPoints, data.fTexCoords, data.fColors, fXferMode, + data.fPoints, data.fTexCoords, data.fColors, fBlendMode, data.fIndices, data.fIndexCount, paint); } } diff --git a/src/utils/SkPatchGrid.h b/src/utils/SkPatchGrid.h index ca2a35b..dbb6138 100644 --- a/src/utils/SkPatchGrid.h +++ b/src/utils/SkPatchGrid.h @@ -87,8 +87,7 @@ public: kColorsAndTexs_VertexType = 0x03 }; - SkPatchGrid(int rows = 0, int cols = 0, VertexType flags = kNone_VertexType, - SkXfermode* xfer = nullptr); + SkPatchGrid(int rows = 0, int cols = 0, VertexType flags = kNone_VertexType); ~SkPatchGrid(); @@ -113,7 +112,7 @@ public: /** * Resets the grid of patches to contain rows and cols of patches. */ - void reset(int rows, int cols, VertexType flags, SkXfermode* xMode); + void reset(int rows, int cols, VertexType flags, SkBlendMode); /** * Draws the grid of patches. The patches are drawn starting at patch (0,0) drawing columns, so @@ -137,7 +136,7 @@ private: SkPoint* fTexCoords; SkPoint* fHrzCtrlPts; SkPoint* fVrtCtrlPts; - SkXfermode* fXferMode; + SkBlendMode fBlendMode = SkBlendMode::kModulate; }; diff --git a/src/xps/SkXPSDevice.cpp b/src/xps/SkXPSDevice.cpp index 946566c..7eb1587 100644 --- a/src/xps/SkXPSDevice.cpp +++ b/src/xps/SkXPSDevice.cpp @@ -1181,7 +1181,7 @@ void SkXPSDevice::drawPoints(const SkDraw& d, SkCanvas::PointMode mode, void SkXPSDevice::drawVertices(const SkDraw&, SkCanvas::VertexMode, int vertexCount, const SkPoint verts[], const SkPoint texs[], const SkColor colors[], - SkXfermode* xmode, const uint16_t indices[], + SK_XFERMODE_PARAM xmode, const uint16_t indices[], int indexCount, const SkPaint& paint) { //TODO: override this for XPS SkDEBUGF(("XPS drawVertices not yet implemented.")); diff --git a/src/xps/SkXPSDevice.h b/src/xps/SkXPSDevice.h index 9f660a7..1f66186 100644 --- a/src/xps/SkXPSDevice.h +++ b/src/xps/SkXPSDevice.h @@ -127,7 +127,7 @@ protected: SkCanvas::VertexMode, int vertexCount, const SkPoint verts[], const SkPoint texs[], const SkColor colors[], - SkXfermode* xmode, + SK_XFERMODE_PARAM xmode, const uint16_t indices[], int indexCount, const SkPaint& paint) override; diff --git a/tests/BlitRowTest.cpp b/tests/BlitRowTest.cpp index 99b7921..b4a4a64 100644 --- a/tests/BlitRowTest.cpp +++ b/tests/BlitRowTest.cpp @@ -172,7 +172,7 @@ struct Mesh { void draw(SkCanvas* canvas, SkPaint* paint) { canvas->drawVertices(SkCanvas::kTriangleFan_VertexMode, 4, fPts, fPts, - nullptr, nullptr, nullptr, 0, *paint); + nullptr, SkBlendMode::kModulate, nullptr, 0, *paint); } }; diff --git a/tests/BlurTest.cpp b/tests/BlurTest.cpp index d9fca98..4e9a246 100644 --- a/tests/BlurTest.cpp +++ b/tests/BlurTest.cpp @@ -454,7 +454,7 @@ static void make_noop_layer(SkLayerDrawLooper::Builder* builder) { SkLayerDrawLooper::LayerInfo info; info.fPaintBits = 0; - info.fColorMode = SkXfermode::kDst_Mode; + info.fColorMode = (SK_XFERMODE_MODE_PARAM)SkBlendMode::kDst; builder->addLayer(info); } @@ -462,7 +462,7 @@ static void make_blur_layer(SkLayerDrawLooper::Builder* builder, sk_spaddLayer(info); paint->setMaskFilter(std::move(mf)); } diff --git a/tests/CanvasTest.cpp b/tests/CanvasTest.cpp index 2be83f3..c062e6c 100644 --- a/tests/CanvasTest.cpp +++ b/tests/CanvasTest.cpp @@ -384,7 +384,7 @@ static void DrawVerticesShaderTestStep(SkCanvas* canvas, const TestData& d, paint.setShader(SkShader::MakeBitmapShader(d.fBitmap, SkShader::kClamp_TileMode, SkShader::kClamp_TileMode)); canvas->drawVertices(SkCanvas::kTriangleFan_VertexMode, 4, pts, pts, - nullptr, nullptr, nullptr, 0, paint); + nullptr, SkBlendMode::kModulate, nullptr, 0, paint); } // NYI: issue 240. TEST_STEP_NO_PDF(DrawVerticesShader, DrawVerticesShaderTestStep); diff --git a/tests/ColorFilterTest.cpp b/tests/ColorFilterTest.cpp index 9dfadbb..5d4ef86 100644 --- a/tests/ColorFilterTest.cpp +++ b/tests/ColorFilterTest.cpp @@ -32,7 +32,7 @@ static sk_sp reincarnate_colorfilter(SkFlattenable* obj) { static sk_sp make_filter() { // pick a filter that cannot compose with itself via newComposed() - return SkColorFilter::MakeModeFilter(SK_ColorRED, SkXfermode::kColorBurn_Mode); + return SkColorFilter::MakeModeFilter(SK_ColorRED, SkBlendMode::kColorBurn); } static void test_composecolorfilter_limit(skiatest::Reporter* reporter) { @@ -50,43 +50,43 @@ static void test_composecolorfilter_limit(skiatest::Reporter* reporter) { REPORTER_ASSERT(reporter, false); // we never saw a nullptr :( } -#define ILLEGAL_MODE ((SkXfermode::Mode)-1) +#define ILLEGAL_MODE ((SkBlendMode)-1) DEF_TEST(ColorFilter, reporter) { SkRandom rand; - for (int mode = 0; mode <= SkXfermode::kLastMode; mode++) { + for (int mode = 0; mode <= (int)SkBlendMode::kLastMode; mode++) { SkColor color = rand.nextU(); // ensure we always get a filter, by avoiding the possibility of a // special case that would return nullptr (if color's alpha is 0 or 0xFF) color = SkColorSetA(color, 0x7F); - auto cf = SkColorFilter::MakeModeFilter(color, (SkXfermode::Mode)mode); + auto cf = SkColorFilter::MakeModeFilter(color, (SkBlendMode)mode); // allow for no filter if we're in Dst mode (its a no op) - if (SkXfermode::kDst_Mode == mode && nullptr == cf) { + if (SkBlendMode::kDst == (SkBlendMode)mode && nullptr == cf) { continue; } REPORTER_ASSERT(reporter, cf); SkColor c = ~color; - SkXfermode::Mode m = ILLEGAL_MODE; + SkBlendMode m = ILLEGAL_MODE; SkColor expectedColor = color; - SkXfermode::Mode expectedMode = (SkXfermode::Mode)mode; + SkBlendMode expectedMode = (SkBlendMode)mode; // SkDebugf("--- mc [%d %x] ", mode, color); - REPORTER_ASSERT(reporter, cf->asColorMode(&c, &m)); + REPORTER_ASSERT(reporter, cf->asColorMode(&c, (SK_XFERMODE_MODE_PARAM*)&m)); // handle special-case folding by the factory - if (SkXfermode::kClear_Mode == mode) { + if (SkBlendMode::kClear == (SkBlendMode)mode) { if (c != expectedColor) { expectedColor = 0; } if (m != expectedMode) { - expectedMode = SkXfermode::kSrc_Mode; + expectedMode = SkBlendMode::kSrc; } } @@ -100,8 +100,8 @@ DEF_TEST(ColorFilter, reporter) { REPORTER_ASSERT(reporter, cf2); SkColor c2 = ~color; - SkXfermode::Mode m2 = ILLEGAL_MODE; - REPORTER_ASSERT(reporter, cf2->asColorMode(&c2, &m2)); + SkBlendMode m2 = ILLEGAL_MODE; + REPORTER_ASSERT(reporter, cf2->asColorMode(&c2, (SK_XFERMODE_MODE_PARAM*)&m2)); REPORTER_ASSERT(reporter, c2 == expectedColor); REPORTER_ASSERT(reporter, m2 == expectedMode); } diff --git a/tests/DFPathRendererTest.cpp b/tests/DFPathRendererTest.cpp index 25c8f82..327640c 100644 --- a/tests/DFPathRendererTest.cpp +++ b/tests/DFPathRendererTest.cpp @@ -42,7 +42,7 @@ static void test_far_from_origin(GrRenderTargetContext* renderTargetContext, GrP shape = shape.applyStyle(GrStyle::Apply::kPathEffectAndStrokeRec, 1.f); GrPaint paint; - paint.setXPFactory(GrPorterDuffXPFactory::Make(SkXfermode::kSrc_Mode)); + paint.setXPFactory(GrPorterDuffXPFactory::Make(SkBlendMode::kSrc)); GrNoClip noClip; GrPathRenderer::DrawPathArgs args; diff --git a/tests/GLProgramsTest.cpp b/tests/GLProgramsTest.cpp index cb6f350..94afec1 100644 --- a/tests/GLProgramsTest.cpp +++ b/tests/GLProgramsTest.cpp @@ -203,8 +203,8 @@ static sk_sp create_random_proc_tree(GrProcessorTestData* d } sk_sp minLevelsChild(create_random_proc_tree(d, minLevels, maxLevels - 1)); sk_sp otherChild(create_random_proc_tree(d, 1, maxLevels - 1)); - SkXfermode::Mode mode = static_cast(d->fRandom->nextRangeU(0, - SkXfermode::kLastCoeffMode)); + SkBlendMode mode = static_cast(d->fRandom->nextRangeU(0, + (int)SkBlendMode::kLastCoeffMode)); sk_sp fp; if (d->fRandom->nextF() < 0.5f) { fp = GrXfermodeFragmentProcessor::MakeFromTwoProcessors(std::move(minLevelsChild), @@ -366,7 +366,7 @@ bool GrDrawingManager::ProgramUnitTest(GrContext* context, int maxStages) { GrProcessorTestData ptd(&random, context, context->caps(), renderTargetContext.get(), dummyTextures); GrPaint grPaint; - grPaint.setXPFactory(GrPorterDuffXPFactory::Make(SkXfermode::kSrc_Mode)); + grPaint.setXPFactory(GrPorterDuffXPFactory::Make(SkBlendMode::kSrc)); sk_sp fp( GrProcessorTestFactory::MakeIdx(i, &ptd)); diff --git a/tests/GpuColorFilterTest.cpp b/tests/GpuColorFilterTest.cpp index 723e9e9..d93f1b7 100644 --- a/tests/GpuColorFilterTest.cpp +++ b/tests/GpuColorFilterTest.cpp @@ -39,7 +39,7 @@ DEF_GPUTEST_FOR_ALL_CONTEXTS(GpuColorFilter, reporter, ctxInfo) { GrColor inputColor; // "[color]" SkColor filterColor; // "with filter color [color]" - SkXfermode::Mode filterMode; // "in mode [mode]" + SkBlendMode filterMode; // "in mode [mode]" // "produces" uint32_t outputComponents; // "rgb of", "red of", "alpha of", ... @@ -69,30 +69,30 @@ DEF_GPUTEST_FOR_ALL_CONTEXTS(GpuColorFilter, reporter, ctxInfo) { GetConstantComponentTestCase filterTests[] = { // A color filtered with Clear produces black. - { kRGBA, gr_white, SK_ColorBLACK, SkXfermode::kClear_Mode, kRGBA, gr_black }, - { kRGBA, gr_c1, SK_ColorWHITE, SkXfermode::kClear_Mode, kRGBA, gr_black }, - { kR, gr_white, c1, SkXfermode::kClear_Mode, kRGBA, gr_black }, + { kRGBA, gr_white, SK_ColorBLACK, SkBlendMode::kClear, kRGBA, gr_black }, + { kRGBA, gr_c1, SK_ColorWHITE, SkBlendMode::kClear, kRGBA, gr_black }, + { kR, gr_white, c1, SkBlendMode::kClear, kRGBA, gr_black }, // A color filtered with a color in mode Src, produces the filter color. - { kRGBA, gr_c2, c1, SkXfermode::kSrc_Mode, kRGBA, gr_c1 }, - { kA, gr_c1, c1, SkXfermode::kSrc_Mode, kRGBA, gr_c1 }, + { kRGBA, gr_c2, c1, SkBlendMode::kSrc, kRGBA, gr_c1 }, + { kA, gr_c1, c1, SkBlendMode::kSrc, kRGBA, gr_c1 }, // A color filtered with SrcOver produces a color. - { kRGBA, gr_whiteTrans, SkColorSetARGB(128, 200, 200, 200), SkXfermode::kSrcOver_Mode, kRGBA, GrColorPackRGBA(164, 164, 164, 192)}, + { kRGBA, gr_whiteTrans, SkColorSetARGB(128, 200, 200, 200), SkBlendMode::kSrcOver, kRGBA, GrColorPackRGBA(164, 164, 164, 192)}, // An unknown color with known alpha filtered with SrcOver produces an unknown color with known alpha. - { kA , gr_whiteTrans, SkColorSetARGB(128, 200, 200, 200), SkXfermode::kSrcOver_Mode, kA , GrColorPackRGBA(0, 0, 0, 192)}, + { kA , gr_whiteTrans, SkColorSetARGB(128, 200, 200, 200), SkBlendMode::kSrcOver, kA , GrColorPackRGBA(0, 0, 0, 192)}, // A color with unknown alpha filtered with SrcOver produces a color with unknown alpha. - { kRGB , gr_whiteTrans, SkColorSetARGB(128, 200, 200, 200), SkXfermode::kSrcOver_Mode, kRGB, GrColorPackRGBA(164, 164, 164, 0)}, + { kRGB , gr_whiteTrans, SkColorSetARGB(128, 200, 200, 200), SkBlendMode::kSrcOver, kRGB, GrColorPackRGBA(164, 164, 164, 0)}, // A color filtered with DstOver produces a color. - { kRGBA, gr_whiteTrans, SkColorSetARGB(128, 200, 200, 200), SkXfermode::kDstOver_Mode, kRGBA, GrColorPackRGBA(178, 178, 178, 192)}, + { kRGBA, gr_whiteTrans, SkColorSetARGB(128, 200, 200, 200), SkBlendMode::kDstOver, kRGBA, GrColorPackRGBA(178, 178, 178, 192)}, // An unknown color with known alpha filtered with DstOver produces an unknown color with known alpha. - { kA , gr_whiteTrans, SkColorSetARGB(128, 200, 200, 200), SkXfermode::kDstOver_Mode, kA , GrColorPackRGBA(0, 0, 0, 192)}, + { kA , gr_whiteTrans, SkColorSetARGB(128, 200, 200, 200), SkBlendMode::kDstOver, kA , GrColorPackRGBA(0, 0, 0, 192)}, // A color with unknown alpha filtered with DstOver produces an unknown color. - { kRGB , gr_whiteTrans, SkColorSetARGB(128, 200, 200, 200), SkXfermode::kDstOver_Mode, 0 , gr_black}, + { kRGB , gr_whiteTrans, SkColorSetARGB(128, 200, 200, 200), SkBlendMode::kDstOver, 0 , gr_black}, // An unknown color with known alpha and red component filtered with Multiply produces an unknown color with known red and alpha. - { kR|kA , gr_whiteTrans, SkColorSetARGB(128, 200, 200, 200), SkXfermode::kModulate_Mode, kR|kA, GrColorPackRGBA(50, 0, 0, 64) } + { kR|kA , gr_whiteTrans, SkColorSetARGB(128, 200, 200, 200), SkBlendMode::kModulate, kR|kA, GrColorPackRGBA(50, 0, 0, 64) } }; GrPaint paint; diff --git a/tests/GrPorterDuffTest.cpp b/tests/GrPorterDuffTest.cpp index 719f787..ec57377 100644 --- a/tests/GrPorterDuffTest.cpp +++ b/tests/GrPorterDuffTest.cpp @@ -67,7 +67,7 @@ enum { class GrPorterDuffTest { public: struct XPInfo { - XPInfo(skiatest::Reporter* reporter, SkXfermode::Mode xfermode, const GrCaps& caps, + XPInfo(skiatest::Reporter* reporter, SkBlendMode xfermode, const GrCaps& caps, const GrPipelineOptimizations& optimizations) { sk_sp xpf(GrPorterDuffXPFactory::Make(xfermode)); SkAutoTUnref xp( @@ -104,12 +104,12 @@ static void test_lcd_coverage(skiatest::Reporter* reporter, const GrCaps& caps) SkASSERT(!opt.fCoveragePOI.isSolidWhite()); SkASSERT(opt.fCoveragePOI.isFourChannelOutput()); - for (int m = 0; m <= SkXfermode::kLastCoeffMode; m++) { - SkXfermode::Mode xfermode = static_cast(m); + for (int m = 0; m <= (int)SkBlendMode::kLastCoeffMode; m++) { + SkBlendMode xfermode = static_cast(m); const GrPorterDuffTest::XPInfo xpi(reporter, xfermode, caps, opt); switch (xfermode) { - case SkXfermode::kClear_Mode: + case SkBlendMode::kClear: TEST_ASSERT(!xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(0 == xpi.fBlendedColor.fKnownColor); TEST_ASSERT(kRGBA_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); @@ -121,7 +121,7 @@ static void test_lcd_coverage(skiatest::Reporter* reporter, const GrCaps& caps) TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kSrc_Mode: + case SkBlendMode::kSrc: TEST_ASSERT(!xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kNone_OptFlags) == xpi.fOptFlags); @@ -132,7 +132,7 @@ static void test_lcd_coverage(skiatest::Reporter* reporter, const GrCaps& caps) TEST_ASSERT(kIS2C_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kDst_Mode: + case SkBlendMode::kDst: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kSkipDraw_OptFlag | @@ -146,7 +146,7 @@ static void test_lcd_coverage(skiatest::Reporter* reporter, const GrCaps& caps) TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(!xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kSrcOver_Mode: + case SkBlendMode::kSrcOver: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kNone_OptFlags) == xpi.fOptFlags); @@ -157,7 +157,7 @@ static void test_lcd_coverage(skiatest::Reporter* reporter, const GrCaps& caps) TEST_ASSERT(kIS2C_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kDstOver_Mode: + case SkBlendMode::kDstOver: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kNone_OptFlags) == xpi.fOptFlags); @@ -168,7 +168,7 @@ static void test_lcd_coverage(skiatest::Reporter* reporter, const GrCaps& caps) TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kSrcIn_Mode: + case SkBlendMode::kSrcIn: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kNone_OptFlags) == xpi.fOptFlags); @@ -179,7 +179,7 @@ static void test_lcd_coverage(skiatest::Reporter* reporter, const GrCaps& caps) TEST_ASSERT(kIS2C_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kDstIn_Mode: + case SkBlendMode::kDstIn: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kNone_OptFlags) == xpi.fOptFlags); @@ -190,7 +190,7 @@ static void test_lcd_coverage(skiatest::Reporter* reporter, const GrCaps& caps) TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kSrcOut_Mode: + case SkBlendMode::kSrcOut: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kNone_OptFlags) == xpi.fOptFlags); @@ -201,7 +201,7 @@ static void test_lcd_coverage(skiatest::Reporter* reporter, const GrCaps& caps) TEST_ASSERT(kIS2C_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kDstOut_Mode: + case SkBlendMode::kDstOut: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kNone_OptFlags) == xpi.fOptFlags); @@ -212,7 +212,7 @@ static void test_lcd_coverage(skiatest::Reporter* reporter, const GrCaps& caps) TEST_ASSERT(kISC_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kSrcATop_Mode: + case SkBlendMode::kSrcATop: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kNone_OptFlags) == xpi.fOptFlags); @@ -223,7 +223,7 @@ static void test_lcd_coverage(skiatest::Reporter* reporter, const GrCaps& caps) TEST_ASSERT(kIS2C_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kDstATop_Mode: + case SkBlendMode::kDstATop: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kNone_OptFlags) == xpi.fOptFlags); @@ -234,7 +234,7 @@ static void test_lcd_coverage(skiatest::Reporter* reporter, const GrCaps& caps) TEST_ASSERT(kIS2C_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kXor_Mode: + case SkBlendMode::kXor: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kNone_OptFlags) == xpi.fOptFlags); @@ -245,7 +245,7 @@ static void test_lcd_coverage(skiatest::Reporter* reporter, const GrCaps& caps) TEST_ASSERT(kIS2C_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kPlus_Mode: + case SkBlendMode::kPlus: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kNone_OptFlags) == xpi.fOptFlags); @@ -256,7 +256,7 @@ static void test_lcd_coverage(skiatest::Reporter* reporter, const GrCaps& caps) TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kModulate_Mode: + case SkBlendMode::kModulate: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kNone_OptFlags) == xpi.fOptFlags); @@ -267,7 +267,7 @@ static void test_lcd_coverage(skiatest::Reporter* reporter, const GrCaps& caps) TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kScreen_Mode: + case SkBlendMode::kScreen: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kNone_OptFlags) == xpi.fOptFlags); @@ -296,13 +296,13 @@ static void test_color_unknown_with_coverage(skiatest::Reporter* reporter, const SkASSERT(!optimizations.fCoveragePOI.isSolidWhite()); SkASSERT(!optimizations.fCoveragePOI.isFourChannelOutput()); - for (int m = 0; m <= SkXfermode::kLastCoeffMode; m++) { - SkXfermode::Mode xfermode = static_cast(m); + for (int m = 0; m <= (int)SkBlendMode::kLastCoeffMode; m++) { + SkBlendMode xfermode = static_cast(m); const GrPorterDuffTest::XPInfo xpi(reporter, xfermode, caps, optimizations); switch (xfermode) { - case SkXfermode::kClear_Mode: + case SkBlendMode::kClear: TEST_ASSERT(!xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(0 == xpi.fBlendedColor.fKnownColor); TEST_ASSERT(kRGBA_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); @@ -314,7 +314,7 @@ static void test_color_unknown_with_coverage(skiatest::Reporter* reporter, const TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kSrc_Mode: + case SkBlendMode::kSrc: TEST_ASSERT(!xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kNone_OptFlags) == xpi.fOptFlags); @@ -325,7 +325,7 @@ static void test_color_unknown_with_coverage(skiatest::Reporter* reporter, const TEST_ASSERT(kIS2A_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kDst_Mode: + case SkBlendMode::kDst: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kSkipDraw_OptFlag | @@ -339,7 +339,7 @@ static void test_color_unknown_with_coverage(skiatest::Reporter* reporter, const TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(!xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kSrcOver_Mode: + case SkBlendMode::kSrcOver: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags); @@ -350,7 +350,7 @@ static void test_color_unknown_with_coverage(skiatest::Reporter* reporter, const TEST_ASSERT(kISA_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kDstOver_Mode: + case SkBlendMode::kDstOver: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags); @@ -361,7 +361,7 @@ static void test_color_unknown_with_coverage(skiatest::Reporter* reporter, const TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kSrcIn_Mode: + case SkBlendMode::kSrcIn: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kNone_OptFlags) == xpi.fOptFlags); @@ -372,7 +372,7 @@ static void test_color_unknown_with_coverage(skiatest::Reporter* reporter, const TEST_ASSERT(kIS2A_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kDstIn_Mode: + case SkBlendMode::kDstIn: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kNone_OptFlags) == xpi.fOptFlags); @@ -383,7 +383,7 @@ static void test_color_unknown_with_coverage(skiatest::Reporter* reporter, const TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kSrcOut_Mode: + case SkBlendMode::kSrcOut: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kNone_OptFlags) == xpi.fOptFlags); @@ -394,7 +394,7 @@ static void test_color_unknown_with_coverage(skiatest::Reporter* reporter, const TEST_ASSERT(kIS2A_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kDstOut_Mode: + case SkBlendMode::kDstOut: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags); @@ -405,7 +405,7 @@ static void test_color_unknown_with_coverage(skiatest::Reporter* reporter, const TEST_ASSERT(kISA_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kSrcATop_Mode: + case SkBlendMode::kSrcATop: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags); @@ -416,7 +416,7 @@ static void test_color_unknown_with_coverage(skiatest::Reporter* reporter, const TEST_ASSERT(kISA_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kDstATop_Mode: + case SkBlendMode::kDstATop: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kNone_OptFlags) == xpi.fOptFlags); @@ -427,7 +427,7 @@ static void test_color_unknown_with_coverage(skiatest::Reporter* reporter, const TEST_ASSERT(kIS2C_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kXor_Mode: + case SkBlendMode::kXor: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags); @@ -438,7 +438,7 @@ static void test_color_unknown_with_coverage(skiatest::Reporter* reporter, const TEST_ASSERT(kISA_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kPlus_Mode: + case SkBlendMode::kPlus: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags); @@ -449,7 +449,7 @@ static void test_color_unknown_with_coverage(skiatest::Reporter* reporter, const TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kModulate_Mode: + case SkBlendMode::kModulate: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kNone_OptFlags) == xpi.fOptFlags); @@ -460,7 +460,7 @@ static void test_color_unknown_with_coverage(skiatest::Reporter* reporter, const TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kScreen_Mode: + case SkBlendMode::kScreen: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags); @@ -490,12 +490,12 @@ static void test_color_unknown_no_coverage(skiatest::Reporter* reporter, const G SkASSERT(optimizations.fCoveragePOI.isSolidWhite()); SkASSERT(!optimizations.fCoveragePOI.isFourChannelOutput()); - for (int m = 0; m <= SkXfermode::kLastCoeffMode; m++) { - SkXfermode::Mode xfermode = static_cast(m); + for (int m = 0; m <= (int)SkBlendMode::kLastCoeffMode; m++) { + SkBlendMode xfermode = static_cast(m); const GrPorterDuffTest::XPInfo xpi(reporter, xfermode, caps, optimizations); switch (xfermode) { - case SkXfermode::kClear_Mode: + case SkBlendMode::kClear: TEST_ASSERT(!xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(0 == xpi.fBlendedColor.fKnownColor); TEST_ASSERT(kRGBA_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); @@ -508,7 +508,7 @@ static void test_color_unknown_no_coverage(skiatest::Reporter* reporter, const G TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kSrc_Mode: + case SkBlendMode::kSrc: TEST_ASSERT(!xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(229 == GrColorUnpackR(xpi.fBlendedColor.fKnownColor)); TEST_ASSERT(154 == GrColorUnpackB(xpi.fBlendedColor.fKnownColor)); @@ -522,7 +522,7 @@ static void test_color_unknown_no_coverage(skiatest::Reporter* reporter, const G TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kDst_Mode: + case SkBlendMode::kDst: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kSkipDraw_OptFlag | @@ -536,7 +536,7 @@ static void test_color_unknown_no_coverage(skiatest::Reporter* reporter, const G TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(!xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kSrcOver_Mode: + case SkBlendMode::kSrcOver: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kIgnoreCoverage_OptFlag | @@ -548,7 +548,7 @@ static void test_color_unknown_no_coverage(skiatest::Reporter* reporter, const G TEST_ASSERT(kISA_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kDstOver_Mode: + case SkBlendMode::kDstOver: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kIgnoreCoverage_OptFlag | @@ -560,7 +560,7 @@ static void test_color_unknown_no_coverage(skiatest::Reporter* reporter, const G TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kSrcIn_Mode: + case SkBlendMode::kSrcIn: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kIgnoreCoverage_OptFlag) == xpi.fOptFlags); @@ -571,7 +571,7 @@ static void test_color_unknown_no_coverage(skiatest::Reporter* reporter, const G TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kDstIn_Mode: + case SkBlendMode::kDstIn: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kIgnoreCoverage_OptFlag) == xpi.fOptFlags); @@ -582,7 +582,7 @@ static void test_color_unknown_no_coverage(skiatest::Reporter* reporter, const G TEST_ASSERT(kSA_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kSrcOut_Mode: + case SkBlendMode::kSrcOut: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kIgnoreCoverage_OptFlag) == xpi.fOptFlags); @@ -593,7 +593,7 @@ static void test_color_unknown_no_coverage(skiatest::Reporter* reporter, const G TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kDstOut_Mode: + case SkBlendMode::kDstOut: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kIgnoreCoverage_OptFlag | @@ -605,7 +605,7 @@ static void test_color_unknown_no_coverage(skiatest::Reporter* reporter, const G TEST_ASSERT(kISA_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kSrcATop_Mode: + case SkBlendMode::kSrcATop: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kIgnoreCoverage_OptFlag | @@ -617,7 +617,7 @@ static void test_color_unknown_no_coverage(skiatest::Reporter* reporter, const G TEST_ASSERT(kISA_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kDstATop_Mode: + case SkBlendMode::kDstATop: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kIgnoreCoverage_OptFlag) == xpi.fOptFlags); @@ -628,7 +628,7 @@ static void test_color_unknown_no_coverage(skiatest::Reporter* reporter, const G TEST_ASSERT(kSA_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kXor_Mode: + case SkBlendMode::kXor: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kIgnoreCoverage_OptFlag | @@ -640,7 +640,7 @@ static void test_color_unknown_no_coverage(skiatest::Reporter* reporter, const G TEST_ASSERT(kISA_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kPlus_Mode: + case SkBlendMode::kPlus: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kIgnoreCoverage_OptFlag | @@ -652,7 +652,7 @@ static void test_color_unknown_no_coverage(skiatest::Reporter* reporter, const G TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kModulate_Mode: + case SkBlendMode::kModulate: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kIgnoreCoverage_OptFlag) == xpi.fOptFlags); @@ -663,7 +663,7 @@ static void test_color_unknown_no_coverage(skiatest::Reporter* reporter, const G TEST_ASSERT(kSC_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kScreen_Mode: + case SkBlendMode::kScreen: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kIgnoreCoverage_OptFlag | @@ -694,12 +694,12 @@ static void test_color_opaque_with_coverage(skiatest::Reporter* reporter, const SkASSERT(!optimizations.fCoveragePOI.isSolidWhite()); SkASSERT(!optimizations.fCoveragePOI.isFourChannelOutput()); - for (int m = 0; m <= SkXfermode::kLastCoeffMode; m++) { - SkXfermode::Mode xfermode = static_cast(m); + for (int m = 0; m <= (int)SkBlendMode::kLastCoeffMode; m++) { + SkBlendMode xfermode = static_cast(m); const GrPorterDuffTest::XPInfo xpi(reporter, xfermode, caps, optimizations); switch (xfermode) { - case SkXfermode::kClear_Mode: + case SkBlendMode::kClear: TEST_ASSERT(!xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(0 == xpi.fBlendedColor.fKnownColor); TEST_ASSERT(kRGBA_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); @@ -711,7 +711,7 @@ static void test_color_opaque_with_coverage(skiatest::Reporter* reporter, const TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kSrc_Mode: + case SkBlendMode::kSrc: TEST_ASSERT(!xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(255 == GrColorUnpackA(xpi.fBlendedColor.fKnownColor)); TEST_ASSERT(kA_GrColorComponentFlag == xpi.fBlendedColor.fKnownColorFlags); @@ -723,7 +723,7 @@ static void test_color_opaque_with_coverage(skiatest::Reporter* reporter, const TEST_ASSERT(kISA_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kDst_Mode: + case SkBlendMode::kDst: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kSkipDraw_OptFlag | @@ -737,7 +737,7 @@ static void test_color_opaque_with_coverage(skiatest::Reporter* reporter, const TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(!xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kSrcOver_Mode: + case SkBlendMode::kSrcOver: TEST_ASSERT(!xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(255 == GrColorUnpackA(xpi.fBlendedColor.fKnownColor)); TEST_ASSERT(kA_GrColorComponentFlag == xpi.fBlendedColor.fKnownColorFlags); @@ -749,7 +749,7 @@ static void test_color_opaque_with_coverage(skiatest::Reporter* reporter, const TEST_ASSERT(kISA_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kDstOver_Mode: + case SkBlendMode::kDstOver: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags); @@ -760,7 +760,7 @@ static void test_color_opaque_with_coverage(skiatest::Reporter* reporter, const TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kSrcIn_Mode: + case SkBlendMode::kSrcIn: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags); @@ -771,7 +771,7 @@ static void test_color_opaque_with_coverage(skiatest::Reporter* reporter, const TEST_ASSERT(kISA_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kDstIn_Mode: + case SkBlendMode::kDstIn: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kSkipDraw_OptFlag | @@ -785,7 +785,7 @@ static void test_color_opaque_with_coverage(skiatest::Reporter* reporter, const TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(!xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kSrcOut_Mode: + case SkBlendMode::kSrcOut: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags); @@ -796,7 +796,7 @@ static void test_color_opaque_with_coverage(skiatest::Reporter* reporter, const TEST_ASSERT(kISA_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kDstOut_Mode: + case SkBlendMode::kDstOut: TEST_ASSERT(!xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(0 == xpi.fBlendedColor.fKnownColor); TEST_ASSERT(kRGBA_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); @@ -808,7 +808,7 @@ static void test_color_opaque_with_coverage(skiatest::Reporter* reporter, const TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kSrcATop_Mode: + case SkBlendMode::kSrcATop: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags); @@ -819,7 +819,7 @@ static void test_color_opaque_with_coverage(skiatest::Reporter* reporter, const TEST_ASSERT(kISA_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kDstATop_Mode: + case SkBlendMode::kDstATop: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags); @@ -830,7 +830,7 @@ static void test_color_opaque_with_coverage(skiatest::Reporter* reporter, const TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kXor_Mode: + case SkBlendMode::kXor: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags); @@ -841,7 +841,7 @@ static void test_color_opaque_with_coverage(skiatest::Reporter* reporter, const TEST_ASSERT(kISA_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kPlus_Mode: + case SkBlendMode::kPlus: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags); @@ -852,7 +852,7 @@ static void test_color_opaque_with_coverage(skiatest::Reporter* reporter, const TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kModulate_Mode: + case SkBlendMode::kModulate: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kNone_OptFlags) == xpi.fOptFlags); @@ -863,7 +863,7 @@ static void test_color_opaque_with_coverage(skiatest::Reporter* reporter, const TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kScreen_Mode: + case SkBlendMode::kScreen: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags); @@ -893,12 +893,12 @@ static void test_color_opaque_no_coverage(skiatest::Reporter* reporter, const Gr SkASSERT(optimizations.fCoveragePOI.isSolidWhite()); SkASSERT(!optimizations.fCoveragePOI.isFourChannelOutput()); - for (int m = 0; m <= SkXfermode::kLastCoeffMode; m++) { - SkXfermode::Mode xfermode = static_cast(m); + for (int m = 0; m <= (int)SkBlendMode::kLastCoeffMode; m++) { + SkBlendMode xfermode = static_cast(m); const GrPorterDuffTest::XPInfo xpi(reporter, xfermode, caps, optimizations); switch (xfermode) { - case SkXfermode::kClear_Mode: + case SkBlendMode::kClear: TEST_ASSERT(!xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(0 == xpi.fBlendedColor.fKnownColor); TEST_ASSERT(kRGBA_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); @@ -911,7 +911,7 @@ static void test_color_opaque_no_coverage(skiatest::Reporter* reporter, const Gr TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kSrc_Mode: + case SkBlendMode::kSrc: TEST_ASSERT(!xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(82 == GrColorUnpackG(xpi.fBlendedColor.fKnownColor)); TEST_ASSERT(255 == GrColorUnpackA(xpi.fBlendedColor.fKnownColor)); @@ -925,7 +925,7 @@ static void test_color_opaque_no_coverage(skiatest::Reporter* reporter, const Gr TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kDst_Mode: + case SkBlendMode::kDst: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kSkipDraw_OptFlag | @@ -939,7 +939,7 @@ static void test_color_opaque_no_coverage(skiatest::Reporter* reporter, const Gr TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(!xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kSrcOver_Mode: + case SkBlendMode::kSrcOver: TEST_ASSERT(!xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(82 == GrColorUnpackG(xpi.fBlendedColor.fKnownColor)); TEST_ASSERT(255 == GrColorUnpackA(xpi.fBlendedColor.fKnownColor)); @@ -953,7 +953,7 @@ static void test_color_opaque_no_coverage(skiatest::Reporter* reporter, const Gr TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kDstOver_Mode: + case SkBlendMode::kDstOver: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kIgnoreCoverage_OptFlag | @@ -965,7 +965,7 @@ static void test_color_opaque_no_coverage(skiatest::Reporter* reporter, const Gr TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kSrcIn_Mode: + case SkBlendMode::kSrcIn: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kIgnoreCoverage_OptFlag) == xpi.fOptFlags); @@ -976,7 +976,7 @@ static void test_color_opaque_no_coverage(skiatest::Reporter* reporter, const Gr TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kDstIn_Mode: + case SkBlendMode::kDstIn: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kSkipDraw_OptFlag | @@ -990,7 +990,7 @@ static void test_color_opaque_no_coverage(skiatest::Reporter* reporter, const Gr TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(!xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kSrcOut_Mode: + case SkBlendMode::kSrcOut: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kIgnoreCoverage_OptFlag) == xpi.fOptFlags); @@ -1001,7 +1001,7 @@ static void test_color_opaque_no_coverage(skiatest::Reporter* reporter, const Gr TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kDstOut_Mode: + case SkBlendMode::kDstOut: TEST_ASSERT(!xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(0 == xpi.fBlendedColor.fKnownColor); TEST_ASSERT(kRGBA_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); @@ -1014,7 +1014,7 @@ static void test_color_opaque_no_coverage(skiatest::Reporter* reporter, const Gr TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kSrcATop_Mode: + case SkBlendMode::kSrcATop: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kIgnoreCoverage_OptFlag) == xpi.fOptFlags); @@ -1025,7 +1025,7 @@ static void test_color_opaque_no_coverage(skiatest::Reporter* reporter, const Gr TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kDstATop_Mode: + case SkBlendMode::kDstATop: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kIgnoreCoverage_OptFlag | @@ -1037,7 +1037,7 @@ static void test_color_opaque_no_coverage(skiatest::Reporter* reporter, const Gr TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kXor_Mode: + case SkBlendMode::kXor: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kIgnoreCoverage_OptFlag) == xpi.fOptFlags); @@ -1048,7 +1048,7 @@ static void test_color_opaque_no_coverage(skiatest::Reporter* reporter, const Gr TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kPlus_Mode: + case SkBlendMode::kPlus: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kIgnoreCoverage_OptFlag | @@ -1060,7 +1060,7 @@ static void test_color_opaque_no_coverage(skiatest::Reporter* reporter, const Gr TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kModulate_Mode: + case SkBlendMode::kModulate: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kIgnoreCoverage_OptFlag) == xpi.fOptFlags); @@ -1071,7 +1071,7 @@ static void test_color_opaque_no_coverage(skiatest::Reporter* reporter, const Gr TEST_ASSERT(kSC_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); TEST_ASSERT(xpi.fBlendInfo.fWriteColor); break; - case SkXfermode::kScreen_Mode: + case SkBlendMode::kScreen: TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst); TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKnownColorFlags); TEST_ASSERT((kIgnoreCoverage_OptFlag | @@ -1121,7 +1121,7 @@ static void test_lcd_coverage_fallback_case(skiatest::Reporter* reporter, const SkASSERT(kRGBA_GrColorComponentFlags == colorPOI.validFlags()); SkASSERT(covPOI.isFourChannelOutput()); - sk_sp xpf(GrPorterDuffXPFactory::Make(SkXfermode::kSrcOver_Mode)); + sk_sp xpf(GrPorterDuffXPFactory::Make(SkBlendMode::kSrcOver)); TEST_ASSERT(!xpf->willNeedDstTexture(caps, opts)); SkAutoTUnref xp( @@ -1194,8 +1194,8 @@ DEF_GPUTEST(PorterDuffNoDualSourceBlending, reporter, /*factory*/) { optimizations.fCoveragePOI.calcWithInitialValues(nullptr, 0, GrColorPackA4(255), kRGBA_GrColorComponentFlags, true); } - for (int m = 0; m <= SkXfermode::kLastCoeffMode; m++) { - SkXfermode::Mode xfermode = static_cast(m); + for (int m = 0; m <= (int)SkBlendMode::kLastCoeffMode; m++) { + SkBlendMode xfermode = static_cast(m); sk_sp xpf(GrPorterDuffXPFactory::Make(xfermode)); GrXferProcessor::DstTexture* dstTexture = xpf->willNeedDstTexture(caps, optimizations) ? &fakeDstTexture : 0; diff --git a/tests/ImageFilterTest.cpp b/tests/ImageFilterTest.cpp index 7f0c69c..42ffd38 100644 --- a/tests/ImageFilterTest.cpp +++ b/tests/ImageFilterTest.cpp @@ -143,7 +143,7 @@ public: { sk_sp cf(SkColorFilter::MakeModeFilter(SK_ColorRED, - SkXfermode::kSrcIn_Mode)); + SkBlendMode::kSrcIn)); this->addFilter("color filter", SkColorFilterImageFilter::Make(std::move(cf), input, cropRect)); @@ -191,7 +191,7 @@ public: } this->addFilter("merge", SkMergeImageFilter::Make(input, input, - SkXfermode::kSrcOver_Mode, + SkBlendMode::kSrcOver, cropRect)); { @@ -208,7 +208,7 @@ public: this->addFilter("merge with disjoint inputs", SkMergeImageFilter::Make( std::move(paintFilterLeft), std::move(paintFilterRight), - SkXfermode::kSrcOver_Mode, cropRect)); + SkBlendMode::kSrcOver, cropRect)); } this->addFilter("offset", @@ -358,7 +358,7 @@ static sk_sp make_grayscale(sk_sp input, static sk_sp make_blue(sk_sp input, const SkImageFilter::CropRect* cropRect) { sk_sp filter(SkColorFilter::MakeModeFilter(SK_ColorBLUE, - SkXfermode::kSrcIn_Mode)); + SkBlendMode::kSrcIn)); return SkColorFilterImageFilter::Make(std::move(filter), std::move(input), cropRect); } @@ -686,7 +686,7 @@ static void test_fail_affects_transparent_black(skiatest::Reporter* reporter, Gr sk_sp source(create_empty_special_image(context, 5)); SkImageFilter::OutputProperties noColorSpace(nullptr); SkImageFilter::Context ctx(SkMatrix::I(), SkIRect::MakeXYWH(0, 0, 1, 1), nullptr, noColorSpace); - sk_sp green(SkColorFilter::MakeModeFilter(SK_ColorGREEN, SkXfermode::kSrc_Mode)); + sk_sp green(SkColorFilter::MakeModeFilter(SK_ColorGREEN, SkBlendMode::kSrc)); SkASSERT(green->affectsTransparentBlack()); sk_sp greenFilter(SkColorFilterImageFilter::Make(std::move(green), std::move(failFilter))); @@ -769,7 +769,7 @@ static void draw_saveLayer_picture(int width, int height, int tileSize, SkMatrix matrix; matrix.setTranslate(SkIntToScalar(50), 0); - sk_sp cf(SkColorFilter::MakeModeFilter(SK_ColorWHITE, SkXfermode::kSrc_Mode)); + sk_sp cf(SkColorFilter::MakeModeFilter(SK_ColorWHITE, SkBlendMode::kSrc)); sk_sp cfif(SkColorFilterImageFilter::Make(std::move(cf), nullptr)); sk_sp imageFilter(SkImageFilter::MakeMatrixFilter(matrix, kNone_SkFilterQuality, @@ -960,7 +960,7 @@ static void test_imagefilter_merge_result_size(skiatest::Reporter* reporter, GrC greenBM.eraseColor(SK_ColorGREEN); sk_sp greenImage(SkImage::MakeFromBitmap(greenBM)); sk_sp source(SkImageSource::Make(std::move(greenImage))); - sk_sp merge(SkMergeImageFilter::Make(source, source)); + sk_sp merge(SkMergeImageFilter::Make(source, source, SkBlendMode::kSrcOver)); sk_sp srcImg(create_empty_special_image(context, 1)); @@ -1299,7 +1299,7 @@ DEF_TEST(ImageFilterEmptySaveLayer, reporter) { SkPictureRecorder recorder; sk_sp green(SkColorFilter::MakeModeFilter(SK_ColorGREEN, - SkXfermode::kSrc_Mode)); + SkBlendMode::kSrc)); sk_sp imageFilter(SkColorFilterImageFilter::Make(green, nullptr)); SkPaint imageFilterPaint; imageFilterPaint.setImageFilter(std::move(imageFilter)); @@ -1425,7 +1425,7 @@ static void test_xfermode_cropped_input(SkCanvas* canvas, skiatest::Reporter* re bitmap.eraseARGB(255, 255, 255, 255); sk_sp green(SkColorFilter::MakeModeFilter(SK_ColorGREEN, - SkXfermode::kSrcIn_Mode)); + SkBlendMode::kSrcIn)); sk_sp greenFilter(SkColorFilterImageFilter::Make(green, nullptr)); SkImageFilter::CropRect cropRect(SkRect::MakeEmpty()); sk_sp croppedOut(SkColorFilterImageFilter::Make(green, nullptr, &cropRect)); @@ -1848,7 +1848,7 @@ DEF_GPUTEST_FOR_ALL_CONTEXTS(ImageFilterBlurLargeImage_Gpu, reporter, ctxInfo) { */ DEF_TEST(ImageFilterComplexCTM, reporter) { // just need a colorfilter to exercise the corresponding imagefilter - sk_sp cf = SkColorFilter::MakeModeFilter(SK_ColorRED, SkXfermode::kSrcATop_Mode); + sk_sp cf = SkColorFilter::MakeModeFilter(SK_ColorRED, SkBlendMode::kSrcATop); sk_sp cfif = SkColorFilterImageFilter::Make(cf, nullptr); // can handle sk_sp blif = SkBlurImageFilter::Make(3, 3, nullptr); // cannot handle @@ -1858,13 +1858,13 @@ DEF_TEST(ImageFilterComplexCTM, reporter) { } recs[] = { { cfif, true }, { SkColorFilterImageFilter::Make(cf, cfif), true }, - { SkMergeImageFilter::Make(cfif, cfif), true }, + { SkMergeImageFilter::Make(cfif, cfif, SkBlendMode::kSrcOver), true }, { SkComposeImageFilter::Make(cfif, cfif), true }, { blif, false }, { SkBlurImageFilter::Make(3, 3, cfif), false }, { SkColorFilterImageFilter::Make(cf, blif), false }, - { SkMergeImageFilter::Make(cfif, blif), false }, + { SkMergeImageFilter::Make(cfif, blif, SkBlendMode::kSrcOver), false }, { SkComposeImageFilter::Make(blif, cfif), false }, }; diff --git a/tests/SRGBMipMapTest.cpp b/tests/SRGBMipMapTest.cpp index a7f846c..073f667 100644 --- a/tests/SRGBMipMapTest.cpp +++ b/tests/SRGBMipMapTest.cpp @@ -129,7 +129,7 @@ DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(SRGBMipMaps, reporter, ctxInfo) { SkRect rect = SkRect::MakeWH(SkIntToScalar(rtS), SkIntToScalar(rtS)); GrNoClip noClip; GrPaint paint; - paint.setPorterDuffXPFactory(SkXfermode::kSrc_Mode); + paint.setPorterDuffXPFactory(SkBlendMode::kSrc); GrTextureParams mipMapParams(SkShader::kRepeat_TileMode, GrTextureParams::kMipMap_FilterMode); paint.addColorTextureProcessor(texture, nullptr, SkMatrix::MakeScale(0.5f), mipMapParams); diff --git a/tests/TessellatingPathRendererTests.cpp b/tests/TessellatingPathRendererTests.cpp index 324ea4b..db3b5ea 100644 --- a/tests/TessellatingPathRendererTests.cpp +++ b/tests/TessellatingPathRendererTests.cpp @@ -254,7 +254,7 @@ static void test_path(GrRenderTargetContext* renderTargetContext, GrResourceProv GrTessellatingPathRenderer tess; GrPaint paint; - paint.setXPFactory(GrPorterDuffXPFactory::Make(SkXfermode::kSrc_Mode)); + paint.setXPFactory(GrPorterDuffXPFactory::Make(SkBlendMode::kSrc)); GrNoClip noClip; GrStyle style(SkStrokeRec::kFill_InitStyle); diff --git a/tools/debugger/SkDebugCanvas.cpp b/tools/debugger/SkDebugCanvas.cpp index ee3427d..8bdaca1 100644 --- a/tools/debugger/SkDebugCanvas.cpp +++ b/tools/debugger/SkDebugCanvas.cpp @@ -654,17 +654,27 @@ void SkDebugCanvas::onDrawTextBlob(const SkTextBlob* blob, SkScalar x, SkScalar } void SkDebugCanvas::onDrawPatch(const SkPoint cubics[12], const SkColor colors[4], - const SkPoint texCoords[4], SkXfermode* xmode, + const SkPoint texCoords[4], SK_XFERMODE_PARAM xmode, const SkPaint& paint) { - this->addDrawCommand(new SkDrawPatchCommand(cubics, colors, texCoords, xmode, paint)); +#ifdef SK_SUPPORT_LEGACY_XFERMODE_PARAM + SkBlendMode bmode = xmode ? xmode->blend() : SkBlendMode::kModulate; +#else + SkBlendMode bmode = xmode; +#endif + this->addDrawCommand(new SkDrawPatchCommand(cubics, colors, texCoords, bmode, paint)); } void SkDebugCanvas::onDrawVertices(VertexMode vmode, int vertexCount, const SkPoint vertices[], const SkPoint texs[], const SkColor colors[], - SkXfermode*, const uint16_t indices[], int indexCount, + SK_XFERMODE_PARAM xmode, const uint16_t indices[], int indexCount, const SkPaint& paint) { +#ifdef SK_SUPPORT_LEGACY_XFERMODE_PARAM + SkBlendMode bmode = xmode ? xmode->blend() : SkBlendMode::kModulate; +#else + SkBlendMode bmode = xmode; +#endif this->addDrawCommand(new SkDrawVerticesCommand(vmode, vertexCount, vertices, - texs, colors, nullptr, indices, indexCount, paint)); + texs, colors, bmode, indices, indexCount, paint)); } void SkDebugCanvas::willRestore() { diff --git a/tools/debugger/SkDebugCanvas.h b/tools/debugger/SkDebugCanvas.h index 42b6a09..b7d7f79 100644 --- a/tools/debugger/SkDebugCanvas.h +++ b/tools/debugger/SkDebugCanvas.h @@ -226,7 +226,7 @@ protected: const SkPaint& paint) override; void onDrawPatch(const SkPoint cubics[12], const SkColor colors[4], - const SkPoint texCoords[4], SkXfermode* xmode, const SkPaint& paint) override; + const SkPoint texCoords[4], SK_XFERMODE_PARAM, const SkPaint& paint) override; void onDrawPaint(const SkPaint&) override; void onDrawRect(const SkRect&, const SkPaint&) override; @@ -236,7 +236,7 @@ protected: void onDrawPoints(PointMode, size_t count, const SkPoint pts[], const SkPaint&) override; void onDrawVertices(VertexMode vmode, int vertexCount, const SkPoint vertices[], const SkPoint texs[], - const SkColor colors[], SkXfermode* xmode, + const SkColor colors[], SK_XFERMODE_PARAM, const uint16_t indices[], int indexCount, const SkPaint&) override; void onDrawPath(const SkPath&, const SkPaint&) override; diff --git a/tools/debugger/SkDrawCommand.cpp b/tools/debugger/SkDrawCommand.cpp index 3c2f051..1f0fdf7 100644 --- a/tools/debugger/SkDrawCommand.cpp +++ b/tools/debugger/SkDrawCommand.cpp @@ -2941,9 +2941,11 @@ SkDrawTextBlobCommand* SkDrawTextBlobCommand::fromJSON(Json::Value& command, } SkDrawPatchCommand::SkDrawPatchCommand(const SkPoint cubics[12], const SkColor colors[4], - const SkPoint texCoords[4], SkXfermode* xfermode, + const SkPoint texCoords[4], SkBlendMode bmode, const SkPaint& paint) - : INHERITED(kDrawPatch_OpType) { + : INHERITED(kDrawPatch_OpType) + , fBlendMode(bmode) +{ memcpy(fCubics, cubics, sizeof(fCubics)); if (colors != nullptr) { memcpy(fColors, colors, sizeof(fColors)); @@ -2957,16 +2959,13 @@ SkDrawPatchCommand::SkDrawPatchCommand(const SkPoint cubics[12], const SkColor c } else { fTexCoordsPtr = nullptr; } - if (xfermode != nullptr) { - fXfermode.reset(SkRef(xfermode)); - } fPaint = paint; fInfo.push(SkObjectParser::PaintToString(paint)); } void SkDrawPatchCommand::execute(SkCanvas* canvas) const { - canvas->drawPatch(fCubics, fColorsPtr, fTexCoordsPtr, fXfermode, fPaint); + canvas->drawPatch(fCubics, fColorsPtr, fTexCoordsPtr, fBlendMode, fPaint); } Json::Value SkDrawPatchCommand::toJSON(UrlDataManager& urlDataManager) const { @@ -2990,11 +2989,7 @@ Json::Value SkDrawPatchCommand::toJSON(UrlDataManager& urlDataManager) const { } result[SKDEBUGCANVAS_ATTRIBUTE_TEXTURECOORDS] = texCoords; } - if (fXfermode.get() != nullptr) { - Json::Value jsonXfermode; - flatten(fXfermode, &jsonXfermode, urlDataManager); - result[SKDEBUGCANVAS_ATTRIBUTE_XFERMODE] = jsonXfermode; - } + // fBlendMode return result; } @@ -3029,14 +3024,12 @@ SkDrawPatchCommand* SkDrawPatchCommand::fromJSON(Json::Value& command, else { texCoordsPtr = nullptr; } - SkAutoTUnref xfermode; - if (command.isMember(SKDEBUGCANVAS_ATTRIBUTE_XFERMODE)) { - Json::Value jsonXfermode = command[SKDEBUGCANVAS_ATTRIBUTE_XFERMODE]; - xfermode.reset((SkXfermode*) load_flattenable(jsonXfermode, urlDataManager)); - } + + SkBlendMode bmode = SkBlendMode::kSrcOver; // TODO: extract from json + SkPaint paint; extract_json_paint(command[SKDEBUGCANVAS_ATTRIBUTE_PAINT], urlDataManager, &paint); - return new SkDrawPatchCommand(cubics, colorsPtr, texCoordsPtr, xfermode, paint); + return new SkDrawPatchCommand(cubics, colorsPtr, texCoordsPtr, bmode, paint); } SkDrawRectCommand::SkDrawRectCommand(const SkRect& rect, const SkPaint& paint) @@ -3308,10 +3301,12 @@ SkDrawTextRSXformCommand* SkDrawTextRSXformCommand::fromJSON(Json::Value& comman SkDrawVerticesCommand::SkDrawVerticesCommand(SkCanvas::VertexMode vmode, int vertexCount, const SkPoint vertices[], const SkPoint texs[], - const SkColor colors[], SkXfermode* xfermode, + const SkColor colors[], SkBlendMode bmode, const uint16_t indices[], int indexCount, const SkPaint& paint) - : INHERITED(kDrawVertices_OpType) { + : INHERITED(kDrawVertices_OpType) + , fBlendMode(bmode) +{ fVmode = vmode; fVertexCount = vertexCount; @@ -3333,11 +3328,6 @@ SkDrawVerticesCommand::SkDrawVerticesCommand(SkCanvas::VertexMode vmode, int ver fColors = nullptr; } - fXfermode = xfermode; - if (fXfermode) { - fXfermode->ref(); - } - if (indexCount > 0) { fIndices = new uint16_t[indexCount]; memcpy(fIndices, indices, indexCount * sizeof(uint16_t)); @@ -3357,13 +3347,12 @@ SkDrawVerticesCommand::~SkDrawVerticesCommand() { delete [] fVertices; delete [] fTexs; delete [] fColors; - SkSafeUnref(fXfermode); delete [] fIndices; } void SkDrawVerticesCommand::execute(SkCanvas* canvas) const { canvas->drawVertices(fVmode, fVertexCount, fVertices, - fTexs, fColors, fXfermode, fIndices, + fTexs, fColors, fBlendMode, fIndices, fIndexCount, fPaint); } diff --git a/tools/debugger/SkDrawCommand.h b/tools/debugger/SkDrawCommand.h index 8d30960..54ee3c6 100644 --- a/tools/debugger/SkDrawCommand.h +++ b/tools/debugger/SkDrawCommand.h @@ -643,7 +643,7 @@ private: class SkDrawPatchCommand : public SkDrawCommand { public: SkDrawPatchCommand(const SkPoint cubics[12], const SkColor colors[4], - const SkPoint texCoords[4], SkXfermode* xmode, + const SkPoint texCoords[4], SkBlendMode bmode, const SkPaint& paint); void execute(SkCanvas* canvas) const override; Json::Value toJSON(UrlDataManager& urlDataManager) const override; @@ -655,7 +655,7 @@ private: SkColor fColors[4]; SkPoint* fTexCoordsPtr; SkPoint fTexCoords[4]; - SkAutoTUnref fXfermode; + SkBlendMode fBlendMode; SkPaint fPaint; typedef SkDrawCommand INHERITED; @@ -714,7 +714,7 @@ class SkDrawVerticesCommand : public SkDrawCommand { public: SkDrawVerticesCommand(SkCanvas::VertexMode vmode, int vertexCount, const SkPoint vertices[], const SkPoint texs[], - const SkColor colors[], SkXfermode* xfermode, + const SkColor colors[], SkBlendMode, const uint16_t indices[], int indexCount, const SkPaint& paint); virtual ~SkDrawVerticesCommand(); @@ -726,7 +726,7 @@ private: SkPoint* fVertices; SkPoint* fTexs; SkColor* fColors; - SkXfermode* fXfermode; + SkBlendMode fBlendMode; uint16_t* fIndices; int fIndexCount; SkPaint fPaint;