Do tego możesz się posłużyć sf::RenderTexture. Możesz rysować na niej i nadać widok oddzielnie. Link do dokumentacji. Prosty przykład:
#include <SFML/Graphics.hpp>
int main()
{
sf::RenderWindow window(sf::VideoMode(800, 600), "SFML window");
sf::RenderTexture gameTexture;
if (!gameTexture.create(800, 600))
return -1;
sf::RenderTexture guiTexture;
if (!guiTexture.create(800, 600))
return -1;
sf::CircleShape circle;
circle.setFillColor(sf::Color::Blue);
circle.setRadius(100);
sf::CircleShape circle2;
circle2.setFillColor(sf::Color::Green);
circle2.setRadius(100);
circle2.setPosition(100, 100);
sf::View view;
gameTexture.setView(view);
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed) window.close();
}
gameTexture.clear(sf::Color::Transparent);
gameTexture.draw(circle);
gameTexture.display();
guiTexture.clear(sf::Color::Transparent);
guiTexture.draw(circle2);
guiTexture.display();
window.clear();
sf::Sprite game(guiTexture.getTexture());
window.draw(game);
sf::Sprite gui(gameTexture.getTexture());
window.draw(gui);
window.display();
}
}
Niebieskie koło uległo skalowaniu z sf::View.