Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(225)

Unified Diff: src/gpu/GrBitmapTextContext.cpp

Issue 689923004: Use Color Processor for color bitmap text draws on gpu. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Clean up Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « gyp/gmslides.gypi ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/gpu/GrBitmapTextContext.cpp
diff --git a/src/gpu/GrBitmapTextContext.cpp b/src/gpu/GrBitmapTextContext.cpp
index afecead65d28446d75417663446bf6cbc2c59f51..f9ea1702643a451b7c93dc96593d0e55cd1d21c6 100755
--- a/src/gpu/GrBitmapTextContext.cpp
+++ b/src/gpu/GrBitmapTextContext.cpp
@@ -15,6 +15,7 @@
#include "GrTextStrike.h"
#include "GrTextStrike_impl.h"
#include "effects/GrCustomCoordsTextureEffect.h"
+#include "effects/GrSimpleTextureEffect.h"
#include "SkAutoKern.h"
#include "SkColorPriv.h"
@@ -38,7 +39,15 @@ extern const GrVertexAttrib gTextVertexAttribs[] = {
{kVec2f_GrVertexAttribType, sizeof(SkPoint), kGeometryProcessor_GrVertexAttribBinding}
};
-static const size_t kTextVASize = 2 * sizeof(SkPoint);
+static const size_t kTextVASize = 2 * sizeof(SkPoint);
+
+// position + local coord
+extern const GrVertexAttrib gTextVertexWithLCAttribs[] = {
bsalomon 2014/10/30 15:31:11 gBmpTextVertexAttribs?
jvanverth1 2014/10/30 18:19:43 I think it's more consistent the way it is.
egdaniel 2014/10/30 19:22:20 I'm in agreement with jim. The way the old names w
+ {kVec2f_GrVertexAttribType, 0, kPosition_GrVertexAttribBinding},
+ {kVec2f_GrVertexAttribType, sizeof(SkPoint), kLocalCoord_GrVertexAttribBinding}
+};
+
+static const size_t kTextVALCSize = 2 * sizeof(SkPoint);
// position + color + texture coord
extern const GrVertexAttrib gTextVertexWithColorAttribs[] = {
@@ -345,15 +354,18 @@ void GrBitmapTextContext::onDrawPosText(const GrPaint& paint, const SkPaint& skP
this->finish();
}
-static void* alloc_vertices(GrDrawTarget* drawTarget, int numVertices, bool useColorVerts) {
+static void* alloc_vertices(GrDrawTarget* drawTarget, int numVertices, GrMaskFormat maskFormat) {
if (numVertices <= 0) {
return NULL;
}
// set up attributes
- if (useColorVerts) {
+ if (kA8_GrMaskFormat == maskFormat) {
drawTarget->drawState()->setVertexAttribs<gTextVertexWithColorAttribs>(
SK_ARRAY_COUNT(gTextVertexWithColorAttribs), kTextVAColorSize);
+ } else if (kARGB_GrMaskFormat == maskFormat) {
+ drawTarget->drawState()->setVertexAttribs<gTextVertexWithLCAttribs>(
+ SK_ARRAY_COUNT(gTextVertexWithLCAttribs), kTextVALCSize);
} else {
drawTarget->drawState()->setVertexAttribs<gTextVertexAttribs>(
SK_ARRAY_COUNT(gTextVertexAttribs), kTextVASize);
@@ -476,12 +488,10 @@ HAS_ATLAS:
fCurrMaskFormat = glyph->fMaskFormat;
}
- bool useColorVerts = kA8_GrMaskFormat == fCurrMaskFormat;
-
if (NULL == fVertices) {
int maxQuadVertices = kVerticesPerGlyph * fContext->getQuadIndexBuffer()->maxQuads();
fAllocVertexCount = SkMin32(fTotalVertexCount, maxQuadVertices);
- fVertices = alloc_vertices(fDrawTarget, fAllocVertexCount, useColorVerts);
+ fVertices = alloc_vertices(fDrawTarget, fAllocVertexCount, fCurrMaskFormat);
}
SkFixed tx = SkIntToFixed(glyph->fAtlasLocation.fX);
@@ -495,8 +505,16 @@ HAS_ATLAS:
fVertexBounds.joinNonEmptyArg(r);
- size_t vertSize = useColorVerts ? (2 * sizeof(SkPoint) + sizeof(GrColor)) :
- (2 * sizeof(SkPoint));
+ size_t vertSize;
+ switch (fCurrMaskFormat) {
+ case kA8_GrMaskFormat:
+ vertSize = kTextVAColorSize;
+ break;
+ case kARGB_GrMaskFormat:
+ vertSize = kTextVALCSize;
+ default:
+ vertSize = kTextVASize;
+ }
SkASSERT(vertSize == fDrawTarget->getDrawState().getVertexStride());
@@ -512,7 +530,7 @@ HAS_ATLAS:
SkFixedToFloat(texture->texturePriv().normalizeFixedX(tx + width)),
SkFixedToFloat(texture->texturePriv().normalizeFixedY(ty + height)),
vertSize);
- if (useColorVerts) {
+ if (kA8_GrMaskFormat == fCurrMaskFormat) {
if (0xFF == GrColorUnpackA(fPaint.getColor())) {
fDrawTarget->drawState()->setHint(GrDrawState::kVertexColorsAreOpaque_Hint, true);
}
@@ -548,16 +566,25 @@ void GrBitmapTextContext::flush() {
SkASSERT(fCurrTexture);
GrTextureParams params(SkShader::kRepeat_TileMode, GrTextureParams::kNone_FilterMode);
- uint32_t textureUniqueID = fCurrTexture->getUniqueID();
+ // This effect could be stored with one of the cache objects (atlas?)
+ if (kARGB_GrMaskFormat != fCurrMaskFormat) {
bsalomon 2014/10/30 15:31:11 Switch the sense of this? Seems easier to read i
+ uint32_t textureUniqueID = fCurrTexture->getUniqueID();
+ if (textureUniqueID != fEffectTextureUniqueID) {
+ fCachedGeometryProcessor.reset(GrCustomCoordsTextureEffect::Create(fCurrTexture,
+ params));
+ fEffectTextureUniqueID = textureUniqueID;
+ }
- if (textureUniqueID != fEffectTextureUniqueID) {
- fCachedGeometryProcessor.reset(GrCustomCoordsTextureEffect::Create(fCurrTexture,
- params));
- fEffectTextureUniqueID = textureUniqueID;
+ drawState->setGeometryProcessor(fCachedGeometryProcessor.get());
+ } else {
+ SkMatrix matrix;
+ matrix.reset();
+ GrFragmentProcessor* fragProcessor = GrSimpleTextureEffect::Create(fCurrTexture,
+ matrix,
jvanverth1 2014/10/30 18:19:42 I think you can use SkMatrix::I() instead of havin
+ params);
+ drawState->addColorProcessor(fragProcessor)->unref();
}
- // This effect could be stored with one of the cache objects (atlas?)
- drawState->setGeometryProcessor(fCachedGeometryProcessor.get());
SkASSERT(fStrike);
switch (fCurrMaskFormat) {
// Color bitmap text
« no previous file with comments | « gyp/gmslides.gypi ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698