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

Auteur Sujet: [SFML 2] impossible de rendre 2 fenetres (linux mesa gallium r600) [Contourné]  (Lu 9601 fois)

0 Membres et 1 Invité sur ce sujet

lefta

  • Newbie
  • *
  • Messages: 18
    • Voir le profil
Re : [SFML 2] impossible de rendre 2 canvas dans wxWidgets (linux)
« Réponse #15 le: Mai 28, 2012, 05:52:08 pm »
Etrange tu dis? Alors écoute (euh... lis  ;D ) :
En chargeant deux fois la texture en mémoire ça peut fonctionner, à condition de :
- ouvrir la première fenêtre
- charger l'image liée
- ouvrir la deuxième fenêtre
- charger l'image de la deuxième fenêtre

En effet, si je charge les deux fenêtres puis les deux images, j'obtiens le même bug qu'au début, l'image ne s'affiche pas dans la première fenêtre créée.  :o

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML 2] impossible de rendre 2 canvas dans wxWidgets (linux)
« Réponse #16 le: Mai 28, 2012, 06:43:03 pm »
C'est pas normal. Tu n'as pas de message dans la console ?
Laurent Gomila - SFML developer

lefta

  • Newbie
  • *
  • Messages: 18
    • Voir le profil
Re : [SFML 2] impossible de rendre 2 canvas dans wxWidgets (linux)
« Réponse #17 le: Mai 28, 2012, 09:26:30 pm »
Non, le seul message que j'obtenais est celui que j'ai déja décrit. En plus, j'ai modifié le kernel pour désactiver la vérification entraînant l'erreur, des fois qu'il s'agisse d'un faux positif.
Tu as une idée? Peut-être le driver attribue-t-il l'image à la dernière fenêtre créée, ou un truc du style? C'est juste une idée, je ne suis pas dev de librairies et encore moins de drivers, et je ne sais pas exactement comment ça se passe en interne :)

EDIT :
Un bout de code qui va plus ou moin dans mon sens :
#include <SFML/Graphics.hpp>
#include <SFML/System.hpp>

int main()
{
    sf::RenderWindow App(sf::VideoMode(800, 600), "SFML window");

    sf::Texture texture;
    if (!texture.loadFromFile("cb.bmp"))
        return EXIT_FAILURE;
    sf::Sprite sprite(texture);

    sf::RenderWindow Bug(sf::VideoMode(800, 600), "SFML bugging window", sf::Style::Default, sf::ContextSettings(32));

    sf::Texture texture2;
    if (!texture2.loadFromFile("blender.png"))
        return 1;
    sf::Sprite sprite2(texture2);

    while (App.isOpen()||Bug.isOpen())
    {
        sf::Event event2;
        sf::Event event;
        while (App.pollEvent(event))
        {
            if(event.type == sf::Event::Closed)
            {
                App.close();
            }
        }

        while (Bug.pollEvent(event2))
        {
            if(event2.type == sf::Event::Closed)
            {
                Bug.close();
            }
        }

        Bug.clear();
        App.clear();

        Bug.draw(sprite);
        App.draw(sprite);

        Bug.display();
        App.display();
    }
    return EXIT_SUCCESS;
}
 

Avec ce code, App affiche l'image ce Code::Blocks, mais Bug affiche l'image de blender, rayée horizontalement un pixel sur deux, à la bonne taille mais uniquement dans le carré réservé à l'image de Code::Blocks.
Euh... hésite pas à demander un screenshot  ;D

De plus, si je charge cb.bmp dans texture2, j'obtiens le bon rendu  :o
« Modifié: Mai 28, 2012, 10:09:31 pm par lefta »

lefta

  • Newbie
  • *
  • Messages: 18
    • Voir le profil
Re : [SFML 2] impossible de rendre 2 canvas dans wxWidgets (linux)
« Réponse #18 le: Juin 05, 2012, 08:57:22 pm »
Du neuf : j'obtiens le même bug en affichant en direction d'un pointeur, avec une seule fenêtre :

Game::Game() : fenetreDeRendu(sf::VideoMode(800,600),"Version debug de la légende éternelle")
...

void Game::inGame()
{
...
testMap.creerRendu(this);
...
}

void Game::afficherSprite(sf::Sprite& sprite)
{
    fenetreDeRendu.draw(sprite);
}

void Map::creerRendu(Game* parent)
{
...
parent->afficherSprite(fichiersDeTiles[nbTileset]);  //fichierDeTiles est un sf::Sprite
...
}

Comment gères-tu le multi-fenêtrage? (Je ne pense pas que ça me serve directement  ;D)
Est-ce lié? (sûrement)
Cela peut-il t'aider à cerner le problème?

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML 2] impossible de rendre 2 canvas dans wxWidgets (linux)
« Réponse #19 le: Juin 05, 2012, 10:54:53 pm »
J'ai pas compris ton dernier exemple, tu peux expliquer plus en détail ?

En ce qui concerne la gestion du multi-fenêtrage, je ne fais rien de spécial. Il n'y a rien à faire pour que ça marche.
Laurent Gomila - SFML developer

lefta

  • Newbie
  • *
  • Messages: 18
    • Voir le profil
Re : [SFML 2] impossible de rendre 2 canvas dans wxWidgets (linux)
« Réponse #20 le: Juin 06, 2012, 02:03:19 pm »
Je crée une fenêtre de rendu dans le constructeur de la classe Game. A l'intérieur du jeu, j'appelle ma classe Map pour créer le rendu du jeu, en lui passant en paramètre le pointeur this. Ma carte calcule le rendu et appelle Game::afficherSprite() pour afficher le sprite, via le pointeur this. Ma classe Game execute donc fenêtreDeRendu.draw(sprite) pour afficher le sprite à l'écran.

Avant, mon instance de Game était une variable globale, pour tester, et afficherSprite était appelé directement grace à cette variable (jeu.afficherSprite). Le rendu s'affichait correctement. Maintenant, avec l'appel via le pointeur, j'obtiens le même bug qu'avec deux fenêtres.
De plus, j'obtiens le même message que précédemment : texture bo too small.

PS : L'exemple des shaders me crée ce bug (j'ai pas vérifié le message d'erreur) : la coccinelle s'affiche et se pixelise correctement, mais la barre en bas ne s'affiche pas correctement.

En espérant avoir été plus clair  :)

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML 2] impossible de rendre 2 canvas dans wxWidgets (linux)
« Réponse #21 le: Juin 06, 2012, 02:14:19 pm »
Serait-il possible que tu aies un problème de driver ?
Laurent Gomila - SFML developer

lefta

  • Newbie
  • *
  • Messages: 18
    • Voir le profil
Re : [SFML 2] impossible de rendre 2 canvas dans wxWidgets (linux)
« Réponse #22 le: Juin 06, 2012, 08:04:58 pm »
J'ai déja évoqué cette possibilité dans mon premier post. Depuis le début j'ai l'intuition que le driver est en cause, mais encore une fois, je n'ai pas les connaissances pour l'affirmer. Surtout que seules les cartes ATI chipset r600 config 64 bits semblent être touchées (cf lien du premier post).

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML 2] impossible de rendre 2 canvas dans wxWidgets (linux)
« Réponse #23 le: Juin 06, 2012, 08:13:35 pm »
As-tu essayé d'autres jeux ou applications OpenGL ?
Laurent Gomila - SFML developer

lefta

  • Newbie
  • *
  • Messages: 18
    • Voir le profil
Re : [SFML 2] impossible de rendre 2 canvas dans wxWidgets (linux)
« Réponse #24 le: Juin 06, 2012, 08:57:46 pm »
Du style?
Je n'utilise que très peu de jeux sur mon pc, seulement Minecraft. Niveau applications, j'ai Gimp, LibreOffice Draw, et des applications "banales" (firefox, ...). Aucune forme de bug remarquée sur l'ensemble de mon système.

En vrac :
Config Gentoo x86_64
ATI Mobility radeon HD 4570
drivers radeon libres
mesa 8.0.2 drivers gallium
kernel 3.4.

Je ne vois pas quoi dire de plus, a part que j'ai été touché par le bug de quadrillage : http://fr.sfml-dev.org/forums/index.php?topic=8131.0

Si tu veux autre chose, n'hésite pas à demander :)

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML 2] impossible de rendre 2 canvas dans wxWidgets (linux)
« Réponse #25 le: Juin 06, 2012, 09:03:17 pm »
Citer
Du style?
Je ne sais pas ;D

Tant pis. On va quand même dire que c'est un bug de driver :-X
Laurent Gomila - SFML developer

lefta

  • Newbie
  • *
  • Messages: 18
    • Voir le profil
Re : [SFML 2] impossible de rendre 2 canvas dans wxWidgets (linux)
« Réponse #26 le: Juin 07, 2012, 02:52:18 pm »
Testé avec les drivers proprio, ça fonctionne. Le problème vient bien des drivers... :(

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [SFML 2] impossible de rendre 2 canvas dans wxWidgets (linux)
« Réponse #27 le: Juin 07, 2012, 02:58:07 pm »
Comme souvent, malheureusement.
Laurent Gomila - SFML developer

lefta

  • Newbie
  • *
  • Messages: 18
    • Voir le profil
Contournement
« Réponse #28 le: Juin 10, 2012, 07:38:36 pm »
Le problème, c'est que les derniers drivers à supporter ma carte graphique seront ceux de juin, et que ça va me bloquer au serveur X version 1.11.x (version actuelle : 1.12.x) et noyau version 3.2.x (version actuelle : 3.4.x). Donc retour à la case départ  :(

Merci quand même Laurent  ;)

EDIT : Alors là je ne comprends plus rien  :o :
J'ai rajouté mon instance de jeu en variable globale, je l'ai incluse dans mon fichier map.cpp, mais j'ai oublié de modifier mon code pour accéder à mon jeu via la variable, j'utilise toujours le code que j'ai posté. Et pourtant ça marche!?!?

EDIT 2 : Au cas où quelqu'un tomberait sur ce topic en cherchant une solution, J'ai (enfin) trouvé un moyen viable de contourner ce bug. Il suffit de forcer le rendu software. (Je me demande pourquoi je n'y ai pas pensé avant)
Celà peut être accompli de deux façons différentes :

1 - À chaque lancement, fonctionnera même s'il ne s'agit pas de votre application :
Dans un terminal rajouter LIBGL_ALWAYS_SOFTWARE=1 avant de lancer l'application, exemple :
LIBGL_ALWAYS_SOFTWARE=1 chemin/vers/l'application arguments

2 - S'il s'agit de votre application, vous pouvez rajouter au début de votre main :
char forceSoftwareRender[] = "LIBGL_ALWAYS_SOFTWARE=1";
putenv(forceSoftwareRender);
« Modifié: Août 14, 2012, 05:19:38 pm par lefta »