Simplify the gradient color stop optimizer
authorfmalita <fmalita@chromium.org>
Mon, 22 Aug 2016 13:28:57 +0000 (06:28 -0700)
committerCommit bot <commit-bot@chromium.org>
Mon, 22 Aug 2016 13:28:57 +0000 (06:28 -0700)
We're just discarding the leftmost/rightmost stops -- this can be
achieved by simply adjusting the start offset and count.

R=reed@google.com
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2265803002

Review-Url: https://codereview.chromium.org/2265803002

src/effects/gradients/SkGradientShader.cpp

index 58c0d3b..a0cbe97 100644 (file)
@@ -786,14 +786,10 @@ struct ColorStopOptimizer {
                     SkShader::kMirror_TileMode == mode ||
                     colors[0] == colors[1]) {
 
-                    fColorStorage[0] = colors[1];
-                    fColorStorage[1] = colors[2];
-                    fPosStorage[0] = 0.0f;
-                    fPosStorage[1] = 1.0f;
-
-                    fColors = fColorStorage;
-                    fPos    = fPosStorage;
-                    fCount  = 2;
+                    // Ignore the leftmost color/pos.
+                    fColors += 1;
+                    fPos    += 1;
+                    fCount   = 2;
                 }
             } else if (SkScalarNearlyEqual(pos[0], 0.0f) &&
                        SkScalarNearlyEqual(pos[1], 1.0f) &&
@@ -803,6 +799,7 @@ struct ColorStopOptimizer {
                     SkShader::kMirror_TileMode == mode ||
                     colors[1] == colors[2]) {
 
+                    // Ignore the rightmost color/pos.
                     fCount  = 2;
                 }
             }
@@ -811,9 +808,6 @@ struct ColorStopOptimizer {
     const SkColor*  fColors;
     const SkScalar* fPos;
     int             fCount;
-
-    SkColor         fColorStorage[2];
-    SkScalar        fPosStorage[2];
 };
 
 sk_sp<SkShader> SkGradientShader::MakeLinear(const SkPoint pts[2],