From a37e3b3eb43f360693ee278bf2991f829b496b25 Mon Sep 17 00:00:00 2001 From: Oleg Oshmyan Date: Wed, 8 Jan 2014 00:48:36 +0200 Subject: Distinguish cached glyphs with different hspacing when border_style == 3 hspacing affects opaque box borders. --- libass/ass_cache_template.h | 2 ++ libass/ass_render.c | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/libass/ass_cache_template.h b/libass/ass_cache_template.h index f9aab77..3d8185f 100644 --- a/libass/ass_cache_template.h +++ b/libass/ass_cache_template.h @@ -96,6 +96,7 @@ START(glyph, glyph_hash_key) FTVECTOR(outline) // border width, 16.16 GENERIC(unsigned, flags) // glyph decoration flags GENERIC(unsigned, border_style) + GENERIC(int, hspacing) // 16.16 END(GlyphHashKey) START(glyph_metrics, glyph_metrics_hash_key) @@ -114,6 +115,7 @@ START(drawing, drawing_hash_key) GENERIC(int, pbo) FTVECTOR(outline) GENERIC(unsigned, border_style) + GENERIC(int, hspacing) GENERIC(int, scale) GENERIC(unsigned, hash) STRING(text) diff --git a/libass/ass_render.c b/libass/ass_render.c index 5d91635..25a33e5 100644 --- a/libass/ass_render.c +++ b/libass/ass_render.c @@ -1042,6 +1042,10 @@ fill_glyph_hash(ASS_Renderer *priv, OutlineHashKey *outline_key, key->outline.x = double_to_d16(info->border_x); key->outline.y = double_to_d16(info->border_y); key->border_style = info->border_style; + // hpacing only matters for opaque box borders (see draw_opaque_box), + // so for normal borders, maximize cache utility by ignoring it + key->hspacing = + info->border_style == 3 ? double_to_d16(info->hspacing) : 0; key->hash = info->drawing->hash; key->text = info->drawing->text; key->pbo = info->drawing->pbo; @@ -1061,6 +1065,8 @@ fill_glyph_hash(ASS_Renderer *priv, OutlineHashKey *outline_key, key->outline.y = double_to_d16(info->border_y); key->flags = info->flags; key->border_style = info->border_style; + key->hspacing = + info->border_style == 3 ? double_to_d16(info->hspacing) : 0; } } -- cgit v1.2.3