diff --git a/xo-imgui/example/ex4/imgui_ex4.cpp b/xo-imgui/example/ex4/imgui_ex4.cpp index 0d60e97e..d1687f13 100644 --- a/xo-imgui/example/ex4/imgui_ex4.cpp +++ b/xo-imgui/example/ex4/imgui_ex4.cpp @@ -1,11 +1,46 @@ /* imgui_ex4.cpp */ #include "xo/imgui/VulkanApp.hpp" +#include +#include #include +namespace { + ImDrawData * + imgui_draw_frame(ImGuiContext * imgui_cx) + { + // Start the Dear ImGui frame + ImGui_ImplVulkan_NewFrame(); + ImGui_ImplSDL2_NewFrame(); + ImGui::NewFrame(); + + // Create a simple ImGui window + ImGui::Begin("Hello, Vulkan + SDL2!"); + ImGui::Text("This is a minimal ImGui + Vulkan + SDL2 example!"); + static float f = 0.0f; + static int counter = 0; + ImGui::SliderFloat("float", &f, 0.0f, 1.0f); + if (ImGui::Button("Button")) + ++counter; + ImGui::SameLine(); + ImGui::Text("counter = %d", counter); + ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", + 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate); + ImGui::End(); + + // Rendering + ImGui::Render(); + ImDrawData* draw_data = ImGui::GetDrawData(); + + return draw_data; + } +} + int main() { VulkanApp app; + app.assign_imgui_draw_frame(imgui_draw_frame); + try { app.run(); } catch (const std::exception& e) { diff --git a/xo-imgui/include/xo/imgui/VulkanApp.hpp b/xo-imgui/include/xo/imgui/VulkanApp.hpp index 1fa56ca4..f99db1a9 100644 --- a/xo-imgui/include/xo/imgui/VulkanApp.hpp +++ b/xo-imgui/include/xo/imgui/VulkanApp.hpp @@ -16,6 +16,9 @@ public: public: VulkanApp() = default; + /** set imgui draw function **/ + void assign_imgui_draw_frame(ImguiDrawFn fn); + void run(); private: @@ -72,6 +75,9 @@ private: uint32_t current_frame_ = 0; uint32_t graphics_queue_family_ = 0; bool quit_ = false; + + /** draw imgui **/ + ImguiDrawFn imgui_draw_frame_; }; /* end VulkanApp.hpp */ diff --git a/xo-imgui/src/imgui/VulkanApp.cpp b/xo-imgui/src/imgui/VulkanApp.cpp index c3c40f07..cf5782bc 100644 --- a/xo-imgui/src/imgui/VulkanApp.cpp +++ b/xo-imgui/src/imgui/VulkanApp.cpp @@ -8,6 +8,12 @@ constexpr std::size_t c_max_frames_in_flight = 2; +void +VulkanApp::assign_imgui_draw_frame(ImguiDrawFn fn) +{ + this->imgui_draw_frame_ = std::move(fn); +} + void VulkanApp::run() { this->init_window();