[Bf-blender-cvs] [4dc0c923fb7] blender2.8: BLF: Perf: Do not call FT_Set_Char_Size every time.

Clément Foucault noreply at git.blender.org
Sat Mar 31 20:26:29 CEST 2018


Commit: 4dc0c923fb7f5c9c6f36ce0a63c1d19f241befa2
Author: Clément Foucault
Date:   Sat Mar 31 16:12:00 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB4dc0c923fb7f5c9c6f36ce0a63c1d19f241befa2

BLF: Perf: Do not call FT_Set_Char_Size every time.

Using FT_Set_Char_Size is slow. Calling it only when needed is more clever.

===================================================================

M	source/blender/blenfont/intern/blf_font.c

===================================================================

diff --git a/source/blender/blenfont/intern/blf_font.c b/source/blender/blenfont/intern/blf_font.c
index 2c900e897ce..b029fbe5eeb 100644
--- a/source/blender/blenfont/intern/blf_font.c
+++ b/source/blender/blenfont/intern/blf_font.c
@@ -235,6 +235,14 @@ void blf_font_size(FontBLF *font, unsigned int size, unsigned int dpi)
 	GlyphCacheBLF *gc;
 	FT_Error err;
 
+	gc = blf_glyph_cache_find(font, size, dpi);
+	if (gc) {
+		font->glyph_cache = gc;
+		/* Optimization: do not call FT_Set_Char_Size if size did not change. */
+		if (font->size == size && font->dpi == dpi)
+			return;
+	}
+
 	err = FT_Set_Char_Size(font->face, 0, (FT_F26Dot6)(size * 64), dpi, dpi);
 	if (err) {
 		/* FIXME: here we can go through the fixed size and choice a close one */
@@ -245,10 +253,7 @@ void blf_font_size(FontBLF *font, unsigned int size, unsigned int dpi)
 	font->size = size;
 	font->dpi = dpi;
 
-	gc = blf_glyph_cache_find(font, size, dpi);
-	if (gc)
-		font->glyph_cache = gc;
-	else {
+	if (!gc) {
 		gc = blf_glyph_cache_new(font);
 		if (gc)
 			font->glyph_cache = gc;



More information about the Bf-blender-cvs mailing list