#include #include "imgui.h" #include "imgui_impl_glfw.h" #include "imgui_impl_opengl3.h" #include #include #include "include/SerialApp.h" static void glfw_error_callback(int error, const char* description) { fprintf(stderr, "GLFW Error %d: %s\n", error, description); } int main(int, char**) { glfwSetErrorCallback(glfw_error_callback); if (!glfwInit()) return 1; // Настройка версии OpenGL (3.3 Core) glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); // Создание окна ОС GLFWwindow* window = glfwCreateWindow(1280, 720, "Serial App", nullptr, nullptr); if (window == nullptr) return 1; glfwMakeContextCurrent(window); glfwSwapInterval(1); // Включение вертикальной синхронизации (V-Sync) // Инициализация контекста ImGui IMGUI_CHECKVERSION(); ImGui::CreateContext(); ImGuiIO& io = ImGui::GetIO(); (void)io; ImGui::StyleColorsDark(); // Инициализация платформных бэкендов внутри ImGui ImGui_ImplGlfw_InitForOpenGL(window, true); ImGui_ImplOpenGL3_Init("#version 130"); // Создаем и инициализируем наше изолированное приложение SerialApp app; app.initialize(); // Главный цикл приложения while (!glfwWindowShouldClose(window)) { glfwPollEvents(); // Старт нового кадра ImGui ImGui_ImplOpenGL3_NewFrame(); ImGui_ImplGlfw_NewFrame(); ImGui::NewFrame(); // Рендерим наше кастомное UI app.renderUI(); if (app.isClosing()) { glfwSetWindowShouldClose(window, GLFW_TRUE); } // Рендеринг графики ImGui::Render(); int display_w, display_h; glfwGetFramebufferSize(window, &display_w, &display_h); glViewport(0, 0, display_w, display_h); glClearColor(0.45f, 0.55f, 0.60f, 1.00f); glClear(GL_COLOR_BUFFER_BIT); ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData()); glfwSwapBuffers(window); } // Очистка ресурсов перед выходом ImGui_ImplOpenGL3_Shutdown(); ImGui_ImplGlfw_Shutdown(); ImGui::DestroyContext(); glfwDestroyWindow(window); glfwTerminate(); return 0; }