Issue Rendering sf::RenderTexture to ImGui::Image
Autumn-Bomb opened this issue · comments
I'm currently having issues rendering a RenderTexture to an ImGui::Image. I've rendered my RenderTexture to my sf::RenderWindow with no issues as shown in the screenshot but for some reason it doesn't want to render inside my ImGui::Image.
As below, the RenderTexture drawn in my sf::RenderWindow and the White Square underneath is my sf::RenderTexture being drawn to my ImGui::Image.
2DRenderer.cpp
#include "2DRenderer.h"
#include <iostream>
AutumnEngine::Renderer::Renderer()
{
std::cout << "Initialising Renderer!";
}
AutumnEngine::Renderer::~Renderer(){}
void AutumnEngine::Renderer::Create(const unsigned int width, const unsigned int height)
{
std::cout << "\nCreating RenderTexture!\n";
m_RenderTexture.create(width, height);
this->width = width;
this->height = height;
std::cout << "\nCreated RenderTexture!\n";
DrawShape();
}
void AutumnEngine::Renderer::AddToRenderTexture(sf::Drawable& drawable)
{
std::cout << "\nDrawing Drawable!\n";
m_RenderTexture.clear(sf::Color::Red);
m_RenderTexture.draw(drawable);
m_RenderTexture.display();
std::cout << "Drawable has been Drawn!\n";
}
void AutumnEngine::Renderer::Clear(sf::Color color)
{
m_RenderTexture.clear(color);
}
void AutumnEngine::Renderer::Clear()
{
m_RenderTexture.clear();
}
void DrawShape()
{
rect.setSize(sf::Vector2f(100, 100));
rect.setPosition(sf::Vector2f(100, 100));
rect.setFillColor (sf::Color::Black);
AddToRenderTexture(rect);
}
SceneViewport.cpp
#include "../SceneViewport/SceneViewport.h"
AutumnEngine::SceneViewport::SceneViewport(){}
AutumnEngine::SceneViewport::~SceneViewport() {}
void AutumnEngine::SceneViewport::ShowSceneViewport()
{
ImGui::Begin("Scene Viewport", NULL, ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_None);
if (!m_RendererCreated)
{
m_Renderer->Create(ImGui::GetWindowWidth() - 25.f, ImGui::GetWindowHeight() - 65.f);
m_RendererCreated = true;
}
ImGui::SameLine(ImGui::GetWindowWidth() / 2 - 60);
ImGui::Button("Play", ImVec2(40, 20));
ImGui::SameLine();
ImGui::Button("Pause", ImVec2(40, 20));
ImGui::SameLine();
ImGui::Button("Stop", ImVec2(40, 20));
ImGui::Separator();
ImGui::Image(&m_Renderer->GetRenderTexture(), ImVec2(m_Renderer->GetRenderTexture().getSize().x, m_Renderer->GetRenderTexture().getSize().y));
ImGui::End();
}
I guess this should fix it:
ImGui::Image(*m_Renderer->GetRenderTexture(), ImVec2(m_Renderer->GetRenderTexture().getSize().x, m_Renderer->GetRenderTexture().getSize().y));
When you do:
&m_Renderer->GetRenderTexture()
You're passing a pointer to a pointer and so it triggers another overload of ImGui::Image (the one which gets ImTextureID, I think)
I have tried that but it says that it's not allowed, "no operator "*" matches these operands, operands types are: *sf::RenderTexture()"
It wasn't using the overloaded ImGui::Image method that's why. Thank you. This will be closed.