diff options
author | Diego Borghetti <bdiego@gmail.com> | 2012-01-03 23:41:36 +0400 |
---|---|---|
committer | Diego Borghetti <bdiego@gmail.com> | 2012-01-03 23:41:36 +0400 |
commit | b197a7ea698eac7fc671a985f672948a9a842791 (patch) | |
tree | 5bfd62e19456ff23faadf88fa6a91dc8489fff9d /source/blender/blenfont/intern/blf.c | |
parent | ea9f5e3d2af34894660ada7efcbfe0d291333db1 (diff) |
Fix:
[#25834] no color of textobjects in game engine when combined with
textured objects
[#26893] Curruption of displayed text (debug properties/fps info or bgui)
when using animated/tile uv mode
The first bug was beacuse a bad mode on the texture environment, now
we save the current glTexEnvi, set the one that we need, draw and
restore the original at the end.
The second was because a missing call to glLoadIdentity for the
texture matrix and as we do before, now we do a gl-Push/Identity/Pop
for this matrix to.
The first problem was solved by Kanttori and the second by Dalai.
Diffstat (limited to 'source/blender/blenfont/intern/blf.c')
-rw-r--r-- | source/blender/blenfont/intern/blf.c | 31 |
1 files changed, 24 insertions, 7 deletions
diff --git a/source/blender/blenfont/intern/blf.c b/source/blender/blenfont/intern/blf.c index 9b26e7a54be..f8018e05431 100644 --- a/source/blender/blenfont/intern/blf.c +++ b/source/blender/blenfont/intern/blf.c @@ -479,7 +479,7 @@ void BLF_rotation_default(float angle) } } -static void blf_draw__start(FontBLF *font) +static void blf_draw__start(FontBLF *font, GLint *mode) { /* * The pixmap alignment hack is handle @@ -490,6 +490,14 @@ static void blf_draw__start(FontBLF *font) glEnable(GL_TEXTURE_2D); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + /* Save the current matrix mode. */ + glGetIntegerv(GL_MATRIX_MODE, mode); + + glMatrixMode(GL_TEXTURE); + glPushMatrix(); + glLoadIdentity(); + + glMatrixMode(GL_MODELVIEW); glPushMatrix(); if (font->flags & BLF_MATRIX) @@ -508,12 +516,19 @@ static void blf_draw__start(FontBLF *font) /* always bind the texture for the first glyph */ font->tex_bind_state= -1; - } -static void blf_draw__end(void) +static void blf_draw__end(GLint mode) { + glMatrixMode(GL_TEXTURE); glPopMatrix(); + + glMatrixMode(GL_MODELVIEW); + glPopMatrix(); + + if (mode != GL_MODELVIEW) + glMatrixMode(mode); + glDisable(GL_BLEND); glDisable(GL_TEXTURE_2D); } @@ -521,22 +536,24 @@ static void blf_draw__end(void) void BLF_draw(int fontid, const char *str, size_t len) { FontBLF *font= BLF_get(fontid); + GLint mode; if (font && font->glyph_cache) { - blf_draw__start(font); + blf_draw__start(font, &mode); blf_font_draw(font, str, len); - blf_draw__end(); + blf_draw__end(mode); } } void BLF_draw_ascii(int fontid, const char *str, size_t len) { FontBLF *font= BLF_get(fontid); + GLint mode; if (font && font->glyph_cache) { - blf_draw__start(font); + blf_draw__start(font, &mode); blf_font_draw_ascii(font, str, len); - blf_draw__end(); + blf_draw__end(mode); } } |