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.8 by root, Sat Aug 11 11:32:29 2007 UTC vs.
Revision 1.10 by root, Sat Aug 11 12:07:54 2007 UTC

252 rc_v2f (arr, x12, y2); 252 rc_v2f (arr, x12, y2);
253} 253}
254 254
255void 255void
256pango_opengl_render_layout_subpixel (PangoLayout *layout, 256pango_opengl_render_layout_subpixel (PangoLayout *layout,
257 rc_t *rc,
257 int x, int y, 258 int x, int y,
258 float r, float g, float b, float a, 259 float r, float g, float b, float a,
259 int flags) 260 int flags)
260{ 261{
261 PangoContext *context; 262 PangoContext *context;
266 context = pango_layout_get_context (layout); 267 context = pango_layout_get_context (layout);
267 fontmap = pango_context_get_font_map (context); 268 fontmap = pango_context_get_font_map (context);
268 renderer = _pango_opengl_font_map_get_renderer (PANGO_OPENGL_FONT_MAP (fontmap)); 269 renderer = _pango_opengl_font_map_get_renderer (PANGO_OPENGL_FONT_MAP (fontmap));
269 gl = PANGO_OPENGL_RENDERER (renderer); 270 gl = PANGO_OPENGL_RENDERER (renderer);
270 271
271 gl->rc = rc_alloc (); 272 gl->rc = rc;
272 gl->r = r; 273 gl->r = r;
273 gl->g = g; 274 gl->g = g;
274 gl->b = b; 275 gl->b = b;
275 gl->a = a; 276 gl->a = a;
276 gl->flags = flags; 277 gl->flags = flags;
277 278
278 pango_renderer_draw_layout (renderer, layout, x, y); 279 pango_renderer_draw_layout (renderer, layout, x, y);
279
280 rc_free (gl->rc);
281} 280}
282 281
283void 282void
284pango_opengl_render_layout (PangoLayout *layout, 283pango_opengl_render_layout (PangoLayout *layout,
284 rc_t *rc,
285 int x, int y, 285 int x, int y,
286 float r, float g, float b, float a, 286 float r, float g, float b, float a,
287 int flags) 287 int flags)
288{ 288{
289 pango_opengl_render_layout_subpixel (layout, x * PANGO_SCALE, y * PANGO_SCALE, r, g, b, a, flags); 289 pango_opengl_render_layout_subpixel (
290 layout, rc, x * PANGO_SCALE, y * PANGO_SCALE, r, g, b, a, flags
291 );
290} 292}
291 293
292static void 294static void
293pango_opengl_renderer_init (PangoOpenGLRenderer *renderer) 295pango_opengl_renderer_init (PangoOpenGLRenderer *renderer)
294{ 296{
301} 303}
302 304
303static void 305static void
304prepare_run (PangoRenderer *renderer, PangoLayoutRun *run) 306prepare_run (PangoRenderer *renderer, PangoLayoutRun *run)
305{ 307{
306 PangoOpenGLRenderer *glrenderer = (PangoOpenGLRenderer *)renderer; 308 PangoOpenGLRenderer *gl = (PangoOpenGLRenderer *)renderer;
307 PangoColor *fg = 0; 309 PangoColor *fg = 0;
308 GSList *l; 310 GSList *l;
309 unsigned char r, g, b, a; 311 unsigned char r, g, b, a;
310 312
311 renderer->underline = PANGO_UNDERLINE_NONE; 313 renderer->underline = PANGO_UNDERLINE_NONE;
312 renderer->strikethrough = FALSE; 314 renderer->strikethrough = FALSE;
313 315
314 glrenderer->key.mode = GL_QUADS; 316 gl->key.mode = GL_QUADS;
315 glrenderer->key.format = GL_T2F_V3F; 317 gl->key.format = GL_T2F_V3F;
316 glrenderer->key.texname = 0; 318 gl->key.texname = 0;
317 319
318 for (l = run->item->analysis.extra_attrs; l; l = l->next) 320 for (l = run->item->analysis.extra_attrs; l; l = l->next)
319 { 321 {
320 PangoAttribute *attr = l->data; 322 PangoAttribute *attr = l->data;
321 323
344 g = fg->green * (255.f / 65535.f); 346 g = fg->green * (255.f / 65535.f);
345 b = fg->blue * (255.f / 65535.f); 347 b = fg->blue * (255.f / 65535.f);
346 } 348 }
347 else 349 else
348 { 350 {
349 r = glrenderer->r * 255.f; 351 r = gl->r * 255.f;
350 g = glrenderer->g * 255.f; 352 g = gl->g * 255.f;
351 b = glrenderer->b * 255.f; 353 b = gl->b * 255.f;
352 } 354 }
353 355
354 a = glrenderer->a * 255.f; 356 a = gl->a * 255.f;
355 357
356 if (glrenderer->flags & FLAG_INVERSE) 358 if (gl->flags & FLAG_INVERSE)
357 { 359 {
358 r ^= 0xffU; 360 r ^= 0xffU;
359 g ^= 0xffU; 361 g ^= 0xffU;
360 b ^= 0xffU; 362 b ^= 0xffU;
361 } 363 }
362 364
363 glrenderer->key.r = r; 365 gl->key.r = r;
364 glrenderer->key.g = g; 366 gl->key.g = g;
365 glrenderer->key.b = b; 367 gl->key.b = b;
366 glrenderer->key.a = a; 368 gl->key.a = a;
367} 369}
368 370
369static void 371static void
370draw_begin (PangoRenderer *renderer_) 372draw_begin (PangoRenderer *renderer_)
371{ 373{
372 PangoOpenGLRenderer *renderer = (PangoOpenGLRenderer *)renderer_; 374 PangoOpenGLRenderer *renderer = (PangoOpenGLRenderer *)renderer_;
373
374 glEnable (GL_TEXTURE_2D);
375 glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
376 glEnable (GL_BLEND);
377 gl_BlendFuncSeparate (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA,
378 GL_ONE , GL_ONE_MINUS_SRC_ALPHA);
379 glEnable (GL_ALPHA_TEST);
380 glAlphaFunc (GL_GREATER, 0.01f);
381} 375}
382 376
383static void 377static void
384draw_end (PangoRenderer *renderer_) 378draw_end (PangoRenderer *renderer_)
385{ 379{
386 PangoOpenGLRenderer *renderer = (PangoOpenGLRenderer *)renderer_; 380 PangoOpenGLRenderer *renderer = (PangoOpenGLRenderer *)renderer_;
387
388 rc_draw (renderer->rc);
389
390 glDisable (GL_ALPHA_TEST);
391 glDisable (GL_BLEND);
392 glDisable (GL_TEXTURE_2D);
393} 381}
394 382
395static void 383static void
396pango_opengl_renderer_class_init (PangoOpenGLRendererClass *klass) 384pango_opengl_renderer_class_init (PangoOpenGLRendererClass *klass)
397{ 385{

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines