Index: src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp |
diff --git a/src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp b/src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp |
index e89193ff550974069c2f79fecdd4615f3346b5b1..b7cacc48ff46b93eb6389ecd6ccfc70d4d39b6ab 100644 |
--- a/src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp |
+++ b/src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp |
@@ -5,7 +5,6 @@ |
* found in the LICENSE file. |
*/ |
-#include "SkTwoPointConicalGradient_gpu.h" |
#include "SkTwoPointConicalGradient.h" |
@@ -16,6 +15,8 @@ |
#include "glsl/GrGLSLFragmentShaderBuilder.h" |
#include "glsl/GrGLSLProgramDataManager.h" |
#include "glsl/GrGLSLUniformHandler.h" |
+#include "SkTwoPointConicalGradient_gpu.h" |
+ |
// For brevity |
typedef GrGLSLProgramDataManager::UniformHandle UniformHandle; |
@@ -62,11 +63,8 @@ class Edge2PtConicalEffect : public GrGradientEffect { |
public: |
class GLSLEdge2PtConicalProcessor; |
- static sk_sp<GrFragmentProcessor> Make(GrContext* ctx, |
- const SkTwoPointConicalGradient& shader, |
- const SkMatrix& matrix, |
- SkShader::TileMode tm) { |
- return sk_sp<GrFragmentProcessor>(new Edge2PtConicalEffect(ctx, shader, matrix, tm)); |
+ static sk_sp<GrFragmentProcessor> Make(const CreateArgs& args) { |
+ return sk_sp<GrFragmentProcessor>(new Edge2PtConicalEffect(args)); |
} |
virtual ~Edge2PtConicalEffect() {} |
@@ -93,14 +91,13 @@ private: |
this->fDiffRadius == s.fDiffRadius); |
} |
- Edge2PtConicalEffect(GrContext* ctx, |
- const SkTwoPointConicalGradient& shader, |
- const SkMatrix& matrix, |
- SkShader::TileMode tm) |
- : INHERITED(ctx, shader, matrix, tm), |
- fCenterX1(shader.getCenterX1()), |
- fRadius0(shader.getStartRadius()), |
- fDiffRadius(shader.getDiffRadius()){ |
+ Edge2PtConicalEffect(const CreateArgs& args) |
+ : INHERITED(args) { |
+ const SkTwoPointConicalGradient& shader = |
+ *static_cast<const SkTwoPointConicalGradient*>(args.fShader); |
+ fCenterX1 = shader.getCenterX1(); |
+ fRadius0 = shader.getStartRadius(); |
+ fDiffRadius = shader.getDiffRadius(); |
this->initClassID<Edge2PtConicalEffect>(); |
// We should only be calling this shader if we are degenerate case with touching circles |
// When deciding if we are in edge case, we scaled by the end radius for cases when the |
@@ -376,13 +373,9 @@ class FocalOutside2PtConicalEffect : public GrGradientEffect { |
public: |
class GLSLFocalOutside2PtConicalProcessor; |
- static sk_sp<GrFragmentProcessor> Make(GrContext* ctx, |
- const SkTwoPointConicalGradient& shader, |
- const SkMatrix& matrix, |
- SkShader::TileMode tm, |
- SkScalar focalX) { |
+ static sk_sp<GrFragmentProcessor> Make(const CreateArgs& args, SkScalar focalX) { |
return sk_sp<GrFragmentProcessor>( |
- new FocalOutside2PtConicalEffect(ctx, shader, matrix, tm, focalX)); |
+ new FocalOutside2PtConicalEffect(args, focalX)); |
} |
virtual ~FocalOutside2PtConicalEffect() { } |
@@ -406,14 +399,10 @@ private: |
this->fIsFlipped == s.fIsFlipped); |
} |
- FocalOutside2PtConicalEffect(GrContext* ctx, |
- const SkTwoPointConicalGradient& shader, |
- const SkMatrix& matrix, |
- SkShader::TileMode tm, |
- SkScalar focalX) |
- : INHERITED(ctx, shader, matrix, tm) |
+ FocalOutside2PtConicalEffect(const CreateArgs& args, SkScalar focalX) |
+ : INHERITED(args) |
, fFocalX(focalX) |
- , fIsFlipped(shader.isFlippedGrad()) { |
+ , fIsFlipped(static_cast<const SkTwoPointConicalGradient*>(args.fShader)->isFlippedGrad()) { |
this->initClassID<FocalOutside2PtConicalEffect>(); |
} |
@@ -591,13 +580,9 @@ class FocalInside2PtConicalEffect : public GrGradientEffect { |
public: |
class GLSLFocalInside2PtConicalProcessor; |
- static sk_sp<GrFragmentProcessor> Make(GrContext* ctx, |
- const SkTwoPointConicalGradient& shader, |
- const SkMatrix& matrix, |
- SkShader::TileMode tm, |
- SkScalar focalX) { |
+ static sk_sp<GrFragmentProcessor> Make(const CreateArgs& args, SkScalar focalX) { |
return sk_sp<GrFragmentProcessor>( |
- new FocalInside2PtConicalEffect(ctx, shader, matrix, tm, focalX)); |
+ new FocalInside2PtConicalEffect(args, focalX)); |
} |
virtual ~FocalInside2PtConicalEffect() {} |
@@ -621,12 +606,8 @@ private: |
this->fFocalX == s.fFocalX); |
} |
- FocalInside2PtConicalEffect(GrContext* ctx, |
- const SkTwoPointConicalGradient& shader, |
- const SkMatrix& matrix, |
- SkShader::TileMode tm, |
- SkScalar focalX) |
- : INHERITED(ctx, shader, matrix, tm), fFocalX(focalX) { |
+ FocalInside2PtConicalEffect(const CreateArgs& args, SkScalar focalX) |
+ : INHERITED(args), fFocalX(focalX) { |
this->initClassID<FocalInside2PtConicalEffect>(); |
} |
@@ -837,13 +818,9 @@ class CircleInside2PtConicalEffect : public GrGradientEffect { |
public: |
class GLSLCircleInside2PtConicalProcessor; |
- static sk_sp<GrFragmentProcessor> Make(GrContext* ctx, |
- const SkTwoPointConicalGradient& shader, |
- const SkMatrix& matrix, |
- SkShader::TileMode tm, |
- const CircleConicalInfo& info) { |
+ static sk_sp<GrFragmentProcessor> Make(const CreateArgs& args, const CircleConicalInfo& info) { |
return sk_sp<GrFragmentProcessor>( |
- new CircleInside2PtConicalEffect(ctx, shader, matrix, tm, info)); |
+ new CircleInside2PtConicalEffect(args, info)); |
} |
virtual ~CircleInside2PtConicalEffect() {} |
@@ -871,12 +848,8 @@ private: |
this->fInfo.fC == s.fInfo.fC); |
} |
- CircleInside2PtConicalEffect(GrContext* ctx, |
- const SkTwoPointConicalGradient& shader, |
- const SkMatrix& matrix, |
- SkShader::TileMode tm, |
- const CircleConicalInfo& info) |
- : INHERITED(ctx, shader, matrix, tm), fInfo(info) { |
+ CircleInside2PtConicalEffect(const CreateArgs& args, const CircleConicalInfo& info) |
+ : INHERITED(args), fInfo(info) { |
this->initClassID<CircleInside2PtConicalEffect>(); |
} |
@@ -1060,13 +1033,9 @@ class CircleOutside2PtConicalEffect : public GrGradientEffect { |
public: |
class GLSLCircleOutside2PtConicalProcessor; |
- static sk_sp<GrFragmentProcessor> Make(GrContext* ctx, |
- const SkTwoPointConicalGradient& shader, |
- const SkMatrix& matrix, |
- SkShader::TileMode tm, |
- const CircleConicalInfo& info) { |
+ static sk_sp<GrFragmentProcessor> Make(const CreateArgs& args, const CircleConicalInfo& info) { |
return sk_sp<GrFragmentProcessor>( |
- new CircleOutside2PtConicalEffect(ctx, shader, matrix, tm, info)); |
+ new CircleOutside2PtConicalEffect(args, info)); |
} |
virtual ~CircleOutside2PtConicalEffect() {} |
@@ -1097,13 +1066,11 @@ private: |
this->fIsFlipped == s.fIsFlipped); |
} |
- CircleOutside2PtConicalEffect(GrContext* ctx, |
- const SkTwoPointConicalGradient& shader, |
- const SkMatrix& matrix, |
- SkShader::TileMode tm, |
- const CircleConicalInfo& info) |
- : INHERITED(ctx, shader, matrix, tm), fInfo(info) { |
+ CircleOutside2PtConicalEffect(const CreateArgs& args, const CircleConicalInfo& info) |
+ : INHERITED(args), fInfo(info) { |
this->initClassID<CircleOutside2PtConicalEffect>(); |
+ const SkTwoPointConicalGradient& shader = |
+ *static_cast<const SkTwoPointConicalGradient*>(args.fShader); |
if (shader.getStartRadius() != shader.getEndRadius()) { |
fTLimit = shader.getStartRadius() / (shader.getStartRadius() - shader.getEndRadius()); |
} else { |
@@ -1322,32 +1289,35 @@ void CircleOutside2PtConicalEffect::GLSLCircleOutside2PtConicalProcessor::GenKey |
////////////////////////////////////////////////////////////////////////////// |
-sk_sp<GrFragmentProcessor> Gr2PtConicalGradientEffect::Make(GrContext* ctx, |
- const SkTwoPointConicalGradient& shader, |
- SkShader::TileMode tm, |
- const SkMatrix* localMatrix) { |
+sk_sp<GrFragmentProcessor> Gr2PtConicalGradientEffect::Make( |
+ const GrGradientEffect::CreateArgs& args) { |
+ const SkTwoPointConicalGradient& shader = |
+ *static_cast<const SkTwoPointConicalGradient*>(args.fShader); |
+ |
SkMatrix matrix; |
if (!shader.getLocalMatrix().invert(&matrix)) { |
return nullptr; |
} |
- if (localMatrix) { |
+ if (args.fMatrix) { |
SkMatrix inv; |
- if (!localMatrix->invert(&inv)) { |
+ if (!args.fMatrix->invert(&inv)) { |
return nullptr; |
} |
matrix.postConcat(inv); |
} |
+ GrGradientEffect::CreateArgs newArgs(args.fContext, args.fShader, &matrix, args.fTileMode); |
+ |
if (shader.getStartRadius() < kErrorTol) { |
SkScalar focalX; |
ConicalType type = set_matrix_focal_conical(shader, &matrix, &focalX); |
if (type == kInside_ConicalType) { |
- return FocalInside2PtConicalEffect::Make(ctx, shader, matrix, tm, focalX); |
+ return FocalInside2PtConicalEffect::Make(newArgs, focalX); |
} else if(type == kEdge_ConicalType) { |
set_matrix_edge_conical(shader, &matrix); |
- return Edge2PtConicalEffect::Make(ctx, shader, matrix, tm); |
+ return Edge2PtConicalEffect::Make(newArgs); |
} else { |
- return FocalOutside2PtConicalEffect::Make(ctx, shader, matrix, tm, focalX); |
+ return FocalOutside2PtConicalEffect::Make(newArgs, focalX); |
} |
} |
@@ -1355,12 +1325,12 @@ sk_sp<GrFragmentProcessor> Gr2PtConicalGradientEffect::Make(GrContext* ctx, |
ConicalType type = set_matrix_circle_conical(shader, &matrix, &info); |
if (type == kInside_ConicalType) { |
- return CircleInside2PtConicalEffect::Make(ctx, shader, matrix, tm, info); |
+ return CircleInside2PtConicalEffect::Make(newArgs, info); |
} else if (type == kEdge_ConicalType) { |
set_matrix_edge_conical(shader, &matrix); |
- return Edge2PtConicalEffect::Make(ctx, shader, matrix, tm); |
+ return Edge2PtConicalEffect::Make(newArgs); |
} else { |
- return CircleOutside2PtConicalEffect::Make(ctx, shader, matrix, tm, info); |
+ return CircleOutside2PtConicalEffect::Make(newArgs, info); |
} |
} |