[Linux] Rendering a sprite in the same window garbles dialog text · Issue #8 · SFML/imgui-sfml (original) (raw)

Without rendering sf::Sprite:

without-sprite

With rendering sf::Sprite:

with-sprite

This is taken directly from the sample program, but with a few lines added to load/render the sprite.

#include "imgui/imgui.h" #include "imgui/imgui-SFML.h"

#include <SFML/Graphics/RenderWindow.hpp> #include <SFML/Graphics/Texture.hpp> #include <SFML/Graphics/Sprite.hpp> #include <SFML/System/Clock.hpp> #include <SFML/Window/Event.hpp>

int main() { sf::RenderWindow window(sf::VideoMode(640, 480), ""); window.setVerticalSyncEnabled(true); ImGui::SFML::Init(window);

sf::Texture texture;
texture.loadFromFile("image.jpg");

sf::Sprite sprite;
sprite.setTexture(texture);

sf::Color bgColor;

float color[3] = { 0.f, 0.f, 0.f };

// let's use char array as buffer, see next part
// for instructions on using std::string with ImGui
char windowTitle[255] = "ImGui + SFML = <3";

window.setTitle(windowTitle);

sf::Clock deltaClock;
while (window.isOpen()) {
    sf::Event event;
    while (window.pollEvent(event)) {
        ImGui::SFML::ProcessEvent(event);

        if (event.type == sf::Event::Closed) {
            window.close();
        }
    }

    ImGui::SFML::Update(deltaClock.restart());

    ImGui::Begin("Sample window"); // begin window

                                   // Background color edit
    if (ImGui::ColorEdit3("Background color", color)) {
        // this code gets called if color value changes, so
        // the background color is upgraded automatically!
        bgColor.r = static_cast<sf::Uint8>(color[0] * 255.f);
        bgColor.g = static_cast<sf::Uint8>(color[1] * 255.f);
        bgColor.b = static_cast<sf::Uint8>(color[2] * 255.f);
    }

    // Window title text edit
    ImGui::InputText("Window title", windowTitle, 255);

    if (ImGui::Button("Update window title")) {
        // this code gets if user clicks on the button
        // yes, you could have written if(ImGui::InputText(...))
        // but I do this to show how buttons work :)
        window.setTitle(windowTitle);
    }

    // Demo
    // ImGui::ShowTestWindow();

    ImGui::End(); // end window

    window.clear(bgColor); // fill background with color
    ImGui::Render();
    window.draw(sprite);
    window.display();
}

ImGui::SFML::Shutdown();

}

The only difference between the two screenshots was commenting out window.draw(sprite).

Have you seen this before?