33 #include FT_FREETYPE_H
83 for (i = 0; i < 0x80; i++) {
84 for (j = 0; j < 0x80; j++) {
87 FT_UInt glyph_index = FT_Get_Char_Index(font->
face, i);
97 if (g && g_prev && FT_Get_Kerning(font->
face, g_prev->
idx, g->
idx, kc->
mode, &delta) == 0) {
98 kc->
table[i][j] = (int)delta.x >> 6;
152 if (FT_IS_SCALABLE(font->
face)) {
154 (((
float)font->
face->size->metrics.x_ppem) /
155 ((
float)font->
face->units_per_EM)));
158 (((
float)font->
face->size->metrics.y_ppem) /
159 ((
float)font->
face->units_per_EM)));
243 FT_Bitmap bitmap, tempbitmap;
269 load_flags = FT_LOAD_TARGET_MONO;
270 render_mode = FT_RENDER_MODE_MONO;
273 load_flags = FT_LOAD_NO_BITMAP;
274 render_mode = FT_RENDER_MODE_NORMAL;
276 load_flags |= FT_LOAD_TARGET_NORMAL | FT_LOAD_NO_HINTING;
279 load_flags |= FT_LOAD_TARGET_LIGHT;
282 load_flags |= FT_LOAD_TARGET_NORMAL;
287 load_flags |= FT_LOAD_TARGET_NORMAL | FT_LOAD_NO_HINTING;
291 err = FT_Load_Glyph(font->
face, (FT_UInt)index, load_flags);
294 if (((font->
flags &
BLF_ITALIC) != 0) && !(font->
face->style_flags & FT_STYLE_FLAG_ITALIC) &&
295 (font->
face->glyph->format == FT_GLYPH_FORMAT_OUTLINE)) {
302 FT_Outline_Transform(&font->
face->glyph->outline, &
transform);
307 !(font->
face->style_flags & FT_STYLE_FLAG_BOLD) &
308 (font->
face->glyph->format == FT_GLYPH_FORMAT_OUTLINE)) {
310 const FT_Pos extra_x = FT_MulFix(font->
face->units_per_EM, font->
face->size->metrics.x_scale) /
312 const FT_Pos extra_y = FT_MulFix(font->
face->units_per_EM, font->
face->size->metrics.y_scale) /
314 FT_Outline_EmboldenXY(&font->
face->glyph->outline, extra_x, extra_y);
315 if ((font->
face->face_flags & FT_FACE_FLAG_FIXED_WIDTH) == 0) {
317 font->
face->glyph->advance.x += (FT_Pos)(((
float)extra_x) * 1.05f);
318 font->
face->glyph->advance.y += extra_y;
322 FT_Outline_Translate(&font->
face->glyph->outline, (extra_x / -2), 0);
332 slot = font->
face->glyph;
333 err = FT_Render_Glyph(slot, render_mode);
338 FT_Bitmap_New(&tempbitmap);
341 err += FT_Bitmap_Convert(font->
ft_lib, &slot->bitmap, &tempbitmap, 1);
342 err += FT_Bitmap_Copy(font->
ft_lib, &tempbitmap, &slot->bitmap);
343 err += FT_Bitmap_Done(font->
ft_lib, &tempbitmap);
346 if (
err || slot->format != FT_GLYPH_FORMAT_BITMAP) {
353 g->
idx = (FT_UInt)index;
354 bitmap = slot->bitmap;
355 g->
dims[0] = (int)bitmap.width;
356 g->
dims[1] = (
int)bitmap.rows;
358 const int buffer_size = g->
dims[0] * g->
dims[1];
360 if (buffer_size != 0) {
363 for (
int i = 0; i < buffer_size; i++) {
364 bitmap.buffer[i] = bitmap.buffer[i] ? 255 : 0;
369 memcpy(g->
bitmap, bitmap.buffer, (
size_t)buffer_size);
374 g->
pos[0] = slot->bitmap_left;
375 g->
pos[1] = slot->bitmap_top;
376 g->
pitch = slot->bitmap.pitch;
378 FT_Outline_Get_CBox(&(slot->outline), &bbox);
401 const int glyph_size[2],
427 const int glyph_size[2],
434 int glyph_size_flag[2];
436 glyph_size_flag[0] = -glyph_size[0];
437 glyph_size_flag[1] = -glyph_size[1];
443 const int glyph_size[2],
450 int glyph_size_flag[2];
452 glyph_size_flag[0] = -glyph_size[0];
453 glyph_size_flag[1] = glyph_size[1];
484 if ((!g->
dims[0]) || (!g->
dims[1])) {
495 int buff_size = g->
dims[0] * g->
dims[1];
500 int h = bitmap_len /
w + 1;
549 else if (font->
shadow <= 4) {
573 switch (font->blur) {
typedef float(TangentPoint)[2]
#define BLF_HINTING_SLIGHT
void * BLI_pophead(ListBase *listbase) ATTR_NONNULL(1)
void BLI_addhead(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void void BLI_freelistN(struct ListBase *listbase) ATTR_NONNULL(1)
MINLINE void copy_v4_fl4(float v[4], float x, float y, float z, float w)
MINLINE void copy_v4_v4_uchar(unsigned char r[4], const unsigned char a[4])
MINLINE void copy_v2_v2_int(int r[2], const int a[2])
void BLI_rctf_translate(struct rctf *rect, float x, float y)
bool BLI_rctf_inside_rctf(const rctf *rct_a, const rctf *rct_b)
Strict compiler flags for areas of code we want to ensure don't do conversions without us knowing abo...
void BLI_spin_unlock(SpinLock *spin)
void BLI_spin_lock(SpinLock *spin)
int GPU_max_texture_size(void)
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble w _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat w _GL_VOID_RET _GL_VOID GLint GLint GLint w _GL_VOID_RET _GL_VOID GLshort GLshort GLshort w _GL_VOID_RET _GL_VOID GLdouble y1
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble w _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat w _GL_VOID_RET _GL_VOID GLint GLint GLint w _GL_VOID_RET _GL_VOID GLshort GLshort GLshort w _GL_VOID_RET _GL_VOID GLdouble GLdouble x2
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint y
void GPU_texture_free(GPUTexture *tex)
GPUTexture * GPU_texture_create_2d(const char *name, int w, int h, int mip_len, eGPUTextureFormat format, const float *data)
GPU_INLINE void * GPU_vertbuf_raw_step(GPUVertBufRaw *a)
Read Guarded memory(de)allocation.
#define MEM_reallocN(vmemh, len)
void blf_batch_draw(void)
static void blf_texture5_draw(const unsigned char color_in[4], const int glyph_size[2], const int offset, float x1, float y1, float x2, float y2)
GlyphBLF * blf_glyph_add(FontBLF *font, GlyphCacheBLF *gc, unsigned int index, unsigned int c)
void blf_kerning_cache_clear(FontBLF *font)
GlyphCacheBLF * blf_glyph_cache_find(FontBLF *font, unsigned int size, unsigned int dpi)
void blf_glyph_cache_clear(FontBLF *font)
KerningCacheBLF * blf_kerning_cache_new(FontBLF *font, GlyphCacheBLF *gc)
void blf_glyph_cache_free(GlyphCacheBLF *gc)
void blf_glyph_render(FontBLF *font, GlyphCacheBLF *gc, GlyphBLF *g, float x, float y)
static void blf_texture_draw(const unsigned char color[4], const int glyph_size[2], const int offset, float x1, float y1, float x2, float y2)
static void blf_glyph_calc_rect_test(rctf *rect, GlyphBLF *g, float x, float y)
static void blf_texture3_draw(const unsigned char color_in[4], const int glyph_size[2], const int offset, float x1, float y1, float x2, float y2)
static void blf_glyph_calc_rect(rctf *rect, GlyphBLF *g, float x, float y)
void blf_glyph_cache_release(FontBLF *font)
GlyphBLF * blf_glyph_search(GlyphCacheBLF *gc, unsigned int c)
static void blf_glyph_calc_rect_shadow(rctf *rect, GlyphBLF *g, float x, float y, FontBLF *font)
GlyphCacheBLF * blf_glyph_cache_acquire(FontBLF *font)
void blf_glyph_free(GlyphBLF *g)
GlyphCacheBLF * blf_glyph_cache_new(FontBLF *font)
KerningCacheBLF * blf_kerning_cache_find(FontBLF *font)
unsigned int blf_hash(unsigned int val)
#define BLF_BATCH_DRAW_LEN_MAX
SIMD_FORCE_INLINE btVector3 transform(const btVector3 &point) const
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
void(* MEM_freeN)(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
void *(* MEM_mallocN)(size_t len, const char *str)
struct GPUVertBufRaw pos_step col_step offset_step glyph_size_step
struct GlyphCacheBLF * glyph_cache
KerningCacheBLF * kerning_cache
SpinLock * glyph_cache_mutex
unsigned char shadow_color[4]
struct GlyphCacheBLF * glyph_cache
struct GlyphBLF * glyph_ascii_table[256]
struct GlyphCacheBLF * next
struct GlyphCacheBLF * prev
struct KerningCacheBLF * next
struct KerningCacheBLF * prev