aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Brian Salomon <bsalomon@google.com>2017-11-29 14:58:59 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-11-30 15:37:57 +0000
commitcf1aa5327ed9b19fbab9fe1e97292cce509096b4 (patch)
treefcafc504a8309e584808ff81b83cbc41a23459fb
parent706a6ff60c55bee85cff06fc9f8f3764f6e5154b (diff)
Fix SkInternalAtlasTextContext to update advance the flush token after issuing each draw.
This was causing SkAtlasTextTarget:flush() calls beyond the first to skip the uploads of glyphs added to the atlas after the first flush(). Change-Id: I291b88d50629e38914d4b6af21fc25d8a41fbd9d Reviewed-on: https://skia-review.googlesource.com/77584 Reviewed-by: Jim Van Verth <jvanverth@google.com> Commit-Queue: Brian Salomon <bsalomon@google.com>
-rw-r--r--gm/atlastext.cpp5
-rw-r--r--src/atlastext/SkInternalAtlasTextContext.cpp13
2 files changed, 11 insertions, 7 deletions
diff --git a/gm/atlastext.cpp b/gm/atlastext.cpp
index 6ee092b49f..832a604e6e 100644
--- a/gm/atlastext.cpp
+++ b/gm/atlastext.cpp
@@ -112,6 +112,11 @@ private:
uint32_t color = random.nextU();
x = size + draw_string(fTarget.get(), text, x, y, color, typeface, size);
x = SkScalarCeilToScalar(x);
+ // Flush periodically to test continued drawing after a flush. Using color
+ // to avoid churning the RNG and having to rebaseline images.
+ if (!(color & 0xf)) {
+ fTarget->flush();
+ }
if (x + 100 > kSize) {
x = 0;
y += SkScalarCeilToScalar(size + 3);
diff --git a/src/atlastext/SkInternalAtlasTextContext.cpp b/src/atlastext/SkInternalAtlasTextContext.cpp
index 8be7e1fb67..858ae4da01 100644
--- a/src/atlastext/SkInternalAtlasTextContext.cpp
+++ b/src/atlastext/SkInternalAtlasTextContext.cpp
@@ -98,17 +98,16 @@ void SkInternalAtlasTextContext::flush() {
for (const auto& upload : fASAPUploads) {
upload(writePixelsFn);
}
- auto draw = fDraws.begin();
auto inlineUpload = fInlineUploads.begin();
- while (draw != fDraws.end()) {
- while (inlineUpload != fInlineUploads.end() && inlineUpload->fToken == draw->fToken) {
+ for (const auto& draw : fDraws) {
+ while (inlineUpload != fInlineUploads.end() && inlineUpload->fToken == draw.fToken) {
inlineUpload->fUpload(writePixelsFn);
++inlineUpload;
}
- auto vertices = reinterpret_cast<const SkAtlasTextRenderer::SDFVertex*>(draw->fVertexData);
- fRenderer->drawSDFGlyphs(draw->fTargetHandle, fDistanceFieldAtlas.fTextureHandle, vertices,
- draw->fGlyphCnt);
- ++draw;
+ auto vertices = reinterpret_cast<const SkAtlasTextRenderer::SDFVertex*>(draw.fVertexData);
+ fRenderer->drawSDFGlyphs(draw.fTargetHandle, fDistanceFieldAtlas.fTextureHandle, vertices,
+ draw.fGlyphCnt);
+ this->flushToken();
}
fASAPUploads.reset();
fInlineUploads.reset();