| Index: src/gpu/GrAAConvexPathRenderer.cpp
|
| diff --git a/src/gpu/GrAAConvexPathRenderer.cpp b/src/gpu/GrAAConvexPathRenderer.cpp
|
| index 0007e33b7fb3100cdc9dce1644d46e792a85596f..bf029aa81ca2b49dff7ba9d99b43eeec2e00f221 100644
|
| --- a/src/gpu/GrAAConvexPathRenderer.cpp
|
| +++ b/src/gpu/GrAAConvexPathRenderer.cpp
|
| @@ -523,12 +523,18 @@ public:
|
|
|
| virtual void emitCode(const EmitArgs& args) SK_OVERRIDE {
|
| const QuadEdgeEffect& qe = args.fGP.cast<QuadEdgeEffect>();
|
| - GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder();
|
| + GrGLGPBuilder* pb = args.fPB;
|
| + GrGLVertexBuilder* vsBuilder = pb->getVertexShaderBuilder();
|
|
|
| GrGLVertToFrag v(kVec4f_GrSLType);
|
| args.fPB->addVarying("QuadEdge", &v);
|
| vsBuilder->codeAppendf("%s = %s;", v.vsOut(), qe.inQuadEdge()->fName);
|
|
|
| + const BatchTracker& local = args.fBT.cast<BatchTracker>();
|
| +
|
| + // Setup pass through color
|
| + this->setupColor(pb, local.fInputColorType, args.fOutputColor, NULL, &fColorUniform);
|
| +
|
| // setup coord outputs
|
| vsBuilder->codeAppendf("%s = %s;", vsBuilder->positionCoords(), qe.inPosition()->fName);
|
| vsBuilder->codeAppendf("%s = %s;", vsBuilder->localCoords(), qe.inPosition()->fName);
|
| @@ -562,16 +568,25 @@ public:
|
| fsBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage);
|
| }
|
|
|
| - static inline void GenKey(const GrGeometryProcessor&,
|
| - const GrBatchTracker&,
|
| + static inline void GenKey(const GrGeometryProcessor& gp,
|
| + const GrBatchTracker& bt,
|
| const GrGLCaps&,
|
| - GrProcessorKeyBuilder*) {}
|
| + GrProcessorKeyBuilder* b) {
|
| + const BatchTracker& local = bt.cast<BatchTracker>();
|
| + b->add32(local.fInputColorType);
|
| + }
|
|
|
| - virtual void setData(const GrGLProgramDataManager&,
|
| - const GrGeometryProcessor&,
|
| - const GrBatchTracker&) SK_OVERRIDE {}
|
| + virtual void setData(const GrGLProgramDataManager& pdman,
|
| + const GrGeometryProcessor& gp,
|
| + const GrBatchTracker& bt) SK_OVERRIDE {
|
| + const BatchTracker& local = bt.cast<BatchTracker>();
|
| + this->setUniformColorIfRequired(pdman, local.fInputColorType, local.fColor,
|
| + fColorUniform);
|
| + }
|
|
|
| private:
|
| + UniformHandle fColorUniform;
|
| +
|
| typedef GrGLGeometryProcessor INHERITED;
|
| };
|
|
|
| @@ -585,6 +600,21 @@ public:
|
| return SkNEW_ARGS(GLProcessor, (*this, bt));
|
| }
|
|
|
| + void initBatchTracker(GrBatchTracker* bt, const InitBT& init) const SK_OVERRIDE {
|
| + BatchTracker* local = bt->cast<BatchTracker>();
|
| +
|
| + // We will ignore this color unless we have uniform color
|
| + local->fColor = init.fColor;
|
| + local->fInputColorType = GetColorInputType(init, false);
|
| + }
|
| +
|
| + bool onCanBatch(const GrBatchTracker& l, const GrBatchTracker& r) const SK_OVERRIDE {
|
| + const BatchTracker& left = l.cast<BatchTracker>();
|
| + const BatchTracker& right = r.cast<BatchTracker>();
|
| + return CanCombineOutput(left.fInputColorType, left.fColor,
|
| + right.fInputColorType, right.fColor);
|
| + }
|
| +
|
| private:
|
| QuadEdgeEffect(GrColor color) : INHERITED(color) {
|
| this->initClassID<QuadEdgeEffect>();
|
| @@ -600,6 +630,11 @@ private:
|
| out->setUnknownSingleComponent();
|
| }
|
|
|
| + struct BatchTracker {
|
| + GPInput fInputColorType;
|
| + GrColor fColor;
|
| + };
|
| +
|
| const GrAttribute* fInPosition;
|
| const GrAttribute* fInQuadEdge;
|
|
|
|
|