specialize addGlyphToAtlas padding to bilerp case
Change-Id: Id3695ea65b292e39c40a17d039ec4b9347cd0feb
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/307296
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Herb Derby <herb@google.com>
diff --git a/src/gpu/text/GrAtlasManager.cpp b/src/gpu/text/GrAtlasManager.cpp
index 03f7c4e..3ca75f1 100644
--- a/src/gpu/text/GrAtlasManager.cpp
+++ b/src/gpu/text/GrAtlasManager.cpp
@@ -139,10 +139,10 @@
// TODO we can handle some of these cases if we really want to, but the long term solution is to
// get the actual glyph image itself when we get the glyph metrics.
GrDrawOpAtlas::ErrorCode GrAtlasManager::addGlyphToAtlas(const SkGlyph& skGlyph,
- int padding,
GrGlyph* grGlyph,
GrResourceProvider* resourceProvider,
- GrDeferredUploadTarget* uploadTarget) {
+ GrDeferredUploadTarget* uploadTarget,
+ bool bilerpPadding) {
if (skGlyph.image() == nullptr) {
return GrDrawOpAtlas::ErrorCode::kError;
}
@@ -152,12 +152,8 @@
GrMaskFormat expectedMaskFormat = this->resolveMaskFormat(glyphFormat);
int bytesPerPixel = GrMaskFormatBytesPerPixel(expectedMaskFormat);
- if (padding > 0) {
- SkASSERT(skGlyph.maskFormat() != SkMask::kSDF_Format);
- }
-
- SkASSERT(padding == 0 || padding == 1);
// Add 1 pixel padding around grGlyph if needed.
+ int padding = bilerpPadding ? 1 : 0;
const int width = skGlyph.width() + 2*padding;
const int height = skGlyph.height() + 2*padding;
int rowBytes = width * bytesPerPixel;
diff --git a/src/gpu/text/GrAtlasManager.h b/src/gpu/text/GrAtlasManager.h
index 52bada5..19c79f6 100644
--- a/src/gpu/text/GrAtlasManager.h
+++ b/src/gpu/text/GrAtlasManager.h
@@ -46,11 +46,13 @@
bool hasGlyph(GrMaskFormat, GrGlyph*);
+ // If bilerpPadding == true then addGlyphToAtlas adds a 1 pixel border to the glyph before
+ // inserting it into the atlas.
GrDrawOpAtlas::ErrorCode addGlyphToAtlas(const SkGlyph& skGlyph,
- int padding,
GrGlyph* grGlyph,
GrResourceProvider* resourceProvider,
- GrDeferredUploadTarget* uploadTarget);
+ GrDeferredUploadTarget* uploadTarget,
+ bool bilerpPadding = false);
// To ensure the GrDrawOpAtlas does not evict the Glyph Mask from its texture backing store,
// the client must pass in the current op token along with the GrGlyph.
diff --git a/src/gpu/text/GrTextBlob.cpp b/src/gpu/text/GrTextBlob.cpp
index 4768b7c..6cb646a 100644
--- a/src/gpu/text/GrTextBlob.cpp
+++ b/src/gpu/text/GrTextBlob.cpp
@@ -144,8 +144,8 @@
std::tuple<bool, int> GrGlyphVector::regenerateAtlas(int begin, int end,
GrMaskFormat maskFormat,
- int padding,
- GrMeshDrawOp::Target* target) {
+ GrMeshDrawOp::Target* target,
+ bool bilerpPadding) {
GrAtlasManager* atlasManager = target->atlasManager();
GrDeferredUploadTarget* uploadTarget = target->deferredUploadTarget();
@@ -178,8 +178,8 @@
if (!atlasManager->hasGlyph(maskFormat, grGlyph)) {
const SkGlyph& skGlyph = *metricsAndImages.glyph(grGlyph->fPackedID);
auto code = atlasManager->addGlyphToAtlas(
- skGlyph, padding, grGlyph,
- target->resourceProvider(), uploadTarget);
+ skGlyph, grGlyph, target->resourceProvider(),
+ uploadTarget, bilerpPadding);
if (code != GrDrawOpAtlas::ErrorCode::kSucceeded) {
success = code != GrDrawOpAtlas::ErrorCode::kError;
break;
@@ -363,7 +363,7 @@
std::tuple<bool, int>
GrDirectMaskSubRun::regenerateAtlas(int begin, int end, GrMeshDrawOp::Target* target) const {
- return fGlyphs.regenerateAtlas(begin, end, fMaskFormat, 0, target);
+ return fGlyphs.regenerateAtlas(begin, end, fMaskFormat, target);
}
template <typename Rect>
@@ -567,7 +567,7 @@
std::tuple<bool, int> GrTransformedMaskSubRun::regenerateAtlas(int begin, int end,
GrMeshDrawOp::Target* target) const {
- return fGlyphs.regenerateAtlas(begin, end, fMaskFormat, 1, target);
+ return fGlyphs.regenerateAtlas(begin, end, fMaskFormat, target, true);
}
template<typename Quad, typename VertexData>
@@ -626,7 +626,6 @@
}
}
-
void GrTransformedMaskSubRun::fillVertexData(void* vertexDst,
int offset, int count,
GrColor color,
@@ -840,7 +839,7 @@
std::tuple<bool, int> GrSDFTSubRun::regenerateAtlas(
int begin, int end, GrMeshDrawOp::Target *target) const {
- return fGlyphs.regenerateAtlas(begin, end, fMaskFormat, 0, target);
+ return fGlyphs.regenerateAtlas(begin, end, fMaskFormat, target);
}
size_t GrSDFTSubRun::vertexStride() const {
diff --git a/src/gpu/text/GrTextBlob.h b/src/gpu/text/GrTextBlob.h
index 4f2a966..4e6a3a5 100644
--- a/src/gpu/text/GrTextBlob.h
+++ b/src/gpu/text/GrTextBlob.h
@@ -291,7 +291,10 @@
SkScalar strikeToSourceRatio() const { return fStrikeSpec.strikeToSourceRatio(); }
std::tuple<bool, int> regenerateAtlas(
- int begin, int end, GrMaskFormat maskFormat, int padding, GrMeshDrawOp::Target *target);
+ int begin, int end,
+ GrMaskFormat maskFormat,
+ GrMeshDrawOp::Target *target,
+ bool bilerpPadding = false);
static size_t GlyphVectorSize(size_t count) {
return sizeof(Variant) * count;