static void blf_glyph_cache_texture(FontBLF *font, GlyphCacheBLF *gc) { int i; /* move the index. */ gc->cur_tex++; if (UNLIKELY(gc->cur_tex >= gc->ntex)) { gc->ntex *= 2; gc->textures = (GLuint *)MEM_reallocN((void *)gc->textures, sizeof(GLuint) * gc->ntex); } gc->p2_width = (int)blf_next_p2((unsigned int)((gc->rem_glyphs * gc->max_glyph_width) + (gc->pad * 2))); if (gc->p2_width > font->max_tex_size) gc->p2_width = font->max_tex_size; i = (int)((gc->p2_width - (gc->pad * 2)) / gc->max_glyph_width); gc->p2_height = (int)blf_next_p2((unsigned int)(((gc->num_glyphs / i) + 1) * gc->max_glyph_height)); if (gc->p2_height > font->max_tex_size) gc->p2_height = font->max_tex_size; glGenTextures(1, &gc->textures[gc->cur_tex]); glBindTexture(GL_TEXTURE_2D, (font->tex_bind_state = gc->textures[gc->cur_tex])); 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_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, gc->p2_width, gc->p2_height, 0, GL_ALPHA, GL_UNSIGNED_BYTE, NULL); }
static void blf_glyph_cache_texture(FontBLF *font, GlyphCacheBLF *gc) { int tot_mem, i; unsigned char *buf; /* move the index. */ gc->cur_tex++; if (gc->cur_tex >= gc->ntex) { gc->ntex *= 2; gc->textures = (GLuint *)realloc((void *)gc->textures, sizeof(GLuint)*gc->ntex); } gc->p2_width = blf_next_p2((gc->rem_glyphs * gc->max_glyph_width) + (gc->pad * 2)); if (gc->p2_width > font->max_tex_size) gc->p2_width = font->max_tex_size; i = (int)((gc->p2_width - (gc->pad * 2)) / gc->max_glyph_width); gc->p2_height = blf_next_p2(((gc->num_glyphs / i) + 1) * gc->max_glyph_height); if (gc->p2_height > font->max_tex_size) gc->p2_height = font->max_tex_size; tot_mem = gc->p2_width * gc->p2_height; buf = (unsigned char *)malloc(tot_mem); memset((void *)buf, 0, tot_mem); glGenTextures(1, &gc->textures[gc->cur_tex]); glBindTexture(GL_TEXTURE_2D, (font->tex_bind_state = gc->textures[gc->cur_tex])); 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_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, gc->p2_width, gc->p2_height, 0, GL_ALPHA, GL_UNSIGNED_BYTE, buf); free((void *)buf); }