sf::RenderTexture displays upside down · Issue #35 · SFML/imgui-sfml (original) (raw)

@kevvo1288

I'm not sure if this is the same issue as #11 but RenderTextures seem to be flipped upside down. I've attached a minimal program to produce the issue. The sprite shows right-side up if I render it using RenderWindow::draw() but if I use ImGui::Image() it is upside down. Rendering the raw sf::RenderTexture using ImGui::Image() also results in an upside down image.
If I do the same test using an image loaded from a file into a sf::Texture instead of the sf::RenderTexture, everything renders just fine.

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

#include <SFML/System/Clock.hpp>
#include <SFML/Window/Event.hpp>
#include <SFML/Graphics.hpp>
#include <iostream>

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

    bool show = true;
    
    sf::RenderTexture renderTexture;
    if (!renderTexture.create(32, 32))
    {
        std::cout << "error renderTexture\n";
        return 1;
    }
    sf::Sprite sprite(renderTexture.getTexture());
    sf::RectangleShape rect(sf::Vector2f(16, 16));
    rect.setFillColor(sf::Color::White);
    rect.setPosition(0, 0);
    renderTexture.clear(sf::Color::Green);
    renderTexture.draw(rect);
    renderTexture.display();

    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(window, deltaClock.restart());
        
        ImGui::Begin("Sprite Test");
        //ImGui will render this upside down
        ImGui::Image(sprite);
        ImGui::End();

        ImGui::Begin("RenderTexture Test");
        //ImGui will render this upside down
        ImGui::Image(renderTexture.getTexture());
        ImGui::End();
        
        window.clear(sf::Color::Black);
        //SFML renders ok
        window.draw(sprite);
        //But IMGUI seems to render these upside down
        ImGui::SFML::Render(window);
        window.display();
    }

    ImGui::SFML::Shutdown();
}