[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [19556] branches/blender2.5/blender/source /blender/blenfont: Add back bitmap draw mode, right now only internal font, tomorrow

Diego Borghetti bdiego at gmail.com
Mon Apr 6 06:12:32 CEST 2009


Revision: 19556
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19556
Author:   bdiego
Date:     2009-04-06 06:12:31 +0200 (Mon, 06 Apr 2009)

Log Message:
-----------
Add back bitmap draw mode, right now only internal font, tomorrow
freetype2.

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_font.c
    branches/blender2.5/blender/source/blender/blenfont/intern/blf_internal.c
    branches/blender2.5/blender/source/blender/blenfont/intern/blf_internal_types.h

Modified: branches/blender2.5/blender/source/blender/blenfont/BLF_api.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenfont/BLF_api.h	2009-04-06 01:43:01 UTC (rev 19555)
+++ branches/blender2.5/blender/source/blender/blenfont/BLF_api.h	2009-04-06 04:12:31 UTC (rev 19556)
@@ -91,4 +91,8 @@
 #define BLF_ROTATION (1<<0)
 #define BLF_CLIPPING (1<<1)
 
+/* font->mode. */
+#define BLF_MODE_TEXTURE 0
+#define BLF_MODE_BITMAP 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-06 01:43:01 UTC (rev 19555)
+++ branches/blender2.5/blender/source/blender/blenfont/intern/blf.c	2009-04-06 04:12:31 UTC (rev 19556)
@@ -286,22 +286,31 @@
 
 	font= global_font[global_font_cur];
 	if (font && font->draw) {
-		glEnable(GL_BLEND);
-		glEnable(GL_TEXTURE_2D);
-		glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+		if (font->mode == BLF_MODE_BITMAP) {
+			/* the pixmap alignment is handle
+			 * in BLF_position (old ui_rasterpos_safe).
+			 */
+			glRasterPos3f(font->pos[0], font->pos[1], font->pos[2]);
+			(*font->draw)(font, str);
+		}
+		else {
+			glEnable(GL_BLEND);
+			glEnable(GL_TEXTURE_2D);
+			glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
 
-		glPushMatrix();
-		glTranslatef(font->pos[0], font->pos[1], font->pos[2]);
-		glScalef(font->aspect, font->aspect, 1.0);
+			glPushMatrix();
+			glTranslatef(font->pos[0], font->pos[1], font->pos[2]);
+			glScalef(font->aspect, font->aspect, 1.0);
 
-		if (font->flags & BLF_ROTATION)
-			glRotatef(font->angle, 0.0f, 0.0f, 1.0f);
+			if (font->flags & BLF_ROTATION)
+				glRotatef(font->angle, 0.0f, 0.0f, 1.0f);
 
-		(*font->draw)(font, str);
+			(*font->draw)(font, str);
 
-		glPopMatrix();
-		glDisable(GL_BLEND);
-		glDisable(GL_TEXTURE_2D);
+			glPopMatrix();
+			glDisable(GL_BLEND);
+			glDisable(GL_TEXTURE_2D);
+		}
 	}
 }
 
@@ -355,3 +364,12 @@
 		font->clip_rec.ymax= ymax;
 	}
 }
+
+void BLF_mode(int mode)
+{
+	FontBLF *font;
+
+	font= global_font[global_font_cur];
+	if (font)
+		font->mode= mode;
+}

Modified: branches/blender2.5/blender/source/blender/blenfont/intern/blf_font.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenfont/intern/blf_font.c	2009-04-06 01:43:01 UTC (rev 19555)
+++ branches/blender2.5/blender/source/blender/blenfont/intern/blf_font.c	2009-04-06 04:12:31 UTC (rev 19556)
@@ -274,6 +274,7 @@
 void blf_font_fill(FontBLF *font)
 {
 	font->type= BLF_FONT_FREETYPE2;
+	font->mode= BLF_MODE_TEXTURE;
 	font->ref= 1;
 	font->aspect= 1.0f;
 	font->pos[0]= 0.0f;

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-06 01:43:01 UTC (rev 19555)
+++ branches/blender2.5/blender/source/blender/blenfont/intern/blf_internal.c	2009-04-06 04:12:31 UTC (rev 19556)
@@ -144,7 +144,7 @@
 	return;
 }
 
-void blf_internal_draw(FontBLF *font, char *str)
+void blf_internal_texture_draw(FontBLF *font, char *str)
 {
 	FontDataBLF *data;
 	CharDataBLF *cd;
@@ -207,6 +207,41 @@
 	}
 }
 
+void blf_internal_bitmap_draw(FontBLF *font, char *str)
+{
+	FontDataBLF *data;
+	CharDataBLF *cd;
+	unsigned char c;
+	GLint alignment;
+
+	data= (FontDataBLF *)font->engine;
+
+	glGetIntegerv(GL_UNPACK_ALIGNMENT, &alignment);
+	glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
+	
+	while ((c= (unsigned char) *str++)) {
+		cd= &data->chars[c];
+
+		if (cd->data_offset==-1) {
+			GLubyte nullBitmap= 0;
+			glBitmap(1, 1, 0, 0, cd->advance, 0, &nullBitmap);	
+		} else {
+			GLubyte *bitmap= &data->bitmap_data[cd->data_offset];
+			glBitmap(cd->width, cd->height, cd->xorig, cd->yorig, cd->advance, 0, bitmap);
+		}
+	}
+
+	glPixelStorei(GL_UNPACK_ALIGNMENT, alignment);
+}
+
+void blf_internal_draw(FontBLF *font, char *str)
+{
+	if (font->mode == BLF_MODE_BITMAP)
+		blf_internal_bitmap_draw(font, str);
+	else
+		blf_internal_texture_draw(font, str);
+}
+
 void blf_internal_boundbox(FontBLF *font, char *str, rctf *box)
 {
 	FontDataBLF *data;
@@ -313,6 +348,7 @@
 
 	font->type= BLF_FONT_INTERNAL;
 	font->ref= 1;
+	font->mode= BLF_MODE_TEXTURE;
 	font->aspect= 1.0f;
 	font->pos[0]= 0.0f;
 	font->pos[1]= 0.0f;
@@ -336,10 +372,12 @@
 	font->height_get= blf_internal_height;
 	font->free= blf_internal_free;
 
-	if (blf_internal_get_texture(font) != 0) {
-		MEM_freeN(font->name);
-		MEM_freeN(font);
-		return(NULL);
+	if (font->mode == BLF_MODE_TEXTURE) {
+		if (blf_internal_get_texture(font) != 0) {
+			MEM_freeN(font->name);
+			MEM_freeN(font);
+			return(NULL);
+		}
 	}
 
 	return(font);

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-06 01:43:01 UTC (rev 19555)
+++ branches/blender2.5/blender/source/blender/blenfont/intern/blf_internal_types.h	2009-04-06 04:12:31 UTC (rev 19556)
@@ -123,6 +123,9 @@
 	/* font type, can be freetype2 or internal. */
 	int type;
 
+	/* draw mode, texture or bitmap. */
+	int mode;
+
 	/* reference count. */
 	int ref;
 





More information about the Bf-blender-cvs mailing list