ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/Deliantra-Client/pango-render.c
(Generate patch)

Comparing deliantra/Deliantra-Client/pango-render.c (file contents):
Revision 1.9 by root, Sat Aug 11 11:41:24 2007 UTC vs.
Revision 1.11 by root, Sun Aug 12 08:44:22 2007 UTC

207 } 207 }
208 208
209 x += g->left; 209 x += g->left;
210 y -= g->top; 210 y -= g->top;
211 211
212 x1 = g->tex.x * (1. / TC_WIDTH );
213 y1 = g->tex.y * (1. / TC_HEIGHT);
214 x2 = g->tex.w * (1. / TC_WIDTH ) + x1;
215 y2 = g->tex.h * (1. / TC_HEIGHT) + y1;
216
217 if (g->tex.name != renderer->key.texname) 212 if (g->tex.name != renderer->key.texname)
218 { 213 {
219 renderer->key.texname = g->tex.name; 214 renderer->key.texname = g->tex.name;
220 renderer->arr = rc_array (renderer->rc, &renderer->key); 215 renderer->arr = rc_array (renderer->rc, &renderer->key);
221 } 216 }
222 217
223 rc_t2f_v3f (renderer->arr, x1, y1, x , y , 0); 218 rc_glyph (renderer->arr, g->tex.x, g->tex.y, g->tex.w, g->tex.h, x, y);
224 rc_t2f_v3f (renderer->arr, x2, y1, x + g->tex.w, y , 0);
225 rc_t2f_v3f (renderer->arr, x2, y2, x + g->tex.w, y + g->tex.h, 0);
226 rc_t2f_v3f (renderer->arr, x1, y2, x , y + g->tex.h, 0);
227} 219}
228 220
229static void 221static void
230draw_trapezoid (PangoRenderer *renderer_, 222draw_trapezoid (PangoRenderer *renderer_,
231 PangoRenderPart part, 223 PangoRenderPart part,
252 rc_v2f (arr, x12, y2); 244 rc_v2f (arr, x12, y2);
253} 245}
254 246
255void 247void
256pango_opengl_render_layout_subpixel (PangoLayout *layout, 248pango_opengl_render_layout_subpixel (PangoLayout *layout,
249 rc_t *rc,
257 int x, int y, 250 int x, int y,
258 float r, float g, float b, float a, 251 float r, float g, float b, float a,
259 int flags) 252 int flags)
260{ 253{
261 PangoContext *context; 254 PangoContext *context;
266 context = pango_layout_get_context (layout); 259 context = pango_layout_get_context (layout);
267 fontmap = pango_context_get_font_map (context); 260 fontmap = pango_context_get_font_map (context);
268 renderer = _pango_opengl_font_map_get_renderer (PANGO_OPENGL_FONT_MAP (fontmap)); 261 renderer = _pango_opengl_font_map_get_renderer (PANGO_OPENGL_FONT_MAP (fontmap));
269 gl = PANGO_OPENGL_RENDERER (renderer); 262 gl = PANGO_OPENGL_RENDERER (renderer);
270 263
271 gl->rc = rc_alloc (); 264 gl->rc = rc;
272 gl->r = r; 265 gl->r = r;
273 gl->g = g; 266 gl->g = g;
274 gl->b = b; 267 gl->b = b;
275 gl->a = a; 268 gl->a = a;
276 gl->flags = flags; 269 gl->flags = flags;
277 270
278 glEnable (GL_TEXTURE_2D);
279 glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
280 glEnable (GL_BLEND);
281 gl_BlendFuncSeparate (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA,
282 GL_ONE , GL_ONE_MINUS_SRC_ALPHA);
283 glEnable (GL_ALPHA_TEST);
284 glAlphaFunc (GL_GREATER, 0.01f);
285
286 pango_renderer_draw_layout (renderer, layout, x, y); 271 pango_renderer_draw_layout (renderer, layout, x, y);
287
288 rc_draw (gl->rc);
289
290 glDisable (GL_ALPHA_TEST);
291 glDisable (GL_BLEND);
292 glDisable (GL_TEXTURE_2D);
293
294 rc_free (gl->rc);
295} 272}
296 273
297void 274void
298pango_opengl_render_layout (PangoLayout *layout, 275pango_opengl_render_layout (PangoLayout *layout,
276 rc_t *rc,
299 int x, int y, 277 int x, int y,
300 float r, float g, float b, float a, 278 float r, float g, float b, float a,
301 int flags) 279 int flags)
302{ 280{
303 pango_opengl_render_layout_subpixel (layout, x * PANGO_SCALE, y * PANGO_SCALE, r, g, b, a, flags); 281 pango_opengl_render_layout_subpixel (
282 layout, rc, x * PANGO_SCALE, y * PANGO_SCALE, r, g, b, a, flags
283 );
304} 284}
305 285
306static void 286static void
307pango_opengl_renderer_init (PangoOpenGLRenderer *renderer) 287pango_opengl_renderer_init (PangoOpenGLRenderer *renderer)
308{ 288{
324 304
325 renderer->underline = PANGO_UNDERLINE_NONE; 305 renderer->underline = PANGO_UNDERLINE_NONE;
326 renderer->strikethrough = FALSE; 306 renderer->strikethrough = FALSE;
327 307
328 gl->key.mode = GL_QUADS; 308 gl->key.mode = GL_QUADS;
329 gl->key.format = GL_T2F_V3F; 309 gl->key.format = 0; // glyphs
330 gl->key.texname = 0; 310 gl->key.texname = 0;
331 311
332 for (l = run->item->analysis.extra_attrs; l; l = l->next) 312 for (l = run->item->analysis.extra_attrs; l; l = l->next)
333 { 313 {
334 PangoAttribute *attr = l->data; 314 PangoAttribute *attr = l->data;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines