@@ -297,40 +297,34 @@ static std::shared_ptr<SkBitmap> CreateAtlasBitmap(const GlyphAtlas& atlas,
297
297
return bitmap;
298
298
}
299
299
300
- static std::shared_ptr<Texture> CreateGlyphTextureAtlas (
300
+ static std::shared_ptr<Texture> UploadGlyphTextureAtlas (
301
301
const std::shared_ptr<Allocator>& allocator,
302
+ std::shared_ptr<SkBitmap> bitmap,
302
303
const ISize& atlas_size,
303
304
PixelFormat format) {
304
305
TRACE_EVENT0 (" impeller" , __FUNCTION__);
305
306
if (!allocator) {
306
307
return nullptr ;
307
308
}
308
309
310
+ FML_DCHECK (bitmap != nullptr );
311
+ const auto & pixmap = bitmap->pixmap ();
312
+
309
313
TextureDescriptor texture_descriptor;
310
314
texture_descriptor.storage_mode = StorageMode::kHostVisible ;
311
315
texture_descriptor.format = format;
312
316
texture_descriptor.size = atlas_size;
313
317
318
+ if (pixmap.rowBytes () * pixmap.height () !=
319
+ texture_descriptor.GetByteSizeOfBaseMipLevel ()) {
320
+ return nullptr ;
321
+ }
322
+
314
323
auto texture = allocator->CreateTexture (texture_descriptor);
315
324
if (!texture || !texture->IsValid ()) {
316
325
return nullptr ;
317
326
}
318
327
texture->SetLabel (" GlyphAtlas" );
319
- return texture;
320
- }
321
-
322
- bool UploadGlyphTextureAtlas (const std::shared_ptr<Texture>& texture,
323
- std::shared_ptr<SkBitmap> bitmap) {
324
- TRACE_EVENT0 (" impeller" , __FUNCTION__);
325
-
326
- FML_DCHECK (bitmap != nullptr );
327
- const auto & pixmap = bitmap->pixmap ();
328
-
329
- auto texture_descriptor = texture->GetTextureDescriptor ();
330
- if (pixmap.rowBytes () * pixmap.height () !=
331
- texture_descriptor.GetByteSizeOfBaseMipLevel ()) {
332
- return false ;
333
- }
334
328
335
329
auto mapping = std::make_shared<fml::NonOwnedMapping>(
336
330
reinterpret_cast <const uint8_t *>(bitmap->getAddr (0 , 0 )), // data
@@ -339,9 +333,9 @@ bool UploadGlyphTextureAtlas(const std::shared_ptr<Texture>& texture,
339
333
);
340
334
341
335
if (!texture->SetContents (mapping)) {
342
- return false ;
336
+ return nullptr ;
343
337
}
344
- return true ;
338
+ return texture ;
345
339
}
346
340
347
341
std::shared_ptr<GlyphAtlas> TextRenderContextSkia::CreateGlyphAtlas (
@@ -427,29 +421,16 @@ std::shared_ptr<GlyphAtlas> TextRenderContextSkia::CreateGlyphAtlas(
427
421
format = PixelFormat::kR8G8B8A8UNormInt ;
428
422
break ;
429
423
}
424
+ auto texture = UploadGlyphTextureAtlas (GetContext ()->GetResourceAllocator (),
425
+ bitmap, atlas_size, format);
426
+ if (!texture) {
427
+ return nullptr ;
428
+ }
430
429
431
430
// ---------------------------------------------------------------------------
432
431
// Step 8: Record the texture in the glyph atlas.
433
- //
434
- // If the last_texture is the same size and type, reuse this instead of
435
- // creating a new texture.
436
432
// ---------------------------------------------------------------------------
437
- auto old_texture = last_atlas->GetTexture ();
438
- if (old_texture != nullptr &&
439
- old_texture->GetTextureDescriptor ().size == atlas_size &&
440
- old_texture->GetTextureDescriptor ().format == format) {
441
- if (!UploadGlyphTextureAtlas (old_texture, bitmap)) {
442
- return nullptr ;
443
- }
444
- glyph_atlas->SetTexture (std::move (old_texture));
445
- } else {
446
- auto texture = CreateGlyphTextureAtlas (GetContext ()->GetResourceAllocator (),
447
- atlas_size, format);
448
- if (!texture || !UploadGlyphTextureAtlas (texture, bitmap)) {
449
- return nullptr ;
450
- }
451
- glyph_atlas->SetTexture (std::move (texture));
452
- }
433
+ glyph_atlas->SetTexture (std::move (texture));
453
434
454
435
return glyph_atlas;
455
436
}
0 commit comments