#include <SFML/Graphics.hpp>
int main()
{
// Risoluzione desiderata per l'effetto retrogaming (bassa risoluzione)
const unsigned int retroWidth = 320;
const unsigned int retroHeight = 240;
// Risoluzione della finestra (alta risoluzione)
const unsigned int windowWidth = 1280;
const unsigned int windowHeight = 960;
// Creare la finestra principale
sf::RenderWindow window(sf::VideoMode(windowWidth, windowHeight), "Retro Gaming Effect");
// Creare la RenderTexture a bassa risoluzione
sf::RenderTexture renderTexture;
if (!renderTexture.create(retroWidth, retroHeight)) {
return -1; // Errore nella creazione della RenderTexture
}
// Sprite che useremo per disegnare la RenderTexture sulla finestra principale
sf::Sprite renderTextureSprite(renderTexture.getTexture());
// Calcolare il fattore di scala per adattare la RenderTexture alla finestra
float scaleX = static_cast<float>(windowWidth) / retroWidth;
float scaleY = static_cast<float>(windowHeight) / retroHeight;
renderTextureSprite.setScale(scaleX, scaleY);
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
}
// Disegna sulla RenderTexture a bassa risoluzione
renderTexture.clear();
// Esempio: disegna alcune linee e rettangoli
sf::RectangleShape rect(sf::Vector2f(50, 50));
rect.setPosition(10, 10);
rect.setFillColor(sf::Color::Green);
renderTexture.draw(rect);
rect.setPosition(100, 100);
rect.setFillColor(sf::Color::Blue);
rect.setRotation(17.0f);
renderTexture.draw(rect);
sf::Vertex line[] =
{
sf::Vertex(sf::Vector2f(150, 150), sf::Color::Red),
sf::Vertex(sf::Vector2f(200, 200), sf::Color::Red)
};
renderTexture.draw(line, 2, sf::Lines);
sf::Vertex line2[] =
{
sf::Vertex(sf::Vector2f(50, 150), sf::Color::Yellow),
sf::Vertex(sf::Vector2f(100, 200), sf::Color::Yellow)
};
renderTexture.draw(line2, 2, sf::Lines);
renderTexture.display();
// Disegna la RenderTexture scalata sulla finestra principale
window.clear();
window.draw(renderTextureSprite);
window.display();
}
return 0;
}