Skip to content

Commit

Permalink
Codechange: Use reusable temporary buffer in Win32FontCache. (#12666)
Browse files Browse the repository at this point in the history
This avoids allocating and deleting a temporary buffer for every glyph that is rendered into a sprite.
  • Loading branch information
PeterN committed May 17, 2024
1 parent 4940b6f commit c854815
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 4 deletions.
5 changes: 1 addition & 4 deletions src/os/windows/font_win32.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
#include "../../stdafx.h"
#include "../../debug.h"
#include "../../blitter/factory.hpp"
#include "../../core/alloc_func.hpp"
#include "../../core/math_func.hpp"
#include "../../core/mem_func.hpp"
#include "../../error_func.h"
Expand Down Expand Up @@ -209,7 +208,7 @@ void Win32FontCache::ClearFontCache()
if (width > MAX_GLYPH_DIM || height > MAX_GLYPH_DIM) UserError("Font glyph is too large");

/* Call GetGlyphOutline again with size to actually render the glyph. */
uint8_t *bmp = new uint8_t[size];
uint8_t *bmp = this->render_buffer.Allocate(size);
GetGlyphOutline(this->dc, key, GGO_GLYPH_INDEX | (aa ? GGO_GRAY8_BITMAP : GGO_BITMAP), &gm, size, bmp, &mat);

/* GDI has rendered the glyph, now we allocate a sprite and copy the image into it. */
Expand Down Expand Up @@ -259,8 +258,6 @@ void Win32FontCache::ClearFontCache()

this->SetGlyphPtr(key, &new_glyph);

delete[] bmp;

return new_glyph.sprite;
}

Expand Down
3 changes: 3 additions & 0 deletions src/os/windows/font_win32.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
#ifndef FONT_WIN32_H
#define FONT_WIN32_H

#include "../../core/alloc_type.hpp"
#include "../../fontcache/truetypefontcache.h"
#include "win32.h"

Expand All @@ -25,6 +26,8 @@ class Win32FontCache : public TrueTypeFontCache {
SIZE glyph_size; ///< Maximum size of regular glyphs.
std::string fontname; ///< Cached copy of loaded font facename

ReusableBuffer<uint8_t> render_buffer; ///< Temporary buffer for rendering glyphs.

void SetFontSize(int pixels);

protected:
Expand Down

0 comments on commit c854815

Please sign in to comment.