Flutter Impeller
impeller::LazyGlyphAtlas Class Reference

#include <lazy_glyph_atlas.h>

Public Member Functions

 LazyGlyphAtlas (std::shared_ptr< TypographerContext > typographer_context)
 
 ~LazyGlyphAtlas ()
 
void AddTextFrame (const std::shared_ptr< TextFrame > &frame, Rational scale, Point offset, const Matrix &transform, std::optional< GlyphProperties > properties)
 
void ResetTextFrames ()
 
const std::shared_ptr< GlyphAtlas > & CreateOrGetGlyphAtlas (Context &context, HostBuffer &host_buffer, GlyphAtlas::Type type) const
 

Detailed Description

Definition at line 16 of file lazy_glyph_atlas.h.

Constructor & Destructor Documentation

◆ LazyGlyphAtlas()

impeller::LazyGlyphAtlas::LazyGlyphAtlas ( std::shared_ptr< TypographerContext typographer_context)
explicit

Definition at line 20 of file lazy_glyph_atlas.cc.

22  : typographer_context_(std::move(typographer_context)),
23  alpha_context_(typographer_context_
24  ? typographer_context_->CreateGlyphAtlasContext(
26  : nullptr),
27  color_context_(typographer_context_
28  ? typographer_context_->CreateGlyphAtlasContext(
30  : nullptr) {}

◆ ~LazyGlyphAtlas()

impeller::LazyGlyphAtlas::~LazyGlyphAtlas ( )
default

Member Function Documentation

◆ AddTextFrame()

void impeller::LazyGlyphAtlas::AddTextFrame ( const std::shared_ptr< TextFrame > &  frame,
Rational  scale,
Point  offset,
const Matrix transform,
std::optional< GlyphProperties properties 
)

Definition at line 34 of file lazy_glyph_atlas.cc.

38  {
39  frame->SetPerFrameData(scale, offset, transform, properties);
40  FML_DCHECK(alpha_atlas_ == nullptr && color_atlas_ == nullptr);
41  if (frame->GetAtlasType() == GlyphAtlas::Type::kAlphaBitmap) {
42  alpha_text_frames_.push_back(frame);
43  } else {
44  color_text_frames_.push_back(frame);
45  }
46 }

References impeller::GlyphAtlas::kAlphaBitmap, and transform.

Referenced by impeller::testing::TEST_P().

◆ CreateOrGetGlyphAtlas()

const std::shared_ptr< GlyphAtlas > & impeller::LazyGlyphAtlas::CreateOrGetGlyphAtlas ( Context context,
HostBuffer host_buffer,
GlyphAtlas::Type  type 
) const

Definition at line 55 of file lazy_glyph_atlas.cc.

58  {
59  {
60  if (type == GlyphAtlas::Type::kAlphaBitmap && alpha_atlas_) {
61  return alpha_atlas_;
62  }
63  if (type == GlyphAtlas::Type::kColorBitmap && color_atlas_) {
64  return color_atlas_;
65  }
66  }
67 
68  if (!typographer_context_) {
69  VALIDATION_LOG << "Unable to render text because a TypographerContext has "
70  "not been set.";
71  return kNullGlyphAtlas;
72  }
73  if (!typographer_context_->IsValid()) {
75  << "Unable to render text because the TypographerContext is invalid.";
76  return kNullGlyphAtlas;
77  }
78 
79  auto& glyph_map = type == GlyphAtlas::Type::kAlphaBitmap ? alpha_text_frames_
80  : color_text_frames_;
81  const std::shared_ptr<GlyphAtlasContext>& atlas_context =
82  type == GlyphAtlas::Type::kAlphaBitmap ? alpha_context_ : color_context_;
83  std::shared_ptr<GlyphAtlas> atlas = typographer_context_->CreateGlyphAtlas(
84  context, type, host_buffer, atlas_context, glyph_map);
85  if (!atlas || !atlas->IsValid()) {
86  VALIDATION_LOG << "Could not create valid atlas.";
87  return kNullGlyphAtlas;
88  }
90  alpha_atlas_ = std::move(atlas);
91  return alpha_atlas_;
92  }
94  color_atlas_ = std::move(atlas);
95  return color_atlas_;
96  }
97  FML_UNREACHABLE();
98 }
GLenum type
static const std::shared_ptr< GlyphAtlas > kNullGlyphAtlas
#define VALIDATION_LOG
Definition: validation.h:91

References impeller::GlyphAtlas::kAlphaBitmap, impeller::GlyphAtlas::kColorBitmap, impeller::kNullGlyphAtlas, type, and VALIDATION_LOG.

Referenced by impeller::testing::TEST_P().

◆ ResetTextFrames()

void impeller::LazyGlyphAtlas::ResetTextFrames ( )

Definition at line 48 of file lazy_glyph_atlas.cc.

48  {
49  alpha_text_frames_.clear();
50  color_text_frames_.clear();
51  alpha_atlas_.reset();
52  color_atlas_.reset();
53 }

The documentation for this class was generated from the following files: