| Index: src/gpu/effects/GrBitmapTextGeoProc.cpp
|
| diff --git a/src/gpu/effects/GrBitmapTextGeoProc.cpp b/src/gpu/effects/GrBitmapTextGeoProc.cpp
|
| index c93db90a91b1107c8af35ba6b7042b34f648070c..d92585d1240e7d2f39b9498a1a1b658b633e6e5b 100644
|
| --- a/src/gpu/effects/GrBitmapTextGeoProc.cpp
|
| +++ b/src/gpu/effects/GrBitmapTextGeoProc.cpp
|
| @@ -14,22 +14,29 @@
|
| #include "gl/GrGLGeometryProcessor.h"
|
| #include "gl/builders/GrGLProgramBuilder.h"
|
|
|
| +struct BitmapTextBatchTracker {
|
| + GPInput fInputColorType;
|
| + GrColor fColor;
|
| +};
|
| +
|
| class GrGLBitmapTextGeoProc : public GrGLGeometryProcessor {
|
| public:
|
| GrGLBitmapTextGeoProc(const GrGeometryProcessor&, const GrBatchTracker&) {}
|
|
|
| virtual void emitCode(const EmitArgs& args) SK_OVERRIDE {
|
| const GrBitmapTextGeoProc& cte = args.fGP.cast<GrBitmapTextGeoProc>();
|
| + const BitmapTextBatchTracker& local = args.fBT.cast<BitmapTextBatchTracker>();
|
|
|
| - GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder();
|
| + GrGLGPBuilder* pb = args.fPB;
|
| + GrGLVertexBuilder* vsBuilder = pb->getVertexShaderBuilder();
|
|
|
| GrGLVertToFrag v(kVec2f_GrSLType);
|
| - args.fPB->addVarying("TextureCoords", &v);
|
| + pb->addVarying("TextureCoords", &v);
|
| vsBuilder->codeAppendf("%s = %s;", v.vsOut(), cte.inTextureCoords()->fName);
|
|
|
| - if (cte.inColor()) {
|
| - args.fPB->addPassThroughAttribute(cte.inColor(), args.fOutputColor);
|
| - }
|
| + // Setup pass through color
|
| + this->setupColor(pb, local.fInputColorType, args.fOutputColor, cte.inColor(),
|
| + &fColorUniform);
|
|
|
| // setup output coords
|
| vsBuilder->codeAppendf("%s = %s;", vsBuilder->positionCoords(), cte.inPosition()->fName);
|
| @@ -39,27 +46,32 @@ public:
|
| vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", vsBuilder->glPosition(),
|
| vsBuilder->uViewM(), cte.inPosition()->fName);
|
|
|
| - GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder();
|
| + GrGLGPFragmentBuilder* fsBuilder = pb->getFragmentShaderBuilder();
|
| fsBuilder->codeAppendf("%s = ", args.fOutputCoverage);
|
| fsBuilder->appendTextureLookup(args.fSamplers[0], v.fsIn(), kVec2f_GrSLType);
|
| fsBuilder->codeAppend(";");
|
| }
|
|
|
| - 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 BitmapTextBatchTracker& local = bt.cast<BitmapTextBatchTracker>();
|
| + this->setUniformColorIfRequired(pdman, local.fInputColorType, local.fColor, fColorUniform);
|
| + }
|
|
|
| static inline void GenKey(const GrGeometryProcessor& proc,
|
| - const GrBatchTracker&,
|
| + const GrBatchTracker& bt,
|
| const GrGLCaps&,
|
| GrProcessorKeyBuilder* b) {
|
| + const BitmapTextBatchTracker& local = bt.cast<BitmapTextBatchTracker>();
|
| const GrBitmapTextGeoProc& gp = proc.cast<GrBitmapTextGeoProc>();
|
| -
|
| b->add32(SkToBool(gp.inColor()));
|
| + b->add32(local.fInputColorType);
|
| }
|
|
|
| -
|
| private:
|
| + UniformHandle fColorUniform;
|
| +
|
| typedef GrGLGeometryProcessor INHERITED;
|
| };
|
|
|
| @@ -107,6 +119,20 @@ GrGLGeometryProcessor*
|
| GrBitmapTextGeoProc::createGLInstance(const GrBatchTracker& bt) const {
|
| return SkNEW_ARGS(GrGLBitmapTextGeoProc, (*this, bt));
|
| }
|
| +
|
| +void GrBitmapTextGeoProc::initBatchTracker(GrBatchTracker* bt, const InitBT& init) const {
|
| + BitmapTextBatchTracker* local = bt->cast<BitmapTextBatchTracker>();
|
| + local->fColor = init.fColor;
|
| + local->fInputColorType = GetColorInputType(init, SkToBool(fInColor));
|
| +}
|
| +
|
| +bool GrBitmapTextGeoProc::onCanBatch(const GrBatchTracker& l, const GrBatchTracker& r) const {
|
| + const BitmapTextBatchTracker& left = l.cast<BitmapTextBatchTracker>();
|
| + const BitmapTextBatchTracker& right = r.cast<BitmapTextBatchTracker>();
|
| + return CanCombineOutput(left.fInputColorType, left.fColor,
|
| + right.fInputColorType, right.fColor);
|
| +}
|
| +
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| GR_DEFINE_GEOMETRY_PROCESSOR_TEST(GrBitmapTextGeoProc);
|
|
|