Гайд upmimgui – Полезные сниппеты и функции

ChаtGPT

Известный
Автор темы
429
117
Эта тема предназначена для сбора полезных сниппетов и функций для upmimgui.

Новая тема была создана потому, что mimgui, основанный на ImGui 1.7.1, накопил сотни скриптов, а при переходе на ImGui 1.91.9b произошли серьёзные изменения в API. Чтобы сохранить обратную совместимость со старыми mimgui-скриптами и одновременно развивать новые возможности интерфейса, версия на базе ImGui 1.91.9b оформлена как отдельная библиотека upmimgui.

Описание:
<text>

Код:
Lua:
<code>

Пример использования:
Lua:
<code>
 

kyrtion

Известный
1,163
426
Описание:
Перед инициализации интегрирует основные (resource/<your font>.ttf) и иконочные шрифты (lib/fAwesome6.lua) в UpMImGui.
Желательно подбирать иконки отдельно, позволяет сэкономить на видеопамять для рендеринг в GTA:SA в 80-90% раз.
В основе лежит тема об интеграции шрифтов и FA6 иконок от #Northn.

Код:
local imgui = require('upmimgui')
local faicons = require('fAwesome6')
-- local fa_font = nil

function imgui.ImVector_ImWchar()
    local ImVector = ffi.new('ImVector_ImWchar')
    return ImVector
end

local function loadDefaultFont()
    local ranges = imgui.GetIO().Fonts:GetGlyphRangesCyrillic()
    local config = imgui.ImFontConfig()
    local dpi = imgui.GetDpiScale()
    local dsm = imgui.GetDpiScalingMode()

    local path_font_file = getWorkingDirectory() .. '\\resource\\Roboto-Medium.ttf'
    assert(doesFileExist(pathFontFile), '[upmimgui] Font "' .. path_font_file .. '" doesn\'t exist!')
    local font_size = dsm == 3 and math.floor(dpi * 16) or 16 -- подробнее в lib/upmimgui/init.lua
    imgui.GetIO().Fonts:AddFontFromFileTTF(path_font_file , font_size, config, ranges)
end

local function loadFontAwesome()
    local ranges = imgui.ImVector_ImWchar()
    local config = imgui.ImFontConfig()
    local dpi = imgui.GetDpiScale()
    local dsm = imgui.GetDpiScalingMode()
    config.OversampleV = 1
    config.OversampleH = 1
    config.MergeMode = true -- Интегрировать шрифт в основном шрифт
    config.PixelSnapH = true
    -- Сделает цветным шрифты в FreeType
    -- Документалка https://github.com/ocornut/imgui/blob/master/docs/FONTS.md#using-colorful-glyphsemojis
    -- config.FontBuilderFlags = bit.bor(config.FontBuilderFlags, imgui.FreeTypeBuilderFlags.LoadColor)

    local list_icon = {
        'square_rss',
        'keyboard',
        'coins',
        'square_poll_horizontal',
        'gear',
        'wrench',
        'arrow_left'
    }

    local builder = imgui.ImFontGlyphRangesBuilder()
    for _, name_font in ipairs(list_icon) do
        builder:AddText(faicons(name_font))
    end
    builder:BuildRanges(ranges)

    local font_size = dsm == 3 and math.floor(dpi * 16) or 16
    -- Если указал MergeMode = false нужно создать переменную шрифта и отдельно пушить в фрейм
    -- fa_font =
    imgui.GetIO().Fonts:AddFontFromMemoryCompressedBase85TTF(
        faicons.get_font_data_base85('solid'),
        font_size,
        config,
        ranges.Data
    )
end

imgui.OnInitialize(function()
    imgui.GetIO().IniFilename = nil
    imgui.GetIO().Fonts:Clear() -- удаляет шрифты
    loadDefaultFont() -- создает основной шрифт (первый)
    loadFontAwesome() -- дополняет в основном шрифте
end)

Пример использования:
-- в фрейм имгуи
imgui.Text(faicons('GEAR') .. '  Settings')
imgui.Button(faicons('GEAR') .. '  Settings'))

-- если указал MergeMode false нужно пушить отдельно, теперь FA6 является второй шрифт
imgui.PushFont(fa_font)
imgui.Text(faicons('GEAR'))
imgui.PopFont()
imgui.SameLine()
imgui.Text('Settings')

Откладка/метрики можно вызывать в imgui.ShowMetricsWindow(ImBool) -> Fonts и поиграй в конфигах шрифтов
Глифы в Fonts -> Font -> Glyphs
1746722494846.png
 
Последнее редактирование:
  • Нравится
Реакции: ChаtGPT