Attention à ce test:
// si le format d'écran n'est pas 16:9 on doit rajouter les bandes noires
if(clientVideoMode.width / clientVideoMode.height != 16/9)
Tu fais des opérations sur des entiers.
Ainsi, avec un VideoMode en 16/9, en 10/9 ou 4/3, ça correspond à ceci:
if(1 != 1)
ce qui sera toujours évalué comme étant
false.
Tu peux résoudre le problème en remplaçant les quotients par des produits comme ceci:
if(9 * clientVideoMode.width != 16 * clientVideoMode.height)
Pour ce qui est de créer la vue, voilà comment je ferais avec un viewport:
// Récupération de la résolution de l'écran du client et on crée la fenêtre en conséquence
sf::VideoMode clientVideoMode = sf::VideoMode::getDesktopMode();
// ceci est à faire de toute façon, donc je le mets hors du if
this->mainView = sf::View(sf::FloatRect(0, 0, 1920, 1080));
// si le format d'écran n'est pas 16:9 on doit rajouter les bandes noires
if(9 * clientVideoMode.width != 16 * clientVideoMode.height)
{
// calcul de la taille de la bande noire du dessus
float decalY = (clientVideoMode.height - (clientVideoMode.width * 9 / 16)) / 2;
// on l'exprime par rapport à la hauteur totale
float rapport = decalY / clientVideoMode.height;
// On applique le viewport
this->mainView.setViewport(sf::FloatRect(0.f, rapport, 1.f, 1.f-rapport*2));
}
// Pour finir on crée la fenêtre et on set la vue.
globals.window.create(clientVideoMode, "Abysses v0.1", sf::Style::Fullscreen);
globals.window.setView(this->mainView);