| Index: src/gpu/effects/GrBitmapTextGeoProc.cpp
|
| diff --git a/src/gpu/effects/GrBitmapTextGeoProc.cpp b/src/gpu/effects/GrBitmapTextGeoProc.cpp
|
| index db4374cd495feb0d7c69ef180de12ffd86a89b98..25904f753f523f5d6a9ea365cd66eabc3fc63280 100644
|
| --- a/src/gpu/effects/GrBitmapTextGeoProc.cpp
|
| +++ b/src/gpu/effects/GrBitmapTextGeoProc.cpp
|
| @@ -118,8 +118,8 @@
|
|
|
| GrBitmapTextGeoProc::GrBitmapTextGeoProc(GrColor color, GrTexture* texture,
|
| const GrTextureParams& params, GrMaskFormat format,
|
| - const SkMatrix& localMatrix)
|
| - : INHERITED(color, SkMatrix::I(), localMatrix)
|
| + bool opaqueVertexColors, const SkMatrix& localMatrix)
|
| + : INHERITED(color, SkMatrix::I(), localMatrix, opaqueVertexColors)
|
| , fTextureAccess(texture, params)
|
| , fInColor(NULL)
|
| , fMaskFormat(format) {
|
| @@ -129,10 +129,38 @@
|
| bool hasVertexColor = kA8_GrMaskFormat == fMaskFormat;
|
| if (hasVertexColor) {
|
| fInColor = &this->addVertexAttrib(Attribute("inColor", kVec4ub_GrVertexAttribType));
|
| + this->setHasVertexColor();
|
| }
|
| fInTextureCoords = &this->addVertexAttrib(Attribute("inTextureCoords",
|
| kVec2s_GrVertexAttribType));
|
| this->addTextureAccess(&fTextureAccess);
|
| +}
|
| +
|
| +bool GrBitmapTextGeoProc::onIsEqual(const GrGeometryProcessor& other) const {
|
| + const GrBitmapTextGeoProc& gp = other.cast<GrBitmapTextGeoProc>();
|
| + return SkToBool(this->inColor()) == SkToBool(gp.inColor());
|
| +}
|
| +
|
| +void GrBitmapTextGeoProc::onGetInvariantOutputColor(GrInitInvariantOutput* out) const {
|
| + if (kARGB_GrMaskFormat == fMaskFormat) {
|
| + out->setUnknownFourComponents();
|
| + }
|
| +}
|
| +
|
| +void GrBitmapTextGeoProc::onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const {
|
| + if (kARGB_GrMaskFormat != fMaskFormat) {
|
| + if (GrPixelConfigIsAlphaOnly(this->texture(0)->config())) {
|
| + out->setUnknownSingleComponent();
|
| + } else if (GrPixelConfigIsOpaque(this->texture(0)->config())) {
|
| + out->setUnknownOpaqueFourComponents();
|
| + out->setUsingLCDCoverage();
|
| + } else {
|
| + out->setUnknownFourComponents();
|
| + out->setUsingLCDCoverage();
|
| + }
|
| + } else {
|
| + out->setKnownSingleComponent(0xff);
|
| + }
|
| }
|
|
|
| void GrBitmapTextGeoProc::getGLProcessorKey(const GrBatchTracker& bt,
|
| @@ -152,6 +180,17 @@
|
| local->fInputColorType = GetColorInputType(&local->fColor, this->color(), init,
|
| SkToBool(fInColor));
|
| local->fUsesLocalCoords = init.fUsesLocalCoords;
|
| +}
|
| +
|
| +bool GrBitmapTextGeoProc::onCanMakeEqual(const GrBatchTracker& m,
|
| + const GrGeometryProcessor& that,
|
| + const GrBatchTracker& t) const {
|
| + const BitmapTextBatchTracker& mine = m.cast<BitmapTextBatchTracker>();
|
| + const BitmapTextBatchTracker& theirs = t.cast<BitmapTextBatchTracker>();
|
| + return CanCombineLocalMatrices(*this, mine.fUsesLocalCoords,
|
| + that, theirs.fUsesLocalCoords) &&
|
| + CanCombineOutput(mine.fInputColorType, mine.fColor,
|
| + theirs.fInputColorType, theirs.fColor);
|
| }
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
| @@ -192,5 +231,6 @@
|
| }
|
|
|
| return GrBitmapTextGeoProc::Create(GrRandomColor(random), textures[texIdx], params,
|
| - format, GrProcessorUnitTest::TestMatrix(random));
|
| -}
|
| + format, random->nextBool(),
|
| + GrProcessorUnitTest::TestMatrix(random));
|
| +}
|
|
|