From: <el...@us...> - 2010-08-27 22:16:44
|
Revision: 13653 http://alleg.svn.sourceforge.net/alleg/?rev=13653&view=rev Author: elias Date: 2010-08-27 22:16:37 +0000 (Fri, 27 Aug 2010) Log Message: ----------- Use RGBA locking instead of al_put_pixel calls when drawing font glyphs. Modified Paths: -------------- allegro/branches/4.9/addons/ttf/ttf.c Modified: allegro/branches/4.9/addons/ttf/ttf.c =================================================================== --- allegro/branches/4.9/addons/ttf/ttf.c 2010-08-27 18:39:41 UTC (rev 13652) +++ allegro/branches/4.9/addons/ttf/ttf.c 2010-08-27 22:16:37 UTC (rev 13653) @@ -131,6 +131,7 @@ return ret; } + static int render_glyph(ALLEGRO_FONT const *f, ALLEGRO_COLOR color, int prev, int ch, float xpos, float ypos, ALLEGRO_TTF_GLYPH_DATA **measure_glyph) @@ -147,8 +148,12 @@ int x, y, w, h; ALLEGRO_LOCKED_REGION *lr; ALLEGRO_STATE backup; - - FT_Load_Glyph(face, ft_index, FT_LOAD_RENDER); + FT_Error e; + + e = FT_Load_Glyph(face, ft_index, FT_LOAD_RENDER); + if (e) { + ALLEGRO_WARN("Failed loading glyph %d from.\n", ft_index); + } w = face->glyph->bitmap.width; h = face->glyph->bitmap.rows; @@ -163,19 +168,23 @@ glyph->bitmap = create_glyph_cache(f, w, h, false); al_set_target_bitmap(glyph->bitmap); - lr = al_lock_bitmap(glyph->bitmap, ALLEGRO_PIXEL_FORMAT_ANY, ALLEGRO_LOCK_WRITEONLY); + lr = al_lock_bitmap(glyph->bitmap, ALLEGRO_PIXEL_FORMAT_ABGR_8888, ALLEGRO_LOCK_WRITEONLY); /* In case this is an empty bitmap, we need to at least draw * the one pixel we use as minimum size. * TODO: Does A5 not support bitmap with zero dimensions? - * If it does, we can simpligy this. + * If it does, we can simplify this. */ al_put_pixel(0, 0, al_map_rgba(0, 0, 0, 0)); row = face->glyph->bitmap.buffer; for (y = 0; y < face->glyph->bitmap.rows; y++) { - unsigned char *ptr = row; + unsigned char *ptr = face->glyph->bitmap.buffer + face->glyph->bitmap.pitch * y; + unsigned char *dptr = lr->data + lr->pitch * y; for (x = 0; x < face->glyph->bitmap.width; x++) { unsigned char c = *ptr; - al_put_pixel(x, y, al_map_rgba(255, 255, 255, c)); + *(dptr++) = 255; + *(dptr++) = 255; + *(dptr++) = 255; + *(dptr++) = c; ptr++; } row += face->glyph->bitmap.pitch; @@ -288,14 +297,19 @@ } #if 0 +#include <allegro5/allegro_image.h> static void debug_cache(ALLEGRO_FONT *f) { ALLEGRO_TTF_FONT_DATA *data = f->data; _AL_VECTOR *v = &data->cache_bitmaps; + static int j = 0; int i; - for (i = 0; i < _al_vector_size(v); i++) { + + al_init_image_addon(); + + for (i = 0; i < (int)_al_vector_size(v); i++) { ALLEGRO_BITMAP **bmp = _al_vector_ref(v, i); - ALLEGRO_USTR *u = al_ustr_newf("font%d.png", i); + ALLEGRO_USTR *u = al_ustr_newf("font%d.png", j++); al_save_bitmap(al_cstr(u), *bmp); al_ustr_free(u); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <el...@us...> - 2010-08-27 22:22:53
|
Revision: 13654 http://alleg.svn.sourceforge.net/alleg/?rev=13654&view=rev Author: elias Date: 2010-08-27 22:22:47 +0000 (Fri, 27 Aug 2010) Log Message: ----------- Fixed bug reported by Arthur Kalliokoski in http://www.allegro.cc/forums/thread/604975 - some TTF fonts would not render right at small sizes. Modified Paths: -------------- allegro/branches/4.9/addons/ttf/ttf.c Modified: allegro/branches/4.9/addons/ttf/ttf.c =================================================================== --- allegro/branches/4.9/addons/ttf/ttf.c 2010-08-27 22:16:37 UTC (rev 13653) +++ allegro/branches/4.9/addons/ttf/ttf.c 2010-08-27 22:22:47 UTC (rev 13654) @@ -150,7 +150,10 @@ ALLEGRO_STATE backup; FT_Error e; - e = FT_Load_Glyph(face, ft_index, FT_LOAD_RENDER); + // FIXME: Investigate why some fonts don't work without the + // NO_BITMAP flags. Supposedly using that flag makes small sizes + // look bad so ideally we would not used it. + e = FT_Load_Glyph(face, ft_index, FT_LOAD_RENDER | FT_LOAD_NO_BITMAP); if (e) { ALLEGRO_WARN("Failed loading glyph %d from.\n", ft_index); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <el...@us...> - 2010-09-02 12:26:34
|
Revision: 13686 http://alleg.svn.sourceforge.net/alleg/?rev=13686&view=rev Author: elias Date: 2010-09-02 12:26:27 +0000 (Thu, 02 Sep 2010) Log Message: ----------- Fixed enianness issue (no more big endian HW exists where A5 could run, but still...) Modified Paths: -------------- allegro/branches/4.9/addons/ttf/ttf.c Modified: allegro/branches/4.9/addons/ttf/ttf.c =================================================================== --- allegro/branches/4.9/addons/ttf/ttf.c 2010-09-02 11:58:05 UTC (rev 13685) +++ allegro/branches/4.9/addons/ttf/ttf.c 2010-09-02 12:26:27 UTC (rev 13686) @@ -171,7 +171,7 @@ glyph->bitmap = create_glyph_cache(f, w, h, false); al_set_target_bitmap(glyph->bitmap); - lr = al_lock_bitmap(glyph->bitmap, ALLEGRO_PIXEL_FORMAT_ABGR_8888, ALLEGRO_LOCK_WRITEONLY); + lr = al_lock_bitmap(glyph->bitmap, ALLEGRO_PIXEL_FORMAT_ABGR_8888_LE, ALLEGRO_LOCK_WRITEONLY); /* In case this is an empty bitmap, we need to at least draw * the one pixel we use as minimum size. * TODO: Does A5 not support bitmap with zero dimensions? This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |