C++ Подключаем freetype в ImGui

bluedream.ltd
bluedream.ltd
Статус
Оффлайн
Регистрация
4 Янв 2020
Сообщения
3,063
Реакции
1,288
Данный тред создан специально для тех, кто все еще не знает что такое фритайп или как его подключить.
Что такое freetype?
Это библиотека, которая позволит вам сохранить ваши нервные клетки при работе с шрифтами в имгуи. Данная библиотека скажем так на простом языке улучшает шрифты. У вас появляется уйма возможностей кастомизировать уже готовый шрифт. Например можно выключить сглаживание и тем самым сделать шрифты как на surface например. Также одними из явных плюсов можно посчитать то что при использовании freetype ваши шрифты будут корректного размера, шрифты мелкого размера не будут выглядеть как размыленное говно размером в 3 пикселя, а будут выглядеть как нормальный яркий и красивый шрифт.
Сравнение можно наблюдать здесь



Насколько очевидна разница я думаю речи не идет. Мы можем увидеть как стандартный трутайп ни то что делает шрифт тусклее, он становится замыленным и даже меньше по размеру, что доставляет проблем при верстке.
Как подключить?
Скачиваем freetype с гитхаба.
Создаем в своем проекте папку freetype и туда закидываем все скачанные файлы.
Открываем в настройках проекта пункт каталоги VC++. Добавляем во включаемые каталоги путь к freetype/include
Пример:
1659277002713.png

Скачиваем freetype.lib
Если лень компилировать, то вот уже скомпилированный вариант
Подключаем данную библиотеку в наш сурс и добавляем в каталоги библиотек через все те же настройки проекта.
В файле imconfig прописываем
C++:
Expand Collapse Copy
#define IMGUI_ENABLE_FREETYPE
Затем добавляем в свой проект файлы freetype с гитхаба ImGui.
В только что скачанном .cpp файле прописываем где нибудь в начале
C++:
Expand Collapse Copy
#pragma comment(lib, "freetype.lib")
Теперь переходим к созданию шрифта
C++:
Expand Collapse Copy
ImFontConfig cfg;
cfg.FontBuilderFlags |= ImGuiFreeTypeBuilderFlags::ImGuiFreeTypeBuilderFlags_MonoHinting | ImGuiFreeTypeBuilderFlags_Monochrome; //отключает антиалиасинг и дает строгий алгоритм хинта
/*io.Fonts->AddFontFromMemoryTTF(&tahoma, sizeof tahoma, 14, &cfg, io.Fonts->GetGlyphRangesCyrillic());*/
io.Fonts->AddFontFromFileTTF("C:\\Windows\\Fonts\\tahoma.ttf", 14, &cfg, io.Fonts->GetGlyphRangesCyrillic());
Обратите внимание на комментарии в коде.
Вот так выглядит Hint наглядно:
1659277327009.png

В примере кода выше я использовал отключение антиалиасинга и строгий алгоритм хинта.
Во фритайп также можно установить такие параметры фонтбилдера:
C++:
Expand Collapse Copy
enum ImGuiFreeTypeBuilderFlags
{
    ImGuiFreeTypeBuilderFlags_NoHinting     = 1 << 0,   // Disable hinting. This generally generates 'blurrier' bitmap glyphs when the glyph are rendered in any of the anti-aliased modes.
    ImGuiFreeTypeBuilderFlags_NoAutoHint    = 1 << 1,   // Disable auto-hinter.
    ImGuiFreeTypeBuilderFlags_ForceAutoHint = 1 << 2,   // Indicates that the auto-hinter is preferred over the font's native hinter.
    ImGuiFreeTypeBuilderFlags_LightHinting  = 1 << 3,   // A lighter hinting algorithm for gray-level modes. Many generated glyphs are fuzzier but better resemble their original shape. This is achieved by snapping glyphs to the pixel grid only vertically (Y-axis), as is done by Microsoft's ClearType and Adobe's proprietary font renderer. This preserves inter-glyph spacing in horizontal text.
    ImGuiFreeTypeBuilderFlags_MonoHinting   = 1 << 4,   // Strong hinting algorithm that should only be used for monochrome output.
    ImGuiFreeTypeBuilderFlags_Bold          = 1 << 5,   // Styling: Should we artificially embolden the font?
    ImGuiFreeTypeBuilderFlags_Oblique       = 1 << 6,   // Styling: Should we slant the font, emulating italic style?
    ImGuiFreeTypeBuilderFlags_Monochrome    = 1 << 7,   // Disable anti-aliasing. Combine this with MonoHinting for best results!
    ImGuiFreeTypeBuilderFlags_LoadColor     = 1 << 8,   // Enable FreeType color-layered glyphs
    ImGuiFreeTypeBuilderFlags_Bitmap        = 1 << 9    // Enable FreeType bitmap glyphs
};
В комментариях все расписано.
Также не забудь прописать в аргументах при создании шрифта ваш ImFontConfig.
На этом всё.

 
давай потом гайд о том, как всё же скачать визуалку
 
@retropt ураа наконец то гайд для тебя
 
Какие можно подрубить флаги, что бы максимально повторить вердану скита? Что только не пробовал, но вердана получается слишком жирная и нестрогая
 
Какие можно подрубить флаги, что бы максимально повторить вердану скита? Что только не пробовал, но вердана получается слишком жирная и нестрогая
некоторые читы юзают немного измененный фритайп
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Затем добавляем в свой проект файлы freetype с гитхаба ImGui.
давай потом гайд о том, как всё же скачать визуалку
Чел если ты всезнайка то зачем пишешь сюда, мне лично помогло, и гайд стоит своего времени
 
Назад
Сверху Снизу