--- deliantra/Deliantra-Client/pango-render.c 2007/08/11 11:32:29 1.8 +++ deliantra/Deliantra-Client/pango-render.c 2007/08/12 08:44:22 1.11 @@ -209,21 +209,13 @@ x += g->left; y -= g->top; - x1 = g->tex.x * (1. / TC_WIDTH ); - y1 = g->tex.y * (1. / TC_HEIGHT); - x2 = g->tex.w * (1. / TC_WIDTH ) + x1; - y2 = g->tex.h * (1. / TC_HEIGHT) + y1; - if (g->tex.name != renderer->key.texname) { renderer->key.texname = g->tex.name; renderer->arr = rc_array (renderer->rc, &renderer->key); } - rc_t2f_v3f (renderer->arr, x1, y1, x , y , 0); - rc_t2f_v3f (renderer->arr, x2, y1, x + g->tex.w, y , 0); - rc_t2f_v3f (renderer->arr, x2, y2, x + g->tex.w, y + g->tex.h, 0); - rc_t2f_v3f (renderer->arr, x1, y2, x , y + g->tex.h, 0); + rc_glyph (renderer->arr, g->tex.x, g->tex.y, g->tex.w, g->tex.h, x, y); } static void @@ -254,6 +246,7 @@ void pango_opengl_render_layout_subpixel (PangoLayout *layout, + rc_t *rc, int x, int y, float r, float g, float b, float a, int flags) @@ -268,7 +261,7 @@ renderer = _pango_opengl_font_map_get_renderer (PANGO_OPENGL_FONT_MAP (fontmap)); gl = PANGO_OPENGL_RENDERER (renderer); - gl->rc = rc_alloc (); + gl->rc = rc; gl->r = r; gl->g = g; gl->b = b; @@ -276,17 +269,18 @@ gl->flags = flags; pango_renderer_draw_layout (renderer, layout, x, y); - - rc_free (gl->rc); } void pango_opengl_render_layout (PangoLayout *layout, + rc_t *rc, int x, int y, float r, float g, float b, float a, int flags) { - pango_opengl_render_layout_subpixel (layout, x * PANGO_SCALE, y * PANGO_SCALE, r, g, b, a, flags); + pango_opengl_render_layout_subpixel ( + layout, rc, x * PANGO_SCALE, y * PANGO_SCALE, r, g, b, a, flags + ); } static void @@ -303,7 +297,7 @@ static void prepare_run (PangoRenderer *renderer, PangoLayoutRun *run) { - PangoOpenGLRenderer *glrenderer = (PangoOpenGLRenderer *)renderer; + PangoOpenGLRenderer *gl = (PangoOpenGLRenderer *)renderer; PangoColor *fg = 0; GSList *l; unsigned char r, g, b, a; @@ -311,9 +305,9 @@ renderer->underline = PANGO_UNDERLINE_NONE; renderer->strikethrough = FALSE; - glrenderer->key.mode = GL_QUADS; - glrenderer->key.format = GL_T2F_V3F; - glrenderer->key.texname = 0; + gl->key.mode = GL_QUADS; + gl->key.format = 0; // glyphs + gl->key.texname = 0; for (l = run->item->analysis.extra_attrs; l; l = l->next) { @@ -346,50 +340,36 @@ } else { - r = glrenderer->r * 255.f; - g = glrenderer->g * 255.f; - b = glrenderer->b * 255.f; + r = gl->r * 255.f; + g = gl->g * 255.f; + b = gl->b * 255.f; } - a = glrenderer->a * 255.f; + a = gl->a * 255.f; - if (glrenderer->flags & FLAG_INVERSE) + if (gl->flags & FLAG_INVERSE) { r ^= 0xffU; g ^= 0xffU; b ^= 0xffU; } - glrenderer->key.r = r; - glrenderer->key.g = g; - glrenderer->key.b = b; - glrenderer->key.a = a; + gl->key.r = r; + gl->key.g = g; + gl->key.b = b; + gl->key.a = a; } static void draw_begin (PangoRenderer *renderer_) { PangoOpenGLRenderer *renderer = (PangoOpenGLRenderer *)renderer_; - - glEnable (GL_TEXTURE_2D); - glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - glEnable (GL_BLEND); - gl_BlendFuncSeparate (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, - GL_ONE , GL_ONE_MINUS_SRC_ALPHA); - glEnable (GL_ALPHA_TEST); - glAlphaFunc (GL_GREATER, 0.01f); } static void draw_end (PangoRenderer *renderer_) { PangoOpenGLRenderer *renderer = (PangoOpenGLRenderer *)renderer_; - - rc_draw (renderer->rc); - - glDisable (GL_ALPHA_TEST); - glDisable (GL_BLEND); - glDisable (GL_TEXTURE_2D); } static void