| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2010 Google Inc. | 2 * Copyright 2010 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 "GrAtlas.h" | 8 #include "GrAtlas.h" |
| 9 #include "GrGpu.h" | 9 #include "GrGpu.h" |
| 10 #include "GrRectanizer.h" | 10 #include "GrRectanizer.h" |
| (...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 252 glyph->init(packed, bounds); | 252 glyph->init(packed, bounds); |
| 253 fCache.insert(packed, glyph); | 253 fCache.insert(packed, glyph); |
| 254 return glyph; | 254 return glyph; |
| 255 } | 255 } |
| 256 | 256 |
| 257 bool GrTextStrike::removeUnusedPlots() { | 257 bool GrTextStrike::removeUnusedPlots() { |
| 258 fCache.getArray().visitAll(invalidate_glyph); | 258 fCache.getArray().visitAll(invalidate_glyph); |
| 259 return fAtlasMgr->removeUnusedPlots(&fAtlas); | 259 return fAtlasMgr->removeUnusedPlots(&fAtlas); |
| 260 } | 260 } |
| 261 | 261 |
| 262 bool GrTextStrike::getGlyphAtlas(GrGlyph* glyph, GrFontScaler* scaler, | 262 bool GrTextStrike::getGlyphAtlas(GrGlyph* glyph, GrFontScaler* scaler) { |
| 263 GrDrawTarget::DrawToken currentDrawToken) { | |
| 264 #if 0 // testing hack to force us to flush our cache often | 263 #if 0 // testing hack to force us to flush our cache often |
| 265 static int gCounter; | 264 static int gCounter; |
| 266 if ((++gCounter % 10) == 0) return false; | 265 if ((++gCounter % 10) == 0) return false; |
| 267 #endif | 266 #endif |
| 268 | 267 |
| 269 SkASSERT(glyph); | 268 SkASSERT(glyph); |
| 270 SkASSERT(scaler); | 269 SkASSERT(scaler); |
| 271 SkASSERT(fCache.contains(glyph)); | 270 SkASSERT(fCache.contains(glyph)); |
| 272 if (glyph->fPlot) { | 271 SkASSERT(NULL == glyph->fPlot); |
| 273 glyph->fPlot->setDrawToken(currentDrawToken); | |
| 274 return true; | |
| 275 } | |
| 276 | 272 |
| 277 SkAutoRef ar(scaler); | 273 SkAutoRef ar(scaler); |
| 278 | 274 |
| 279 int bytesPerPixel = GrMaskFormatBytesPerPixel(fMaskFormat); | 275 int bytesPerPixel = GrMaskFormatBytesPerPixel(fMaskFormat); |
| 280 size_t size = glyph->fBounds.area() * bytesPerPixel; | 276 size_t size = glyph->fBounds.area() * bytesPerPixel; |
| 281 SkAutoSMalloc<1024> storage(size); | 277 SkAutoSMalloc<1024> storage(size); |
| 282 if (!scaler->getPackedGlyphImage(glyph->fPackedID, glyph->width(), | 278 if (!scaler->getPackedGlyphImage(glyph->fPackedID, glyph->width(), |
| 283 glyph->height(), | 279 glyph->height(), |
| 284 glyph->width() * bytesPerPixel, | 280 glyph->width() * bytesPerPixel, |
| 285 storage.get())) { | 281 storage.get())) { |
| 286 return false; | 282 return false; |
| 287 } | 283 } |
| 288 | 284 |
| 289 GrPlot* plot = fAtlasMgr->addToAtlas(&fAtlas, glyph->width(), | 285 GrPlot* plot = fAtlasMgr->addToAtlas(&fAtlas, glyph->width(), |
| 290 glyph->height(), storage.get(), | 286 glyph->height(), storage.get(), |
| 291 &glyph->fAtlasLocation); | 287 &glyph->fAtlasLocation); |
| 292 if (NULL == plot) { | 288 if (NULL == plot) { |
| 293 return false; | 289 return false; |
| 294 } | 290 } |
| 295 | 291 |
| 296 glyph->fPlot = plot; | 292 glyph->fPlot = plot; |
| 297 plot->setDrawToken(currentDrawToken); | |
| 298 return true; | 293 return true; |
| 299 } | 294 } |
| OLD | NEW |