как оптимизировать мимгуи окно

alexroq

Участник
Автор темы
123
14
Версия SA-MP
  1. Любая
никак не пойму что у меня не так. во всех скриптах где используется mimgui лагает (от 130 фпс опускается до 70) когда постоянно передвигаешь мышкой по окну. некоторые говорят что у них такого проблемы нету
вроде у меня последняя версия mimgui
 

alexroq

Участник
Автор темы
123
14
Код:
imgui.OnFrame(function() return rColorSettings[0] end, function()
    local sizeX, sizeY = getScreenResolution()
    imgui.SetNextWindowPos(imgui.ImVec2(50, sizeY - 350), imgui.Cond.Always)
    imgui.SetNextWindowSize(imgui.ImVec2(320, 300), imgui.Cond.Always)
    imgui.Begin('Настройка цветов', rColorSettings, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse)
    
    imgui.Text('Фон окон и кастомного диалога:')
    imgui.PushItemWidth(280)
    if imgui.ColorEdit3('##background', colorSettings.background, imgui.ColorEditFlags.NoInputs + imgui.ColorEditFlags.NoLabel) then
        applyStyle(); saveConfig()
    end
    imgui.PopItemWidth()
    imgui.Spacing(); imgui.Separator(); imgui.Spacing()
    
    imgui.Text('Категории и топбар:')
    imgui.PushItemWidth(280)
    if imgui.ColorEdit3('##categoryButtons', colorSettings.categoryButtons, imgui.ColorEditFlags.NoInputs + imgui.ColorEditFlags.NoLabel) then
        applyStyle(); saveConfig()
    end
    imgui.PopItemWidth()
    imgui.Spacing(); imgui.Separator(); imgui.Spacing()
    
    imgui.Text('Кнопки биндов:')
    imgui.PushItemWidth(280)
    if imgui.ColorEdit3('##itemButtons', colorSettings.itemButtons, imgui.ColorEditFlags.NoInputs + imgui.ColorEditFlags.NoLabel) then
        applyStyle(); saveConfig()
    end
    imgui.PopItemWidth()
    imgui.Spacing(); imgui.Separator(); imgui.Spacing()
    
    if imgui.Button('Сбросить к стандартным', imgui.ImVec2(280, 25)) then
        colorSettings.background[0], colorSettings.background[1], colorSettings.background[2] = 0.07, 0.07, 0.07
        colorSettings.categoryButtons[0], colorSettings.categoryButtons[1], colorSettings.categoryButtons[2] = 0.12, 0.12, 0.12
        colorSettings.itemButtons[0], colorSettings.itemButtons[1], colorSettings.itemButtons[2] = 0.20, 0.20, 0.20
        applyStyle(); saveConfig()
    end
    imgui.End()
end)

ну вот один из секции, остальные так же устроины
 

alexroq

Участник
Автор темы
123
14
дело не в save config

дело в том что оно лагает когда я по интерфейсу туда суда курсором вожу
saveConfig() попробуй поубирать во фрейме и посмотри сколько будет фпс ДО и ПОСЛЕ ))
 

dmitry.karle

Известный
408
108
ну как. applyStyle() и saveConfig() вызываются каждый кадр при изменении цвета, что может быть тяжело для производительности, сам с этим сталкивался в мимгуи. У тебя две проблемы уже во фрейме который ты сюда приложил.

1. Частые сохранения кфг - saveConfig()
2. Дублируются imgui.Spacing(); imgui.Separator(); imgui.Spacing() вместо одного
 
  • Эм
Реакции: Corenale

alexroq

Участник
Автор темы
123
14
вот даже в демо mimgui фпс падает


Код:
local imgui = require 'mimgui'
local ffi = require 'ffi'
local vkeys = require 'vkeys'
local encoding = require 'encoding' --[[Подключаем библиотеку для чтения/записи данных с кодировкой,
                                        отличающейся от кодировки нашего скрипта.]]

encoding.default = 'CP1251'         --[[Указываем кодировку по умолчанию. Обратите внимание,
                                        что она должна совпадать с кодировкой вашего скрипта.]]
local u8 = encoding.UTF8            -- И создаём короткий псевдоним для кодировщика UTF-8

local wm = require 'windows.message'
local new, str, sizeof = imgui.new, ffi.string, ffi.sizeof

local renderWindow, freezePlayer, removeCursor = new.bool(), new.bool(), new.bool()
local inputField = new.char[256](--[[Здесь также следует кодировать информацию!]])
local sizeX, sizeY = getScreenResolution()

imgui.OnInitialize(function()
    imgui.GetIO().IniFilename = nil
end)

local newFrame = imgui.OnFrame(
    function() return renderWindow[0] end,
    function(player)
        imgui.SetNextWindowPos(imgui.ImVec2(sizeX / 2, sizeY / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.SetNextWindowSize(imgui.ImVec2(220, 200), imgui.Cond.FirstUseEver)
        imgui.Begin("Main Window", renderWindow)
        imgui.Text("Hello")
        imgui.Text(string.format("Current render mode: %s", renderWindow[0]))
        if imgui.InputText(u8"Привет", inputField, sizeof(inputField)) then
            -- Кодируем название инпута
            print(u8:decode(str(inputField))) -- Декодируем в Windows-1251
        end
        if imgui.Button(u8"Очистить поле") then -- Кодируем название кнопки
            imgui.StrCopy(inputField, '')
        end
        if imgui.Checkbox(u8'Заморозить игрока', freezePlayer) then -- Кодируем название кнопки
            player.LockPlayer = freezePlayer[0]
        end
        if imgui.Checkbox(u8'Скрыть курсор', removeCursor) then -- Кодируем название кнопки
            player.HideCursor = removeCursor[0]
        end
        if player.HideCursor then
            imgui.Text(u8'Курсор скрыт') -- Кодируем выводимый текст
        end
        imgui.End()
    end
)

function main()
    addEventHandler('onWindowMessage', function(msg, wparam, lparam)
        if msg == wm.WM_KEYDOWN or msg == wm.WM_SYSKEYDOWN then
            if wparam == vkeys.VK_X then
                renderWindow[0] = not renderWindow[0]
            end
        end
    end)
    wait(-1)
end
 

chapo

tg/inst: @moujeek
Всефорумный модератор
9,205
12,525
 

alexroq

Участник
Автор темы
123
14
странно, я вытащил все скрипты, оставил только свой оно загрузилось но все его окна перестали показываться
 

alexroq

Участник
Автор темы
123
14
странно, я вытащил все скрипты, оставил только свой оно загрузилось но все его окна перестали показываться
оказалось фпс только просижывается при высоком фпс, если на 95 стоит то ничего не просижывает
да, это оказывается из за этого, нельзя как то исправить?