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.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 (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 (x2, y1, x + g->tex.w, y , 0);
225 rc_t2f_v3f (x2, y2, x + g->tex.w, y + g->tex.h, 0);
226 rc_t2f_v3f (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,
244 key.format = GL_V2F; 236 key.format = GL_V2F;
245 key.texname = 0; 237 key.texname = 0;
246 238
247 arr = rc_array (renderer->rc, &key); 239 arr = rc_array (renderer->rc, &key);
248 240
249 rc_v2f (x11, y1); 241 rc_v2f (arr, x11, y1);
250 rc_v2f (x21, y1); 242 rc_v2f (arr, x21, y1);
251 rc_v2f (x22, y2); 243 rc_v2f (arr, x22, y2);
252 rc_v2f (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;
262 PangoFontMap *fontmap; 255 PangoFontMap *fontmap;
263 PangoRenderer *renderer; 256 PangoRenderer *renderer;
257 PangoOpenGLRenderer *gl;
264 258
265 context = pango_layout_get_context (layout); 259 context = pango_layout_get_context (layout);
266 fontmap = pango_context_get_font_map (context); 260 fontmap = pango_context_get_font_map (context);
267 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));
268
269 PANGO_OPENGL_RENDERER (renderer)->r = r; 262 gl = PANGO_OPENGL_RENDERER (renderer);
270 PANGO_OPENGL_RENDERER (renderer)->g = g; 263
271 PANGO_OPENGL_RENDERER (renderer)->b = b; 264 gl->rc = rc;
272 PANGO_OPENGL_RENDERER (renderer)->a = a; 265 gl->r = r;
273 PANGO_OPENGL_RENDERER (renderer)->flags = flags; 266 gl->g = g;
267 gl->b = b;
268 gl->a = a;
269 gl->flags = flags;
274 270
275 pango_renderer_draw_layout (renderer, layout, x, y); 271 pango_renderer_draw_layout (renderer, layout, x, y);
276} 272}
277 273
278void 274void
279pango_opengl_render_layout (PangoLayout *layout, 275pango_opengl_render_layout (PangoLayout *layout,
276 rc_t *rc,
280 int x, int y, 277 int x, int y,
281 float r, float g, float b, float a, 278 float r, float g, float b, float a,
282 int flags) 279 int flags)
283{ 280{
284 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 );
285} 284}
286 285
287static void 286static void
288pango_opengl_renderer_init (PangoOpenGLRenderer *renderer) 287pango_opengl_renderer_init (PangoOpenGLRenderer *renderer)
289{ 288{
296} 295}
297 296
298static void 297static void
299prepare_run (PangoRenderer *renderer, PangoLayoutRun *run) 298prepare_run (PangoRenderer *renderer, PangoLayoutRun *run)
300{ 299{
301 PangoOpenGLRenderer *glrenderer = (PangoOpenGLRenderer *)renderer; 300 PangoOpenGLRenderer *gl = (PangoOpenGLRenderer *)renderer;
302 PangoColor *fg = 0; 301 PangoColor *fg = 0;
303 GSList *l; 302 GSList *l;
304 unsigned char r, g, b, a; 303 unsigned char r, g, b, a;
305 304
306 renderer->underline = PANGO_UNDERLINE_NONE; 305 renderer->underline = PANGO_UNDERLINE_NONE;
307 renderer->strikethrough = FALSE; 306 renderer->strikethrough = FALSE;
308 307
309 renderer->key.mode = GL_QUADS; 308 gl->key.mode = GL_QUADS;
310 renderer->key.format = GL_T2F_V2F; 309 gl->key.format = 0; // glyphs
311 renderer->key.texname = 0; 310 gl->key.texname = 0;
312 311
313 for (l = run->item->analysis.extra_attrs; l; l = l->next) 312 for (l = run->item->analysis.extra_attrs; l; l = l->next)
314 { 313 {
315 PangoAttribute *attr = l->data; 314 PangoAttribute *attr = l->data;
316 315
339 g = fg->green * (255.f / 65535.f); 338 g = fg->green * (255.f / 65535.f);
340 b = fg->blue * (255.f / 65535.f); 339 b = fg->blue * (255.f / 65535.f);
341 } 340 }
342 else 341 else
343 { 342 {
344 r = glrenderer->r * 255.f; 343 r = gl->r * 255.f;
345 g = glrenderer->g * 255.f; 344 g = gl->g * 255.f;
346 b = glrenderer->b * 255.f; 345 b = gl->b * 255.f;
347 } 346 }
348 347
349 a = glrenderer->a * 255.f; 348 a = gl->a * 255.f;
350 349
351 if (glrenderer->flags & FLAG_INVERSE) 350 if (gl->flags & FLAG_INVERSE)
352 { 351 {
353 r ^= 0xffU; 352 r ^= 0xffU;
354 g ^= 0xffU; 353 g ^= 0xffU;
355 b ^= 0xffU; 354 b ^= 0xffU;
356 } 355 }
357 356
358 renderer->key.r = r; 357 gl->key.r = r;
359 renderer->key.g = g; 358 gl->key.g = g;
360 renderer->key.b = b; 359 gl->key.b = b;
361 renderer->key.a = a; 360 gl->key.a = a;
362} 361}
363 362
364static void 363static void
365draw_begin (PangoRenderer *renderer_) 364draw_begin (PangoRenderer *renderer_)
366{ 365{
367 PangoOpenGLRenderer *renderer = (PangoOpenGLRenderer *)renderer_; 366 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} 367}
377 368
378static void 369static void
379draw_end (PangoRenderer *renderer_) 370draw_end (PangoRenderer *renderer_)
380{ 371{
381 PangoOpenGLRenderer *renderer = (PangoOpenGLRenderer *)renderer_; 372 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} 373}
389 374
390static void 375static void
391pango_opengl_renderer_class_init (PangoOpenGLRendererClass *klass) 376pango_opengl_renderer_class_init (PangoOpenGLRendererClass *klass)
392{ 377{

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines