|
|
@ -454,16 +454,16 @@ void DrawTextCodepoint3D(Font font, int codepoint, Vector3 position, float fontS |
|
|
|
|
|
|
|
// Character destination rectangle on screen |
|
|
|
// NOTE: We consider charsPadding on drawing |
|
|
|
position.x += (float)(font.chars[index].offsetX - font.charsPadding)/(float)font.baseSize*scale; |
|
|
|
position.z += (float)(font.chars[index].offsetY - font.charsPadding)/(float)font.baseSize*scale; |
|
|
|
position.x += (float)(font.glyphs[index].offsetX - font.glyphPadding)/(float)font.baseSize*scale; |
|
|
|
position.z += (float)(font.glyphs[index].offsetY - font.glyphPadding)/(float)font.baseSize*scale; |
|
|
|
|
|
|
|
// Character source rectangle from font texture atlas |
|
|
|
// NOTE: We consider chars padding when drawing, it could be required for outline/glow shader effects |
|
|
|
Rectangle srcRec = { font.recs[index].x - (float)font.charsPadding, font.recs[index].y - (float)font.charsPadding, |
|
|
|
font.recs[index].width + 2.0f*font.charsPadding, font.recs[index].height + 2.0f*font.charsPadding }; |
|
|
|
Rectangle srcRec = { font.recs[index].x - (float)font.glyphPadding, font.recs[index].y - (float)font.glyphPadding, |
|
|
|
font.recs[index].width + 2.0f*font.glyphPadding, font.recs[index].height + 2.0f*font.glyphPadding }; |
|
|
|
|
|
|
|
float width = (float)(font.recs[index].width + 2.0f*font.charsPadding)/(float)font.baseSize*scale; |
|
|
|
float height = (float)(font.recs[index].height + 2.0f*font.charsPadding)/(float)font.baseSize*scale; |
|
|
|
float width = (float)(font.recs[index].width + 2.0f*font.glyphPadding)/(float)font.baseSize*scale; |
|
|
|
float height = (float)(font.recs[index].height + 2.0f*font.glyphPadding)/(float)font.baseSize*scale; |
|
|
|
|
|
|
|
if (font.texture.id > 0) |
|
|
|
{ |
|
|
@ -477,16 +477,11 @@ void DrawTextCodepoint3D(Font font, int codepoint, Vector3 position, float fontS |
|
|
|
const float tw = (srcRec.x+srcRec.width)/font.texture.width; |
|
|
|
const float th = (srcRec.y+srcRec.height)/font.texture.height; |
|
|
|
|
|
|
|
if (SHOW_LETTER_BOUNDRY) |
|
|
|
DrawCubeWiresV((Vector3){ position.x + width/2, position.y, position.z + height/2}, (Vector3){ width, LETTER_BOUNDRY_SIZE, height }, LETTER_BOUNDRY_COLOR); |
|
|
|
if (SHOW_LETTER_BOUNDRY) DrawCubeWiresV((Vector3){ position.x + width/2, position.y, position.z + height/2}, (Vector3){ width, LETTER_BOUNDRY_SIZE, height }, LETTER_BOUNDRY_COLOR); |
|
|
|
|
|
|
|
#if defined(RAYLIB_NEW_RLGL) |
|
|
|
rlCheckRenderBatchLimit(4 + 4*backface); |
|
|
|
rlSetTexture(font.texture.id); |
|
|
|
#else |
|
|
|
if (rlCheckBufferLimit(4 + 4*backface)) rlglDraw(); |
|
|
|
rlEnableTexture(font.texture.id); |
|
|
|
#endif |
|
|
|
|
|
|
|
rlPushMatrix(); |
|
|
|
rlTranslatef(position.x, position.y, position.z); |
|
|
|
|
|
|
@ -512,11 +507,7 @@ void DrawTextCodepoint3D(Font font, int codepoint, Vector3 position, float fontS |
|
|
|
rlEnd(); |
|
|
|
rlPopMatrix(); |
|
|
|
|
|
|
|
#if defined(RAYLIB_NEW_RLGL) |
|
|
|
rlSetTexture(0); |
|
|
|
#else |
|
|
|
rlDisableTexture(); |
|
|
|
#endif |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@ -554,8 +545,8 @@ void DrawText3D(Font font, const char *text, Vector3 position, float fontSize, f |
|
|
|
DrawTextCodepoint3D(font, codepoint, (Vector3){ position.x + textOffsetX, position.y, position.z + textOffsetY }, fontSize, backface, tint); |
|
|
|
} |
|
|
|
|
|
|
|
if (font.chars[index].advanceX == 0) textOffsetX += (float)(font.recs[index].width + fontSpacing)/(float)font.baseSize*scale; |
|
|
|
else textOffsetX += (float)(font.chars[index].advanceX + fontSpacing)/(float)font.baseSize*scale; |
|
|
|
if (font.glyphs[index].advanceX == 0) textOffsetX += (float)(font.recs[index].width + fontSpacing)/(float)font.baseSize*scale; |
|
|
|
else textOffsetX += (float)(font.glyphs[index].advanceX + fontSpacing)/(float)font.baseSize*scale; |
|
|
|
} |
|
|
|
|
|
|
|
i += codepointByteCount; // Move text bytes counter to next codepoint |
|
|
@ -592,8 +583,8 @@ Vector3 MeasureText3D(Font font, const char* text, float fontSize, float fontSpa |
|
|
|
|
|
|
|
if (letter != '\n') |
|
|
|
{ |
|
|
|
if (font.chars[index].advanceX != 0) textWidth += (font.chars[index].advanceX+fontSpacing)/(float)font.baseSize*scale; |
|
|
|
else textWidth += (font.recs[index].width + font.chars[index].offsetX)/(float)font.baseSize*scale; |
|
|
|
if (font.glyphs[index].advanceX != 0) textWidth += (font.glyphs[index].advanceX+fontSpacing)/(float)font.baseSize*scale; |
|
|
|
else textWidth += (font.recs[index].width + font.glyphs[index].offsetX)/(float)font.baseSize*scale; |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
@ -670,8 +661,8 @@ void DrawTextWave3D(Font font, const char *text, Vector3 position, float fontSiz |
|
|
|
DrawTextCodepoint3D(font, codepoint, (Vector3){ pos.x + textOffsetX, pos.y, pos.z + textOffsetY }, fontSize, backface, tint); |
|
|
|
} |
|
|
|
|
|
|
|
if (font.chars[index].advanceX == 0) textOffsetX += (float)(font.recs[index].width + fontSpacing)/(float)font.baseSize*scale; |
|
|
|
else textOffsetX += (float)(font.chars[index].advanceX + fontSpacing)/(float)font.baseSize*scale; |
|
|
|
if (font.glyphs[index].advanceX == 0) textOffsetX += (float)(font.recs[index].width + fontSpacing)/(float)font.baseSize*scale; |
|
|
|
else textOffsetX += (float)(font.glyphs[index].advanceX + fontSpacing)/(float)font.baseSize*scale; |
|
|
|
} |
|
|
|
|
|
|
|
i += codepointByteCount; // Move text bytes counter to next codepoint |
|
|
@ -714,8 +705,8 @@ Vector3 MeasureTextWave3D(Font font, const char* text, float fontSize, float fon |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
if (font.chars[index].advanceX != 0) textWidth += (font.chars[index].advanceX+fontSpacing)/(float)font.baseSize*scale; |
|
|
|
else textWidth += (font.recs[index].width + font.chars[index].offsetX)/(float)font.baseSize*scale; |
|
|
|
if (font.glyphs[index].advanceX != 0) textWidth += (font.glyphs[index].advanceX+fontSpacing)/(float)font.baseSize*scale; |
|
|
|
else textWidth += (font.recs[index].width + font.glyphs[index].offsetX)/(float)font.baseSize*scale; |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|