--- deliantra/Deliantra-Client/pango-render.c 2006/07/04 23:44:23 1.2 +++ deliantra/Deliantra-Client/pango-render.c 2006/07/05 01:53:24 1.5 @@ -148,6 +148,7 @@ typedef struct glyph_info { tc_area tex; int left, top; + int generation; } glyph_info; static void @@ -174,24 +175,29 @@ g = _pango_opengl_font_get_cache_glyph_data (font, glyph); - if (!g) + if (!g || g->generation != tc_generation) { Glyph bm; font_render_glyph (&bm, font, glyph); - g = g_slice_new (glyph_info); + if (g) + g->generation = tc_generation; + else + { + g = g_slice_new (glyph_info); + + _pango_opengl_font_set_glyph_cache_destroy (font, (GDestroyNotify)free_glyph_info); + _pango_opengl_font_set_cache_glyph_data (font, glyph, g); + } + + if (renderer->curtex) + glEnd (); tc_get (&g->tex, bm.width, bm.height); g->left = bm.left; g->top = bm.top; - if (renderer->curtex) - { - glEnd (); - renderer->curtex = 0; - } - glBindTexture (GL_TEXTURE_2D, g->tex.name); glPixelStorei (GL_UNPACK_ROW_LENGTH, bm.stride); glPixelStorei (GL_UNPACK_ALIGNMENT, 1); @@ -199,8 +205,8 @@ glPixelStorei (GL_UNPACK_ROW_LENGTH, 0); glPixelStorei (GL_UNPACK_ALIGNMENT, 4); - _pango_opengl_font_set_glyph_cache_destroy (font, (GDestroyNotify)free_glyph_info); - _pango_opengl_font_set_cache_glyph_data (font, glyph, g); + renderer->curtex = g->tex.name; + glBegin (GL_QUADS); } x += g->left; @@ -218,6 +224,7 @@ glBindTexture (GL_TEXTURE_2D, g->tex.name); renderer->curtex = g->tex.name; + glBegin (GL_QUADS); } @@ -249,9 +256,9 @@ glBegin (GL_QUADS); glVertex2d (x11, y1); - glVertex2d (x12, y1); + glVertex2d (x21, y1); glVertex2d (x22, y2); - glVertex2d (x21, y2); + glVertex2d (x12, y2); glEnd (); glEnable (GL_TEXTURE_2D);