[Bf-taskforce25] [Bf-blender-cvs] SVN commit: /data/svn/bf-blender [19912]....
Ton Roosendaal
ton at blender.org
Fri Apr 24 11:25:17 CEST 2009
Hi all,
I'd like to get feedback for font support in Blender.
Our code still supports fallback on bitmap fonts if you build without
freetype. I wonder if that's a useful spec to still support?
-Ton-
------------------------------------------------------------------------
Ton Roosendaal Blender Foundation ton at blender.org www.blender.org
Blender Institute BV Entrepotdok 57A 1018AD Amsterdam The Netherlands
On 23 Apr, 2009, at 23:57, Diego Borghetti wrote:
> Revision: 19912
>
> http://projects.blender.org/plugins/scmsvn/viewcvs.php?
> view=rev&root=bf-blender&revision=19912
> Author: bdiego
> Date: 2009-04-23 23:57:41 +0200 (Thu, 23 Apr 2009)
>
> Log Message:
> -----------
> Move texture draw to blf_util.c, now both font used it.
>
> A little cleanup on the internal font, it's possible load the old
> bmfont with: BLF_load_mem(name, NULL, 0) where name can be: helv,
> helvb or scr.
>
> Note that the internal font also support both draw, texture and bitmap,
> by default always used texture.
>
> Remove some old lang function that I left there and don't exist any
> more
> because the locale are now in the RNA.
>
> Small changes to Style's, so if we build without freetype2 by default
> go back to the internal font, this is a little ugly (and have the old
> problem of scale) but now blender always show text (need work a little
> more there).
>
> Modified Paths:
> --------------
> branches/blender2.5/blender/source/blender/blenfont/BLF_api.h
> branches/blender2.5/blender/source/blender/blenfont/intern/blf.c
>
> branches/blender2.5/blender/source/blender/blenfont/intern/blf_glyph.c
>
> branches/blender2.5/blender/source/blender/blenfont/intern/
> blf_internal.c
>
> branches/blender2.5/blender/source/blender/blenfont/intern/
> blf_internal.h
>
> branches/blender2.5/blender/source/blender/blenfont/intern/
> blf_internal_types.h
>
> branches/blender2.5/blender/source/blender/blenfont/intern/blf_lang.c
>
> branches/blender2.5/blender/source/blender/blenfont/intern/blf_util.c
>
> branches/blender2.5/blender/source/blender/editors/interface/
> interface_style.c
>
> Modified: branches/blender2.5/blender/source/blender/blenfont/BLF_api.h
> ===================================================================
> ---
> branches/blender2.5/blender/source/blender/blenfont/BLF_api.h 2009-04
> -23 21:19:42 UTC (rev 19911)
> +++
> branches/blender2.5/blender/source/blender/blenfont/BLF_api.h 2009-04
> -23 21:57:41 UTC (rev 19912)
> @@ -43,6 +43,12 @@
> void BLF_set(int fontid);
> int BLF_get(void);
>
> +/*
> + * Return the font type, can be freetype2 or internal, -1 if
> + * some error happen (no current font).
> + */
> +int BLF_type_get(void);
> +
> void BLF_aspect(float aspect);
> void BLF_position(float x, float y, float z);
> void BLF_size(int size, int dpi);
> @@ -74,26 +80,18 @@
> void BLF_enable(int option);
> void BLF_disable(int option);
>
> -/* Read the .Blanguages file, return 1 on success or 0 if fails. */
> -int BLF_lang_init(void);
> +/*
> + * Search the path directory to the locale files, this try all
> + * the case for Linux, Win and Mac.
> + */
> +void BLF_lang_init(void);
>
> -/* Free the memory allocate for the .Blanguages. */
> -void BLF_lang_exit(void);
> +/* Set the current locale. */
> +void BLF_lang_set(const char *);
>
> -/* Set the current Language. */
> -void BLF_lang_set(int id);
> +/* Set the current encoding name. */
> +void BLF_lang_encoding_name(const char *str);
>
> -/* Return a string with all the Language available. */
> -char *BLF_lang_pup(void);
> -
> -/* Return the number of invalid lines in the .Blanguages file,
> - * zero means no error found.
> - */
> -int BLF_lang_error(void);
> -
> -/* Return the code string for the specified language code. */
> -char *BLF_lang_find_code(short langid);
> -
> /* Add a path to the font dir paths. */
> void BLF_dir_add(const char *path);
>
> @@ -114,4 +112,8 @@
> #define BLF_MODE_TEXTURE 0
> #define BLF_MODE_BITMAP 1
>
> +/* font->type */
> +#define BLF_FONT_FREETYPE2 0
> +#define BLF_FONT_INTERNAL 1
> +
> #endif /* BLF_API_H */
>
> Modified:
> branches/blender2.5/blender/source/blender/blenfont/intern/blf.c
> ===================================================================
> ---
> branches/blender2.5/blender/source/blender/blenfont/intern/blf.c 2009
> -04-23 21:19:42 UTC (rev 19911)
> +++
> branches/blender2.5/blender/source/blender/blenfont/intern/blf.c 2009
> -04-23 21:57:41 UTC (rev 19912)
> @@ -185,7 +185,7 @@
> if (!font) {
> #ifdef WITH_FREETYPE2
> if (!mem || !mem_size) {
> - printf("Can't load font, %s from memory!!\n", name);
> + printf("Can't load font: %s from memory!!\n", name);
> return(-1);
> }
>
> @@ -193,7 +193,7 @@
> #endif /* WITH_FREETYPE2 */
>
> if (!font) {
> - printf("Can't load font, %s from memory!!\n", name);
> + printf("Can't load font: %s from memory!!\n", name);
> return(-1);
> }
> }
> @@ -215,6 +215,16 @@
> return(global_font_cur);
> }
>
> +int BLF_type_get(void)
> +{
> + FontBLF *font;
> +
> + font= global_font[global_font_cur];
> + if (font)
> + return(font->type);
> + return(-1);
> +}
> +
> void BLF_enable(int option)
> {
> FontBLF *font;
>
> Modified:
> branches/blender2.5/blender/source/blender/blenfont/intern/blf_glyph.c
> ===================================================================
> ---
> branches/blender2.5/blender/source/blender/blenfont/intern/blf_glyph.c
> 2009-04-23 21:19:42 UTC (rev 19911)
> +++
> branches/blender2.5/blender/source/blender/blenfont/intern/blf_glyph.c
> 2009-04-23 21:57:41 UTC (rev 19912)
> @@ -433,69 +433,6 @@
> MEM_freeN(g);
> }
>
> -static void blf_glyph_texture_draw(float uv[2][2], float dx, float
> y1, float dx1, float y2)
> -{
> -
> - glBegin(GL_QUADS);
> - glTexCoord2f(uv[0][0], uv[0][1]);
> - glVertex2f(dx, y1);
> -
> - glTexCoord2f(uv[0][0], uv[1][1]);
> - glVertex2f(dx, y2);
> -
> - glTexCoord2f(uv[1][0], uv[1][1]);
> - glVertex2f(dx1, y2);
> -
> - glTexCoord2f(uv[1][0], uv[0][1]);
> - glVertex2f(dx1, y1);
> - glEnd();
> -
> -}
> -
> -static void blf_glyph_texture5_draw(float uv[2][2], float x1, float
> y1, float x2, float y2)
> -{
> - float soft[25]= {
> - 1/60.0f, 1/60.0f, 2/60.0f, 1/60.0f, 1/60.0f,
> - 1/60.0f, 3/60.0f, 5/60.0f, 3/60.0f, 1/60.0f,
> - 2/60.0f, 5/60.0f, 8/60.0f, 5/60.0f, 2/60.0f,
> - 1/60.0f, 3/60.0f, 5/60.0f, 3/60.0f, 1/60.0f,
> - 1/60.0f, 1/60.0f, 2/60.0f, 1/60.0f, 1/60.0f};
> -
> - float color[4], *fp= soft;
> - int dx, dy;
> -
> - glGetFloatv(GL_CURRENT_COLOR, color);
> -
> - for(dx=-2; dx<3; dx++) {
> - for(dy=-2; dy<3; dy++, fp++) {
> - glColor4f(color[0], color[1], color[2], fp[0]*color[3]);
> - blf_glyph_texture_draw(uv, x1+dx, y1+dy, x2+dx, y2+dy);
> - }
> - }
> -
> - glColor4fv(color);
> -}
> -
> -static void blf_glyph_texture3_draw(float uv[2][2], float x1, float
> y1, float x2, float y2)
> -{
> - float soft[9]= {1/16.0f, 2/16.0f, 1/16.0f, 2/16.0f, 4/16.0f,
> 2/16.0f, 1/16.0f, 2/16.0f, 1/16.0f};
> - float color[4], *fp= soft;
> - int dx, dy;
> -
> - glGetFloatv(GL_CURRENT_COLOR, color);
> -
> - for(dx=-1; dx<2; dx++) {
> - for(dy=-1; dy<2; dy++, fp++) {
> - glColor4f(color[0], color[1], color[2], fp[0]*color[3]);
> - blf_glyph_texture_draw(uv, x1+dx, y1+dy, x2+dx, y2+dy);
> - }
> - }
> -
> - glColor4fv(color);
> -}
> -
> -
> -
> int blf_glyph_texture_render(FontBLF *font, GlyphBLF *g, float x,
> float y)
> {
> GlyphTextureBLF *gt;
> @@ -525,11 +462,11 @@
> glBindTexture(GL_TEXTURE_2D, gt->tex);
>
> if (font->blur==3)
> - blf_glyph_texture3_draw(gt->uv, dx, y1, dx1, y2);
> + blf_texture3_draw(gt->uv, dx, y1, dx1, y2);
> else if (font->blur==5)
> - blf_glyph_texture5_draw(gt->uv, dx, y1, dx1, y2);
> + blf_texture5_draw(gt->uv, dx, y1, dx1, y2);
> else
> - blf_glyph_texture_draw(gt->uv, dx, y1, dx1, y2);
> + blf_texture_draw(gt->uv, dx, y1, dx1, y2);
>
> return(1);
> }
>
> Modified:
> branches/blender2.5/blender/source/blender/blenfont/intern/
> blf_internal.c
> ===================================================================
> ---
> branches/blender2.5/blender/source/blender/blenfont/intern/
> blf_internal.c 2009-04-23 21:19:42 UTC (rev 19911)
> +++
> branches/blender2.5/blender/source/blender/blenfont/intern/
> blf_internal.c 2009-04-23 21:57:41 UTC (rev 19912)
> @@ -141,7 +141,58 @@
>
> void blf_internal_size(FontBLF *font, int size, int dpi)
> {
> - return;
> + /* dpi don't work here and size is limit to:
> + * helv: 10, 12
> + * helvb: 8, 10, 12
> + * scr: 12, 14, 15
> + */
> + font->dpi= dpi;
> +
> + if (font->size != size) {
> + if (!strcmp(font->name, "helv")) {
> + if (size == 12) {
> + font->engine= (void *)&blf_font_helv12;
> + font->size= 12;
> + }
> + else {
> + font->engine= (void *)&blf_font_helv10;
> + font->size= 10;
> + }
> + }
> + else if (!strcmp(font->name, "helvb")) {
> + if (size == 10) {
> + font->engine= (void *)&blf_font_helvb10;
> + font->size= 10;
> + }
> + else if (size == 12) {
> + font->engine= (void *)&blf_font_helvb12;
> + font->size= 12;
> + }
> + else {
> + font->engine= (void *)&blf_font_helvb8;
> + font->size= 8;
> + }
> + }
> + else { /* scr */
> + if (size == 14) {
> + font->engine= (void *)&blf_font_scr14;
> + font->size= 14;
> + }
> + else if (size == 15) {
> + font->engine= (void *)&blf_font_scr15;
> + font->size= 15;
> + }
> + else {
> + font->engine= (void *)&blf_font_scr12;
> + font->size= 12;
> + }
> + }
> +
> + if (font->mode == BLF_MODE_TEXTURE) {
> + if (blf_internal_get_texture(font) != 0)
> + printf("Can't create texture font!!\n");
> + }
> + }
> }
>
> void blf_internal_texture_draw(FontBLF *font, char *str)
> @@ -149,7 +200,8 @@
> FontDataBLF *data;
> CharDataBLF *cd;
> unsigned char c;
> - float pos, cell_x, cell_y, x, y, z;
> + float pos, x, y;
> + float uv[2][2];
> int base_line;
> GLint cur_tex;
> float dx, dx1, dy, dy1;
> @@ -159,7 +211,6 @@
> pos= 0;
> x= 0.0f;
> y= 0.0f;
> - z= 0.0f;
>
> glGetIntegerv(GL_TEXTURE_2D_BINDING_EXT, &cur_tex);
> if (cur_tex != data->texid)
> @@ -169,8 +220,10 @@
> cd= &data->chars[c];
>
> if (cd->data_offset != -1) {
> - cell_x= (c%16)/16.0;
> - cell_y= (c/16)/16.0;
> + uv[0][0]= ((c%16)/16.0) + 1.0/16.0;
> + uv[0][1]= (c/16)/16.0;
> + uv[1][0]= (c%16)/16.0;
> + uv[1][1]= ((c/16)/16.0) + 1.0/16.0;
>
> dx= x + pos + 16.0;
> dx1= x + pos + 0.0;
> @@ -189,19 +242,12 @@
> goto next_tex_char;
> }
>
> - glBegin(GL_QUADS);
> - glTexCoord2f(cell_x + 1.0/16.0, cell_y);
> - glVertex3f(dx, dy, z);
> -
> - glTexCoord2f(cell_x + 1.0/16.0, cell_y + 1.0/16.0);
> - glVertex3f(dx, dy1, z);
> -
> - glTexCoord2f(cell_x, cell_y + 1.0/16.0);
> - glVertex3f(dx1, dy1, z);
> -
> - glTexCoord2f(cell_x, cell_y);
> - glVertex3f(dx1, dy, z);
> - glEnd();
> + if (font->blur == 3)
> + blf_texture3_draw(uv, dx, dy, dx1, dy1);
> + else if (font->blur == 5)
> + blf_texture5_draw(uv, dx, dy, dx1, dy1);
> + else
> + blf_texture_draw(uv, dx, dy, dx1, dy1);
> }
> next_tex_char:
> pos += cd->advance;
> @@ -328,39 +374,19 @@
> font->name= BLI_strdup(name);
> font->filename= NULL;
>
> - if (!strcmp(name, "helv10")) {
> + if (!strcmp(name, "helv")) {
> font->engine= (void *)&blf_font_helv10;
> font->size= 10;
> }
> #ifndef BLF_INTERNAL_MINIMAL
> - else if (!strcmp(name, "helv12")) {
> - font->engine= (void *)&blf_font_helv12;
> - font->size= 12;
> - }
> - else if (!strcmp(name, "helvb8")) {
> + else if (!strcmp(name, "helvb")) {
> font->engine= (void *)&blf_font_helvb8;
> font->size= 8;
> }
> - else if (!strcmp(name, "helvb10")) {
> - font->engine= (void *)&blf_font_helvb10;
> - font->size= 10;
> - }
> - else if (!strcmp(name, "helvb12")) {
> - font->engine= (void *)&blf_font_helvb12;
> - font->size= 12;
> - }
> - else if (!strcmp(name, "scr12")) {
> + else if (!strcmp(name, "scr")) {
> font->engine= (void *)&blf_font_scr12;
> font->size= 12;
> }
> - else if (!strcmp(name, "scr14")) {
> - font->engine= (void *)&blf_font_scr14;
> - font->size= 14;
> - }
> - else if (!strcmp(name, "scr15")) {
> - font->engine= (void *)&blf_font_scr15;
> - font->size= 15;
> - }
> #endif
> else
> font->engine= NULL;
>
> Modified:
> branches/blender2.5/blender/source/blender/blenfont/intern/
> blf_internal.h
> ===================================================================
> ---
> branches/blender2.5/blender/source/blender/blenfont/intern/
> blf_internal.h 2009-04-23 21:19:42 UTC (rev 19911)
> +++
> branches/blender2.5/blender/source/blender/blenfont/intern/
> blf_internal.h 2009-04-23 21:57:41 UTC (rev 19912)
> @@ -32,6 +32,10 @@
> unsigned int blf_hash(unsigned int val);
> int blf_utf8_next(unsigned char *buf, int *iindex);
>
> +void blf_texture_draw(float uv[2][2], float dx, float y1, float dx1,
> float y2);
> +void blf_texture5_draw(float uv[2][2], float x1, float y1, float x2,
> float y2);
> +void blf_texture3_draw(float uv[2][2], float x1, float y1, float x2,
> float y2);
> +
> char *blf_dir_search(const char *file);
> int blf_dir_split(const char *str, char *file, int *size);
>
>
> Modified:
> branches/blender2.5/blender/source/blender/blenfont/intern/
> blf_internal_types.h
> ===================================================================
> ---
> branches/blender2.5/blender/source/blender/blenfont/intern/
> blf_internal_types.h 2009-04-23 21:19:42 UTC (rev 19911)
>
> @@ Diff output truncated at 10240 characters. @@
>
> _______________________________________________
> Bf-blender-cvs mailing list
> Bf-blender-cvs at blender.org
> http://lists.blender.org/mailman/listinfo/bf-blender-cvs
>
More information about the Bf-taskforce25
mailing list