Merge pull request 'perf(text): fold Ensure+Lookup into FontAtlas::EnsureAndGet (#53)' (#84) from claude/issue-53 into master
This commit is contained in:
commit
0b00d9d680
3 changed files with 13 additions and 6 deletions
|
|
@ -74,8 +74,12 @@ bool FontAtlas::ShelfPlace(int w, int h, int& outX, int& outY) {
|
|||
}
|
||||
|
||||
bool FontAtlas::Ensure(Font& font, std::uint32_t codepoint) {
|
||||
return EnsureAndGet(font, codepoint) != nullptr;
|
||||
}
|
||||
|
||||
const Glyph* FontAtlas::EnsureAndGet(Font& font, std::uint32_t codepoint) {
|
||||
Key key{&font, codepoint};
|
||||
if (cache_.contains(key)) return true;
|
||||
if (auto it = cache_.find(key); it != cache_.end()) return &it->second;
|
||||
|
||||
float fontScale = stbtt_ScaleForPixelHeight(&font.font, kBaseSize);
|
||||
|
||||
|
|
@ -98,7 +102,7 @@ bool FontAtlas::Ensure(Font& font, std::uint32_t codepoint) {
|
|||
int px = 0, py = 0;
|
||||
if (!ShelfPlace(sw, sh, px, py)) {
|
||||
stbtt_FreeSDF(sdf, nullptr);
|
||||
return false;
|
||||
return nullptr;
|
||||
}
|
||||
std::uint8_t* dst = PixelPtr();
|
||||
for (int row = 0; row < sh; ++row) {
|
||||
|
|
@ -119,8 +123,7 @@ bool FontAtlas::Ensure(Font& font, std::uint32_t codepoint) {
|
|||
MarkDirty(px, py, sw, sh);
|
||||
}
|
||||
|
||||
cache_.emplace(key, g);
|
||||
return true;
|
||||
return &cache_.emplace(key, g).first->second;
|
||||
}
|
||||
|
||||
const Glyph* FontAtlas::Lookup(Font& font, std::uint32_t codepoint) const {
|
||||
|
|
|
|||
|
|
@ -75,8 +75,7 @@ std::uint32_t UIRenderer::ShapeText(Font& font, float pxSize,
|
|||
if (cp == 0) break;
|
||||
if (cp == '\n') { continue; }
|
||||
|
||||
fontAtlas->Ensure(font, cp);
|
||||
const Glyph* g = fontAtlas->Lookup(font, cp);
|
||||
const Glyph* g = fontAtlas->EnsureAndGet(font, cp);
|
||||
if (g == nullptr) continue;
|
||||
|
||||
if (g->w > 0 && g->h > 0) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue