Move glTexEnvi to draw__start/draw__end.
authorDiego Borghetti <bdiego@gmail.com>
Fri, 6 Jan 2012 16:40:57 +0000 (16:40 +0000)
committerDiego Borghetti <bdiego@gmail.com>
Fri, 6 Jan 2012 16:40:57 +0000 (16:40 +0000)
As Campbell point, this is to avoid call glGet/glTexEnvi
on each character.

source/blender/blenfont/intern/blf.c
source/blender/blenfont/intern/blf_glyph.c

index f8018e05431933fb3f84ddac0bbe6f5f94fc7a29..a387b416c388ed0b5aa6a76883fa84c0cbe78bca 100644 (file)
@@ -479,7 +479,7 @@ void BLF_rotation_default(float angle)
        }
 }
 
-static void blf_draw__start(FontBLF *font, GLint *mode)
+static void blf_draw__start(FontBLF *font, GLint *mode, GLint *param)
 {
        /*
         * The pixmap alignment hack is handle
@@ -516,10 +516,19 @@ static void blf_draw__start(FontBLF *font, GLint *mode)
 
        /* always bind the texture for the first glyph */
        font->tex_bind_state= -1;
+
+       /* Save the current parameter to restore it later. */
+       glGetTexEnviv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, param);
+       if (*param != GL_MODULATE)
+               glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
 }
 
-static void blf_draw__end(GLint mode)
+static void blf_draw__end(GLint mode, GLint param)
 {
+       /* and restore the original value. */
+       if (param != GL_MODULATE)
+               glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, param);
+
        glMatrixMode(GL_TEXTURE);
        glPopMatrix();
 
@@ -536,24 +545,24 @@ static void blf_draw__end(GLint mode)
 void BLF_draw(int fontid, const char *str, size_t len)
 {
        FontBLF *font= BLF_get(fontid);
-       GLint mode;
+       GLint mode, param;
 
        if (font && font->glyph_cache) {
-               blf_draw__start(font, &mode);
+               blf_draw__start(font, &mode, &param);
                blf_font_draw(font, str, len);
-               blf_draw__end(mode);
+               blf_draw__end(mode, param);
        }
 }
 
 void BLF_draw_ascii(int fontid, const char *str, size_t len)
 {
        FontBLF *font= BLF_get(fontid);
-       GLint mode;
+       GLint mode, param;
 
        if (font && font->glyph_cache) {
-               blf_draw__start(font, &mode);
+               blf_draw__start(font, &mode, &param);
                blf_font_draw_ascii(font, str, len);
-               blf_draw__end(mode);
+               blf_draw__end(mode, param);
        }
 }
 
index f8c589a7051485a19ed3f22f9c0b9ba3dbd798d7..f0cfcdc97b9a1d4f3de36359b68d03a5ce73d76e 100644 (file)
@@ -368,7 +368,6 @@ int blf_glyph_render(FontBLF *font, GlyphBLF *g, float x, float y)
        float dx, dx1;
        float y1, y2;
        float xo, yo;
-       GLint param;
 
        if ((!g->width) || (!g->height))
                return 1;
@@ -450,11 +449,6 @@ int blf_glyph_render(FontBLF *font, GlyphBLF *g, float x, float y)
                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, &param);
-       if (param != GL_MODULATE)
-               glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
-
        if (font->flags & BLF_SHADOW) {
 
                switch(font->shadow) {
@@ -493,9 +487,5 @@ int blf_glyph_render(FontBLF *font, GlyphBLF *g, float x, float y)
                        break;
        }
 
-       /* and restore the original value. */
-       if (param != GL_MODULATE)
-               glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, param);
-
        return 1;
 }