#include "imgui.h" #include "imgui-SFML.h" #include #include #include #include #include void ImGui_setup(sf::RenderWindow &window) { int res = ImGui::SFML::Init(window); if(res == 1) { fmt::print("ImGui returned result {}\n", res); } else { fmt::print("ImGui returned an error code={}\n", res); } } void ImGui_update(sf::RenderWindow &window, sf::Clock &deltaClock, sf::Time &tick) { ImGui::SFML::Update(window, deltaClock.restart()); ImGui::ShowDemoWindow(); ImGui::Begin("Hello, world!"); std::string msg = fmt::format("Time: {}\n", tick.asSeconds()); ImGui::Button(msg.c_str()); ImGui::End(); } void Window_update(sf::RenderWindow &window, sf::Shape &shape) { window.clear(); window.draw(shape); ImGui::SFML::Render(window); window.display(); } int main() { fmt::print("Setting up a window for you...\n"); sf::RenderWindow window(sf::VideoMode(1920, 1080), "ImGui + SFML = <3"); // window.setFramerateLimit(60); window.setVerticalSyncEnabled(true); ImGui_setup(window); sf::CircleShape shape(100.f); shape.setFillColor(sf::Color::Green); sf::Clock deltaClock; sf::Clock clock; sf::Time tick = clock.getElapsedTime(); // very cool, c++11 lambdas doing a 1 second slept thread sf::Thread thread([](){ for(int i = 0; i < 10; i++) { fmt::print("I'm a thread. {}\n", i); sf::sleep(sf::seconds(1)); } }); thread.launch(); while (window.isOpen()) { sf::Event event; while (window.pollEvent(event)) { ImGui::SFML::ProcessEvent(window, event); if (event.type == sf::Event::Closed) { fmt::print("Exiting...\n"); window.close(); } } sf::Time since = clock.getElapsedTime(); if(since - tick > sf::seconds(1)) { tick = since; } ImGui_update(window, deltaClock, tick); Window_update(window, shape); } ImGui::SFML::Shutdown(); }