#include #include #include #include #include #include // To prevent conflicts caused by fucking windows.h, include GLFW last. #include #include "initiator.hh" #include "input.hh" #if defined(_MSC_VER) && (_MSC_VER >= 1900) && !defined(IMGUI_DISABLE_WIN32_FUNCTIONS) # pragma comment(lib, "legacy_stdio_definitions") #endif int main(int, char**) { // init display glfwSetErrorCallback( [](int, const char* msg) { std::cout << "GLFW error: " << msg << std::endl; }); if (!glfwInit()) return 1; GLFWwindow* window; const char* glsl_version; glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE); # if defined(__APPLE__) glsl_version = "#version 150"; glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); # else glsl_version = "#version 130"; glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); # endif window = glfwCreateWindow(1280, 720, "playground", NULL, NULL); if (window == NULL) return 1; glfwMakeContextCurrent(window); glfwSwapInterval(1); if (glewInit() != GLEW_OK) return 1; // init ImGUI IMGUI_CHECKVERSION(); ImGui::CreateContext(); ImPlot::CreateContext(); auto& io = ImGui::GetIO(); io.IniFilename = nullptr; io.ConfigFlags |= ImGuiConfigFlags_DockingEnable; ImGui::StyleColorsDark(); ImGui_ImplGlfw_InitForOpenGL(window, true); ImGui_ImplOpenGL3_Init(glsl_version); pg::Initiator initiator; glfwShowWindow(window); // main loop while (!glfwWindowShouldClose(window)) { // new frame glfwPollEvents(); ImGui_ImplOpenGL3_NewFrame(); ImGui_ImplGlfw_NewFrame(); ImGui::NewFrame(); // update GUI state initiator.Update(); pg::Input::instance().Update(); // render windows ImGui::Render(); int w, h; glfwGetFramebufferSize(window, &w, &h); glViewport(0, 0, w, h); glClear(GL_COLOR_BUFFER_BIT); ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData()); glfwSwapBuffers(window); } // teardown ImGUI ImGui_ImplOpenGL3_Shutdown(); ImGui_ImplGlfw_Shutdown(); ImPlot::DestroyContext(); ImGui::DestroyContext(); // teardown display glfwDestroyWindow(window); glfwTerminate(); return 0; }