Base Env

#include <imgui.h>
#include <imgui_impl_glfw_gl3.h>
#include <cstdio>
#include <cmath>
#include <glad/glad.h>
#include <GLFW/glfw3.h>

static void error_callback(int error, const char* description)
{
    fprintf(stderr, "Error %d: %s
", error, description);
}


void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{
    glViewport(0, 0, width, height);
}

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)
{
    // Setup ImGui binding
    ImGui_ImplGlfwGL3_Init(window, true);

    // Load Fonts
    ImGuiIO& io = ImGui::GetIO();
    io.Fonts->AddFontFromFileTTF("../res/font/arialunicodems.ttf", 18.0f,NULL,io.Fonts->GetGlyphRangesChinese());
}

void IMGUI_SetUI()
{
    ImGui_ImplGlfwGL3_NewFrame();
    ShowFPS();
}

void IMGUI_RenderUI()
{
    ImGui::Render();
}

void IMGUI_CleanUpUI()
{
    ImGui_ImplGlfwGL3_Shutdown();
}

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, "GL March", NULL, NULL);

    glfwMakeContextCurrent(window);
    glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);

    //glfwSwapInterval(1); // Enable vsync

    if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
        return -1;

    IMGUI_InitialUI(window);

    double PreviousTime = 0.0;
    double CurrentTime = 0.0;
    double DeltaTime = 0.0;

    while (!glfwWindowShouldClose(window))
    {
        glfwPollEvents();
        IMGUI_SetUI();
        PreviousTime = CurrentTime;
        CurrentTime = glfwGetTime();
        DeltaTime = CurrentTime - PreviousTime;
        
        glClearColor(sin(CurrentTime),cos(tan(PreviousTime)), sin(tan(CurrentTime)), 1);

        glClear(GL_COLOR_BUFFER_BIT);

        IMGUI_RenderUI();
        glfwSwapBuffers(window);
    }

    IMGUI_CleanUpUI();
    glfwTerminate();
    return 0;
}

原文地址:https://www.cnblogs.com/Searchor/p/7766073.html