simplify logic in SkPerliNoiseShader for GPU when constant color
authorbsalomon <bsalomon@google.com>
Wed, 4 Mar 2015 19:03:52 +0000 (11:03 -0800)
committerCommit bot <commit-bot@chromium.org>
Wed, 4 Mar 2015 19:03:52 +0000 (11:03 -0800)
BUG=skia:3488

Review URL: https://codereview.chromium.org/974183002

src/effects/SkPerlinNoiseShader.cpp

index 6e53253..3c1bf2f 100644 (file)
@@ -961,16 +961,12 @@ bool SkPerlinNoiseShader::asFragmentProcessor(GrContext* context, const SkPaint&
     matrix.preConcat(localMatrix);
 
     if (0 == fNumOctaves) {
-        SkColor clearColor = 0;
         if (kFractalNoise_Type == fType) {
-            clearColor = SkColorSetARGB(paint.getAlpha() / 2, 127, 127, 127);
-        }
-        SkAutoTUnref<SkColorFilter> cf(SkColorFilter::CreateModeFilter(
-                                                clearColor, SkXfermode::kSrc_Mode));
-        SkTDArray<GrFragmentProcessor*> array;
-        if (cf->asFragmentProcessors(context, &array)) {
-            SkASSERT(1 == array.count());   // modecolorfilter only returns one
-            *fp = array[0];                 // transfer ownership to fp
+            uint32_t alpha = paint.getAlpha() >> 1;
+            uint32_t rgb = alpha >> 1;
+            *paintColor = GrColorPackRGBA(rgb, rgb, rgb, alpha);
+        } else {
+            *paintColor = 0;
         }
         return true;
     }