Forum de la communauté SFML

Aide => Général => Discussion démarrée par: retro-bruno le Novembre 07, 2014, 10:59:37 am

Titre: sfRenderWindow & sfMouse_setPosition
Posté par: retro-bruno le Novembre 07, 2014, 10:59:37 am
Bonjour,

Sous windows, j'arrive à utiliser un handle de sfRenderWindow avec les commandes sfMouse_setPosition et sfMouse_getPosition, mais sous Archlinux sur Raspberry Pi, j'obtiens des warnings, et un segfault quand je lance l'executable.

Que dois-je faire, s.v.p ?

EDIT: Les warnings disent que je dois utiliser une sfWindow et non pas une sfRenderWindow.

Par contre, le segfault serait dû au fait que mon archlinux est mal configuré au niveau de Xorg. (Impossible d'ouvire un écran sfFullscreen en 800x600x32)
Titre: Re : sfRenderWindow & sfMouse_setPosition
Posté par: Laurent le Novembre 07, 2014, 01:43:50 pm
Plutôt qu'une description vague, ce serait bien d'avoir les messages d'erreur exacts, ainsi que le code correspondant ;)
Titre: Re : sfRenderWindow & sfMouse_setPosition
Posté par: retro-bruno le Novembre 07, 2014, 01:54:57 pm
Voici l'un des messages (similaires) :

Citer
In function 'setmouse' !
Warning : passing argument 2 of  'sfMouse_setPosition' from incompatible pointer type [Enable by default]
sfMouse_setPosition(xy,win);

La fonction setmouse qui provoque le warning :
void setmouse(int x,int y) {
    sfVector2i xy;
    xy.x = (unsigned int)x  + _OFFSET_X_;
    xy.y = (unsigned int)y + _OFFSET_Y_;
    sfMouse_setPosition(xy,win);
}

"win" est une fenêtre de rendu de type sfRenderWindow.

Et en ajoutant un code pour vérifier si la carte graphique gère le 800x600x32, le 800x600x24 ou au pire le 800x600x16, j'obtiens sur archlinux sur raspberry Pi l'erreur suivante avant le segfault :
"Failed to connect to the X server while trying to get the supported video modes".

EDIT: Je me répond en partie à moi même, apparemment, SFML ne fonctionne pas à partir de la console pure et dure. Par contre, si je lance mon programme depuis LXDE, il marche maintenant mais avec une lenteur extrême et des bugs bizarres : la fonction"toupper" semble ne même plus fonctionner.

EDIT2 : Les événements liés au son sont réactifs, mais pas ceux liés au graphisme.
Titre: Re : sfRenderWindow & sfMouse_setPosition
Posté par: Laurent le Novembre 07, 2014, 03:22:03 pm
Le C ne permet ni héritage ni surcharges, donc tu ne peux pas utiliser sfMouse_setPosition avec à la fois un sfWindow* et un sfRenderWindow*. En l'occurence elle fonctionne avec un sfWindow*, et il faut utiliser sfMouse_setPositionRenderWindow si tu as un sfRenderWindow*.
Titre: Re : sfRenderWindow & sfMouse_setPosition
Posté par: retro-bruno le Novembre 07, 2014, 04:37:49 pm
Merci beaucoup, cela résout mon problème de warnings.  :)

Sinon, pour le problème de lenteur extrême, je me demande si c'est le raspberry Pi qui est lent à ce point, ou le kernel d'archlinux qui n'est pas bon, ou autre chose.

Auriez-vous un conseil à me donner ? Puis-je downgrader mon kernel et à quels risques ?
Titre: Re : sfRenderWindow & sfMouse_setPosition
Posté par: Laurent le Novembre 07, 2014, 04:57:41 pm
Tu utilises quelle version de SFML ? Tu as quels drivers graphiques ? Est-ce que d'autres programmes OpenGL fonctionnent mieux ?
Titre: Re : sfRenderWindow & sfMouse_setPosition
Posté par: retro-bruno le Novembre 07, 2014, 05:20:30 pm
J'utilise CSFML 2.1.

Sous windows, mon interpreteur BASIC tourne à 28 FPS en affichant des images, des sprites et du texte.
Sous Ubuntu, sans l'accélétion graphique activée, la même démo tombe de 11 à 13 FPs.

Le problème est sous Raspberry Pi avec archlinux, qui me semble pourtant être la distribution la plus optimisée pour Pi.
C'est tellement lent que l'on ne peut afficher qu'un sprite de 8x16 pixels toutes les 2 secondes. Cela ne semble pas provenir des événements car si j'appuie sur une touche générant un son, c'est aussi réactif que sous windows.
Le problème est donc graphique.
J'ai assigné 256 mo de mémoire vive au GPU du Pi, sans succès.
L'application met environs 30 secondes à 1 minute à démarrer.

Mais le plus intriguant, c'est que sous archlinux, j'ai des bugs que je n'ai pas sous Windows ni Ubuntu, comme un problème avec "toupper" qui ne joue pas son rôle, et j'ai un autre problème d'affichage qui ne se fait même pas lentement.
Titre: Re : sfRenderWindow & sfMouse_setPosition
Posté par: Laurent le Novembre 07, 2014, 05:31:37 pm
Je répète la question : tu as installé quels drivers graphiques ?

Pour autant que je sache, le Raspberry Pi a une puce OpenGL ES, et OpenGL ES n'est pas géré dans SFML 2.1. Il semblerait donc que tu aies une émulation software d'OpenGL, ce qui expliquerait les performances désastreuses.

Si tu veux tester OpenGL ES, tu peux télécharger et compiler les dernières sources de SFML. Par contre il faudra fouiller un peu sur le forum et le wiki pour trouver les quelques trucs spécifiques à faire pour activer OpenGL ES lors de la compilation.
Titre: Re : sfRenderWindow & sfMouse_setPosition
Posté par: retro-bruno le Novembre 07, 2014, 05:51:32 pm
Merci de ton aide. Je crois que je vais renoncer à l'idée de travailler sur le Pi.