#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;
}