add localmatrix parameter to shader's asNewEffect
authorcommit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>
Fri, 9 May 2014 20:28:11 +0000 (20:28 +0000)
committercommit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>
Fri, 9 May 2014 20:28:11 +0000 (20:28 +0000)
BUG=skia:
R=bsalomon@google.com, dominikg@chromium.org

Author: reed@google.com

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

git-svn-id: http://skia.googlecode.com/svn/trunk@14686 2bbb7eff-a529-9590-31e7-b0007b416f81

22 files changed:
include/core/SkShader.h
include/effects/SkPerlinNoiseShader.h
src/core/SkBitmapProcShader.cpp
src/core/SkBitmapProcShader.h
src/core/SkLocalMatrixShader.cpp
src/core/SkPictureShader.cpp
src/core/SkPictureShader.h
src/core/SkShader.cpp
src/effects/SkPerlinNoiseShader.cpp
src/effects/gradients/SkLinearGradient.cpp
src/effects/gradients/SkLinearGradient.h
src/effects/gradients/SkRadialGradient.cpp
src/effects/gradients/SkRadialGradient.h
src/effects/gradients/SkSweepGradient.cpp
src/effects/gradients/SkSweepGradient.h
src/effects/gradients/SkTwoPointConicalGradient.cpp
src/effects/gradients/SkTwoPointConicalGradient.h
src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp
src/effects/gradients/SkTwoPointConicalGradient_gpu.h
src/effects/gradients/SkTwoPointRadialGradient.cpp
src/effects/gradients/SkTwoPointRadialGradient.h
src/gpu/SkGpuDevice.cpp

index 2f3764c0be032d9e566393fadebeda59bd1c3078..a9ecad84c19c5cca89d287facc67a3bac5ef3ba8 100644 (file)
@@ -360,7 +360,8 @@ public:
      *  color. The GrContext may be used by the effect to create textures. The GPU device does not
      *  call createContext. Instead we pass the SkPaint here in case the shader needs paint info.
      */
-    virtual GrEffectRef* asNewEffect(GrContext* context, const SkPaint& paint) const;
+    virtual GrEffectRef* asNewEffect(GrContext* context, const SkPaint& paint,
+                                     const SkMatrix* localMatrixOrNull) const;
 
     //////////////////////////////////////////////////////////////////////////
     //  Factory methods for stock shaders
index 5082a07f3b3018092eb16312c6439f16acc23c27..63e74155a64920ef4483d1b06ae576a11a8221f2 100644 (file)
@@ -95,7 +95,8 @@ public:
         typedef SkShader::Context INHERITED;
     };
 
-    virtual GrEffectRef* asNewEffect(GrContext* context, const SkPaint&) const SK_OVERRIDE;
+    virtual GrEffectRef* asNewEffect(GrContext* context, const SkPaint&,
+                                     const SkMatrix*) const SK_OVERRIDE;
 
     SK_TO_STRING_OVERRIDE()
     SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkPerlinNoiseShader)
index 00d938be2729c4559da807437f52b12d1dc82045..d726a46f118e960c583a30bc6fd542d6a87ec3e9 100644 (file)
@@ -393,7 +393,8 @@ static SkScalar get_combined_min_stretch(const SkMatrix& viewMatrix, const SkMat
     }
 }
 
-GrEffectRef* SkBitmapProcShader::asNewEffect(GrContext* context, const SkPaint& paint) const {
+GrEffectRef* SkBitmapProcShader::asNewEffect(GrContext* context, const SkPaint& paint,
+                                             const SkMatrix* localMatrix) const {
     SkMatrix matrix;
     matrix.setIDiv(fRawBitmap.width(), fRawBitmap.height());
 
@@ -401,6 +402,13 @@ GrEffectRef* SkBitmapProcShader::asNewEffect(GrContext* context, const SkPaint&
     if (!this->getLocalMatrix().invert(&lmInverse)) {
         return NULL;
     }
+    if (localMatrix) {
+        SkMatrix inv;
+        if (!localMatrix->invert(&inv)) {
+            return NULL;
+        }
+        lmInverse.postConcat(inv);
+    }
     matrix.preConcat(lmInverse);
 
     SkShader::TileMode tm[] = {
index 8d312564696a116c5f25c32e0501a3a380f59215..80e4550279ea2a1d8a8ad2630d28587a8b6b9f46 100644 (file)
@@ -31,7 +31,7 @@ public:
     SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkBitmapProcShader)
 
 #if SK_SUPPORT_GPU
-    GrEffectRef* asNewEffect(GrContext*, const SkPaint&) const SK_OVERRIDE;
+    GrEffectRef* asNewEffect(GrContext*, const SkPaint&, const SkMatrix*) const SK_OVERRIDE;
 #endif
 
     class BitmapProcShaderContext : public SkShader::Context {
index 802e72ef3f633717eaac6eac3add13f613a46b82..7af025c442df5a67508c56f8357b7c469c0075b2 100644 (file)
@@ -30,8 +30,13 @@ public:
     }
 
     // TODO: need to augment this API to pass in a localmatrix (which we can augment)
-    virtual GrEffectRef* asNewEffect(GrContext* ctx, const SkPaint& paint) const SK_OVERRIDE {
-        return fProxyShader->asNewEffect(ctx, paint);
+    virtual GrEffectRef* asNewEffect(GrContext* ctx, const SkPaint& paint,
+                                     const SkMatrix* localMatrix) const SK_OVERRIDE {
+        SkMatrix tmp = fProxyLocalMatrix;
+        if (localMatrix) {
+            tmp.preConcat(*localMatrix);
+        }
+        return fProxyShader->asNewEffect(ctx, paint, &tmp);
     }
 
     virtual SkShader* refAsALocalMatrixShader(SkMatrix* localMatrix) const SK_OVERRIDE {
index 9655e85bd19e3a553b074a73187efadc5e655886..300a65329be41c719b67bb0b15aa8b0995e4de72 100644 (file)
@@ -192,11 +192,12 @@ void SkPictureShader::toString(SkString* str) const {
 #endif
 
 #if SK_SUPPORT_GPU
-GrEffectRef* SkPictureShader::asNewEffect(GrContext* context, const SkPaint& paint) const {
-    SkAutoTUnref<SkShader> bitmapShader(this->refBitmapShader(context->getMatrix(), NULL));
+GrEffectRef* SkPictureShader::asNewEffect(GrContext* context, const SkPaint& paint,
+                                          const SkMatrix* localMatrix) const {
+    SkAutoTUnref<SkShader> bitmapShader(this->refBitmapShader(context->getMatrix(), localMatrix));
     if (!bitmapShader) {
         return NULL;
     }
-    return bitmapShader->asNewEffect(context, paint);
+    return bitmapShader->asNewEffect(context, paint, NULL);
 }
 #endif
index 27fb674b01818ff285133e49cdf3cb8fc8c0e88a..936a69ebe011150f2dd05e9692f80ed6c9e55606 100644 (file)
@@ -30,7 +30,7 @@ public:
     SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkPictureShader)
 
 #if SK_SUPPORT_GPU
-    GrEffectRef* asNewEffect(GrContext*, const SkPaint&) const SK_OVERRIDE;
+    GrEffectRef* asNewEffect(GrContext*, const SkPaint&, const SkMatrix*) const SK_OVERRIDE;
 #endif
 
 protected:
index ebe1a74cc2e6a7e11c9ec50de104348c79b5e3de..75a5fdbd3680f8e805d45a4b67d5d6763cb592d0 100644 (file)
@@ -211,7 +211,7 @@ SkShader::GradientType SkShader::asAGradient(GradientInfo* info) const {
     return kNone_GradientType;
 }
 
-GrEffectRef* SkShader::asNewEffect(GrContext*, const SkPaint&) const {
+GrEffectRef* SkShader::asNewEffect(GrContext*, const SkPaint&, const SkMatrix*) const {
     return NULL;
 }
 
index c6d61180029b30d1e28065e46a283387032acf7d..101537798e6842a795d7f6c932491de3df0aab96 100644 (file)
@@ -723,7 +723,7 @@ GrEffectRef* GrPerlinNoiseEffect::TestCreate(SkRandom* random,
                                              stitchTiles ? &tileSize : NULL);
 
     SkPaint paint;
-    GrEffectRef* effect = shader->asNewEffect(context, paint);
+    GrEffectRef* effect = shader->asNewEffect(context, paint, NULL);
 
     SkDELETE(shader);
 
@@ -1275,9 +1275,15 @@ void GrGLSimplexNoise::setData(const GrGLUniformManager& uman, const GrDrawEffec
 
 /////////////////////////////////////////////////////////////////////
 
-GrEffectRef* SkPerlinNoiseShader::asNewEffect(GrContext* context, const SkPaint& paint) const {
+GrEffectRef* SkPerlinNoiseShader::asNewEffect(GrContext* context, const SkPaint& paint,
+                                              const SkMatrix* externalLocalMatrix) const {
     SkASSERT(NULL != context);
 
+    SkMatrix localMatrix = this->getLocalMatrix();
+    if (externalLocalMatrix) {
+        localMatrix.preConcat(*externalLocalMatrix);
+    }
+
     if (0 == fNumOctaves) {
         SkColor clearColor = 0;
         if (kFractalNoise_Type == fType) {
@@ -1309,7 +1315,7 @@ GrEffectRef* SkPerlinNoiseShader::asNewEffect(GrContext* context, const SkPaint&
                                     fNumOctaves, fStitchTiles,
                                     fPaintingData->fStitchDataInit,
                                     permutationsTexture, noiseTexture,
-                                    this->getLocalMatrix(), paint.getAlpha()) :
+                                    localMatrix, paint.getAlpha()) :
         NULL;
 
     // Unlock immediately, this is not great, but we don't have a way of
@@ -1328,7 +1334,7 @@ GrEffectRef* SkPerlinNoiseShader::asNewEffect(GrContext* context, const SkPaint&
 
 #else
 
-GrEffectRef* SkPerlinNoiseShader::asNewEffect(GrContext*, const SkPaint&) const {
+GrEffectRef* SkPerlinNoiseShader::asNewEffect(GrContext*, const SkPaint&, const SkMatrix*) const {
     SkDEBUGFAIL("Should not call in GPU-less build");
     return NULL;
 }
index f37759c1a94ff416b8ce8b0e19444409fcd7e861..4fe65470aeb6b407f778687332350690e85e5942 100644 (file)
@@ -527,7 +527,7 @@ GrEffectRef* GrLinearGradient::TestCreate(SkRandom* random,
                                                                  colors, stops, colorCount,
                                                                  tm));
     SkPaint paint;
-    return shader->asNewEffect(context, paint);
+    return shader->asNewEffect(context, paint, NULL);
 }
 
 /////////////////////////////////////////////////////////////////////
@@ -547,12 +547,20 @@ void GrGLLinearGradient::emitCode(GrGLShaderBuilder* builder,
 
 /////////////////////////////////////////////////////////////////////
 
-GrEffectRef* SkLinearGradient::asNewEffect(GrContext* context, const SkPaint&) const {
+GrEffectRef* SkLinearGradient::asNewEffect(GrContext* context, const SkPaint&,
+                                           const SkMatrix* localMatrix) const {
     SkASSERT(NULL != context);
     SkMatrix matrix;
     if (!this->getLocalMatrix().invert(&matrix)) {
         return NULL;
     }
+    if (localMatrix) {
+        SkMatrix inv;
+        if (!localMatrix->invert(&inv)) {
+            return NULL;
+        }
+        matrix.postConcat(inv);
+    }
     matrix.postConcat(fPtsToUnit);
     return GrLinearGradient::Create(context, *this, matrix, fTileMode);
 }
index e892fe33d0b9ee0e80542552997acc1cb3081601..432dac0ff8fff73f715556b5219826dc6ba0d19d 100644 (file)
@@ -30,7 +30,7 @@ public:
 
     virtual BitmapType asABitmap(SkBitmap*, SkMatrix*, TileMode*) const SK_OVERRIDE;
     virtual GradientType asAGradient(GradientInfo* info) const SK_OVERRIDE;
-    virtual GrEffectRef* asNewEffect(GrContext* context, const SkPaint&) const SK_OVERRIDE;
+    virtual GrEffectRef* asNewEffect(GrContext*, const SkPaint&, const SkMatrix*) const SK_OVERRIDE;
 
     SK_TO_STRING_OVERRIDE()
     SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkLinearGradient)
index e379f36c9577f33490e6ab9b0d86d34aa7835b2b..ce4c16a6543ec22b0eefdda1a99eb60f03165891 100644 (file)
@@ -538,7 +538,7 @@ GrEffectRef* GrRadialGradient::TestCreate(SkRandom* random,
                                                                  colors, stops, colorCount,
                                                                  tm));
     SkPaint paint;
-    return shader->asNewEffect(context, paint);
+    return shader->asNewEffect(context, paint, NULL);
 }
 
 /////////////////////////////////////////////////////////////////////
@@ -559,13 +559,21 @@ void GrGLRadialGradient::emitCode(GrGLShaderBuilder* builder,
 
 /////////////////////////////////////////////////////////////////////
 
-GrEffectRef* SkRadialGradient::asNewEffect(GrContext* context, const SkPaint&) const {
+GrEffectRef* SkRadialGradient::asNewEffect(GrContext* context, const SkPaint&,
+                                           const SkMatrix* localMatrix) const {
     SkASSERT(NULL != context);
 
     SkMatrix matrix;
     if (!this->getLocalMatrix().invert(&matrix)) {
         return NULL;
     }
+    if (localMatrix) {
+        SkMatrix inv;
+        if (!localMatrix->invert(&inv)) {
+            return NULL;
+        }
+        matrix.postConcat(inv);
+    }
     matrix.postConcat(fPtsToUnit);
     return GrRadialGradient::Create(context, *this, matrix, fTileMode);
 }
index 2c60ba5e0816d90908cf5e3e29175f7ade5946db..aade31ef524886eaf514e5d09b21fd8d372e4268 100644 (file)
@@ -33,7 +33,7 @@ public:
                                  SkMatrix* matrix,
                                  TileMode* xy) const SK_OVERRIDE;
     virtual GradientType asAGradient(GradientInfo* info) const SK_OVERRIDE;
-    virtual GrEffectRef* asNewEffect(GrContext* context, const SkPaint&) const SK_OVERRIDE;
+    virtual GrEffectRef* asNewEffect(GrContext*, const SkPaint&, const SkMatrix*) const SK_OVERRIDE;
 
     SK_TO_STRING_OVERRIDE()
     SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkRadialGradient)
index 81ebb3441eb13159399ce771d05c0a5e3402953d..ba43571c9b7afea88ab518b3a2888933d37ae945 100644 (file)
@@ -247,7 +247,7 @@ GrEffectRef* GrSweepGradient::TestCreate(SkRandom* random,
     SkAutoTUnref<SkShader> shader(SkGradientShader::CreateSweep(center.fX, center.fY,
                                                                 colors, stops, colorCount));
     SkPaint paint;
-    return shader->asNewEffect(context, paint);
+    return shader->asNewEffect(context, paint, NULL);
 }
 
 /////////////////////////////////////////////////////////////////////
@@ -279,11 +279,19 @@ void GrGLSweepGradient::emitCode(GrGLShaderBuilder* builder,
 
 /////////////////////////////////////////////////////////////////////
 
-GrEffectRef* SkSweepGradient::asNewEffect(GrContext* context, const SkPaint&) const {
+GrEffectRef* SkSweepGradient::asNewEffect(GrContext* context, const SkPaint&,
+                                          const SkMatrix* localMatrix) const {
     SkMatrix matrix;
     if (!this->getLocalMatrix().invert(&matrix)) {
         return NULL;
     }
+    if (localMatrix) {
+        SkMatrix inv;
+        if (!localMatrix->invert(&inv)) {
+            return NULL;
+        }
+        matrix.postConcat(inv);
+    }
     matrix.postConcat(fPtsToUnit);
     return GrSweepGradient::Create(context, *this, matrix);
 }
index 36cdd6381144fc8393c8147d858985f973781fea..2f798e87a09eb7d2578328139092a0303be6411f 100644 (file)
@@ -35,7 +35,7 @@ public:
 
     virtual GradientType asAGradient(GradientInfo* info) const SK_OVERRIDE;
 
-    virtual GrEffectRef* asNewEffect(GrContext* context, const SkPaint&) const SK_OVERRIDE;
+    virtual GrEffectRef* asNewEffect(GrContext*, const SkPaint&, const SkMatrix*) const SK_OVERRIDE;
 
     SK_TO_STRING_OVERRIDE()
     SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkSweepGradient)
index 574df08294fb5cdbb2d9de0cbdd760e6f252c39b..cbe9e83a96e5d7abbf3c10e76471ac06d9e33019 100644 (file)
@@ -380,11 +380,12 @@ void SkTwoPointConicalGradient::flatten(
 
 #if SK_SUPPORT_GPU
 
-GrEffectRef* SkTwoPointConicalGradient::asNewEffect(GrContext* context, const SkPaint&) const {
+GrEffectRef* SkTwoPointConicalGradient::asNewEffect(GrContext* context, const SkPaint&,
+                                                    const SkMatrix* localMatrix) const {
     SkASSERT(NULL != context);
     SkASSERT(fPtsToUnit.isIdentity());
 
-    return Gr2PtConicalGradientEffect::Create(context, *this, fTileMode);
+    return Gr2PtConicalGradientEffect::Create(context, *this, fTileMode, localMatrix);
 }
 
 #else
index 85e0bc0b4eccd7747e785d27bb1a72fcfcbf9396..78998a8d98ada974a6fe3b48bcd322d1fd6d78f8 100644 (file)
@@ -65,7 +65,7 @@ public:
                                  SkMatrix* matrix,
                                  TileMode* xy) const;
     virtual SkShader::GradientType asAGradient(GradientInfo* info) const  SK_OVERRIDE;
-    virtual GrEffectRef* asNewEffect(GrContext* context, const SkPaint& paint) const SK_OVERRIDE;
+    virtual GrEffectRef* asNewEffect(GrContext*, const SkPaint&, const SkMatrix*) const SK_OVERRIDE;
     virtual bool isOpaque() const SK_OVERRIDE;
 
     SkScalar getCenterX1() const { return SkPoint::Distance(fCenter1, fCenter2); }
index 7986d82b961656f50428ee7493b3a1b57b1306c5..23fee850f5a3e4fda11937c00ce5ce9279b29d22 100644 (file)
@@ -199,7 +199,7 @@ GrEffectRef* Edge2PtConicalEffect::TestCreate(SkRandom* random,
                                                                           colors, stops, colorCount,
                                                                           tm));
     SkPaint paint;
-    return shader->asNewEffect(context, paint);
+    return shader->asNewEffect(context, paint, NULL);
 }
 
 GLEdge2PtConicalEffect::GLEdge2PtConicalEffect(const GrBackendEffectFactory& factory,
@@ -470,7 +470,7 @@ GrEffectRef* FocalOutside2PtConicalEffect::TestCreate(SkRandom* random,
                                                                           colors, stops, colorCount,
                                                                           tm));
     SkPaint paint;
-    return shader->asNewEffect(context, paint);
+    return shader->asNewEffect(context, paint, NULL);
 }
 
 GLFocalOutside2PtConicalEffect::GLFocalOutside2PtConicalEffect(const GrBackendEffectFactory& factory,
@@ -679,7 +679,7 @@ GrEffectRef* FocalInside2PtConicalEffect::TestCreate(SkRandom* random,
                                                                           colors, stops, colorCount,
                                                                           tm));
     SkPaint paint;
-    return shader->asNewEffect(context, paint);
+    return shader->asNewEffect(context, paint, NULL);
 }
 
 GLFocalInside2PtConicalEffect::GLFocalInside2PtConicalEffect(const GrBackendEffectFactory& factory,
@@ -920,7 +920,7 @@ GrEffectRef* CircleInside2PtConicalEffect::TestCreate(SkRandom* random,
                                                                           colors, stops, colorCount,
                                                                           tm));
     SkPaint paint;
-    return shader->asNewEffect(context, paint);
+    return shader->asNewEffect(context, paint, NULL);
 }
 
 GLCircleInside2PtConicalEffect::GLCircleInside2PtConicalEffect(const GrBackendEffectFactory& factory,
@@ -1148,7 +1148,7 @@ GrEffectRef* CircleOutside2PtConicalEffect::TestCreate(SkRandom* random,
                                                                           colors, stops, colorCount,
                                                                           tm));
     SkPaint paint;
-    return shader->asNewEffect(context, paint);
+    return shader->asNewEffect(context, paint, NULL);
 }
 
 GLCircleOutside2PtConicalEffect::GLCircleOutside2PtConicalEffect(const GrBackendEffectFactory& factory,
@@ -1267,11 +1267,19 @@ GrGLEffect::EffectKey GLCircleOutside2PtConicalEffect::GenKey(const GrDrawEffect
 
 GrEffectRef* Gr2PtConicalGradientEffect::Create(GrContext* ctx,
                                                 const SkTwoPointConicalGradient& shader,
-                                                SkShader::TileMode tm) {
+                                                SkShader::TileMode tm,
+                                                const SkMatrix* localMatrix) {
     SkMatrix matrix;
     if (!shader.getLocalMatrix().invert(&matrix)) {
         return NULL;
     }
+    if (localMatrix) {
+        SkMatrix inv;
+        if (!localMatrix->invert(&inv)) {
+            return NULL;
+        }
+        matrix.postConcat(inv);
+    }
 
     if (shader.getStartRadius() < kErrorTol) {
         SkScalar focalX;
index f8c0493dd214dfa20a6e0bbf58ca791677aff7b6..2b0f0612d782838bb99a8157694f659000ca72cc 100644 (file)
@@ -19,7 +19,7 @@ namespace Gr2PtConicalGradientEffect {
      * shader passed in.
      */
     GrEffectRef* Create(GrContext* ctx, const SkTwoPointConicalGradient& shader,
-                        SkShader::TileMode tm);
+                        SkShader::TileMode tm, const SkMatrix* localMatrix);
 };
 
 #endif
index d85be5d3bab053e407e4b0ee4d4df266c328166d..ac0b0bdf1c8140ef66487b07b82901c0b251e8fa 100644 (file)
@@ -530,7 +530,7 @@ GrEffectRef* GrRadial2Gradient::TestCreate(SkRandom* random,
                                                                          colors, stops, colorCount,
                                                                          tm));
     SkPaint paint;
-    return shader->asNewEffect(context, paint);
+    return shader->asNewEffect(context, paint, NULL);
 }
 
 /////////////////////////////////////////////////////////////////////
@@ -670,13 +670,21 @@ GrGLEffect::EffectKey GrGLRadial2Gradient::GenKey(const GrDrawEffect& drawEffect
 
 /////////////////////////////////////////////////////////////////////
 
-GrEffectRef* SkTwoPointRadialGradient::asNewEffect(GrContext* context, const SkPaint&) const {
+GrEffectRef* SkTwoPointRadialGradient::asNewEffect(GrContext* context, const SkPaint&,
+                                                   const SkMatrix* localMatrix) const {
     SkASSERT(NULL != context);
     // invert the localM, translate to center1 (fPtsToUni), rotate so center2 is on x axis.
     SkMatrix matrix;
     if (!this->getLocalMatrix().invert(&matrix)) {
         return NULL;
     }
+    if (localMatrix) {
+        SkMatrix inv;
+        if (!localMatrix->invert(&inv)) {
+            return NULL;
+        }
+        matrix.postConcat(inv);
+    }
     matrix.postConcat(fPtsToUnit);
 
     SkScalar diffLen = fDiff.length();
index 6d36fe448eef35b101e69707ed5b173aeb26d2fd..90052eba20eea2793c9b23d769250b791bbf5b6a 100644 (file)
@@ -21,7 +21,8 @@ public:
                                  SkMatrix* matrix,
                                  TileMode* xy) const SK_OVERRIDE;
     virtual GradientType asAGradient(GradientInfo* info) const SK_OVERRIDE;
-    virtual GrEffectRef* asNewEffect(GrContext* context, const SkPaint&) const SK_OVERRIDE;
+    virtual GrEffectRef* asNewEffect(GrContext* context, const SkPaint&,
+                                     const SkMatrix*) const SK_OVERRIDE;
 
     virtual size_t contextSize() const SK_OVERRIDE;
 
index f90b906b19f12902a3fb65d3ec6673a5d7a218c6..0aee983f7561eaa852059b04d0d21f88d39b043f 100644 (file)
@@ -463,7 +463,7 @@ inline bool skPaint2GrPaintShader(SkGpuDevice* dev,
     GrContext::AutoWideOpenIdentityDraw awo(dev->context(), NULL);
 
     // setup the shader as the first color effect on the paint
-    SkAutoTUnref<GrEffectRef> effect(shader->asNewEffect(dev->context(), skPaint));
+    SkAutoTUnref<GrEffectRef> effect(shader->asNewEffect(dev->context(), skPaint, NULL));
     if (NULL != effect.get()) {
         grPaint->addColorEffect(effect);
         // Now setup the rest of the paint.