diff options
author | Luo Jinghua <sunmoon1997@gmail.com> | 2008-09-04 07:55:09 +0800 |
---|---|---|
committer | Luo Jinghua <sunmoon1997@gmail.com> | 2008-09-04 07:55:09 +0800 |
commit | 0ba84200980b9655c441b033049c1c24ff9793d8 (patch) | |
tree | 796749d23224bf03636a257d721b6d0482fe705e | |
parent | 4a05018ba7da7f7fc29f8de7138b1082508b849a (diff) |
opengl: fix nothing drawing out if cleartype is enabled.
-rw-r--r-- | src/Makefile.am | 2 | ||||
-rw-r--r-- | src/sdl-freetype-opengl.c | 29 |
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) |