From b85e784d6fc7b37ada36f4a8a8a0607a41cefc4a Mon Sep 17 00:00:00 2001 From: Cristian Gora Date: Sun, 27 Sep 2026 21:14:33 +0200 Subject: [PATCH] Edit example UI features --- src/main.cpp | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 596b8e9..0881e69 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -12,6 +12,7 @@ using namespace Fan; struct UserData { + Window& window; Camera& camera; float delta_time{}; bool mouse_grab{}; @@ -22,6 +23,7 @@ struct UserData float last_mouse_y{}; bool first_mouse{true}; + bool vsync{true}; bool show_debug{}; std::vector> scenes{}; @@ -31,8 +33,8 @@ struct UserData void process_input(Window& window, Camera& camera, UserData& user_data); void mouse_callback(double pos_x, double pos_y, void* user_data); void setup_dockspace(); -void draw_panel_window(Camera& camera, UserData& user_data); -void draw_viewport_window(FrameBuffer& framebuffer, Window& window, UserData& user_data); +void draw_panel_window(UserData& user_data); +void draw_viewport_window(FrameBuffer& framebuffer, UserData& user_data); std::vector get_cube_vertices(); template @@ -62,7 +64,7 @@ int main() Camera camera{{5.0f, 5.0f, 5.0f}}; camera.look_at({0.0f, 0.0f, 0.0f}); - UserData user_data{camera}; + UserData user_data{*window, camera}; window->set_callback_user_data(&user_data); window->set_mouse_callback(mouse_callback); @@ -176,8 +178,8 @@ int main() // UI Layer setup_dockspace(); - draw_panel_window(camera, user_data); - draw_viewport_window(*framebuffer, *window, user_data); + draw_panel_window(user_data); + draw_viewport_window(*framebuffer, user_data); // Scene Rendering Layer const Scene& scene = *user_data.scenes[user_data.selected_scene_index]; @@ -273,7 +275,7 @@ void setup_dockspace() ImGui::DockSpaceOverViewport(dockspace_id, viewport, ImGuiDockNodeFlags_None); } -void draw_panel_window(Camera& camera, UserData& user_data) +void draw_panel_window(UserData& user_data) { static auto logo = Texture::create("assets/logo/logo.png"); @@ -286,11 +288,11 @@ void draw_panel_window(Camera& camera, UserData& user_data) ImGui::Separator(); ImGui::Text("Press INSERT to toggle camera controls"); - ImGui::SliderFloat("Camera X", &camera.position.x, -10.0f, 10.0f); - ImGui::SliderFloat("Camera Y", &camera.position.y, -10.0f, 10.0f); - ImGui::SliderFloat("Camera Z", &camera.position.z, -10.0f, 10.0f); ImGui::Separator(); + if (ImGui::Checkbox("VSync", &user_data.vsync)) { + user_data.window.set_vsync(user_data.vsync); + } ImGui::Checkbox("Show Debug Wireframes", &user_data.show_debug); ImGui::Separator(); @@ -306,7 +308,7 @@ void draw_panel_window(Camera& camera, UserData& user_data) ImGui::End(); } -void draw_viewport_window(FrameBuffer& framebuffer, Window& window, UserData& user_data) +void draw_viewport_window(FrameBuffer& framebuffer, UserData& user_data) { ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2{0.0f, 0.0f}); ImGui::Begin("Viewport"); @@ -320,10 +322,10 @@ void draw_viewport_window(FrameBuffer& framebuffer, Window& window, UserData& us } // Overlays - float fps = window.get_delta_time() > 0.0f ? 1.0f / window.get_delta_time() : 0.0f; + float fps = user_data.window.get_delta_time() > 0.0f ? 1.0f / user_data.window.get_delta_time() : 0.0f; overlay_text(20.0f, 35.0f, {0.0f, 1.0f, 0.0f, 1.0f}, "%s", VERSION_STRING); overlay_text(20.0f, 52.0f, {0.0f, 1.0f, 0.0f, 1.0f}, "FPS: %.1f", fps); - overlay_text(20.0f, 69.0f, {0.0f, 1.0f, 0.0f, 1.0f}, "Frame time: %.2f ms", window.get_delta_time()); + overlay_text(20.0f, 69.0f, {0.0f, 1.0f, 0.0f, 1.0f}, "Frame time: %.2f ms", user_data.window.get_delta_time()); if (user_data.mouse_grab) { overlay_text(20.0f, 86.0f, {0.0f, 1.0f, 0.0f, 1.0f}, "%s", "INPUT LOCKED"); } ImGui::End();