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.7 by root, Sat Aug 11 11:28:03 2007 UTC vs.
Revision 1.9 by root, Sat Aug 11 11:41:24 2007 UTC

218 { 218 {
219 renderer->key.texname = g->tex.name; 219 renderer->key.texname = g->tex.name;
220 renderer->arr = rc_array (renderer->rc, &renderer->key); 220 renderer->arr = rc_array (renderer->rc, &renderer->key);
221 } 221 }
222 222
223 rc_t2f_v3f (x1, y1, x , y , 0); 223 rc_t2f_v3f (renderer->arr, x1, y1, x , y , 0);
224 rc_t2f_v3f (x2, y1, x + g->tex.w, y , 0); 224 rc_t2f_v3f (renderer->arr, x2, y1, x + g->tex.w, y , 0);
225 rc_t2f_v3f (x2, y2, x + g->tex.w, y + g->tex.h, 0); 225 rc_t2f_v3f (renderer->arr, x2, y2, x + g->tex.w, y + g->tex.h, 0);
226 rc_t2f_v3f (x1, y2, x , y + g->tex.h, 0); 226 rc_t2f_v3f (renderer->arr, x1, y2, x , y + g->tex.h, 0);
227} 227}
228 228
229static void 229static void
230draw_trapezoid (PangoRenderer *renderer_, 230draw_trapezoid (PangoRenderer *renderer_,
231 PangoRenderPart part, 231 PangoRenderPart part,
244 key.format = GL_V2F; 244 key.format = GL_V2F;
245 key.texname = 0; 245 key.texname = 0;
246 246
247 arr = rc_array (renderer->rc, &key); 247 arr = rc_array (renderer->rc, &key);
248 248
249 rc_v2f (x11, y1); 249 rc_v2f (arr, x11, y1);
250 rc_v2f (x21, y1); 250 rc_v2f (arr, x21, y1);
251 rc_v2f (x22, y2); 251 rc_v2f (arr, x22, y2);
252 rc_v2f (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 int x, int y, 257 int x, int y,
259 int flags) 259 int flags)
260{ 260{
261 PangoContext *context; 261 PangoContext *context;
262 PangoFontMap *fontmap; 262 PangoFontMap *fontmap;
263 PangoRenderer *renderer; 263 PangoRenderer *renderer;
264 PangoOpenGLRenderer *gl;
264 265
265 context = pango_layout_get_context (layout); 266 context = pango_layout_get_context (layout);
266 fontmap = pango_context_get_font_map (context); 267 fontmap = pango_context_get_font_map (context);
267 renderer = _pango_opengl_font_map_get_renderer (PANGO_OPENGL_FONT_MAP (fontmap)); 268 renderer = _pango_opengl_font_map_get_renderer (PANGO_OPENGL_FONT_MAP (fontmap));
268
269 PANGO_OPENGL_RENDERER (renderer)->r = r; 269 gl = PANGO_OPENGL_RENDERER (renderer);
270 PANGO_OPENGL_RENDERER (renderer)->g = g; 270
271 PANGO_OPENGL_RENDERER (renderer)->b = b; 271 gl->rc = rc_alloc ();
272 PANGO_OPENGL_RENDERER (renderer)->a = a; 272 gl->r = r;
273 PANGO_OPENGL_RENDERER (renderer)->flags = flags; 273 gl->g = g;
274 gl->b = b;
275 gl->a = a;
276 gl->flags = flags;
274 277
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
275 pango_renderer_draw_layout (renderer, layout, x, y); 286 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);
276} 295}
277 296
278void 297void
279pango_opengl_render_layout (PangoLayout *layout, 298pango_opengl_render_layout (PangoLayout *layout,
280 int x, int y, 299 int x, int y,
296} 315}
297 316
298static void 317static void
299prepare_run (PangoRenderer *renderer, PangoLayoutRun *run) 318prepare_run (PangoRenderer *renderer, PangoLayoutRun *run)
300{ 319{
301 PangoOpenGLRenderer *glrenderer = (PangoOpenGLRenderer *)renderer; 320 PangoOpenGLRenderer *gl = (PangoOpenGLRenderer *)renderer;
302 PangoColor *fg = 0; 321 PangoColor *fg = 0;
303 GSList *l; 322 GSList *l;
304 unsigned char r, g, b, a; 323 unsigned char r, g, b, a;
305 324
306 renderer->underline = PANGO_UNDERLINE_NONE; 325 renderer->underline = PANGO_UNDERLINE_NONE;
307 renderer->strikethrough = FALSE; 326 renderer->strikethrough = FALSE;
308 327
309 renderer->key.mode = GL_QUADS; 328 gl->key.mode = GL_QUADS;
310 renderer->key.format = GL_T2F_V2F; 329 gl->key.format = GL_T2F_V3F;
311 renderer->key.texname = 0; 330 gl->key.texname = 0;
312 331
313 for (l = run->item->analysis.extra_attrs; l; l = l->next) 332 for (l = run->item->analysis.extra_attrs; l; l = l->next)
314 { 333 {
315 PangoAttribute *attr = l->data; 334 PangoAttribute *attr = l->data;
316 335
339 g = fg->green * (255.f / 65535.f); 358 g = fg->green * (255.f / 65535.f);
340 b = fg->blue * (255.f / 65535.f); 359 b = fg->blue * (255.f / 65535.f);
341 } 360 }
342 else 361 else
343 { 362 {
344 r = glrenderer->r * 255.f; 363 r = gl->r * 255.f;
345 g = glrenderer->g * 255.f; 364 g = gl->g * 255.f;
346 b = glrenderer->b * 255.f; 365 b = gl->b * 255.f;
347 } 366 }
348 367
349 a = glrenderer->a * 255.f; 368 a = gl->a * 255.f;
350 369
351 if (glrenderer->flags & FLAG_INVERSE) 370 if (gl->flags & FLAG_INVERSE)
352 { 371 {
353 r ^= 0xffU; 372 r ^= 0xffU;
354 g ^= 0xffU; 373 g ^= 0xffU;
355 b ^= 0xffU; 374 b ^= 0xffU;
356 } 375 }
357 376
358 renderer->key.r = r; 377 gl->key.r = r;
359 renderer->key.g = g; 378 gl->key.g = g;
360 renderer->key.b = b; 379 gl->key.b = b;
361 renderer->key.a = a; 380 gl->key.a = a;
362} 381}
363 382
364static void 383static void
365draw_begin (PangoRenderer *renderer_) 384draw_begin (PangoRenderer *renderer_)
366{ 385{
367 PangoOpenGLRenderer *renderer = (PangoOpenGLRenderer *)renderer_; 386 PangoOpenGLRenderer *renderer = (PangoOpenGLRenderer *)renderer_;
368
369 glEnable (GL_TEXTURE_2D);
370 glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
371 glEnable (GL_BLEND);
372 gl_BlendFuncSeparate (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA,
373 GL_ONE , GL_ONE_MINUS_SRC_ALPHA);
374 glEnable (GL_ALPHA_TEST);
375 glAlphaFunc (GL_GREATER, 0.01f);
376} 387}
377 388
378static void 389static void
379draw_end (PangoRenderer *renderer_) 390draw_end (PangoRenderer *renderer_)
380{ 391{
381 PangoOpenGLRenderer *renderer = (PangoOpenGLRenderer *)renderer_; 392 PangoOpenGLRenderer *renderer = (PangoOpenGLRenderer *)renderer_;
382
383 rc_draw (renderer->rc);
384
385 glDisable (GL_ALPHA_TEST);
386 glDisable (GL_BLEND);
387 glDisable (GL_TEXTURE_2D);
388} 393}
389 394
390static void 395static void
391pango_opengl_renderer_class_init (PangoOpenGLRendererClass *klass) 396pango_opengl_renderer_class_init (PangoOpenGLRendererClass *klass)
392{ 397{

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines