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

Side by Side Diff: src/gpu/GrDistanceFieldTextContext.cpp

Issue 585853003: Don't try to add large glyphs to the font atlas. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Add comments Created 6 years, 3 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 unified diff | Download patch
« no previous file with comments | « src/gpu/GrBitmapTextContext.cpp ('k') | src/gpu/GrTextStrike.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2013 Google Inc. 2 * Copyright 2013 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "GrDistanceFieldTextContext.h" 8 #include "GrDistanceFieldTextContext.h"
9 #include "GrAtlas.h" 9 #include "GrAtlas.h"
10 #include "SkColorFilter.h" 10 #include "SkColorFilter.h"
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after
266 if (true || NULL == glyph->fPlot) { 266 if (true || NULL == glyph->fPlot) {
267 int x = vx >> 16; 267 int x = vx >> 16;
268 int y = vy >> 16; 268 int y = vy >> 16;
269 if (fClipRect.quickReject(x, y, x + width, y + height)) { 269 if (fClipRect.quickReject(x, y, x + width, y + height)) {
270 // SkCLZ(3); // so we can set a break-point in the debugger 270 // SkCLZ(3); // so we can set a break-point in the debugger
271 return; 271 return;
272 } 272 }
273 } 273 }
274 */ 274 */
275 if (NULL == glyph->fPlot) { 275 if (NULL == glyph->fPlot) {
276 if (fStrike->addGlyphToAtlas(glyph, scaler)) { 276 if (!fStrike->glyphTooLargeForAtlas(glyph)) {
277 goto HAS_ATLAS; 277 if (fStrike->addGlyphToAtlas(glyph, scaler)) {
278 } 278 goto HAS_ATLAS;
279 }
279 280
280 // try to clear out an unused plot before we flush 281 // try to clear out an unused plot before we flush
281 if (fContext->getFontCache()->freeUnusedPlot(fStrike) && 282 if (fContext->getFontCache()->freeUnusedPlot(fStrike) &&
282 fStrike->addGlyphToAtlas(glyph, scaler)) { 283 fStrike->addGlyphToAtlas(glyph, scaler)) {
283 goto HAS_ATLAS; 284 goto HAS_ATLAS;
284 } 285 }
285 286
286 if (c_DumpFontCache) { 287 if (c_DumpFontCache) {
287 #ifdef SK_DEVELOPER 288 #ifdef SK_DEVELOPER
288 fContext->getFontCache()->dump(); 289 fContext->getFontCache()->dump();
289 #endif 290 #endif
290 } 291 }
291 292
292 // before we purge the cache, we must flush any accumulated draws 293 // before we purge the cache, we must flush any accumulated draws
293 this->flushGlyphs(); 294 this->flushGlyphs();
294 fContext->flush(); 295 fContext->flush();
295 296
296 // we should have an unused plot now 297 // we should have an unused plot now
297 if (fContext->getFontCache()->freeUnusedPlot(fStrike) && 298 if (fContext->getFontCache()->freeUnusedPlot(fStrike) &&
298 fStrike->addGlyphToAtlas(glyph, scaler)) { 299 fStrike->addGlyphToAtlas(glyph, scaler)) {
299 goto HAS_ATLAS; 300 goto HAS_ATLAS;
301 }
300 } 302 }
301 303
302 if (NULL == glyph->fPath) { 304 if (NULL == glyph->fPath) {
303 SkPath* path = SkNEW(SkPath); 305 SkPath* path = SkNEW(SkPath);
304 if (!scaler->getGlyphPath(glyph->glyphID(), path)) { 306 if (!scaler->getGlyphPath(glyph->glyphID(), path)) {
305 // flag the glyph as being dead? 307 // flag the glyph as being dead?
306 delete path; 308 delete path;
307 return; 309 return;
308 } 310 }
309 glyph->fPath = path; 311 glyph->fPath = path;
(...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after
662 SkScalarToFixed(x) - (glyph.fAdvanceX >> a lignShift), 664 SkScalarToFixed(x) - (glyph.fAdvanceX >> a lignShift),
663 SkScalarToFixed(y) - (glyph.fAdvanceY >> a lignShift), 665 SkScalarToFixed(y) - (glyph.fAdvanceY >> a lignShift),
664 fontScaler); 666 fontScaler);
665 } 667 }
666 pos += scalarsPerPosition; 668 pos += scalarsPerPosition;
667 } 669 }
668 } 670 }
669 671
670 this->finish(); 672 this->finish();
671 } 673 }
OLDNEW
« no previous file with comments | « src/gpu/GrBitmapTextContext.cpp ('k') | src/gpu/GrTextStrike.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698