diff --git a/GlitchyEngine/src/Renderer/Text/Font.bf b/GlitchyEngine/src/Renderer/Text/Font.bf index 91e14a2..0f7eb4e 100644 --- a/GlitchyEngine/src/Renderer/Text/Font.bf +++ b/GlitchyEngine/src/Renderer/Text/Font.bf @@ -40,6 +40,7 @@ namespace GlitchyEngine.Renderer.Text } internal FT_Face _face ~ FreeType.Done_Face(_face); + internal hb_font_t* _harfBuzzFont ~ hb_font_destroy(_); private Font _fallback ~ _?.ReleaseRef(); @@ -63,10 +64,6 @@ namespace GlitchyEngine.Renderer.Text internal double _range = 4.0; - private hb_blob_t* blob ~ hb_blob_destroy(_); - private hb_face_t* face ~ hb_face_destroy(_); - private hb_font_t* font ~ hb_font_destroy(_); - /** * Gets or sets the fallback Font for this Font. * The Fallback font will be used to render Glyphs that are not defined in the current font. @@ -144,11 +141,8 @@ namespace GlitchyEngine.Renderer.Text // HarfBuzz { - blob = hb_blob_create_from_file(fontPath.CStr()); /* or hb_blob_create_from_file_or_fail() */ - face = hb_face_create(blob, 0); - font = hb_font_create(face); - - hb_font_set_scale(font, (.)fontSize * 64, (.)fontSize * 64); + _harfBuzzFont = hb_ft_font_create_referenced(_face); + hb_font_set_scale(_harfBuzzFont, (.)fontSize * 64, (.)fontSize * 64); } //TestMSDF(); diff --git a/GlitchyEngine/src/Renderer/Text/FontRenderer.bf b/GlitchyEngine/src/Renderer/Text/FontRenderer.bf index 991950b..11a1bf3 100644 --- a/GlitchyEngine/src/Renderer/Text/FontRenderer.bf +++ b/GlitchyEngine/src/Renderer/Text/FontRenderer.bf @@ -123,7 +123,7 @@ namespace GlitchyEngine.Renderer.Text hb_buffer_set_language(buf, hb_language_from_string("en".CStr(), -1)); // 3. Get the face - hb_font_t* hb_font = font.[Friend]font; + hb_font_t* hb_font = font._harfBuzzFont; // 4. Shape: hb_shape(hb_font, buf, null, 0); @@ -180,12 +180,14 @@ namespace GlitchyEngine.Renderer.Text Color glyphColor = glyphDesc.IsBitmap ? bitmapColor : fontColor; texRect /= Vector4(atlasSize, atlasSize); - - Renderer2D.DrawQuad(Vector3(viewportRect.X + viewportRect.Z / 2, viewportRect.Y + viewportRect.W / 2, 1), .(viewportRect.Z, viewportRect.W), 0, .Red); + + // Show quads + // Renderer2D.DrawQuad(Vector3(viewportRect.X + viewportRect.Z / 2, viewportRect.Y + viewportRect.W / 2, 1), .(viewportRect.Z, viewportRect.W), 0, .Red); Renderer2D.DrawQuad(Vector2(viewportRect.X + viewportRect.Z / 2, viewportRect.Y + viewportRect.W / 2), .(viewportRect.Z, viewportRect.W), 0, atlas, glyphColor, texRect); - Renderer2D.DrawQuad(Vector3(penPosition, baseline, -1), .(1), 0, .Green); + // Show pen positions + // Renderer2D.DrawQuad(Vector3(penPosition, baseline, -1), .(1), 0, .Green); penPosition += (x_advance / 64) * glyphFontScale; baseline += (y_advance / 64) * glyphFontScale; diff --git a/GlitchyEngine/vendor/freetype b/GlitchyEngine/vendor/freetype index f41e3fd..e37574c 160000 --- a/GlitchyEngine/vendor/freetype +++ b/GlitchyEngine/vendor/freetype @@ -1 +1 @@ -Subproject commit f41e3fd511f7306dc95045a4a40aac903a45eac6 +Subproject commit e37574ca4e1badd90d3f14920cca184123b2acde diff --git a/Sandbox/src/ExampleLayer2D.bf b/Sandbox/src/ExampleLayer2D.bf index f00af87..9e81cf4 100644 --- a/Sandbox/src/ExampleLayer2D.bf +++ b/Sandbox/src/ExampleLayer2D.bf @@ -69,7 +69,7 @@ namespace Sandbox var japanese = new Font("C:\\Windows\\Fonts\\YuGothM.ttc", 64, true, '\0', 1); var emojis = new Font("C:\\Windows\\Fonts\\seguiemj.ttf", 64, true, '😂' - 10, 1); var mathstuff = new Font("C:\\Windows\\Fonts\\cambria.ttc", 64, true, 'α', 1); - var cascadiaCode = new Font("C:\\Windows\\Fonts\\CascadiaCode.ttf", 32, true, 'A', 1); + var cascadiaCode = new Font("C:\\Windows\\Fonts\\CascadiaCode.ttf", 64, true, 'A', 1); fonty.Fallback = japanese..ReleaseRefNoDelete(); japanese.Fallback = emojis..ReleaseRefNoDelete(); emojis.Fallback = mathstuff..ReleaseRefNoDelete(); @@ -114,7 +114,8 @@ namespace Sandbox Renderer2D.DrawCircle(Vector3(-2, -2, -2f), Vector2(1), .GreenYellow); - FontRenderer.DrawText(fonty.Fallback.Fallback.Fallback.Fallback, "Hallö! gjy ÄAwww www", 0, 0, 64, .White, .White); // Hallo! gjy + //FontRenderer.DrawText(fonty.Fallback.Fallback.Fallback.Fallback, "Hallö! gjy ÄAwww www <--||-->", 0, 0, 64, .White, .White); // Hallo! gjy + FontRenderer.DrawText(fonty, "Hallö!\n gjy ÄAwww www <--||-->", 0, 0, 128, .White, .White); Renderer2D.EndScene(); }