#include <imgui.h> #include <imgui_impl_glfw_gl3.h> #include <glad/glad.h> #include <GLFW/glfw3.h> #include <cstdio> void ShowFPS() { ImGui::SetNextWindowSize(ImVec2(300, 30), ImGuiCond_Appearing); ImGui::SetNextWindowPos(ImVec2(0, 0), ImGuiCond_Appearing); ImGui::Begin("", 0, ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove); ImGui::Text("%.2f ms since last frame (%.1f FPS)", ImGui::GetIO().DeltaTime * 1000, ImGui::GetIO().Framerate); ImGui::End(); } void IMGUI_InitialUI(GLFWwindow* window) { ImGui_ImplGlfwGL3_Init(window, true); ImGuiIO& io = ImGui::GetIO(); io.Fonts->AddFontFromFileTTF("../res/font/arialunicodems.ttf", 18.0f, NULL, io.Fonts->GetGlyphRangesChinese()); } void IMGUI_SetUI() { ImGui_ImplGlfwGL3_NewFrame(); ShowFPS(); ImGui::Button("This is a button."); } void IMGUI_RenderUI() { ImGui::Render(); } void IMGUI_CleanUpUI() { ImGui_ImplGlfwGL3_Shutdown(); } void error_callback(int error, const char* description); void framebuffer_size_callback(GLFWwindow* window, int width, int height); unsigned int WindowWidth = 800; unsigned int WindowHeight = 600; float deltaTime = 0.0f; float lastFrame = 0.0f; int main() { glfwSetErrorCallback(error_callback); if (!glfwInit()) return 1; 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, "UI", NULL, NULL); glfwMakeContextCurrent(window); glfwSetFramebufferSizeCallback(window, framebuffer_size_callback); if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) return -1; IMGUI_InitialUI(window); while (!glfwWindowShouldClose(window)) { float currentFrame = glfwGetTime(); deltaTime = currentFrame - lastFrame; lastFrame = currentFrame; glfwPollEvents(); IMGUI_SetUI(); glClearColor(0.09f, 0.07f, 0.04f, 1.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); IMGUI_RenderUI(); glfwSwapBuffers(window); } IMGUI_CleanUpUI(); glfwTerminate(); return 0; } void error_callback(int error, const char* description) { fprintf(stderr, "Error %d: %s\n", error, description); } void framebuffer_size_callback(GLFWwindow* window, int width, int height) { glViewport(0, 0, width, height); WindowWidth = width; WindowHeight = height; }