C++ Вопрос Утечка ОЗУ | ImGui

Новичок
Статус
Оффлайн
Регистрация
24 Авг 2023
Сообщения
1
Реакции[?]
0
Поинты[?]
0
У меня происходит утечка памяти в чём может быть проблема?
C++:
void renderGUI(HDC hdc) {
        // -- Init gui
        ImGui::CreateContext();
        ImGui_ImplWin32_Init(gameWindow);
        ImGui_ImplOpenGL2_Init();

        ImGui::StyleColorsLight();
        ImGui::CaptureMouseFromApp();

        // -- Render gui
        ImGui_ImplOpenGL2_NewFrame();
        ImGui_ImplWin32_NewFrame();
        ImGui::NewFrame();

        ImGui::Begin(("Hello world!"), &State, WindowFlags);
        ImGui::SetWindowSize(ImVec2(253, 300));

        ImGui::SetCursorPos(ImVec2(10.0f, 270.0f));
        if (ImGui::Button(("Some button"))) {
            
        }

        ImGui::End();

        ImGui::EndFrame();
        ImGui::Render();
        ImGui_ImplOpenGL2_RenderDrawData(ImGui::GetDrawData());
    }
 
Начинающий
Статус
Оффлайн
Регистрация
28 Дек 2021
Сообщения
85
Реакции[?]
27
Поинты[?]
13K
И как часто ты это вызываешь....
C++:
ImGui::CreateContext();
ImGui_ImplWin32_Init(gameWindow);
ImGui_ImplOpenGL2_Init();

ImGui::StyleColorsLight();
Вот эта часть должна вызываться 1 раз к примеру
 
ставь чайник, зажигай плиту
Эксперт
Статус
Оффлайн
Регистрация
22 Май 2020
Сообщения
1,444
Реакции[?]
1,092
Поинты[?]
10K
Мне интересно, как у тебя этот код вообще работает и не триггерятся множественные Assert'ы
 
#define VOID void
Начинающий
Статус
Оффлайн
Регистрация
13 Май 2017
Сообщения
120
Реакции[?]
24
Поинты[?]
13K
Просто построй свой код как в этом официальном примере:
Пожалуйста, авторизуйтесь для просмотра ссылки.
. Создание контекстов и инициализация не должны выполнять циклично, достаточно одного раза. Должно получиться что-то по типу такого:
C++:
class frame {
    frame() {
        ImGui_ImplOpenGL2_NewFrame();
        ImGui_ImplWin32_NewFrame();
        ImGui::NewFrame();
    }
    ~frame() {
        ImGui::EndFrame();
        ImGui::Render();
        // тут должно быть изменение viewport и очистка окна (закрашивание нулевым цветом)
        ImGui_ImplOpenGL2_RenderDrawData(ImGui::GetDrawData());
    }
}

class window {
public:
    window(const char* name) {
        ImGui::Begin(("Hello world!"), &state_);
    }
    ~window() {
        ImGui::End();
    }
   
    bool getState() const { return state_; }
private:
    bool state_;
}

class opengl {
public:
    bool processEvent() {
        // Обработка ивентов от девайса, если ты используешь SDL, GLUT, GLFW
    }
}

class gui {
public:
    gui(HWND window) : device_{} {
        ImGui::CreateContext();
        ImGui_ImplWin32_Init(gameWindow);
        ImGui_ImplOpenGL2_Init();
       
        ImGui::StyleColorsLight();
        ImGui::CaptureMouseFromApp();
    }
    ~gui() {
        ImGui::DestroyContext();
    }
   
    bool operator()() {
        if (!device_.processEvent()) return false;
       
        ::frame frame{};
        ::window window{};
       
        if (!window.getState()) return;
       
        ImGui::SetWindowSize(ImVec2(253, 300));

        ImGui::SetCursorPos(ImVec2(10.0f, 270.0f));
        ImGui::Button("Some button");
       
        return true;
    }
   
private:
    opengl device_;
}
 
Последнее редактирование:
Похожие темы
Сверху Снизу