| 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 | 7 |
| 8 #ifndef GrBatchFontCache_DEFINED | 8 #ifndef GrBatchFontCache_DEFINED |
| 9 #define GrBatchFontCache_DEFINED | 9 #define GrBatchFontCache_DEFINED |
| 10 | 10 |
| (...skipping 25 matching lines...) Expand all Loading... |
| 36 if (nullptr == glyph) { | 36 if (nullptr == glyph) { |
| 37 glyph = this->generateGlyph(skGlyph, packed, scaler); | 37 glyph = this->generateGlyph(skGlyph, packed, scaler); |
| 38 } | 38 } |
| 39 return glyph; | 39 return glyph; |
| 40 } | 40 } |
| 41 | 41 |
| 42 // This variant of the above function is called by TextBatch. At this point
, it is possible | 42 // This variant of the above function is called by TextBatch. At this point
, it is possible |
| 43 // that the maskformat of the glyph differs from what we expect. In these c
ases we will just | 43 // that the maskformat of the glyph differs from what we expect. In these c
ases we will just |
| 44 // draw a clear square. | 44 // draw a clear square. |
| 45 // skbug:4143 crbug:510931 | 45 // skbug:4143 crbug:510931 |
| 46 inline GrGlyph* getGlyph(const SkGlyph& skGlyph, GrGlyph::PackedID packed, | 46 inline GrGlyph* getGlyph(GrGlyph::PackedID packed, |
| 47 GrMaskFormat expectedMaskFormat, GrFontScaler* scal
er) { | 47 GrMaskFormat expectedMaskFormat, |
| 48 GrFontScaler* scaler) { |
| 48 GrGlyph* glyph = fCache.find(packed); | 49 GrGlyph* glyph = fCache.find(packed); |
| 49 if (nullptr == glyph) { | 50 if (nullptr == glyph) { |
| 51 // We could return this to the caller, but in practice it adds code
complexity for |
| 52 // potentially little benefit(ie, if the glyph is not in our font ca
che, then its not |
| 53 // in the atlas and we're going to be doing a texture upload anyways
). |
| 54 const SkGlyph& skGlyph = scaler->grToSkGlyph(packed); |
| 50 glyph = this->generateGlyph(skGlyph, packed, scaler); | 55 glyph = this->generateGlyph(skGlyph, packed, scaler); |
| 51 glyph->fMaskFormat = expectedMaskFormat; | 56 glyph->fMaskFormat = expectedMaskFormat; |
| 52 } | 57 } |
| 53 return glyph; | 58 return glyph; |
| 54 } | 59 } |
| 55 | 60 |
| 56 // returns true if glyph successfully added to texture atlas, false otherwis
e. If the glyph's | 61 // returns true if glyph successfully added to texture atlas, false otherwis
e. If the glyph's |
| 57 // mask format has changed, then addGlyphToAtlas will draw a clear box. Thi
s will almost never | 62 // mask format has changed, then addGlyphToAtlas will draw a clear box. Thi
s will almost never |
| 58 // happen. | 63 // happen. |
| 59 // TODO we can handle some of these cases if we really want to, but the long
term solution is to | 64 // TODO we can handle some of these cases if we really want to, but the long
term solution is to |
| 60 // get the actual glyph image itself when we get the glyph metrics. | 65 // get the actual glyph image itself when we get the glyph metrics. |
| 61 bool addGlyphToAtlas(GrDrawBatch::Target*, GrGlyph*, GrFontScaler*, const Sk
Glyph&, | 66 bool addGlyphToAtlas(GrDrawBatch::Target*, GrGlyph*, GrFontScaler*, |
| 62 GrMaskFormat expectedMaskFormat); | 67 GrMaskFormat expectedMaskFormat); |
| 63 | 68 |
| 64 // testing | 69 // testing |
| 65 int countGlyphs() const { return fCache.count(); } | 70 int countGlyphs() const { return fCache.count(); } |
| 66 | 71 |
| 67 // remove any references to this plot | 72 // remove any references to this plot |
| 68 void removeID(GrBatchAtlas::AtlasID); | 73 void removeID(GrBatchAtlas::AtlasID); |
| 69 | 74 |
| 70 // If a TextStrike is abandoned by the cache, then the caller must get a new
strike | 75 // If a TextStrike is abandoned by the cache, then the caller must get a new
strike |
| 71 bool isAbandoned() const { return fIsAbandoned; } | 76 bool isAbandoned() const { return fIsAbandoned; } |
| (...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 214 static void HandleEviction(GrBatchAtlas::AtlasID, void*); | 219 static void HandleEviction(GrBatchAtlas::AtlasID, void*); |
| 215 | 220 |
| 216 GrContext* fContext; | 221 GrContext* fContext; |
| 217 SkTDynamicHash<GrBatchTextStrike, GrFontDescKey> fCache; | 222 SkTDynamicHash<GrBatchTextStrike, GrFontDescKey> fCache; |
| 218 GrBatchAtlas* fAtlases[kMaskFormatCount]; | 223 GrBatchAtlas* fAtlases[kMaskFormatCount]; |
| 219 GrBatchTextStrike* fPreserveStrike; | 224 GrBatchTextStrike* fPreserveStrike; |
| 220 GrBatchAtlasConfig fAtlasConfigs[kMaskFormatCount]; | 225 GrBatchAtlasConfig fAtlasConfigs[kMaskFormatCount]; |
| 221 }; | 226 }; |
| 222 | 227 |
| 223 #endif | 228 #endif |
| OLD | NEW |