Index: gm/gradients.cpp |
diff --git a/gm/gradients.cpp b/gm/gradients.cpp |
index c1847d446243b18558c7b25e0684eddfe492b0d8..5fb3465913bf345326473a8baf89364f7b5cc72b 100644 |
--- a/gm/gradients.cpp |
+++ b/gm/gradients.cpp |
@@ -7,6 +7,7 @@ |
#include "gm.h" |
#include "SkGradientShader.h" |
+#include "SkLinearGradient.h" |
namespace skiagm { |
@@ -593,9 +594,16 @@ DEF_GM( return new LinearGradientGM(true); ) |
DEF_GM( return new LinearGradientGM(false); ) |
class LinearGradientTinyGM : public GM { |
+public: |
+ LinearGradientTinyGM(uint32_t flags, const char* suffix = nullptr) |
+ : fName("linear_gradient_tiny") |
+ , fFlags(flags) { |
+ fName.append(suffix); |
+ } |
+ |
protected: |
SkString onShortName() override { |
- return SkString("linear_gradient_tiny"); |
+ return fName; |
} |
SkISize onISize() override { |
@@ -631,7 +639,7 @@ protected: |
SkAutoCanvasRestore acr(canvas, true); |
SkAutoTUnref<SkShader> gradient( |
SkGradientShader::CreateLinear(configs[i].pts, colors, configs[i].pos, kStopCount, |
- SkShader::kClamp_TileMode)); |
+ SkShader::kClamp_TileMode, fFlags, nullptr)); |
canvas->translate(kRectSize * ((i % 4) * 1.5f + 0.25f), |
kRectSize * ((i / 4) * 1.5f + 0.25f)); |
@@ -642,9 +650,12 @@ protected: |
private: |
typedef GM INHERITED; |
-}; |
-DEF_GM( return new LinearGradientTinyGM(); ) |
+ SkString fName; |
+ uint32_t fFlags; |
+}; |
+DEF_GM( return new LinearGradientTinyGM(0); ) |
+DEF_GM( return new LinearGradientTinyGM(SkLinearGradient::kForce4fContext_PrivateFlag, "_4f"); ) |
} |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
@@ -736,3 +747,35 @@ DEF_SIMPLE_GM(gradients_dup_color_stops, canvas, 704, 564) { |
} |
} |
} |
+ |
+static void draw_many_stops(SkCanvas* canvas, uint32_t flags) { |
+ const unsigned kStopCount = 200; |
+ const SkPoint pts[] = { {50, 50}, {450, 465}}; |
+ |
+ SkColor colors[kStopCount]; |
+ for (unsigned i = 0; i < kStopCount; i++) { |
+ switch (i % 5) { |
+ case 0: colors[i] = SK_ColorRED; break; |
+ case 1: colors[i] = SK_ColorGREEN; break; |
+ case 2: colors[i] = SK_ColorGREEN; break; |
+ case 3: colors[i] = SK_ColorBLUE; break; |
+ case 4: colors[i] = SK_ColorRED; break; |
+ } |
+ } |
+ |
+ SkAutoTUnref<SkShader> shader(SkGradientShader::CreateLinear( |
+ pts, colors, nullptr, SK_ARRAY_COUNT(colors), SkShader::kClamp_TileMode, flags, nullptr)); |
+ |
+ SkPaint p; |
+ p.setShader(shader); |
+ |
+ canvas->drawRect(SkRect::MakeXYWH(0, 0, 500, 500), p); |
+} |
+ |
+DEF_SIMPLE_GM(gradient_many_stops, canvas, 500, 500) { |
+ draw_many_stops(canvas, 0); |
+} |
+ |
+DEF_SIMPLE_GM(gradient_many_stops_4f, canvas, 500, 500) { |
+ draw_many_stops(canvas, SkLinearGradient::kForce4fContext_PrivateFlag); |
+} |