@@ -297,40 +297,34 @@ static std::shared_ptr<SkBitmap> CreateAtlasBitmap(const GlyphAtlas& atlas,
297297 return bitmap;
298298}
299299
300- static std::shared_ptr<Texture> CreateGlyphTextureAtlas (
300+ static std::shared_ptr<Texture> UploadGlyphTextureAtlas (
301301 const std::shared_ptr<Allocator>& allocator,
302+ std::shared_ptr<SkBitmap> bitmap,
302303 const ISize& atlas_size,
303304 PixelFormat format) {
304305 TRACE_EVENT0 (" impeller" , __FUNCTION__);
305306 if (!allocator) {
306307 return nullptr ;
307308 }
308309
310+ FML_DCHECK (bitmap != nullptr );
311+ const auto & pixmap = bitmap->pixmap ();
312+
309313 TextureDescriptor texture_descriptor;
310314 texture_descriptor.storage_mode = StorageMode::kHostVisible ;
311315 texture_descriptor.format = format;
312316 texture_descriptor.size = atlas_size;
313317
318+ if (pixmap.rowBytes () * pixmap.height () !=
319+ texture_descriptor.GetByteSizeOfBaseMipLevel ()) {
320+ return nullptr ;
321+ }
322+
314323 auto texture = allocator->CreateTexture (texture_descriptor);
315324 if (!texture || !texture->IsValid ()) {
316325 return nullptr ;
317326 }
318327 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- }
334328
335329 auto mapping = std::make_shared<fml::NonOwnedMapping>(
336330 reinterpret_cast <const uint8_t *>(bitmap->getAddr (0 , 0 )), // data
@@ -339,9 +333,9 @@ bool UploadGlyphTextureAtlas(const std::shared_ptr<Texture>& texture,
339333 );
340334
341335 if (!texture->SetContents (mapping)) {
342- return false ;
336+ return nullptr ;
343337 }
344- return true ;
338+ return texture ;
345339}
346340
347341std::shared_ptr<GlyphAtlas> TextRenderContextSkia::CreateGlyphAtlas (
@@ -427,29 +421,16 @@ std::shared_ptr<GlyphAtlas> TextRenderContextSkia::CreateGlyphAtlas(
427421 format = PixelFormat::kR8G8B8A8UNormInt ;
428422 break ;
429423 }
424+ auto texture = UploadGlyphTextureAtlas (GetContext ()->GetResourceAllocator (),
425+ bitmap, atlas_size, format);
426+ if (!texture) {
427+ return nullptr ;
428+ }
430429
431430 // ---------------------------------------------------------------------------
432431 // 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.
436432 // ---------------------------------------------------------------------------
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));
453434
454435 return glyph_atlas;
455436}
0 commit comments