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

z1qqurat

Участник
Автор темы
59
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,428
593
Также довольно часто происходит такое, что вместо всех букв/иконок рисуются белые квадраты. От этого помогает только полный релог в игру
Тут ответ на счёт этого. Тебе надо грузить меньше шрифтов
 

z1qqurat

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

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

MLycoris

На вид оружие массового семяизвержения
Проверенный
1,992
2,186
попробуй
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

Участник
Автор темы
59
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