diff options
author | commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2014-05-09 20:28:11 +0000 |
---|---|---|
committer | commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2014-05-09 20:28:11 +0000 |
commit | 96fb7489ba46909c3f81bb2d94755e7d4ccb5fad (patch) | |
tree | 1f2608698d1ebf11eae79b705aefef5b6ed6e2e2 /src/effects/gradients | |
parent | 68867b3db2172c2a542fde1b8b1a08f22d6b9b83 (diff) |
add localmatrix parameter to shader's asNewEffect
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
Diffstat (limited to 'src/effects/gradients')
-rw-r--r-- | src/effects/gradients/SkLinearGradient.cpp | 12 | ||||
-rw-r--r-- | src/effects/gradients/SkLinearGradient.h | 2 | ||||
-rw-r--r-- | src/effects/gradients/SkRadialGradient.cpp | 12 | ||||
-rw-r--r-- | src/effects/gradients/SkRadialGradient.h | 2 | ||||
-rw-r--r-- | src/effects/gradients/SkSweepGradient.cpp | 12 | ||||
-rw-r--r-- | src/effects/gradients/SkSweepGradient.h | 2 | ||||
-rw-r--r-- | src/effects/gradients/SkTwoPointConicalGradient.cpp | 5 | ||||
-rw-r--r-- | src/effects/gradients/SkTwoPointConicalGradient.h | 2 | ||||
-rw-r--r-- | src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp | 20 | ||||
-rw-r--r-- | src/effects/gradients/SkTwoPointConicalGradient_gpu.h | 2 | ||||
-rw-r--r-- | src/effects/gradients/SkTwoPointRadialGradient.cpp | 12 | ||||
-rw-r--r-- | src/effects/gradients/SkTwoPointRadialGradient.h | 3 |
12 files changed, 64 insertions, 22 deletions
diff --git a/src/effects/gradients/SkLinearGradient.cpp b/src/effects/gradients/SkLinearGradient.cpp index f37759c1a9..4fe65470ae 100644 --- a/src/effects/gradients/SkLinearGradient.cpp +++ b/src/effects/gradients/SkLinearGradient.cpp @@ -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); } diff --git a/src/effects/gradients/SkLinearGradient.h b/src/effects/gradients/SkLinearGradient.h index e892fe33d0..432dac0ff8 100644 --- a/src/effects/gradients/SkLinearGradient.h +++ b/src/effects/gradients/SkLinearGradient.h @@ -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) diff --git a/src/effects/gradients/SkRadialGradient.cpp b/src/effects/gradients/SkRadialGradient.cpp index e379f36c95..ce4c16a654 100644 --- a/src/effects/gradients/SkRadialGradient.cpp +++ b/src/effects/gradients/SkRadialGradient.cpp @@ -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); } diff --git a/src/effects/gradients/SkRadialGradient.h b/src/effects/gradients/SkRadialGradient.h index 2c60ba5e08..aade31ef52 100644 --- a/src/effects/gradients/SkRadialGradient.h +++ b/src/effects/gradients/SkRadialGradient.h @@ -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) diff --git a/src/effects/gradients/SkSweepGradient.cpp b/src/effects/gradients/SkSweepGradient.cpp index 81ebb3441e..ba43571c9b 100644 --- a/src/effects/gradients/SkSweepGradient.cpp +++ b/src/effects/gradients/SkSweepGradient.cpp @@ -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); } diff --git a/src/effects/gradients/SkSweepGradient.h b/src/effects/gradients/SkSweepGradient.h index 36cdd63811..2f798e87a0 100644 --- a/src/effects/gradients/SkSweepGradient.h +++ b/src/effects/gradients/SkSweepGradient.h @@ -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) diff --git a/src/effects/gradients/SkTwoPointConicalGradient.cpp b/src/effects/gradients/SkTwoPointConicalGradient.cpp index 574df08294..cbe9e83a96 100644 --- a/src/effects/gradients/SkTwoPointConicalGradient.cpp +++ b/src/effects/gradients/SkTwoPointConicalGradient.cpp @@ -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 diff --git a/src/effects/gradients/SkTwoPointConicalGradient.h b/src/effects/gradients/SkTwoPointConicalGradient.h index 85e0bc0b4e..78998a8d98 100644 --- a/src/effects/gradients/SkTwoPointConicalGradient.h +++ b/src/effects/gradients/SkTwoPointConicalGradient.h @@ -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); } diff --git a/src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp b/src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp index 7986d82b96..23fee850f5 100644 --- a/src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp +++ b/src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp @@ -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; diff --git a/src/effects/gradients/SkTwoPointConicalGradient_gpu.h b/src/effects/gradients/SkTwoPointConicalGradient_gpu.h index f8c0493dd2..2b0f0612d7 100644 --- a/src/effects/gradients/SkTwoPointConicalGradient_gpu.h +++ b/src/effects/gradients/SkTwoPointConicalGradient_gpu.h @@ -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 diff --git a/src/effects/gradients/SkTwoPointRadialGradient.cpp b/src/effects/gradients/SkTwoPointRadialGradient.cpp index d85be5d3ba..ac0b0bdf1c 100644 --- a/src/effects/gradients/SkTwoPointRadialGradient.cpp +++ b/src/effects/gradients/SkTwoPointRadialGradient.cpp @@ -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(); diff --git a/src/effects/gradients/SkTwoPointRadialGradient.h b/src/effects/gradients/SkTwoPointRadialGradient.h index 6d36fe448e..90052eba20 100644 --- a/src/effects/gradients/SkTwoPointRadialGradient.h +++ b/src/effects/gradients/SkTwoPointRadialGradient.h @@ -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; |