From 44df651ebefc284acc2f66425dff3ea0b0e14b36 Mon Sep 17 00:00:00 2001 From: msarett Date: Thu, 25 Aug 2016 13:54:30 -0700 Subject: Add drawRegion() API to SkCanvas This will allow us to optimize for the RectGrid macrobench. Currently, SkiaGL is much slower than OpenGL. SkiaGL 12 items/s OpenGL 160 items/s This contains everything except for the fast implementation on GPU. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2277053002 Review-Url: https://codereview.chromium.org/2277053002 --- gm/drawregionmodes.cpp | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 gm/drawregionmodes.cpp (limited to 'gm/drawregionmodes.cpp') diff --git a/gm/drawregionmodes.cpp b/gm/drawregionmodes.cpp new file mode 100644 index 0000000000..be1c2d20e0 --- /dev/null +++ b/gm/drawregionmodes.cpp @@ -0,0 +1,78 @@ +/* + * Copyright 2016 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "gm.h" +#include "SkBlurMaskFilter.h" +#include "SkCanvas.h" +#include "SkDashPathEffect.h" +#include "SkGradientShader.h" +#include "SkImageFilter.h" + +class DrawRegionModesGM : public skiagm::GM { +public: + DrawRegionModesGM() {} + +protected: + SkString onShortName() override { + return SkString("drawregionmodes"); + } + + SkISize onISize() override { + return SkISize::Make(375, 500); + } + + void onOnceBeforeDraw() override { + fRegion.op( 50, 50, 100, 100, SkRegion::kUnion_Op); + fRegion.op( 50, 100, 150, 150, SkRegion::kUnion_Op); + } + + void onDraw(SkCanvas* canvas) override { + canvas->clear(SK_ColorGREEN); + + SkPaint paint; + paint.setStyle(SkPaint::kFill_Style); + paint.setColor(0xFFFF0000); + paint.setAntiAlias(true); + + canvas->translate(-50.0f, 75.0f); + canvas->rotate(-45.0f); + canvas->drawRegion(fRegion, paint); + + canvas->translate(125.0f, 125.0f); + paint.setImageFilter(SkImageFilter::MakeBlur(5.0f, 5.0f, nullptr, nullptr)); + canvas->drawRegion(fRegion, paint); + + canvas->translate(-125.0f, 125.0f); + paint.setImageFilter(nullptr); + SkRect occluder = SkRect::MakeEmpty(); + paint.setMaskFilter(SkBlurMaskFilter::Make(kNormal_SkBlurStyle, 5.0f, occluder, 0)); + canvas->drawRegion(fRegion, paint); + + canvas->translate(-125.0f, -125.0f); + paint.setMaskFilter(nullptr); + paint.setStyle(SkPaint::kStroke_Style); + float intervals[] = { 5.0f, 5.0f }; + paint.setPathEffect(SkDashPathEffect::Make(intervals, 2, 2.5f)); + canvas->drawRegion(fRegion, paint); + + canvas->setMatrix(SkMatrix::I()); + canvas->translate(100, 325); + paint.setPathEffect(nullptr); + paint.setStyle(SkPaint::kFill_Style); + SkPoint points[] = { SkPoint::Make(50.0f, 50.0f), SkPoint::Make(150.0f, 150.0f) }; + SkColor colors[] = { SK_ColorBLUE, SK_ColorYELLOW }; + paint.setShader(SkGradientShader::MakeLinear(points, colors, nullptr, 2, + SkShader::kClamp_TileMode)); + canvas->drawRegion(fRegion, paint); + } + + SkRegion fRegion; + +private: + typedef skiagm::GM INHERITED; +}; +DEF_GM( return new DrawRegionModesGM; ) -- cgit v1.2.3