- if( glyph->indice_count ){
- if( c == k_SRglyph_mod_square || c == k_SRglyph_mod_circle ){
- u32 c1 = u8str[i+1];
- if( c1 == '\0' ) break;
-
- ent_glyph *glyph1 = font3d_glyph( font, variant_id, c1 );
-
- if( glyph1 ){
- if( glyph1->indice_count ){
- v3f v0;
- v2_sub( glyph->size, glyph1->size, v0 );
- v2_muladds( offset, v0, -0.5f, v0 );
- v0[2] = 0.0f;
-
- shader_model_font_uOffset( v0 );
- mesh_drawn( glyph->indice_start, glyph->indice_count );
-
- shader_model_font_uOffset( offset );
- mesh_drawn( glyph1->indice_start, glyph1->indice_count );
- offset[0] += glyph1->size[0];
- }
- }
-
- i ++;
- continue;
+ if( !c0 ) break;
+
+ ent_glyph *glyph0 = font3d_glyph( render->font, render->variant_id, c0 ),
+ *glyph1 = NULL;
+
+ /* multibyte characters */
+ if( c0 >= 1 && c0 < k_SRglyph_ascii_min ){
+ c1 = *render->u8pch;
+ if( !c1 ) break;
+ glyph1 = font3d_glyph( render->font, render->variant_id, c1 );
+ }
+
+ if( c0 == k_SRglyph_ctrl_variant ){
+ render->variant_id = c1;
+ render->u8pch ++;
+ continue;
+ }
+ else if( c0 == k_SRglyph_ctrl_size ){
+ render->offset[3] = (float)c1 * (1.0f/255.0f);
+ render->u8pch ++;
+ continue;
+ }
+ else if( c0 == k_SRglyph_ctrl_baseline ){
+ render->offset[1] = 0.0f;
+ continue;
+ }
+ else if( c0 == k_SRglyph_ctrl_center ){
+ if( glyph1 ){
+ float diff = glyph1->size[1] - glyph1->size[1]*render->offset[3];
+ render->offset[1] = diff * 0.5f;