Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: [SFML 2.0 RC][Linux] Problème d'affichage sur carte ATI  (Lu 9349 fois)

0 Membres et 1 Invité sur ce sujet

Crone123

  • Full Member
  • ***
  • Messages: 141
    • Voir le profil
[SFML 2.0 RC][Linux] Problème d'affichage sur carte ATI
« le: Octobre 28, 2012, 03:32:59 pm »
Bonjour,
Voici donc le sujet de rapport de bug pour l'affichage des sf::ConvexShape sur les cartes ATI.
Beaucoup de dégradés réalisés avec des sf::ConvexShape ne s'affichent pas correctement sur les cartes ATI.
J'ai a ma disposition pour le test des cartes Nvidia et des cartes ATI, le rendu est pareil pour les cartes de la même marque.
En revanche, il y a des différences de rendu entre les cartes Nvidia et les cartes ATI.
Quand je dis ATI, entendez ATI/AMD.
J'ai fait un certain nombre de captures d'écran, j'en poste que quelques unes (petites) ici, les autres je les met sous forme de lien.
Les captures de la carte Nvidia dans ce test seront prises sur une Nvidia GT 220 depuis Ubuntu 12.04 LTS 64bits.
Les captures de la carte ATI dans ce test seront prises sur une ATI Mobility Radeon HD 4570 depuis Ubuntu 12.04 LTS 64bits.
Exemple d'un bouton affiché normalement sur une carte Nvidia:

(Les trucs verts sont des particules en mouvement, ignorez les, ça fait moche sur la capture, mais dans le jeu c'est joli grâce a l'effet de mouvement..)
Le même bouton sur la carte ATI:

Le bouton central est un sprite, le texte est un sf::Text et l'effet de surbrillance est 4 sf::ConvexShape.

Voilà, plutôt que de vous passer pleins de liens, autant vous passer une archive contenant toutes les captures. (2 dossiers, un ATI, un Nvidia)
Vous constaterez que pour les mêmes images, des fois les cartes ATI affichent correctement, ou presque correctement les sf::ConvexShape, et sinon la plupart du temps ça fait un rendu hyper mauvais.
http://s2.smglive.org/SMG_RPG/ConvexShapeATI-Nvidia.7z

Aussi, j'ai d'autres informations qui pourraient êtes utiles, lorsque le jeu quitte sur une carte Nvidia, tout va bien, mais sur une carte ATI:
Program received signal SIGSEGV, Segmentation fault.
0x00007ffff4a2cc58 in XQueryExtension ()
   from /usr/lib/x86_64-linux-gnu/libX11.so.6
(gdb) bt
#0  0x00007ffff4a2cc58 in XQueryExtension ()
   from /usr/lib/x86_64-linux-gnu/libX11.so.6
#1  0x00007ffff4a20c55 in XInitExtension ()
   from /usr/lib/x86_64-linux-gnu/libX11.so.6
#2  0x00007ffff3ed502b in XextAddDisplay ()
   from /usr/lib/x86_64-linux-gnu/libXext.so.6
#3  0x00007ffff4d6a119 in ?? () from /usr/lib/fglrx/libGL.so.1
#4  0x00007ffff4d60b42 in ?? () from /usr/lib/fglrx/libGL.so.1
#5  0x00007fffffffe050 in ?? ()
#6  0x00007ffff4dc38b1 in ?? () from /usr/lib/fglrx/libGL.so.1
#7  0x00007fffffffe050 in ?? ()
#8  0x00007ffff7de992d in ?? () from /lib64/ld-linux-x86-64.so.2
Backtrace stopped: previous frame inner to this frame (corrupt stack?)

Notez que j'utilise les pilotes propriétaires Nvidia et ATI sur les cartes graphiques, les pilotes libres ne savent pas encore lancer de jeux comme ça.
Merci :)

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML 2.0 RC][Linux] Problème d'affichage sur carte ATI
« Réponse #1 le: Octobre 28, 2012, 06:28:47 pm »
Il faudrait que tu fournisses un code complet et minimal qui reproduit le problème.
Laurent Gomila - SFML developer

Crone123

  • Full Member
  • ***
  • Messages: 141
    • Voir le profil
Re : [SFML 2.0 RC][Linux] Problème d'affichage sur carte ATI
« Réponse #2 le: Octobre 28, 2012, 07:01:13 pm »
Bah, jusqu'à présent tous mes projets ont été affectés, et quel que soit le code, la preuve sur les captures.
Il vous suffit de déclarer un sf::ConvexShape et vous avez 9 chances sur 10 que ça bug.
Donc, pour code minimal, a peu près n'importe quoi est affecté, et ensuite 9 fois sur 10 ça va bugguer.
J'ai par contre l'impression que certaines formes sont plus affectées que les autres, voyez l'effet de surbrillance le coté gauche souvent n'est pas du tout affiché, haut et droite c'est n'importe quoi et le bas est généralement plutôt bien affiché.


Pour les barres de vies par exemple, vous avez vu que des fois elles s'affichent et des fois non.
J'ai remarqué que dans le vert (quasiment complète) elle s'affiche assez fréquemment correctement, quand elle arrive vers la moitié elle ne s'affiche jamais correctement et quand elle est quasiment vide elle s'affiche aussi assez fréquemment correctement.

Pour le code minimal, je veux bien voir, mais je n'en vois pas vraiment l’intérêt puisque tous les objets que j'ai utilisé ont fait ça sur les cartes ATI, sans jamais bugguer sur les cartes Nvidia. (quelque soit leurs tailles ou leurs formes).
C'est paradoxal, parce que sur la SFML 1.6 ce sont les sprites qui ne passaient pas les 3/4 du temps sur les cartes ATI, et justement les sf::Shape étaient les seuls trucs qui passaient bien...

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML 2.0 RC][Linux] Problème d'affichage sur carte ATI
« Réponse #3 le: Octobre 28, 2012, 08:46:28 pm »
L'intérêt du code minimal ? Me fournir une base saine pour commencer à debugger. Ne pas perdre de temps à mettre en place un test et examiner le code, potentiellement pour rien.

Dans 95% des cas c'est l'utilisateur qui a fait une connerie dans son code, je ne peux pas croire les gens sur parole ;)
« Modifié: Octobre 29, 2012, 11:46:40 am par Laurent »
Laurent Gomila - SFML developer

Crone123

  • Full Member
  • ***
  • Messages: 141
    • Voir le profil
Re : [SFML 2.0 RC][Linux] Problème d'affichage sur carte ATI
« Réponse #4 le: Octobre 29, 2012, 11:46:24 am »
OK, je vais voir ça.
Mais ici ça serait une connerie qui marche sur Nvidia et qui ne marche pas sur ATI, donc c'est quasiment a coup sûr de la SFML, d'autant plus que des fois ça s'affiche a peu près correctement, et tu relances le programme, ça ne marche plus...

Je regarde...

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML 2.0 RC][Linux] Problème d'affichage sur carte ATI
« Réponse #5 le: Octobre 29, 2012, 11:47:38 am »
Disons qu'ici le code minimal, d'après ce que tu dis, est très court et facile à écrire. Alors pourquoi s'en priver ? ;)
Laurent Gomila - SFML developer

Crone123

  • Full Member
  • ***
  • Messages: 141
    • Voir le profil
Re : [SFML 2.0 RC][Linux] Problème d'affichage sur carte ATI
« Réponse #6 le: Octobre 29, 2012, 11:50:09 am »
Oui oui, il arrive, c'est juste que j'avais la flemme d'installer les outils de développement sur mon PC portable avec la carte ATI vu que je développe sur ma tour qui a la carte Nvidia, et j'ai remarqué le problème de l'un a l'autre....(j'avais essayé un moment de développer sur le PC portable avec ce bug c'était l'horreur)

Crone123

  • Full Member
  • ***
  • Messages: 141
    • Voir le profil
Re : [SFML 2.0 RC][Linux] Problème d'affichage sur carte ATI
« Réponse #7 le: Octobre 30, 2012, 12:38:03 am »
Bon, alors j'ai repris le code source de mon jeu, je l'ai juste adapté pour qu'il soit minimal: le code qui fait l'effet de surbrillance:
#include <iostream>
#include <SFML/Graphics.hpp>
using namespace std;
sf::Texture Degrade_Blanc_Droite, Degrade_Blanc_Gauche, Degrade_Blanc_Bas, Degrade_Blanc_Haut;
void displaySurBrillance(sf::Vector2f Position, sf::Vector2f Size, sf::RenderWindow& App)
{
        int X(Position.x), Y(Position.y);
        int SX(Size.x), SY(Size.y);
        sf::ConvexShape LeftShape;
        LeftShape.setPosition(X, Y);
        LeftShape.setPointCount(4);
        LeftShape.setPoint(0, sf::Vector2f(0, 0));
        LeftShape.setPoint(1, sf::Vector2f(0, SY));
        LeftShape.setPoint(2, sf::Vector2f(-10, SY + 10));
        LeftShape.setPoint(3, sf::Vector2f(-10, -10));
        LeftShape.setTexture(&Degrade_Blanc_Droite);
        sf::ConvexShape RightShape;
        RightShape.setPosition(X, Y);
        RightShape.setPointCount(4);
        RightShape.setPoint(0, sf::Vector2f(SX, 0));
        RightShape.setPoint(1, sf::Vector2f(SX + 10, -10));
        RightShape.setPoint(2, sf::Vector2f(SX + 10, SY + 10));
        RightShape.setPoint(3, sf::Vector2f(SX, SY));
        RightShape.setTexture(&Degrade_Blanc_Gauche);
        sf::ConvexShape UpShape;
        UpShape.setPosition(X, Y);
        UpShape.setPointCount(4);
        UpShape.setPoint(0, sf::Vector2f(0, 0));
        UpShape.setPoint(1, sf::Vector2f(-10, -10));
        UpShape.setPoint(2, sf::Vector2f(SX + 10, -10));
        UpShape.setPoint(3, sf::Vector2f(SX, 0));
        UpShape.setTexture(&Degrade_Blanc_Bas);
        sf::ConvexShape DownShape;
        DownShape.setPosition(X, Y);
        DownShape.setPointCount(4);
        DownShape.setPoint(0, sf::Vector2f(0, SY));
        DownShape.setPoint(1, sf::Vector2f(-10, SY + 10));
        DownShape.setPoint(2, sf::Vector2f(SX + 10, SY + 10));
        DownShape.setPoint(3, sf::Vector2f(SX, SY));
        DownShape.setTexture(&Degrade_Blanc_Haut);
        App.draw(LeftShape);
        App.draw(RightShape);
        App.draw(UpShape);
        App.draw(DownShape);
}
int main(int argc, char *argv[])
{
    sf::RenderWindow App(sf::VideoMode(1024, 768, 32), "Test sf::ConvexShape");
    sf::Image White_Haut, White_Bas, White_Droite, White_Gauche;
    int W(255);
    White_Haut.create(255, 255, sf::Color(0, 0, 0));
    for(unsigned int Y(0); Y < 255; ++Y)
    {
        for(unsigned int X(0); X < 255; ++X)
        {
            White_Haut.setPixel(X, Y, sf::Color(W, W, W, W));
        }
        --W;
    }
    Degrade_Blanc_Haut.create(255, 255);
    Degrade_Blanc_Haut.update(White_Haut);
    White_Bas.create(255, 255, sf::Color(0, 0, 0));
    for(unsigned int Y(0); Y < 255; ++Y)
    {
        for(unsigned int X(0); X < 255; ++X)
        {
            White_Bas.setPixel(X, Y, sf::Color(Y, Y, Y, Y));
        }
    }
    Degrade_Blanc_Bas.create(255, 255);
    Degrade_Blanc_Bas.update(White_Bas);
    White_Droite.create(255, 255, sf::Color(0, 0, 0));
    for(unsigned int X(0); X < 255; ++X)
    {
        for(unsigned int Y(0); Y < 255; ++Y)
        {
            White_Droite.setPixel(X, Y, sf::Color(X, X, X, X));
        }
    }
    Degrade_Blanc_Droite.create(255, 255);
    Degrade_Blanc_Droite.update(White_Droite);
    White_Gauche.create(255, 255, sf::Color(0, 0, 0));
    W = 255;
    for(unsigned int X(0); X < 255; ++X)
    {
        for(unsigned int Y(0); Y < 255; ++Y)
        {
            White_Gauche.setPixel(X, Y, sf::Color(W, W, W, W));
        }
        --W;
    }
    Degrade_Blanc_Gauche.create(255, 255);
    Degrade_Blanc_Gauche.update(White_Gauche);
    App.setFramerateLimit(60);
    while(App.isOpen())
    {
        App.clear(sf::Color(0, 0, 0));
        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Escape))
        {
            App.close();
        }
        displaySurBrillance(sf::Vector2f(200, 300), sf::Vector2f(200, 60), App);
        App.display();
    }
    return 0;
}
 
Alors, a ma plus grande surprise: Sur la carte ATI ça fonctionne très bien, et je n'ai pas d'erreur de segmentation a la fin du programme... :o
Le problème que j'ai maintenant c'est que ce même code fait des rendus horribles dans mon jeu.
Et malgré que le code minimal fonctionne, y a quand même un problème quelque part qu'il serait bon de corriger :)
J'ai ré-essayé un jeu SFML1.6 sur les drivers ATI actuels, et je n'ai pas de bug non plus (pour ce jeu en tout cas).
J'ai ré-essayé mon jeu complet en SFML2.0 RC, et le codé présenté ci-dessus fait des affichages horribles avec l'erreur de segmentation présentée dans le premier post... (et ce n'est pas tout, tout le jeu est affiché comme je l'ai déjà montré..)

Y a t-il un lien possible entre le bug graphique et le fait que mes jeux sont des interfaces Qt dans lequel tournent le rendu de la SFML?


→ J'ai repris quasiment tel quel que QSFMLCanva pour la SFML 2.0, j'ai juste modifié les fonctions qui n'existaient plus pour la SFML, et rajouté des namespaces là où les fonctions Qt et SFML ont le même nom.
(Oui, en fait, il faut savoir que le passage des majuscules au minuscules pour les fonctions engendre les problèmes au niveau des noms, Qt a déjà des fonctions qui portent un certain nom, et la SFML a des fonctions qui portent des fois le même nom a cause du changement de majuscule en minuscule)
N'y aurait-il pas une fonction a rajouter, où un paramètre a changer pour la compatibilité SFML 2.0 / Qt?
Ce que je ne comprends pas, c'est que des fois ça marche très bien et des fois ça bug au possible, et des fois pour le même sf::ConvexShape il suffit de changer un peu la taille et il passe de "imbuvable" a normal et inversement: C'est le cas des barres de vies, quand elle est presque pleine, dans certains cas (1 fois sur 10) elle fonctionne et pareil si elle est presque vide, mais entre les 2 elle bug :o
Merci :)

PS: Et je ne vois vraiment pas ce qui peut clocher dans le code source étant donné que sur la carte Nvidia tout fonctionne correctement...


EDIT: Je fais des tests sur un code minimal qui propose 2 options:
Soit un rendu simple, soit un rendu dans Qt.
Pour l'instant j'ai la même chose sur les rendu Qt et simples, et sur les 2 cartes graphiques.
Je remarque bien le bug des carrés autour du texte dès que celui-ci grossi un peu.
Je cherche la combinaison qui permet de faire le bug sur un sf::ConvexShape....

EDIT2: Ayant la même chose, j'ai tenté de sauver les textures générées pour les sf::ConvexShape (au cas où le bug vienne de là..), j'ai donc convertit la texture en sf::Image a sa création et l'ai sauvé.
J'en ai sauvé une quinzaine comme ça, sur Nvidia et ATI.
Euh, je ne pense pas que ça vienne de ce fait, mais j'ai pu jouer normalement au jeu sur mon PC portable.
J'ai quand même eut des bugs de texte (les carrés autours des lettres) plus importants que sur ma carte Nvidia mais c'était correct.
J'ai relancé plusieurs fois, pas de bug.
ça a l'air d'être un phénomène assez passager. (mais bien présent, et bien fréquent, et ça ne touche pas que mon PC, mais aussi quelques autres PC avec une carte ATI sur lesquels j'ai lancé le jeu, tous les autres avec une carte Nvidia n'ont aucuns problèmes...)
D'autant plus que le jeu fait toujours une erreur de segmentation quand il quitte sur la carte ATI... (et vous pouvez regarder au dessus, ça plante en plein dans les pilotes graphiques..)
« Modifié: Octobre 30, 2012, 03:02:44 am par Crone123 »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML 2.0 RC][Linux] Problème d'affichage sur carte ATI
« Réponse #8 le: Octobre 30, 2012, 08:15:47 am »
Citer
Bon, alors j'ai repris le code source de mon jeu, je l'ai juste adapté pour qu'il soit minimal:
Je ne suis pas sûr qu'on ait besoin de 5 fois le même code dupliqué pour reproduire ce problème. Si ce sont les ConvexShape qui buggent, fais juste un main() avec un ConvexShape. Le concept du code minimal c'est que ce soit une version minimale du problème, pas de ton jeu ;)

Citer
Alors, a ma plus grande surprise: Sur la carte ATI ça fonctionne très bien, et je n'ai pas d'erreur de segmentation a la fin du programme...
Maintenant tu comprends pourquoi je demande systématiquement un code complet minimal...

Citer
Je remarque bien le bug des carrés autour du texte dès que celui-ci grossi un peu.
C'est corrigé dans les dernières sources ;)

Bon, sinon je te laisse bidouiller le code minimal jusqu'à ce que tu tombes sur ce qui fait bugger. Bon courage :P
Laurent Gomila - SFML developer

Crone123

  • Full Member
  • ***
  • Messages: 141
    • Voir le profil
Re : [SFML 2.0 RC][Linux] Problème d'affichage sur carte ATI
« Réponse #9 le: Octobre 30, 2012, 12:32:26 pm »
Sur mon ordi des fois ça marche, j'ai essayé sur l'ordi de mon frère, sur lequel ça a l'air de marcher aussi.
C'est bizzare, mais j'ai encore quelques sf:ConvexShape qui buggent...
Au passage, je voulais préciser que le code de retour du programme après son erreur de segmentation lorsqu'il quitte et sur un PC avec une carte ATI est: 35584
Segmentation Fault (core dumped), pour préciser l'erreur dont j'ai passé le débogage dans le premier post...

Je vais chercher avec le code minimal.
Je me demande si il n'y a pas une possibilité que ça soit du a des positions décimales qui pourraient par exemple des fois être mal interprétées par la carte.
Exemple:
1/3*100
Où des trucs du genre.
Je vais encore chercher pour voir :)

Crone123

  • Full Member
  • ***
  • Messages: 141
    • Voir le profil
Re : [SFML 2.0 RC][Linux] Problème d'affichage sur carte ATI
« Réponse #10 le: Novembre 01, 2012, 07:45:40 pm »
Bon, bah je ne sais pas pourquoi mais j'ai quasiment plus aucun bug sur les cartes ATI :o
Si j'en ai de nouveau ou si j'arrive a voir d'où ça viens je poste ici, mais sans rien changer a mon code maintenant ça marche la plupart du temps :o
Bug passager?
Je sais pas, vu que ça fait au moins 6 mois si pas plus que j'ai des bugs avec ça..donc pour l'instant va falloir que je cherche encore...

christophedlr

  • Full Member
  • ***
  • Messages: 153
    • Voir le profil
    • E-mail
Re : [SFML 2.0 RC][Linux] Problème d'affichage sur carte ATI
« Réponse #11 le: Novembre 06, 2012, 04:06:06 pm »
Si tu peux me donner une copie de test du programme, je peux tenter de voir sur le PC de ma mère (un portable avec carte ATI), histoire de voir si ça le fait aussi ou si ça fonctionne. Ca donnera d'autres informations pour voir d'où ça viens ;)

Crone123

  • Full Member
  • ***
  • Messages: 141
    • Voir le profil
Re : [SFML 2.0 RC][Linux] Problème d'affichage sur carte ATI
« Réponse #12 le: Novembre 06, 2012, 04:21:48 pm »
Il y a un code source de test ici:
http://fr.sfml-dev.org/forums/index.php?topic=9533.msg65077#msg65077
C'est le même que celui qui bug assez souvent dans le jeu, et je le répète: Il ne bug pas partout et pas a chaque fois, mais ne bug jamais sur les cartes Nvidia.
Pour la même fonction avec exactement les mêmes paramètres des fois ça va marcher, des fois ça va bugguer.
Et c'est comme ça pour tous les sf::ConvexShape que j'utilise.. a priori je ne fais rien de barbare dans ce code non?
(Sauf peut être les sf::Texture en global mais ça c'est pour le code de test...)
Merci :)

christophedlr

  • Full Member
  • ***
  • Messages: 153
    • Voir le profil
    • E-mail
Re : [SFML 2.0 RC][Linux] Problème d'affichage sur carte ATI
« Réponse #13 le: Novembre 06, 2012, 04:38:59 pm »
Merci pour le lien, je regarde dès que je suis rentré à la maison car là au boulot d'une part le serveur est une vrai merde d'autre part j'ai pas les outils de dev et bien entendu je ne peux rien tester (oui vive les formations avec du matos de merde).

Ce soir en rentrant, je regarde, je teste sur le PC de ma mère et je donnerais le résultat (comme c'est un PC ATI, avec de la chance ça fera le problème mdr).

Crone123

  • Full Member
  • ***
  • Messages: 141
    • Voir le profil
Re : [SFML 2.0 RC][Linux] Problème d'affichage sur carte ATI
« Réponse #14 le: Novembre 06, 2012, 07:11:35 pm »
OK Merci :)