| Index: gm/gradients.cpp
|
| diff --git a/gm/gradients.cpp b/gm/gradients.cpp
|
| index 9438c33bdc166d38391bb4c1ddcc7a9aacdedc78..3cba41cc9d4d2c5e55ebca16fed7393cf46bb2cb 100644
|
| --- a/gm/gradients.cpp
|
| +++ b/gm/gradients.cpp
|
| @@ -367,7 +367,7 @@ public:
|
|
|
| protected:
|
| SkString onShortName() { return SkString("radial_gradient2"); }
|
| - virtual SkISize onISize() { return make_isize(400, 400); }
|
| + virtual SkISize onISize() { return make_isize(800, 400); }
|
| void drawBG(SkCanvas* canvas) {
|
| canvas->drawColor(0xFF000000);
|
| }
|
| @@ -388,24 +388,35 @@ protected:
|
| SkPoint center;
|
| center.set(cx, cy);
|
|
|
| - SkAutoTUnref<SkShader> sweep(
|
| - SkGradientShader::CreateSweep(cx, cy, sweep_colors,
|
| - NULL, SK_ARRAY_COUNT(sweep_colors)));
|
| - SkAutoTUnref<SkShader> radial1(
|
| - SkGradientShader::CreateRadial(center, radius, colors1,
|
| - NULL, SK_ARRAY_COUNT(colors1),
|
| - SkShader::kClamp_TileMode));
|
| - SkAutoTUnref<SkShader> radial2(
|
| - SkGradientShader::CreateRadial(center, radius, colors2,
|
| - NULL, SK_ARRAY_COUNT(colors2),
|
| - SkShader::kClamp_TileMode));
|
| - paint1.setShader(sweep);
|
| - paint2.setShader(radial1);
|
| - paint3.setShader(radial2);
|
| -
|
| - canvas->drawCircle(cx, cy, radius, paint1);
|
| - canvas->drawCircle(cx, cy, radius, paint3);
|
| - canvas->drawCircle(cx, cy, radius, paint2);
|
| + // 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[] = { 0, SkGradientShader::kInterpolateColorsInPremul_Flag };
|
| +
|
| + for (size_t i = 0; i < SK_ARRAY_COUNT(flags); i++) {
|
| + SkAutoTUnref<SkShader> sweep(
|
| + SkGradientShader::CreateSweep(cx, cy, sweep_colors,
|
| + NULL, SK_ARRAY_COUNT(sweep_colors),
|
| + NULL, flags[i]));
|
| + SkAutoTUnref<SkShader> radial1(
|
| + SkGradientShader::CreateRadial(center, radius, colors1,
|
| + NULL, SK_ARRAY_COUNT(colors1),
|
| + SkShader::kClamp_TileMode,
|
| + NULL, flags[i]));
|
| + SkAutoTUnref<SkShader> radial2(
|
| + SkGradientShader::CreateRadial(center, radius, colors2,
|
| + NULL, SK_ARRAY_COUNT(colors2),
|
| + SkShader::kClamp_TileMode,
|
| + NULL, flags[i]));
|
| + paint1.setShader(sweep);
|
| + paint2.setShader(radial1);
|
| + paint3.setShader(radial2);
|
| +
|
| + canvas->drawCircle(cx, cy, radius, paint1);
|
| + canvas->drawCircle(cx, cy, radius, paint3);
|
| + canvas->drawCircle(cx, cy, radius, paint2);
|
| +
|
| + canvas->translate(400, 0);
|
| + }
|
| }
|
|
|
| private:
|
|
|