OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 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 #include "GrAtlasTextContext.h" | 7 #include "GrAtlasTextContext.h" |
8 | 8 |
9 #include "GrBatch.h" | 9 #include "GrBatch.h" |
10 #include "GrBatchFontCache.h" | 10 #include "GrBatchFontCache.h" |
(...skipping 391 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
402 // We have to remake the blob because changes may invalidate our mas
ks. | 402 // We have to remake the blob because changes may invalidate our mas
ks. |
403 // TODO we could probably get away reuse most of the time if the poi
nter is unique, | 403 // TODO we could probably get away reuse most of the time if the poi
nter is unique, |
404 // but we'd have to clear the subrun information | 404 // but we'd have to clear the subrun information |
405 fCache->remove(cacheBlob); | 405 fCache->remove(cacheBlob); |
406 cacheBlob.reset(SkRef(fCache->createCachedBlob(blob, key, blurRec, s
kPaint, | 406 cacheBlob.reset(SkRef(fCache->createCachedBlob(blob, key, blurRec, s
kPaint, |
407 kGrayTextVASize))); | 407 kGrayTextVASize))); |
408 this->regenerateTextBlob(cacheBlob, skPaint, grPaint.getColor(), vie
wMatrix, | 408 this->regenerateTextBlob(cacheBlob, skPaint, grPaint.getColor(), vie
wMatrix, |
409 blob, x, y, drawFilter, clipRect, rt, clip,
grPaint); | 409 blob, x, y, drawFilter, clipRect, rt, clip,
grPaint); |
410 } else { | 410 } else { |
411 // If we can reuse the blob, then make sure we update the blob's vie
wmatrix, and x/y | 411 // If we can reuse the blob, then make sure we update the blob's vie
wmatrix, and x/y |
412 // offsets | 412 // offsets. Note, we offset the vertex bounds right before flushing |
413 // TODO bounds are wrong | |
414 cacheBlob->fViewMatrix = viewMatrix; | 413 cacheBlob->fViewMatrix = viewMatrix; |
415 cacheBlob->fX = x; | 414 cacheBlob->fX = x; |
416 cacheBlob->fY = y; | 415 cacheBlob->fY = y; |
417 fCache->makeMRU(cacheBlob); | 416 fCache->makeMRU(cacheBlob); |
418 #ifdef CACHE_SANITY_CHECK | 417 #ifdef CACHE_SANITY_CHECK |
419 { | 418 { |
420 int glyphCount = 0; | 419 int glyphCount = 0; |
421 int runCount = 0; | 420 int runCount = 0; |
422 GrTextBlobCache::BlobGlyphCount(&glyphCount, &runCount, blob); | 421 GrTextBlobCache::BlobGlyphCount(&glyphCount, &runCount, blob); |
423 SkAutoTUnref<GrAtlasTextBlob> sanityBlob(fCache->createBlob(glyp
hCount, runCount, | 422 SkAutoTUnref<GrAtlasTextBlob> sanityBlob(fCache->createBlob(glyp
hCount, runCount, |
(...skipping 1244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1668 GrGlyph* glyph; | 1667 GrGlyph* glyph; |
1669 if (regenerateGlyphs) { | 1668 if (regenerateGlyphs) { |
1670 // Get the id from the old glyph, and use the new st
rike to lookup | 1669 // Get the id from the old glyph, and use the new st
rike to lookup |
1671 // the glyph. | 1670 // the glyph. |
1672 glyph = blob->fGlyphs[glyphOffset]; | 1671 glyph = blob->fGlyphs[glyphOffset]; |
1673 blob->fGlyphs[glyphOffset] = strike->getGlyph(glyph-
>fPackedID, | 1672 blob->fGlyphs[glyphOffset] = strike->getGlyph(glyph-
>fPackedID, |
1674 scaler
); | 1673 scaler
); |
1675 } | 1674 } |
1676 glyph = blob->fGlyphs[glyphOffset]; | 1675 glyph = blob->fGlyphs[glyphOffset]; |
1677 SkASSERT(glyph); | 1676 SkASSERT(glyph); |
| 1677 SkASSERT(glyph->fMaskFormat == fMaskFormat); |
1678 | 1678 |
1679 if (!fFontCache->hasGlyph(glyph) && | 1679 if (!fFontCache->hasGlyph(glyph) && |
1680 !strike->addGlyphToAtlas(batchTarget, glyph, scaler)
) { | 1680 !strike->addGlyphToAtlas(batchTarget, glyph, scaler)
) { |
1681 this->flush(batchTarget, &flushInfo); | 1681 this->flush(batchTarget, &flushInfo); |
1682 batchTarget->initDraw(gp, pipeline); | 1682 batchTarget->initDraw(gp, pipeline); |
1683 brokenRun = glyphIdx > 0; | 1683 brokenRun = glyphIdx > 0; |
1684 | 1684 |
1685 SkDEBUGCODE(bool success =) strike->addGlyphToAtlas(
batchTarget, | 1685 SkDEBUGCODE(bool success =) strike->addGlyphToAtlas(
batchTarget, |
1686
glyph, | 1686
glyph, |
1687
scaler); | 1687
scaler); |
(...skipping 596 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2284 gTextContext->createDrawTextBlob(rt, clip, grPaint, skPaint, viewMat
rix, text, | 2284 gTextContext->createDrawTextBlob(rt, clip, grPaint, skPaint, viewMat
rix, text, |
2285 static_cast<size_t>(textLen), 0, 0,
noClip)); | 2285 static_cast<size_t>(textLen), 0, 0,
noClip)); |
2286 | 2286 |
2287 SkScalar transX = static_cast<SkScalar>(random->nextU()); | 2287 SkScalar transX = static_cast<SkScalar>(random->nextU()); |
2288 SkScalar transY = static_cast<SkScalar>(random->nextU()); | 2288 SkScalar transY = static_cast<SkScalar>(random->nextU()); |
2289 const GrAtlasTextBlob::Run::SubRunInfo& info = blob->fRuns[0].fSubRunInfo[0]
; | 2289 const GrAtlasTextBlob::Run::SubRunInfo& info = blob->fRuns[0].fSubRunInfo[0]
; |
2290 return gTextContext->createBatch(blob, info, textLen, 0, 0, color, transX, t
ransY, skPaint); | 2290 return gTextContext->createBatch(blob, info, textLen, 0, 0, color, transX, t
ransY, skPaint); |
2291 } | 2291 } |
2292 | 2292 |
2293 #endif | 2293 #endif |
OLD | NEW |