@ -1406,7 +1406,7 @@ Error FontFile::load_bitmap_font(const String &p_path) {
oversampling = 1.0f ;
oversampling = 1.0f ;
Ref < FileAccess > f = FileAccess : : open ( p_path , FileAccess : : READ ) ;
Ref < FileAccess > f = FileAccess : : open ( p_path , FileAccess : : READ ) ;
ERR_FAIL_COND_V_MSG ( f . is_null ( ) , ERR_CANT_CREATE , vformat ( RTR ( " Cannot open font from file: %s. " ) , p_path ) ) ;
ERR_FAIL_COND_V_MSG ( f . is_null ( ) , ERR_CANT_CREATE , vformat ( " Cannot open font from file: %s. " , p_path ) ) ;
int base_size = 16 ;
int base_size = 16 ;
int height = 0 ;
int height = 0 ;
@ -1425,7 +1425,7 @@ Error FontFile::load_bitmap_font(const String &p_path) {
f - > get_buffer ( ( unsigned char * ) & magic , 4 ) ;
f - > get_buffer ( ( unsigned char * ) & magic , 4 ) ;
if ( magic [ 0 ] = = ' B ' & & magic [ 1 ] = = ' M ' & & magic [ 2 ] = = ' F ' ) {
if ( magic [ 0 ] = = ' B ' & & magic [ 1 ] = = ' M ' & & magic [ 2 ] = = ' F ' ) {
// Binary BMFont file.
// Binary BMFont file.
ERR_FAIL_COND_V_MSG ( magic [ 3 ] ! = 3 , ERR_CANT_CREATE , vformat ( RTR ( " Version %d of BMFont is not supported (should be 3). " ) , ( int ) magic [ 3 ] ) ) ;
ERR_FAIL_COND_V_MSG ( magic [ 3 ] ! = 3 , ERR_CANT_CREATE , vformat ( " Version %d of BMFont is not supported (should be 3). " , ( int ) magic [ 3 ] ) ) ;
uint8_t block_type = f - > get_8 ( ) ;
uint8_t block_type = f - > get_8 ( ) ;
uint32_t block_size = f - > get_32 ( ) ;
uint32_t block_size = f - > get_32 ( ) ;
@ -1435,7 +1435,7 @@ Error FontFile::load_bitmap_font(const String &p_path) {
uint64_t off = f - > get_position ( ) ;
uint64_t off = f - > get_position ( ) ;
switch ( block_type ) {
switch ( block_type ) {
case 1 : /* info */ {
case 1 : /* info */ {
ERR_FAIL_COND_V_MSG ( block_size < 15 , ERR_CANT_CREATE , RTR ( " Invalid BMFont info block size. " ) ) ;
ERR_FAIL_COND_V_MSG ( block_size < 15 , ERR_CANT_CREATE , " Invalid BMFont info block size. " ) ;
base_size = f - > get_16 ( ) ;
base_size = f - > get_16 ( ) ;
if ( base_size < = 0 ) {
if ( base_size < = 0 ) {
base_size = 16 ;
base_size = 16 ;
@ -1496,7 +1496,7 @@ Error FontFile::load_bitmap_font(const String &p_path) {
set_fixed_size ( base_size ) ;
set_fixed_size ( base_size ) ;
} break ;
} break ;
case 2 : /* common */ {
case 2 : /* common */ {
ERR_FAIL_COND_V_MSG ( block_size ! = 15 , ERR_CANT_CREATE , RTR ( " Invalid BMFont common block size. " ) ) ;
ERR_FAIL_COND_V_MSG ( block_size ! = 15 , ERR_CANT_CREATE , " Invalid BMFont common block size. " ) ;
height = f - > get_16 ( ) ;
height = f - > get_16 ( ) ;
ascent = f - > get_16 ( ) ;
ascent = f - > get_16 ( ) ;
f - > get_32 ( ) ; // scale, skip
f - > get_32 ( ) ; // scale, skip
@ -1534,40 +1534,40 @@ Error FontFile::load_bitmap_font(const String &p_path) {
Ref < Image > img ;
Ref < Image > img ;
img . instantiate ( ) ;
img . instantiate ( ) ;
Error err = ImageLoader : : load_image ( file , img ) ;
Error err = ImageLoader : : load_image ( file , img ) ;
ERR_FAIL_COND_V_MSG ( err ! = OK , ERR_FILE_CANT_READ , vformat ( RTR ( " Can't load font texture: %s. " ) , file ) ) ;
ERR_FAIL_COND_V_MSG ( err ! = OK , ERR_FILE_CANT_READ , vformat ( " Can't load font texture: %s. " , file ) ) ;
if ( packed ) {
if ( packed ) {
if ( ch [ 3 ] = = 0 ) { // 4 x 8 bit monochrome, no outline
if ( ch [ 3 ] = = 0 ) { // 4 x 8 bit monochrome, no outline
outline = 0 ;
outline = 0 ;
ERR_FAIL_COND_V_MSG ( img - > get_format ( ) ! = Image : : FORMAT_RGBA8 , ERR_FILE_CANT_READ , RTR ( " Unsupported BMFont texture format. " ) ) ;
ERR_FAIL_COND_V_MSG ( img - > get_format ( ) ! = Image : : FORMAT_RGBA8 , ERR_FILE_CANT_READ , " Unsupported BMFont texture format. " ) ;
_convert_packed_8bit ( img , page , base_size ) ;
_convert_packed_8bit ( img , page , base_size ) ;
} else if ( ( ch [ 3 ] = = 2 ) & & ( outline > 0 ) ) { // 4 x 4 bit monochrome, gl + outline
} else if ( ( ch [ 3 ] = = 2 ) & & ( outline > 0 ) ) { // 4 x 4 bit monochrome, gl + outline
ERR_FAIL_COND_V_MSG ( img - > get_format ( ) ! = Image : : FORMAT_RGBA8 , ERR_FILE_CANT_READ , RTR ( " Unsupported BMFont texture format. " ) ) ;
ERR_FAIL_COND_V_MSG ( img - > get_format ( ) ! = Image : : FORMAT_RGBA8 , ERR_FILE_CANT_READ , " Unsupported BMFont texture format. " ) ;
_convert_packed_4bit ( img , page , base_size ) ;
_convert_packed_4bit ( img , page , base_size ) ;
} else {
} else {
ERR_FAIL_V_MSG ( ERR_CANT_CREATE , RTR ( " Unsupported BMFont texture format. " ) ) ;
ERR_FAIL_V_MSG ( ERR_CANT_CREATE , " Unsupported BMFont texture format. " ) ;
}
}
} else {
} else {
if ( ( ch [ 0 ] = = 0 ) & & ( ch [ 1 ] = = 0 ) & & ( ch [ 2 ] = = 0 ) & & ( ch [ 3 ] = = 0 ) ) { // RGBA8 color, no outline
if ( ( ch [ 0 ] = = 0 ) & & ( ch [ 1 ] = = 0 ) & & ( ch [ 2 ] = = 0 ) & & ( ch [ 3 ] = = 0 ) ) { // RGBA8 color, no outline
outline = 0 ;
outline = 0 ;
ERR_FAIL_COND_V_MSG ( img - > get_format ( ) ! = Image : : FORMAT_RGBA8 , ERR_FILE_CANT_READ , RTR ( " Unsupported BMFont texture format. " ) ) ;
ERR_FAIL_COND_V_MSG ( img - > get_format ( ) ! = Image : : FORMAT_RGBA8 , ERR_FILE_CANT_READ , " Unsupported BMFont texture format. " ) ;
set_texture_image ( 0 , Vector2i ( base_size , 0 ) , page , img ) ;
set_texture_image ( 0 , Vector2i ( base_size , 0 ) , page , img ) ;
} else if ( ( ch [ 0 ] = = 2 ) & & ( ch [ 1 ] = = 2 ) & & ( ch [ 2 ] = = 2 ) & & ( ch [ 3 ] = = 2 ) & & ( outline > 0 ) ) { // RGBA4 color, gl + outline
} else if ( ( ch [ 0 ] = = 2 ) & & ( ch [ 1 ] = = 2 ) & & ( ch [ 2 ] = = 2 ) & & ( ch [ 3 ] = = 2 ) & & ( outline > 0 ) ) { // RGBA4 color, gl + outline
ERR_FAIL_COND_V_MSG ( img - > get_format ( ) ! = Image : : FORMAT_RGBA8 , ERR_FILE_CANT_READ , RTR ( " Unsupported BMFont texture format. " ) ) ;
ERR_FAIL_COND_V_MSG ( img - > get_format ( ) ! = Image : : FORMAT_RGBA8 , ERR_FILE_CANT_READ , " Unsupported BMFont texture format. " ) ;
_convert_rgba_4bit ( img , page , base_size ) ;
_convert_rgba_4bit ( img , page , base_size ) ;
} else if ( ( first_gl_ch > = 0 ) & & ( first_ol_ch > = 0 ) & & ( outline > 0 ) ) { // 1 x 8 bit monochrome, gl + outline
} else if ( ( first_gl_ch > = 0 ) & & ( first_ol_ch > = 0 ) & & ( outline > 0 ) ) { // 1 x 8 bit monochrome, gl + outline
ERR_FAIL_COND_V_MSG ( img - > get_format ( ) ! = Image : : FORMAT_RGBA8 & & img - > get_format ( ) ! = Image : : FORMAT_L8 , ERR_FILE_CANT_READ , RTR ( " Unsupported BMFont texture format. " ) ) ;
ERR_FAIL_COND_V_MSG ( img - > get_format ( ) ! = Image : : FORMAT_RGBA8 & & img - > get_format ( ) ! = Image : : FORMAT_L8 , ERR_FILE_CANT_READ , " Unsupported BMFont texture format. " ) ;
_convert_mono_8bit ( img , page , first_gl_ch , base_size , 0 ) ;
_convert_mono_8bit ( img , page , first_gl_ch , base_size , 0 ) ;
_convert_mono_8bit ( img , page , first_ol_ch , base_size , 1 ) ;
_convert_mono_8bit ( img , page , first_ol_ch , base_size , 1 ) ;
} else if ( ( first_cm_ch > = 0 ) & & ( outline > 0 ) ) { // 1 x 4 bit monochrome, gl + outline
} else if ( ( first_cm_ch > = 0 ) & & ( outline > 0 ) ) { // 1 x 4 bit monochrome, gl + outline
ERR_FAIL_COND_V_MSG ( img - > get_format ( ) ! = Image : : FORMAT_RGBA8 & & img - > get_format ( ) ! = Image : : FORMAT_L8 , ERR_FILE_CANT_READ , RTR ( " Unsupported BMFont texture format. " ) ) ;
ERR_FAIL_COND_V_MSG ( img - > get_format ( ) ! = Image : : FORMAT_RGBA8 & & img - > get_format ( ) ! = Image : : FORMAT_L8 , ERR_FILE_CANT_READ , " Unsupported BMFont texture format. " ) ;
_convert_mono_4bit ( img , page , first_cm_ch , base_size , 1 ) ;
_convert_mono_4bit ( img , page , first_cm_ch , base_size , 1 ) ;
} else if ( first_gl_ch > = 0 ) { // 1 x 8 bit monochrome, no outline
} else if ( first_gl_ch > = 0 ) { // 1 x 8 bit monochrome, no outline
outline = 0 ;
outline = 0 ;
ERR_FAIL_COND_V_MSG ( img - > get_format ( ) ! = Image : : FORMAT_RGBA8 & & img - > get_format ( ) ! = Image : : FORMAT_L8 , ERR_FILE_CANT_READ , RTR ( " Unsupported BMFont texture format. " ) ) ;
ERR_FAIL_COND_V_MSG ( img - > get_format ( ) ! = Image : : FORMAT_RGBA8 & & img - > get_format ( ) ! = Image : : FORMAT_L8 , ERR_FILE_CANT_READ , " Unsupported BMFont texture format. " ) ;
_convert_mono_8bit ( img , page , first_gl_ch , base_size , 0 ) ;
_convert_mono_8bit ( img , page , first_gl_ch , base_size , 0 ) ;
} else {
} else {
ERR_FAIL_V_MSG ( ERR_CANT_CREATE , RTR ( " Unsupported BMFont texture format. " ) ) ;
ERR_FAIL_V_MSG ( ERR_CANT_CREATE , " Unsupported BMFont texture format. " ) ;
}
}
}
}
}
}
@ -1669,7 +1669,7 @@ Error FontFile::load_bitmap_font(const String &p_path) {
}
}
} break ;
} break ;
default : {
default : {
ERR_FAIL_V_MSG ( ERR_CANT_CREATE , RTR ( " Invalid BMFont block type. " ) ) ;
ERR_FAIL_V_MSG ( ERR_CANT_CREATE , " Invalid BMFont block type. " ) ;
} break ;
} break ;
}
}
f - > seek ( off + block_size ) ;
f - > seek ( off + block_size ) ;
@ -1825,17 +1825,17 @@ Error FontFile::load_bitmap_font(const String &p_path) {
Ref < Image > img ;
Ref < Image > img ;
img . instantiate ( ) ;
img . instantiate ( ) ;
Error err = ImageLoader : : load_image ( file , img ) ;
Error err = ImageLoader : : load_image ( file , img ) ;
ERR_FAIL_COND_V_MSG ( err ! = OK , ERR_FILE_CANT_READ , vformat ( RTR ( " Can't load font texture: %s. " ) , file ) ) ;
ERR_FAIL_COND_V_MSG ( err ! = OK , ERR_FILE_CANT_READ , vformat ( " Can't load font texture: %s. " , file ) ) ;
if ( packed ) {
if ( packed ) {
if ( ch [ 3 ] = = 0 ) { // 4 x 8 bit monochrome, no outline
if ( ch [ 3 ] = = 0 ) { // 4 x 8 bit monochrome, no outline
outline = 0 ;
outline = 0 ;
ERR_FAIL_COND_V_MSG ( img - > get_format ( ) ! = Image : : FORMAT_RGBA8 , ERR_FILE_CANT_READ , RTR ( " Unsupported BMFont texture format. " ) ) ;
ERR_FAIL_COND_V_MSG ( img - > get_format ( ) ! = Image : : FORMAT_RGBA8 , ERR_FILE_CANT_READ , " Unsupported BMFont texture format. " ) ;
_convert_packed_8bit ( img , page , base_size ) ;
_convert_packed_8bit ( img , page , base_size ) ;
} else if ( ( ch [ 3 ] = = 2 ) & & ( outline > 0 ) ) { // 4 x 4 bit monochrome, gl + outline
} else if ( ( ch [ 3 ] = = 2 ) & & ( outline > 0 ) ) { // 4 x 4 bit monochrome, gl + outline
ERR_FAIL_COND_V_MSG ( img - > get_format ( ) ! = Image : : FORMAT_RGBA8 , ERR_FILE_CANT_READ , RTR ( " Unsupported BMFont texture format. " ) ) ;
ERR_FAIL_COND_V_MSG ( img - > get_format ( ) ! = Image : : FORMAT_RGBA8 , ERR_FILE_CANT_READ , " Unsupported BMFont texture format. " ) ;
_convert_packed_4bit ( img , page , base_size ) ;
_convert_packed_4bit ( img , page , base_size ) ;
} else {
} else {
ERR_FAIL_V_MSG ( ERR_CANT_CREATE , RTR ( " Unsupported BMFont texture format. " ) ) ;
ERR_FAIL_V_MSG ( ERR_CANT_CREATE , " Unsupported BMFont texture format. " ) ;
}
}
} else {
} else {
if ( ( ch [ 3 ] = = 0 ) & & ( ch [ 0 ] = = 4 ) & & ( ch [ 1 ] = = 4 ) & & ( ch [ 2 ] = = 4 ) & & img - > get_format ( ) = = Image : : FORMAT_RGBA8 ) { // might be RGBA8 color, no outline (color part of the image should be sold white, but some apps designed for Godot 3 generate color fonts with this config)
if ( ( ch [ 3 ] = = 0 ) & & ( ch [ 0 ] = = 4 ) & & ( ch [ 1 ] = = 4 ) & & ( ch [ 2 ] = = 4 ) & & img - > get_format ( ) = = Image : : FORMAT_RGBA8 ) { // might be RGBA8 color, no outline (color part of the image should be sold white, but some apps designed for Godot 3 generate color fonts with this config)
@ -1843,24 +1843,24 @@ Error FontFile::load_bitmap_font(const String &p_path) {
set_texture_image ( 0 , Vector2i ( base_size , 0 ) , page , img ) ;
set_texture_image ( 0 , Vector2i ( base_size , 0 ) , page , img ) ;
} else if ( ( ch [ 0 ] = = 0 ) & & ( ch [ 1 ] = = 0 ) & & ( ch [ 2 ] = = 0 ) & & ( ch [ 3 ] = = 0 ) ) { // RGBA8 color, no outline
} else if ( ( ch [ 0 ] = = 0 ) & & ( ch [ 1 ] = = 0 ) & & ( ch [ 2 ] = = 0 ) & & ( ch [ 3 ] = = 0 ) ) { // RGBA8 color, no outline
outline = 0 ;
outline = 0 ;
ERR_FAIL_COND_V_MSG ( img - > get_format ( ) ! = Image : : FORMAT_RGBA8 , ERR_FILE_CANT_READ , RTR ( " Unsupported BMFont texture format. " ) ) ;
ERR_FAIL_COND_V_MSG ( img - > get_format ( ) ! = Image : : FORMAT_RGBA8 , ERR_FILE_CANT_READ , " Unsupported BMFont texture format. " ) ;
set_texture_image ( 0 , Vector2i ( base_size , 0 ) , page , img ) ;
set_texture_image ( 0 , Vector2i ( base_size , 0 ) , page , img ) ;
} else if ( ( ch [ 0 ] = = 2 ) & & ( ch [ 1 ] = = 2 ) & & ( ch [ 2 ] = = 2 ) & & ( ch [ 3 ] = = 2 ) & & ( outline > 0 ) ) { // RGBA4 color, gl + outline
} else if ( ( ch [ 0 ] = = 2 ) & & ( ch [ 1 ] = = 2 ) & & ( ch [ 2 ] = = 2 ) & & ( ch [ 3 ] = = 2 ) & & ( outline > 0 ) ) { // RGBA4 color, gl + outline
ERR_FAIL_COND_V_MSG ( img - > get_format ( ) ! = Image : : FORMAT_RGBA8 , ERR_FILE_CANT_READ , RTR ( " Unsupported BMFont texture format. " ) ) ;
ERR_FAIL_COND_V_MSG ( img - > get_format ( ) ! = Image : : FORMAT_RGBA8 , ERR_FILE_CANT_READ , " Unsupported BMFont texture format. " ) ;
_convert_rgba_4bit ( img , page , base_size ) ;
_convert_rgba_4bit ( img , page , base_size ) ;
} else if ( ( first_gl_ch > = 0 ) & & ( first_ol_ch > = 0 ) & & ( outline > 0 ) ) { // 1 x 8 bit monochrome, gl + outline
} else if ( ( first_gl_ch > = 0 ) & & ( first_ol_ch > = 0 ) & & ( outline > 0 ) ) { // 1 x 8 bit monochrome, gl + outline
ERR_FAIL_COND_V_MSG ( img - > get_format ( ) ! = Image : : FORMAT_RGBA8 & & img - > get_format ( ) ! = Image : : FORMAT_L8 , ERR_FILE_CANT_READ , RTR ( " Unsupported BMFont texture format. " ) ) ;
ERR_FAIL_COND_V_MSG ( img - > get_format ( ) ! = Image : : FORMAT_RGBA8 & & img - > get_format ( ) ! = Image : : FORMAT_L8 , ERR_FILE_CANT_READ , " Unsupported BMFont texture format. " ) ;
_convert_mono_8bit ( img , page , first_gl_ch , base_size , 0 ) ;
_convert_mono_8bit ( img , page , first_gl_ch , base_size , 0 ) ;
_convert_mono_8bit ( img , page , first_ol_ch , base_size , 1 ) ;
_convert_mono_8bit ( img , page , first_ol_ch , base_size , 1 ) ;
} else if ( ( first_cm_ch > = 0 ) & & ( outline > 0 ) ) { // 1 x 4 bit monochrome, gl + outline
} else if ( ( first_cm_ch > = 0 ) & & ( outline > 0 ) ) { // 1 x 4 bit monochrome, gl + outline
ERR_FAIL_COND_V_MSG ( img - > get_format ( ) ! = Image : : FORMAT_RGBA8 & & img - > get_format ( ) ! = Image : : FORMAT_L8 , ERR_FILE_CANT_READ , RTR ( " Unsupported BMFont texture format. " ) ) ;
ERR_FAIL_COND_V_MSG ( img - > get_format ( ) ! = Image : : FORMAT_RGBA8 & & img - > get_format ( ) ! = Image : : FORMAT_L8 , ERR_FILE_CANT_READ , " Unsupported BMFont texture format. " ) ;
_convert_mono_4bit ( img , page , first_cm_ch , base_size , 1 ) ;
_convert_mono_4bit ( img , page , first_cm_ch , base_size , 1 ) ;
} else if ( first_gl_ch > = 0 ) { // 1 x 8 bit monochrome, no outline
} else if ( first_gl_ch > = 0 ) { // 1 x 8 bit monochrome, no outline
outline = 0 ;
outline = 0 ;
ERR_FAIL_COND_V_MSG ( img - > get_format ( ) ! = Image : : FORMAT_RGBA8 & & img - > get_format ( ) ! = Image : : FORMAT_L8 , ERR_FILE_CANT_READ , RTR ( " Unsupported BMFont texture format. " ) ) ;
ERR_FAIL_COND_V_MSG ( img - > get_format ( ) ! = Image : : FORMAT_RGBA8 & & img - > get_format ( ) ! = Image : : FORMAT_L8 , ERR_FILE_CANT_READ , " Unsupported BMFont texture format. " ) ;
_convert_mono_8bit ( img , page , first_gl_ch , base_size , 0 ) ;
_convert_mono_8bit ( img , page , first_gl_ch , base_size , 0 ) ;
} else {
} else {
ERR_FAIL_V_MSG ( ERR_CANT_CREATE , RTR ( " Unsupported BMFont texture format. " ) ) ;
ERR_FAIL_V_MSG ( ERR_CANT_CREATE , " Unsupported BMFont texture format. " ) ;
}
}
}
}
}
}