game_animation_programming/src/user_interface.cpp
2025-07-13 12:53:42 -06:00

65 lines
2.2 KiB
C++

#include <string>
#include <imgui/imgui_impl_glfw.h>
#include <imgui/imgui_impl_opengl3.h>
#include "user_interface.h"
bool init_user_interface(User_Interface *user_interface, Render_Data *render_data) {
IMGUI_CHECKVERSION();
ImGui::CreateContext();
ImGui_ImplGlfw_InitForOpenGL(render_data->glfw_window, true);
const char* glsl_version = "#version 460 core";
ImGui_ImplOpenGL3_Init(glsl_version);
return true;
}
void create_user_interface_frame(User_Interface *user_interface, Render_Data *render_data) {
ImGui_ImplOpenGL3_NewFrame();
ImGui_ImplGlfw_NewFrame();
ImGui::NewFrame();
ImGuiWindowFlags imgui_window_flags = 0;
ImGui::SetNextWindowBgAlpha(0.8f);
ImGui::Begin("Control", nullptr, imgui_window_flags);
static f32 new_fps = 0.0f;
if (render_data->frame_time > 0.0) {
new_fps = 1.0f / render_data->frame_time;
}
user_interface->frames_per_second = (user_interface->averaging_alpha * user_interface->frames_per_second) + (1.0f - user_interface->averaging_alpha) * new_fps;
ImGui::Text("FPS:");
ImGui::SameLine();
ImGui::Text(std::to_string(user_interface->frames_per_second).c_str());
ImGui::Separator();
ImGui::Text("UI generation time:");
ImGui::SameLine();
ImGui::Text(std::to_string(render_data->user_interface_generate_time).c_str());
ImGui::SameLine();
ImGui::Text("ms");
ImGui::Separator();
ImGui::Text("Triangles:");
ImGui::SameLine();
ImGui::Text(std::to_string(render_data->triangle_count).c_str());
string window_dims = std::to_string(render_data->width) + "x" +
std::to_string(render_data->height);
ImGui::Text("Window dimensions:");
ImGui::SameLine();
ImGui::Text(window_dims.c_str());
string img_window_position = std::to_string(static_cast<s32>(ImGui::GetWindowPos().x))+ "/" + std::to_string(static_cast<s32>(ImGui::GetWindowPos().y));
ImGui::Text("ImGui Window Position:");
ImGui::SameLine();
ImGui::Text(img_window_position.c_str());
ImGui::End();
}
void render_user_interface(User_Interface *user_interface) {
ImGui::Render();
ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData());
}
void cleanup_user_interface(User_Interface *user_interface) {
ImGui_ImplOpenGL3_Shutdown();
ImGui_ImplGlfw_Shutdown();
ImGui::DestroyContext();
}