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.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 pango_renderer_draw_layout (renderer, layout, x, y); 271 pango_renderer_draw_layout (renderer, layout, x, y);
279
280 rc_free (gl->rc);
281} 272}
282 273
283void 274void
284pango_opengl_render_layout (PangoLayout *layout, 275pango_opengl_render_layout (PangoLayout *layout,
276 rc_t *rc,
285 int x, int y, 277 int x, int y,
286 float r, float g, float b, float a, 278 float r, float g, float b, float a,
287 int flags) 279 int flags)
288{ 280{
289 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 );
290} 284}
291 285
292static void 286static void
293pango_opengl_renderer_init (PangoOpenGLRenderer *renderer) 287pango_opengl_renderer_init (PangoOpenGLRenderer *renderer)
294{ 288{
301} 295}
302 296
303static void 297static void
304prepare_run (PangoRenderer *renderer, PangoLayoutRun *run) 298prepare_run (PangoRenderer *renderer, PangoLayoutRun *run)
305{ 299{
306 PangoOpenGLRenderer *glrenderer = (PangoOpenGLRenderer *)renderer; 300 PangoOpenGLRenderer *gl = (PangoOpenGLRenderer *)renderer;
307 PangoColor *fg = 0; 301 PangoColor *fg = 0;
308 GSList *l; 302 GSList *l;
309 unsigned char r, g, b, a; 303 unsigned char r, g, b, a;
310 304
311 renderer->underline = PANGO_UNDERLINE_NONE; 305 renderer->underline = PANGO_UNDERLINE_NONE;
312 renderer->strikethrough = FALSE; 306 renderer->strikethrough = FALSE;
313 307
314 glrenderer->key.mode = GL_QUADS; 308 gl->key.mode = GL_QUADS;
315 glrenderer->key.format = GL_T2F_V3F; 309 gl->key.format = 0; // glyphs
316 glrenderer->key.texname = 0; 310 gl->key.texname = 0;
317 311
318 for (l = run->item->analysis.extra_attrs; l; l = l->next) 312 for (l = run->item->analysis.extra_attrs; l; l = l->next)
319 { 313 {
320 PangoAttribute *attr = l->data; 314 PangoAttribute *attr = l->data;
321 315
344 g = fg->green * (255.f / 65535.f); 338 g = fg->green * (255.f / 65535.f);
345 b = fg->blue * (255.f / 65535.f); 339 b = fg->blue * (255.f / 65535.f);
346 } 340 }
347 else 341 else
348 { 342 {
349 r = glrenderer->r * 255.f; 343 r = gl->r * 255.f;
350 g = glrenderer->g * 255.f; 344 g = gl->g * 255.f;
351 b = glrenderer->b * 255.f; 345 b = gl->b * 255.f;
352 } 346 }
353 347
354 a = glrenderer->a * 255.f; 348 a = gl->a * 255.f;
355 349
356 if (glrenderer->flags & FLAG_INVERSE) 350 if (gl->flags & FLAG_INVERSE)
357 { 351 {
358 r ^= 0xffU; 352 r ^= 0xffU;
359 g ^= 0xffU; 353 g ^= 0xffU;
360 b ^= 0xffU; 354 b ^= 0xffU;
361 } 355 }
362 356
363 glrenderer->key.r = r; 357 gl->key.r = r;
364 glrenderer->key.g = g; 358 gl->key.g = g;
365 glrenderer->key.b = b; 359 gl->key.b = b;
366 glrenderer->key.a = a; 360 gl->key.a = a;
367} 361}
368 362
369static void 363static void
370draw_begin (PangoRenderer *renderer_) 364draw_begin (PangoRenderer *renderer_)
371{ 365{
372 PangoOpenGLRenderer *renderer = (PangoOpenGLRenderer *)renderer_; 366 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} 367}
382 368
383static void 369static void
384draw_end (PangoRenderer *renderer_) 370draw_end (PangoRenderer *renderer_)
385{ 371{
386 PangoOpenGLRenderer *renderer = (PangoOpenGLRenderer *)renderer_; 372 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} 373}
394 374
395static void 375static void
396pango_opengl_renderer_class_init (PangoOpenGLRendererClass *klass) 376pango_opengl_renderer_class_init (PangoOpenGLRendererClass *klass)
397{ 377{

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines