Index: src/gpu/effects/GrRRectEffect.cpp |
diff --git a/src/gpu/effects/GrRRectEffect.cpp b/src/gpu/effects/GrRRectEffect.cpp |
index 432e6ff402529996494ad02c5bdbcd97505cd5a2..c95690ff195e0f1c944e596448658ceb36578d5a 100644 |
--- a/src/gpu/effects/GrRRectEffect.cpp |
+++ b/src/gpu/effects/GrRRectEffect.cpp |
@@ -128,12 +128,7 @@ class GLCircularRRectEffect : public GrGLFragmentProcessor { |
public: |
GLCircularRRectEffect(const GrProcessor&); |
- virtual void emitCode(GrGLFPBuilder* builder, |
- const GrFragmentProcessor& fp, |
- const char* outputColor, |
- const char* inputColor, |
- const TransformedCoordsArray&, |
- const TextureSamplerArray&) override; |
+ virtual void emitCode(EmitArgs&) override; |
static inline void GenKey(const GrProcessor&, const GrGLSLCaps&, GrProcessorKeyBuilder*); |
@@ -150,29 +145,24 @@ GLCircularRRectEffect::GLCircularRRectEffect(const GrProcessor& ) { |
fPrevRRect.setEmpty(); |
} |
-void GLCircularRRectEffect::emitCode(GrGLFPBuilder* builder, |
- const GrFragmentProcessor& fp, |
- const char* outputColor, |
- const char* inputColor, |
- const TransformedCoordsArray&, |
- const TextureSamplerArray& samplers) { |
- const CircularRRectEffect& crre = fp.cast<CircularRRectEffect>(); |
+void GLCircularRRectEffect::emitCode(EmitArgs& args) { |
+ const CircularRRectEffect& crre = args.fFp.cast<CircularRRectEffect>(); |
const char *rectName; |
const char *radiusPlusHalfName; |
// The inner rect is the rrect bounds inset by the radius. Its left, top, right, and bottom |
// edges correspond to components x, y, z, and w, respectively. When a side of the rrect has |
// only rectangular corners, that side's value corresponds to the rect edge's value outset by |
// half a pixel. |
- fInnerRectUniform = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility, |
+ fInnerRectUniform = args.fBuilder->addUniform(GrGLProgramBuilder::kFragment_Visibility, |
kVec4f_GrSLType, kDefault_GrSLPrecision, |
"innerRect", |
&rectName); |
- fRadiusPlusHalfUniform = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility, |
+ fRadiusPlusHalfUniform = args.fBuilder->addUniform(GrGLProgramBuilder::kFragment_Visibility, |
kFloat_GrSLType, kDefault_GrSLPrecision, |
"radiusPlusHalf", |
&radiusPlusHalfName); |
- GrGLFragmentBuilder* fsBuilder = builder->getFragmentShaderBuilder(); |
+ GrGLFragmentBuilder* fsBuilder = args.fBuilder->getFragmentShaderBuilder(); |
const char* fragmentPos = fsBuilder->fragmentPosition(); |
// At each quarter-circle corner we compute a vector that is the offset of the fragment position |
// from the circle center. The vector is pinned in x and y to be in the quarter-plane relevant |
@@ -279,8 +269,8 @@ void GLCircularRRectEffect::emitCode(GrGLFPBuilder* builder, |
fsBuilder->codeAppend("\t\talpha = 1.0 - alpha;\n"); |
} |
- fsBuilder->codeAppendf("\t\t%s = %s;\n", outputColor, |
- (GrGLSLExpr4(inputColor) * GrGLSLExpr1("alpha")).c_str()); |
+ fsBuilder->codeAppendf("\t\t%s = %s;\n", args.fOutputColor, |
+ (GrGLSLExpr4(args.fInputColor) * GrGLSLExpr1("alpha")).c_str()); |
} |
void GLCircularRRectEffect::GenKey(const GrProcessor& processor, const GrGLSLCaps&, |
@@ -483,12 +473,7 @@ class GLEllipticalRRectEffect : public GrGLFragmentProcessor { |
public: |
GLEllipticalRRectEffect(const GrProcessor&); |
- virtual void emitCode(GrGLFPBuilder* builder, |
- const GrFragmentProcessor& effect, |
- const char* outputColor, |
- const char* inputColor, |
- const TransformedCoordsArray&, |
- const TextureSamplerArray&) override; |
+ virtual void emitCode(EmitArgs&) override; |
static inline void GenKey(const GrProcessor&, const GrGLSLCaps&, GrProcessorKeyBuilder*); |
@@ -505,21 +490,16 @@ GLEllipticalRRectEffect::GLEllipticalRRectEffect(const GrProcessor& effect) { |
fPrevRRect.setEmpty(); |
} |
-void GLEllipticalRRectEffect::emitCode(GrGLFPBuilder* builder, |
- const GrFragmentProcessor& effect, |
- const char* outputColor, |
- const char* inputColor, |
- const TransformedCoordsArray&, |
- const TextureSamplerArray& samplers) { |
- const EllipticalRRectEffect& erre = effect.cast<EllipticalRRectEffect>(); |
+void GLEllipticalRRectEffect::emitCode(EmitArgs& args) { |
+ const EllipticalRRectEffect& erre = args.fFp.cast<EllipticalRRectEffect>(); |
const char *rectName; |
// The inner rect is the rrect bounds inset by the x/y radii |
- fInnerRectUniform = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility, |
+ fInnerRectUniform = args.fBuilder->addUniform(GrGLProgramBuilder::kFragment_Visibility, |
kVec4f_GrSLType, kDefault_GrSLPrecision, |
"innerRect", |
&rectName); |
- GrGLFragmentBuilder* fsBuilder = builder->getFragmentShaderBuilder(); |
+ GrGLFragmentBuilder* fsBuilder = args.fBuilder->getFragmentShaderBuilder(); |
const char* fragmentPos = fsBuilder->fragmentPosition(); |
// At each quarter-ellipse corner we compute a vector that is the offset of the fragment pos |
// to the ellipse center. The vector is pinned in x and y to be in the quarter-plane relevant |
@@ -537,7 +517,7 @@ void GLEllipticalRRectEffect::emitCode(GrGLFPBuilder* builder, |
switch (erre.getRRect().getType()) { |
case SkRRect::kSimple_Type: { |
const char *invRadiiXYSqdName; |
- fInvRadiiSqdUniform = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility, |
+ fInvRadiiSqdUniform = args.fBuilder->addUniform(GrGLProgramBuilder::kFragment_Visibility, |
kVec2f_GrSLType, kDefault_GrSLPrecision, |
"invRadiiXY", |
&invRadiiXYSqdName); |
@@ -548,7 +528,7 @@ void GLEllipticalRRectEffect::emitCode(GrGLFPBuilder* builder, |
} |
case SkRRect::kNinePatch_Type: { |
const char *invRadiiLTRBSqdName; |
- fInvRadiiSqdUniform = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility, |
+ fInvRadiiSqdUniform = args.fBuilder->addUniform(GrGLProgramBuilder::kFragment_Visibility, |
kVec4f_GrSLType, kDefault_GrSLPrecision, |
"invRadiiLTRB", |
&invRadiiLTRBSqdName); |
@@ -577,8 +557,8 @@ void GLEllipticalRRectEffect::emitCode(GrGLFPBuilder* builder, |
fsBuilder->codeAppend("\t\tfloat alpha = clamp(0.5 + approx_dist, 0.0, 1.0);\n"); |
} |
- fsBuilder->codeAppendf("\t\t%s = %s;\n", outputColor, |
- (GrGLSLExpr4(inputColor) * GrGLSLExpr1("alpha")).c_str()); |
+ fsBuilder->codeAppendf("\t\t%s = %s;\n", args.fOutputColor, |
+ (GrGLSLExpr4(args.fInputColor) * GrGLSLExpr1("alpha")).c_str()); |
} |
void GLEllipticalRRectEffect::GenKey(const GrProcessor& effect, const GrGLSLCaps&, |