diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2018-04-08 02:14:43 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2018-04-08 02:14:43 +0300 |
commit | 0b5ebb3265b155658d441135e152f32ba11c001d (patch) | |
tree | a518d91a7292b63aa0406577b98afcccdcf12cac | |
parent | 3725d82cee97b980e514aed1b226deb91aae9fe6 (diff) |
BLF: Fix problem with bound texture.
Previous code was assuming that the glyph texture would remain bound to
GL_TEXTURE0 until the cache would be drawn. This is not always the case,
so better save the texture and rebind it before drawing.
-rw-r--r-- | source/blender/blenfont/intern/blf_font.c | 4 | ||||
-rw-r--r-- | source/blender/blenfont/intern/blf_glyph.c | 2 | ||||
-rw-r--r-- | source/blender/blenfont/intern/blf_internal_types.h | 1 |
3 files changed, 5 insertions, 2 deletions
diff --git a/source/blender/blenfont/intern/blf_font.c b/source/blender/blenfont/intern/blf_font.c index cc7eb336b21..301f06e22b5 100644 --- a/source/blender/blenfont/intern/blf_font.c +++ b/source/blender/blenfont/intern/blf_font.c @@ -189,9 +189,9 @@ void blf_batch_draw(void) /* We need to flush widget base first to ensure correct ordering. */ UI_widgetbase_draw_cache_flush(); - BLI_assert(g_batch.font->tex_bind_state != 0); /* must still be valid */ + BLI_assert(g_batch.tex_bind_state != 0); /* must still be valid */ glActiveTexture(GL_TEXTURE0); - glBindTexture(GL_TEXTURE_2D, g_batch.font->tex_bind_state); + glBindTexture(GL_TEXTURE_2D, g_batch.tex_bind_state); GWN_vertbuf_vertex_count_set(g_batch.verts, g_batch.glyph_len); GWN_vertbuf_use(g_batch.verts); /* send data */ diff --git a/source/blender/blenfont/intern/blf_glyph.c b/source/blender/blenfont/intern/blf_glyph.c index ad7e482f8e0..21c11d96b07 100644 --- a/source/blender/blenfont/intern/blf_glyph.c +++ b/source/blender/blenfont/intern/blf_glyph.c @@ -520,6 +520,8 @@ void blf_glyph_render(FontBLF *font, GlyphBLF *g, float x, float y) glBindTexture(GL_TEXTURE_2D, (font->tex_bind_state = g->tex)); } + g_batch.tex_bind_state = g->tex; + if (font->flags & BLF_SHADOW) { rctf rect_ofs; blf_glyph_calc_rect(&rect_ofs, g, diff --git a/source/blender/blenfont/intern/blf_internal_types.h b/source/blender/blenfont/intern/blf_internal_types.h index af2dc8a66e9..1d70980d33d 100644 --- a/source/blender/blenfont/intern/blf_internal_types.h +++ b/source/blender/blenfont/intern/blf_internal_types.h @@ -45,6 +45,7 @@ typedef struct BatchBLF{ float ofs[2]; /* copy of font->pos */ float mat[4][4]; /* previous call modelmatrix. */ bool enabled, active, simple_shader; + unsigned int tex_bind_state; } BatchBLF; extern BatchBLF g_batch; |