Bonjour à tous.
Actuellement dans mon jeu j'utilise un sf::VertexArray de sf::Quads pour afficher tout l'environnement de mon jeu. Il y a quelques jours j'ai été confronté à un petit souci : créer une ligne oblique en utilisant un sf::Quads. La première solution que j'ai trouvé est de dessiner les lignes dans une image. Problème : ça prend beaucoup de place et j'ai cru comprendre qu'un sf::Texture avait une taille (en pixels) limite en fonction de la carte graphique, et vu que je compte ajouter énormément d'éléments à l'image, j'ai tenté d'utiliser la deuxième solution : créer un sf::Quads de couleur unis qui "entoure" la ligne que je veux dessiner. En gros je crée un quadrilatère assez plat pour faire croire que c'est une ligne.
Cette solution a très bien fonctionné sur mon PC. Cependant en voulant le tester sur un autre PC j'ai remarqué que les lignes ne s'affichaient plus. Après avoir testé le programme sur 4 PC différents, j'en ai conclut que la gestion des vertex était légèrement différente sur une ATI et une NVidia.
Voici le code utilisé pour initialiser une des ligne que je dois afficher, qui fonctionne sur une NVidia :
sf::Vertex coinsLigneAffichee[3];
coinsLigneAffichee[0].position = sf::Vector2f(m_coordonneesPixels.x + 1, m_coordonneesPixels.y + 10);
coinsLigneAffichee[1].position = sf::Vector2f(m_coordonneesPixels.x + 25, m_coordonneesPixels.y - 2);
coinsLigneAffichee[2].position = sf::Vector2f(m_coordonneesPixels.x + 1, m_coordonneesPixels.y + 9);
coinsLigneAffichee[3].position = sf::Vector2f(m_coordonneesPixels.x + 25, m_coordonneesPixels.y - 3);
coinsLigneAffichee[0].texCoords = sf::Vector2f(2 + 40 * (m_identifiant - 1), 34);
coinsLigneAffichee[1].texCoords = sf::Vector2f(2 + 40 * (m_identifiant - 1), 34 + 1);
coinsLigneAffichee[2].texCoords = sf::Vector2f(2 + 40 * (m_identifiant - 1) + 1, 34 + 1);
coinsLigneAffichee[3].texCoords = sf::Vector2f(2 + 40 * (m_identifiant - 1) + 1, 34);
Voici maintenant le code fonctionnant sur une ATI, ayant le même résultat :
sf::Vertex coinsLigneAffichee[3];
coinsLigneAffichee[0].position = sf::Vector2f(m_coordonneesPixels.x - 5, m_coordonneesPixels.y + 13);
coinsLigneAffichee[1].position = sf::Vector2f(m_coordonneesPixels.x + 19, m_coordonneesPixels.y + 1);
coinsLigneAffichee[2].position = sf::Vector2f(m_coordonneesPixels.x - 5, m_coordonneesPixels.y + 12);
coinsLigneAffichee[3].position = sf::Vector2f(m_coordonneesPixels.x + 19, m_coordonneesPixels.y);
coinsLigneAffichee[0].texCoords = sf::Vector2f(2 + 40 * (m_identifiant - 1), 34);
coinsLigneAffichee[1].texCoords = sf::Vector2f(2 + 40 * (m_identifiant - 1), 34);
coinsLigneAffichee[2].texCoords = sf::Vector2f(2 + 40 * (m_identifiant - 1), 34);
coinsLigneAffichee[3].texCoords = sf::Vector2f(2 + 40 * (m_identifiant - 1), 34);
Pourriez-vous m'indiquer comment résoudre ce petit problème gênant ?
Merci d'avance.
PS : les drivers sont à jour sur les quatre PC, c'est le seul problème que je rencontre avec des vertex (donc le problème ne vient pas de m_coordonneesPixels et m_identifiant), et je suis obligé d'utiliser un sf::Quads pour afficher une ligne car je dois tout afficher dans un même sf::VertexArray.