Small change to use a GrGeometryProcessor for all BitmapText draw calls
BUG=skia:
Review URL: https://codereview.chromium.org/914723002
diff --git a/src/gpu/effects/GrBitmapTextGeoProc.cpp b/src/gpu/effects/GrBitmapTextGeoProc.cpp
index 3133265..a699b04 100644
--- a/src/gpu/effects/GrBitmapTextGeoProc.cpp
+++ b/src/gpu/effects/GrBitmapTextGeoProc.cpp
@@ -47,17 +47,26 @@
this->addUniformViewMatrix(pb);
// Setup position
- SetupPosition(vsBuilder, gpArgs, cte.inPosition()->fName,
- cte.viewMatrix(), this->uViewM());
+ SetupPosition(vsBuilder, gpArgs, cte.inPosition()->fName, cte.viewMatrix(), this->uViewM());
// emit transforms
this->emitTransforms(args.fPB, gpArgs->fPositionVar, cte.inPosition()->fName,
cte.localMatrix(), args.fTransformsIn, args.fTransformsOut);
GrGLGPFragmentBuilder* fsBuilder = pb->getFragmentShaderBuilder();
- fsBuilder->codeAppendf("%s = ", args.fOutputCoverage);
- fsBuilder->appendTextureLookup(args.fSamplers[0], v.fsIn(), kVec2f_GrSLType);
- fsBuilder->codeAppend(";");
+ if (cte.maskFormat() == kARGB_GrMaskFormat) {
+ fsBuilder->codeAppendf("%s = ", args.fOutputColor);
+ fsBuilder->appendTextureLookupAndModulate(args.fOutputColor,
+ args.fSamplers[0],
+ v.fsIn(),
+ kVec2f_GrSLType);
+ fsBuilder->codeAppend(";");
+ fsBuilder->codeAppendf("%s = vec4(1);", args.fOutputCoverage);
+ } else {
+ fsBuilder->codeAppendf("%s = ", args.fOutputCoverage);
+ fsBuilder->appendTextureLookup(args.fSamplers[0], v.fsIn(), kVec2f_GrSLType);
+ fsBuilder->codeAppend(";");
+ }
}
virtual void setData(const GrGLProgramDataManager& pdman,
@@ -86,7 +95,8 @@
uint32_t key = 0;
key |= SkToBool(gp.inColor()) ? 0x1 : 0x0;
key |= local.fUsesLocalCoords && proc.localMatrix().hasPerspective() ? 0x2 : 0x0;
- key |= ComputePosKey(gp.viewMatrix()) << 2;
+ key |= gp.maskFormat() == kARGB_GrMaskFormat ? 0x4 : 0x0;
+ key |= ComputePosKey(gp.viewMatrix()) << 3;
b->add32(local.fInputColorType << 16 | key);
}
@@ -100,19 +110,22 @@
///////////////////////////////////////////////////////////////////////////////
GrBitmapTextGeoProc::GrBitmapTextGeoProc(GrColor color, GrTexture* texture,
- const GrTextureParams& params, bool useColorAttrib,
+ const GrTextureParams& params, GrMaskFormat format,
bool opaqueVertexColors, const SkMatrix& localMatrix)
: INHERITED(color, SkMatrix::I(), localMatrix, opaqueVertexColors)
, fTextureAccess(texture, params)
- , fInColor(NULL) {
+ , fInColor(NULL)
+ , fMaskFormat(format) {
this->initClassID<GrBitmapTextGeoProc>();
fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVertexAttribType));
- if (useColorAttrib) {
+
+ bool hasVertexColor = kA8_GrMaskFormat == fMaskFormat;
+ if (hasVertexColor) {
fInColor = &this->addVertexAttrib(Attribute("inColor", kVec4ub_GrVertexAttribType));
this->setHasVertexColor();
}
fInTextureCoords = &this->addVertexAttrib(Attribute("inTextureCoords",
- kVec2f_GrVertexAttribType));
+ kVec2f_GrVertexAttribType));
this->addTextureAccess(&fTextureAccess);
}
@@ -121,15 +134,25 @@
return SkToBool(this->inColor()) == SkToBool(gp.inColor());
}
-void GrBitmapTextGeoProc::onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const {
- if (GrPixelConfigIsAlphaOnly(this->texture(0)->config())) {
- out->setUnknownSingleComponent();
- } else if (GrPixelConfigIsOpaque(this->texture(0)->config())) {
- out->setUnknownOpaqueFourComponents();
- out->setUsingLCDCoverage();
- } else {
+void GrBitmapTextGeoProc::onGetInvariantOutputColor(GrInitInvariantOutput* out) const {
+ if (kARGB_GrMaskFormat == fMaskFormat) {
out->setUnknownFourComponents();
- out->setUsingLCDCoverage();
+ }
+}
+
+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);
}
}
@@ -185,7 +208,22 @@
GrTextureParams params(tileModes, random->nextBool() ? GrTextureParams::kBilerp_FilterMode :
GrTextureParams::kNone_FilterMode);
+ GrMaskFormat format;
+ switch (random->nextULessThan(3)) {
+ default:
+ SkFAIL("Incomplete enum\n");
+ case 0:
+ format = kA8_GrMaskFormat;
+ break;
+ case 1:
+ format = kA565_GrMaskFormat;
+ break;
+ case 2:
+ format = kARGB_GrMaskFormat;
+ break;
+ }
+
return GrBitmapTextGeoProc::Create(GrRandomColor(random), textures[texIdx], params,
- random->nextBool(), random->nextBool(),
+ format, random->nextBool(),
GrProcessorUnitTest::TestMatrix(random));
}