mimgui и fAwesome6 крашит игру

z1qqurat

Участник
Автор темы
60
13
Версия MoonLoader
.026-beta
Короче дела такие, решил сделать первый скрипт с иконками. Но столкнулся с тем, что теперь иногда(довольно часто) крашит игру при вызове меню скрипта.
Также довольно часто происходит такое, что вместо всех букв/иконок рисуются белые квадраты. От этого помогает только полный релог в игру

В скрипте используются несколько шрифтов(разные размеры + иконки)

Пример кода:
imgui.OnInitialize(function()
    local glyph_ranges = imgui.GetIO().Fonts:GetGlyphRangesCyrillic()
    local path = getFolderPath(0x14) .. '\\trebucbd.ttf'
    imgui.GetIO().Fonts:Clear()
    imgui.GetIO().Fonts:AddFontFromFileTTF(path, 15.0, nil, glyph_ranges)
    
    -- Icons --
    imgui.GetIO().IniFilename = nil
    local config = imgui.ImFontConfig()
    config.MergeMode = true
    config.PixelSnapH = true
    iconRanges = imgui.new.ImWchar[3](icons.min_range, icons.max_range, 0)

    MIMGUI_FONT[14] = imgui.GetIO().Fonts:AddFontFromFileTTF(path, 14.0, nil, glyph_ranges)
    MIMGUI_FONT[18] = imgui.GetIO().Fonts:AddFontFromFileTTF(path, 18.0, nil, glyph_ranges)
    MIMGUI_FONT[25] = imgui.GetIO().Fonts:AddFontFromFileTTF(path, 25.0, nil, glyph_ranges)
    MIMGUI_FONT[40] = imgui.GetIO().Fonts:AddFontFromFileTTF(path, 40.0, nil, glyph_ranges)
    MIMGUI_FONT["icon"] = imgui.GetIO().Fonts:AddFontFromMemoryCompressedBase85TTF(icons.get_font_data_base85('solid'), 14, nil, iconRanges)
end)

imgui.OnFrame(function() return editCheckpointNamePopUp[0] end, function()
    imgui.SetNextWindowPos(imgui.ImVec2(sw / 2, sh / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
    imgui.Begin(" ", editCheckpointNamePopUp, imgui.WindowFlags.NoTitleBar + imgui.WindowFlags.AlwaysAutoResize + imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse)
    imgui.PushFont(MIMGUI_FONT[18])
    
    imgui.TextColoredRGB("{00FF00}Enter new checkpoint name")
    imgui.Spacing()

    imgui.PushItemWidth(150)
    imgui.InputTextWithHint(" Checkpoint name", "Enter new name", editNameBuf, ffi.sizeof(editNameBuf))
    imgui.Spacing()
    
    imgui.SetCursorPosX(imgui.GetWindowWidth() / 3.2);
    imgui.PushFont(MIMGUI_FONT["icon"])
    imgui.PushStyleColor(imgui.Col.Button, imgui.ImVec4(0, 1.0, 0, 0.65))
    if imgui.Button(icons('floppy_disk').."##save_map_name", imgui.ImVec2(50, 25)) then
        local tempName = u8:decode(ffi.string(editNameBuf))
        if tempName == "" or tempName == " " then
            notfError("Empty input")
        else
            changeCheckpointName(editCheckpointIndex, tempName)
            tempName = ""
            editNameBuf = new.char[255]()
            editCheckpointIndex = 0
            editCheckpointNamePopUp[0] = false
            mainMenu[0] = true
        end
    end
    imgui.PopStyleColor(1)
    imgui.SameLine(nil, 5)
    imgui.PushStyleColor(imgui.Col.Button, imgui.ImVec4(1.0, 0, 0, 0.65))
    if imgui.Button(icons('xmark').."##cancel_map_name", imgui.ImVec2(50, 25)) then
        tempName = ""
        editNameBuf = new.char[255]()
        editCheckpointNamePopUp[0] = false
        mainMenu[0] = true
    end
    imgui.PopStyleColor(1)
    imgui.PopFont()
    imgui.Spacing()
    imgui.PopFont()
    imgui.End()
end)
 

Sadow

Известный
1,439
587
Также довольно часто происходит такое, что вместо всех букв/иконок рисуются белые квадраты. От этого помогает только полный релог в игру
Тут ответ на счёт этого. Тебе надо грузить меньше шрифтов
 

z1qqurat

Участник
Автор темы
60
13
Тут ответ на счёт этого. Тебе надо грузить меньше шрифтов
Крайне слабая видеокарта, у которой мало видеопамяти, из-за чего шрифты не могут грузиться
1698443057435.png

3060 слишком слабая видюха чтобы прогрузить шрифты?(
Ну ладно, попробую шо то подшаманить
 

MLycoris

Режим чтения
Проверенный
1,821
1,860
попробуй
1698443909524.png

Lua:
local MIMGUI_FONT = {}

imgui.OnInitialize(function()
    imgui.GetIO().IniFilename = nil
    local glyph_ranges = imgui.GetIO().Fonts:GetGlyphRangesCyrillic()
    local path = getFolderPath(0x14) .. '\\trebucbd.ttf'
    imgui.GetIO().Fonts:Clear()
    imgui.GetIO().Fonts:AddFontFromFileTTF(path, 15.0, nil, glyph_ranges)
    -- Icons --
    local config = imgui.ImFontConfig()
    config.MergeMode = true
    config.PixelSnapH = true
    iconRanges = imgui.new.ImWchar[3](icons.min_range, icons.max_range, 0)
    MIMGUI_FONT["icon"] = imgui.GetIO().Fonts:AddFontFromMemoryCompressedBase85TTF(icons.get_font_data_base85('solid'), 14, config, iconRanges)
    MIMGUI_FONT[14] = imgui.GetIO().Fonts:AddFontFromFileTTF(path, 14.0, _, glyph_ranges)
    MIMGUI_FONT[18] = imgui.GetIO().Fonts:AddFontFromFileTTF(path, 18.0, _, glyph_ranges)
    MIMGUI_FONT[25] = imgui.GetIO().Fonts:AddFontFromFileTTF(path, 25.0, _, glyph_ranges)
    MIMGUI_FONT[40] = imgui.GetIO().Fonts:AddFontFromFileTTF(path, 40.0, _, glyph_ranges)
end)

imgui.OnFrame(function() return editCheckpointNamePopUp[0] end, function()
    imgui.SetNextWindowPos(imgui.ImVec2(sw / 2, sh / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
    imgui.Begin(" ", editCheckpointNamePopUp, imgui.WindowFlags.NoTitleBar + imgui.WindowFlags.AlwaysAutoResize + imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse)
    imgui.PushFont(MIMGUI_FONT[18])
    
    imgui.TextColoredRGB("{00FF00}Enter new checkpoint name")
    imgui.Spacing()

    imgui.PushItemWidth(150)
    imgui.InputTextWithHint(" Checkpoint name", "Enter new name", editNameBuf, ffi.sizeof(editNameBuf))
    imgui.Spacing()
    
    imgui.SetCursorPosX(imgui.GetWindowWidth() / 3.2);
    imgui.PushFont(MIMGUI_FONT["icon"])
    imgui.PushStyleColor(imgui.Col.Button, imgui.ImVec4(0, 1.0, 0, 0.65))
    if imgui.Button(icons('floppy_disk').."##save_map_name", imgui.ImVec2(50, 25)) then
        local tempName = u8:decode(ffi.string(editNameBuf))
        if tempName == "" or tempName == " " then
            notfError("Empty input")
        else
            changeCheckpointName(editCheckpointIndex, tempName)
            tempName = ""
            editNameBuf = new.char[255]()
            editCheckpointIndex = 0
            editCheckpointNamePopUp[0] = false
            mainMenu[0] = true
        end
    end
    imgui.PopStyleColor(1)
    imgui.SameLine(nil, 5)
    imgui.PushStyleColor(imgui.Col.Button, imgui.ImVec4(1.0, 0, 0, 0.65))
    if imgui.Button(icons('xmark').."##cancel_map_name", imgui.ImVec2(50, 25)) then
        tempName = ""
        editNameBuf = new.char[255]()
        editCheckpointNamePopUp[0] = false
        mainMenu[0] = true
    end
    imgui.PopStyleColor(1)
    imgui.PopFont()
    imgui.Spacing()
    imgui.PopFont()
    imgui.End()
end)
 

z1qqurat

Участник
Автор темы
60
13
попробуй
Посмотреть вложение 219229
Lua:
local MIMGUI_FONT = {}

imgui.OnInitialize(function()
    imgui.GetIO().IniFilename = nil
    local glyph_ranges = imgui.GetIO().Fonts:GetGlyphRangesCyrillic()
    local path = getFolderPath(0x14) .. '\\trebucbd.ttf'
    imgui.GetIO().Fonts:Clear()
    imgui.GetIO().Fonts:AddFontFromFileTTF(path, 15.0, nil, glyph_ranges)
    -- Icons --
    local config = imgui.ImFontConfig()
    config.MergeMode = true
    config.PixelSnapH = true
    iconRanges = imgui.new.ImWchar[3](icons.min_range, icons.max_range, 0)
    MIMGUI_FONT["icon"] = imgui.GetIO().Fonts:AddFontFromMemoryCompressedBase85TTF(icons.get_font_data_base85('solid'), 14, config, iconRanges)
    MIMGUI_FONT[14] = imgui.GetIO().Fonts:AddFontFromFileTTF(path, 14.0, _, glyph_ranges)
    MIMGUI_FONT[18] = imgui.GetIO().Fonts:AddFontFromFileTTF(path, 18.0, _, glyph_ranges)
    MIMGUI_FONT[25] = imgui.GetIO().Fonts:AddFontFromFileTTF(path, 25.0, _, glyph_ranges)
    MIMGUI_FONT[40] = imgui.GetIO().Fonts:AddFontFromFileTTF(path, 40.0, _, glyph_ranges)
end)

imgui.OnFrame(function() return editCheckpointNamePopUp[0] end, function()
    imgui.SetNextWindowPos(imgui.ImVec2(sw / 2, sh / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
    imgui.Begin(" ", editCheckpointNamePopUp, imgui.WindowFlags.NoTitleBar + imgui.WindowFlags.AlwaysAutoResize + imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse)
    imgui.PushFont(MIMGUI_FONT[18])
   
    imgui.TextColoredRGB("{00FF00}Enter new checkpoint name")
    imgui.Spacing()

    imgui.PushItemWidth(150)
    imgui.InputTextWithHint(" Checkpoint name", "Enter new name", editNameBuf, ffi.sizeof(editNameBuf))
    imgui.Spacing()
   
    imgui.SetCursorPosX(imgui.GetWindowWidth() / 3.2);
    imgui.PushFont(MIMGUI_FONT["icon"])
    imgui.PushStyleColor(imgui.Col.Button, imgui.ImVec4(0, 1.0, 0, 0.65))
    if imgui.Button(icons('floppy_disk').."##save_map_name", imgui.ImVec2(50, 25)) then
        local tempName = u8:decode(ffi.string(editNameBuf))
        if tempName == "" or tempName == " " then
            notfError("Empty input")
        else
            changeCheckpointName(editCheckpointIndex, tempName)
            tempName = ""
            editNameBuf = new.char[255]()
            editCheckpointIndex = 0
            editCheckpointNamePopUp[0] = false
            mainMenu[0] = true
        end
    end
    imgui.PopStyleColor(1)
    imgui.SameLine(nil, 5)
    imgui.PushStyleColor(imgui.Col.Button, imgui.ImVec4(1.0, 0, 0, 0.65))
    if imgui.Button(icons('xmark').."##cancel_map_name", imgui.ImVec2(50, 25)) then
        tempName = ""
        editNameBuf = new.char[255]()
        editCheckpointNamePopUp[0] = false
        mainMenu[0] = true
    end
    imgui.PopStyleColor(1)
    imgui.PopFont()
    imgui.Spacing()
    imgui.PopFont()
    imgui.End()
end)
протестирую побольше и скажу помогло или нет. Спасибо
 
  • Нравится
Реакции: MLycoris