[Bf-committers] [Bf-blender-cvs] SVN commit: /data/svn/bf-blender [43105] trunk/blender/source/blender/ blenfont/intern: Fix:
Campbell Barton
ideasman42 at gmail.com
Wed Jan 4 03:35:56 CET 2012
Can't the state setup/restore in blf_glyph.c be moved to
blf_draw__start/blf_draw__end?
I'd like to avoid having glGet's per character.
On Wed, Jan 4, 2012 at 6:41 AM, Diego Borghetti <bdiego at gmail.com> wrote:
> Revision: 43105
> http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=43105
> Author: bdiego
> Date: 2012-01-03 19:41:36 +0000 (Tue, 03 Jan 2012)
> Log Message:
> -----------
> 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.
>
> Modified Paths:
> --------------
> trunk/blender/source/blender/blenfont/intern/blf.c
> trunk/blender/source/blender/blenfont/intern/blf_glyph.c
>
> Modified: trunk/blender/source/blender/blenfont/intern/blf.c
> ===================================================================
> --- trunk/blender/source/blender/blenfont/intern/blf.c 2012-01-03 17:33:38 UTC (rev 43104)
> +++ trunk/blender/source/blender/blenfont/intern/blf.c 2012-01-03 19:41:36 UTC (rev 43105)
> @@ -479,7 +479,7 @@
> }
> }
>
> -static void blf_draw__start(FontBLF *font)
> +static void blf_draw__start(FontBLF *font, GLint *mode)
> {
> /*
> * The pixmap alignment hack is handle
> @@ -490,8 +490,16 @@
> 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)
> glMultMatrixd((GLdouble *)&font->m);
>
> @@ -508,12 +516,19 @@
>
> /* 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 @@
> 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);
> }
> }
>
>
> Modified: trunk/blender/source/blender/blenfont/intern/blf_glyph.c
> ===================================================================
> --- trunk/blender/source/blender/blenfont/intern/blf_glyph.c 2012-01-03 17:33:38 UTC (rev 43104)
> +++ trunk/blender/source/blender/blenfont/intern/blf_glyph.c 2012-01-03 19:41:36 UTC (rev 43105)
> @@ -368,6 +368,7 @@
> float dx, dx1;
> float y1, y2;
> float xo, yo;
> + GLint param;
>
> if ((!g->width) || (!g->height))
> return 1;
> @@ -449,6 +450,11 @@
> glBindTexture(GL_TEXTURE_2D, (font->tex_bind_state= g->tex));
> }
>
> + /* Save the current parameter to restore it later. */
> + glGetTexEnviv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, ¶m);
> + if (param != GL_MODULATE)
> + glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
> +
> if (font->flags & BLF_SHADOW) {
>
> switch(font->shadow) {
> @@ -487,5 +493,9 @@
> break;
> }
>
> + /* and restore the original value. */
> + if (param != GL_MODULATE)
> + glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, param);
> +
> return 1;
> }
>
> _______________________________________________
> Bf-blender-cvs mailing list
> Bf-blender-cvs at blender.org
> http://lists.blender.org/mailman/listinfo/bf-blender-cvs
--
- Campbell
More information about the Bf-committers
mailing list