summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuo Jinghua <sunmoon1997@gmail.com>2008-09-04 07:55:09 +0800
committerLuo Jinghua <sunmoon1997@gmail.com>2008-09-04 07:55:09 +0800
commit0ba84200980b9655c441b033049c1c24ff9793d8 (patch)
tree796749d23224bf03636a257d721b6d0482fe705e
parent4a05018ba7da7f7fc29f8de7138b1082508b849a (diff)
opengl: fix nothing drawing out if cleartype is enabled.
-rw-r--r--src/Makefile.am2
-rw-r--r--src/sdl-freetype-opengl.c29
2 files changed, 17 insertions, 14 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index e0a452e..99e6607 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1,4 +1,4 @@
-AM_CFLAGS = $(WARN_CFLAGS) $(FONTCONFIG_CFLAGS) $(FREETYPE_CFLAGS) $(SDL_CFLAGS)
+AM_CFLAGS = -I$(srcdir) $(FONTCONFIG_CFLAGS) $(FREETYPE_CFLAGS) $(SDL_CFLAGS) $(WARN_CFLAGS) $(CFLAGS)
if HAVE_FONTCONFIG
libsdl_ft = libsdl-ft.la
diff --git a/src/sdl-freetype-opengl.c b/src/sdl-freetype-opengl.c
index 14a383c..5e2bda9 100644
--- a/src/sdl-freetype-opengl.c
+++ b/src/sdl-freetype-opengl.c
@@ -90,13 +90,13 @@ sdl_freetype_opengl_glyph_user_data_init (sdl_freetype_font_t * font,
sdl_freetype_glyph_info_t * info,
FT_UInt index)
{
- sdl_freetype_opengl_render_t * opengl_render =
+ sdl_freetype_opengl_render_t * opengl_render =
(sdl_freetype_opengl_render_t *) render;
sdl_freetype_opengl_user_data_t * user_data;
sdl_freetype_area_t * area;
sdl_freetype_error_t err;
FT_Bitmap * bitmap;
- unsigned int pitch, width;
+ unsigned int pitch, width, height;
unsigned char * data;
if (info->flags & SDL_FREETYPE_GLYPH_EMPTY)
@@ -117,8 +117,8 @@ sdl_freetype_opengl_glyph_user_data_init (sdl_freetype_font_t * font,
glBindTexture (GL_TEXTURE_2D, opengl_render->texture);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
- glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);//GL_LINEAR);
+ glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);//GL_LINEAR);
switch (bitmap->pixel_mode) {
case FT_PIXEL_MODE_MONO:
@@ -141,6 +141,7 @@ sdl_freetype_opengl_glyph_user_data_init (sdl_freetype_font_t * font,
opengl_render->width, opengl_render->height, 0,
GL_RGBA, GL_UNSIGNED_BYTE, data);
free (data);
+ break;
default:
glDeleteTextures (1, &opengl_render->texture);
return SDL_FREETYPE_ERR_NOT_IMPLEMENTED;
@@ -164,7 +165,7 @@ sdl_freetype_opengl_glyph_user_data_init (sdl_freetype_font_t * font,
dst = data;
for (h = bitmap->rows; h > 0; h--, src += bitmap->pitch, dst += pitch) {
int x;
-
+
for (x = 0; x < bitmap->width; x++) {
if (src[(x >> 3)] & (0x80 >> (x & 7)))
dst[x] = 0xff;
@@ -179,18 +180,19 @@ sdl_freetype_opengl_glyph_user_data_init (sdl_freetype_font_t * font,
else
width = pitch;
}
+ height = (bitmap->rows + 3) & ~3;
user_data = sdl_freetype_opengl_user_data_create ();
if (!user_data)
return SDL_FREETYPE_ERR_OUT_OF_MEMORY;
err = sdl_freetype_area_manager_find (opengl_render->manager,
- width, bitmap->rows,
+ width, height,
SDL_FREETYPE_FALSE,
user_data);
if (err != SDL_FREETYPE_ERR_OK) {
err = sdl_freetype_area_manager_find (opengl_render->manager,
- width, bitmap->rows,
+ width, height,
SDL_FREETYPE_TRUE,
user_data);
if (err != SDL_FREETYPE_ERR_OK) {
@@ -231,10 +233,10 @@ sdl_freetype_opengl_glyph_user_data_init (sdl_freetype_font_t * font,
if (data)
free (data);
- user_data->uv[0].x = (float)area->x / opengl_render->width;
- user_data->uv[0].y = (float)area->y / opengl_render->height;
- user_data->uv[1].x = (float)(area->x + bitmap->width) / opengl_render->width;
- user_data->uv[1].y = (float)(area->y + bitmap->rows) / opengl_render->height;
+ user_data->uv[0].x = (float)area->x ;
+ user_data->uv[0].y = (float)area->y ;
+ user_data->uv[1].x = (float)(area->x + bitmap->width);
+ user_data->uv[1].y = (float)(area->y + bitmap->rows);
info->data = user_data;
return SDL_FREETYPE_ERR_OK;
}
@@ -325,6 +327,7 @@ sdl_freetype_opengl_glyphs_render (sdl_freetype_font_t * font,
glMatrixMode (GL_TEXTURE);
glPushMatrix ();
glLoadIdentity ();
+ glScalef (1.0f / render->width, 1.0f / render->height, 1.0f);
glMatrixMode (GL_MODELVIEW);
glPushMatrix ();
@@ -362,7 +365,7 @@ sdl_freetype_opengl_glyphs_render (sdl_freetype_font_t * font,
glTexCoord2f (user_data->uv[1].x, user_data->uv[0].y);
glVertex2f (x2, y2);
-
+
glTexCoord2f (user_data->uv[1].x, user_data->uv[1].y);
glVertex2f (x2, y1);
@@ -389,7 +392,7 @@ static void
sdl_freetype_opengl_render_destroy (sdl_freetype_font_t * font,
sdl_freetype_glyph_render_t * render)
{
- sdl_freetype_opengl_render_t * opengl_render =
+ sdl_freetype_opengl_render_t * opengl_render =
(sdl_freetype_opengl_render_t *) render;
if (!opengl_render)