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; |