Index: gm/gradients.cpp |
diff --git a/gm/gradients.cpp b/gm/gradients.cpp |
index 9438c33bdc166d38391bb4c1ddcc7a9aacdedc78..e7964fc9ecceba24fcff483545861263400cc3e4 100644 |
--- a/gm/gradients.cpp |
+++ b/gm/gradients.cpp |
@@ -363,10 +363,13 @@ private: |
class RadialGradient2GM : public GM { |
public: |
- RadialGradient2GM() {} |
+ explicit RadialGradient2GM(bool premulFirst) : fPremulFirst(premulFirst) {} |
protected: |
- SkString onShortName() { return SkString("radial_gradient2"); } |
+ SkString onShortName() { |
+ return SkString(fPremulFirst ? "radial_gradient2_premul_then_interp" |
+ : "radial_gradient2_interp_then_premul"); |
+ } |
virtual SkISize onISize() { return make_isize(400, 400); } |
void drawBG(SkCanvas* canvas) { |
canvas->drawColor(0xFF000000); |
@@ -388,17 +391,24 @@ protected: |
SkPoint center; |
center.set(cx, cy); |
+ // We can either interpolate endpoints and premultiply each point (default, more precision), |
+ // or premultiply the endpoints first, avoiding the need to premultiply each point (cheap). |
+ const uint32_t flags = fPremulFirst ? SkGradientShader::kInterpolateColorsInPremul_Flag : 0; |
+ |
SkAutoTUnref<SkShader> sweep( |
SkGradientShader::CreateSweep(cx, cy, sweep_colors, |
- NULL, SK_ARRAY_COUNT(sweep_colors))); |
+ NULL, SK_ARRAY_COUNT(sweep_colors), |
+ NULL, flags)); |
SkAutoTUnref<SkShader> radial1( |
SkGradientShader::CreateRadial(center, radius, colors1, |
NULL, SK_ARRAY_COUNT(colors1), |
- SkShader::kClamp_TileMode)); |
+ SkShader::kClamp_TileMode, |
+ NULL, flags)); |
SkAutoTUnref<SkShader> radial2( |
SkGradientShader::CreateRadial(center, radius, colors2, |
NULL, SK_ARRAY_COUNT(colors2), |
- SkShader::kClamp_TileMode)); |
+ SkShader::kClamp_TileMode, |
+ NULL, flags)); |
paint1.setShader(sweep); |
paint2.setShader(radial1); |
paint3.setShader(radial2); |
@@ -409,6 +419,7 @@ protected: |
} |
private: |
+ bool fPremulFirst; |
typedef GM INHERITED; |
}; |
@@ -432,6 +443,9 @@ static GMRegistry reg5(MyFactory5); |
static GM* MyFactory6(void*) { return new GradientsViewPerspectiveGM; } |
static GMRegistry reg6(MyFactory6); |
-static GM* MyFactory7(void*) { return new RadialGradient2GM; } |
+static GM* MyFactory7(void*) { return new RadialGradient2GM(true); } |
reed1
2013/09/11 14:33:27
nitties:
1. If we're going to have 2 gms, might b
|
static GMRegistry reg7(MyFactory7); |
+ |
+static GM* MyFactory8(void*) { return new RadialGradient2GM(false); } |
+static GMRegistry reg8(MyFactory8); |
} |