103 lines
2.5 KiB
C++
103 lines
2.5 KiB
C++
#include <iostream>
|
|
|
|
#include <GL/glew.h>
|
|
|
|
#include <imgui.h>
|
|
#include <imgui_impl_glfw.h>
|
|
#include <imgui_impl_opengl3.h>
|
|
#include <implot.h>
|
|
|
|
// To prevent conflicts caused by fucking windows.h, include GLFW last.
|
|
#include <GLFW/glfw3.h>
|
|
|
|
#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;
|
|
}
|