IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SDL Discussion :

[Linux][SDL/SDL2] Programmation C


Sujet :

SDL

  1. #1
    Membre averti

    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2012
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2012
    Messages : 313
    Points : 354
    Points
    354
    Par défaut [Linux][SDL/SDL2] Programmation C
    Je suis en train d'apprendre à un de mes étudiants (et d'ailleurs il y en a deux autres intéressés) à faire une application graphique en utilisant SDL2.
    Le soucis c'est que la distribution (opensuse 12.2) n'intègre pas SDL2 dans les dépôts officiels.

    Qu'à cela ne tienne, j'ai installé la librairie SDL2 sur son système.
    J'ai vérifié que les librairies dynamiques étaient disponibles (ldconfig -v | grep SDL) et j'ai compilé les exemples de cours pour vérifier si cela fonctionnait, aucun soucis à la compilation.

    Dans le code source, à un moment je charge une image avec IMG_Load (la librairie est installée, le code se compile sans problème).
    Le soucis c'est qu'à l'exécution nous obtenons une erreur "Unknown image format" pour une image .jpg.
    Nous avons utilisé un logiciel pour "convertir" le format .jpg en .png, changé l'extension du fichier dans le code source, recompilé et relancé l'application: même résultat.

    Nous avons vérifié si libpng était installé, il l'était mais c'est la version libpng12 sur opensuse 12.2.
    J'ai une distribution 12.2 chez moi et SDL1 fonctionne avec la librairie SDL_image.

    Le soucis c'est qu'apparemment la librairie SDL2 ne fonctionne pas bien sur opensuse12.2 pourtant toutes les librairies SDL2_gfx, SDL2_net, SDL2_ttf, SDL2_mixer, etc... ont été installées sur le système.
    Sur une autre machine, cette fois en opensuse 13.2, avec à la fois SDL1 et SDL2, le code source fonctionne parfaitement.

    Code source: http://paste.opensuse.org/73089941

    Dans le code source sur l'ordinateur de l'élève, nous avons fait un branchement conditionnel pour savoir si le pointeur était valide ou non et s'il était invalide nous utilisons SDL_GetError() (renvoie la même chose que IMG_GetError()) pour en connaître la raison.

    Auriez-vous une idée de ce qui peut bien provoquer le fait que l'image ne peut pas être chargée par IMG_Load ???
    Je pense qu'au niveau des librairies nous sommes bons mais j'ai uniquement un doute par rapport à opengl qui sur la version opensuse 12.2 est pris en charge par un MESA.
    Sur ma distribution 12.2, opengl est pris en charge par le même type de pilote (MESA 8.0.4)

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    OpenGL n'est pas lié au chargement des images. OpenGL n'est que pour le rendu, pur et dur. Donc, non, ce ne sera pas un souci d'OpenGL.
    Ce qui est étonnant, c'est que cela ne fonctionne pas non plus avec les PNG. Sinon, j'aurais pensé à la dépendance libjpeg.

    Je n'ai pas vu de IMG_Init() dans le code ? C'est IMG_Init() qui permet d'initialiser la bibliothèque et notamment les modules supportent JPEG et PNG.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre averti

    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2012
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2012
    Messages : 313
    Points : 354
    Points
    354
    Par défaut
    Oui, c'était une piste mais c'en était une fausse :{
    Je ne sais pas du tout quoi penser et que faire.

    IMG_Init(), autant sous SDL1 qu'en SDL2 je ne l'ai jamais utilisé, pourtant "ça marche chez moi". Je l'avais essayée sans résultat.
    J'ai essayer sur deux machines dont la version de Linux n'incluait pas SDL2, ça ne marche pas.
    Je suis en train de me demander si SDL2 peut fonctionner sur un noyau Linux de type "3.4" (les deux machines tournent avec un noyau 3.4).

    J'ai été chercher les sources de SDL2, SDL2_image, SDL2_ttf et SDL2_gfx, je les ai compilées sur toutes les deux machines Linux, aucun problème à la compilation, les liens sont établis (ldconfig...) et pourtant l'image ne s'affiche pas.
    Sur une machine j'ai même un message d'erreur du pilote nvidia, c'est pour cela que je pensais que c'était lié à opengl...

    J'ai essayé un programme écrit en SDL1 pensant que SDL2 était la seule librairie incriminée mais là aussi: pas d'image (avec ou sans IMG_Init(IMG_INIT_JPG|IMG_INIT_PNG)).
    Même erreur... "unknown image format"... la même image s'affiche parfaitement sur trois autres ordinateurs, l'un en 12.2 (noyau 3.4 -- SDL1) et l'autre en 13.2 (noyau 3.16 -- SDL2) et sur LEAP (noyau 4.1 -- SDL2) ça marche aussi.

    Il semble que si SDL2 n'est pas disponible dans les paquets d'origine de la distribution, si on l'installe à la place ou à côté de SDL1, ça ne marche pas.

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Donc, c'est l'image qui est fausse (pour une raison ou une autre) ? Pourtant, lorsque j'avais lu votre message, vous aviez écarté cette piste. Ou alors, les bibliothèques libpng et libjpeg ne sont pas correctement reliées. IMG_Init() avec des drapeaux (pour spécifier ce qu'il faut charger) devrait pouvoir vous l'indiquer.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre averti

    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2012
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2012
    Messages : 313
    Points : 354
    Points
    354
    Par défaut
    C'est à devenir fou, apparemment ça ne marche que sur les distributions 13.2 (opensuse)... l'image est la même pour tous les essais,
    nous avons essayé sur toutes les distributions 12.2 du laboratoire, après l'installation de la librairie SDL2 il y a aucun élève qui a su
    afficher l'image avec le même code source qui fonctionne parfaitement sur toutes les distributions 13.2 et LEAP.
    J'ai conclus que si SDL2 n'est pas renseigné dans les dépôts officiels il n'y a aucune chance que cela fonctionne.

    SDL2 est intéressant pour pouvoir gérer les rectangles avec bords arrondis, avec SDL1 et la librairie SDL_draw-1.2.13, celle-ci plante dès qu'on manipule des images en 24bits de profondeur :{

    J'ai contacté les gens du projet SDL/SDL2... toujours pas de réponse pareil pour les copains du monde opensuse.

    Bon, de toutes l'année est finie, à la rentrée je passe toutes les machines récentes en opensuse 13.2...

    Merci.

Discussions similaires

  1. rexec sous linux. Execution de programme à distance
    Par Jonathan.b dans le forum Administration système
    Réponses: 7
    Dernier message: 29/09/2007, 23h12
  2. [LINUX] compiler des programmes linux sous Mac
    Par julien.63 dans le forum Apple
    Réponses: 6
    Dernier message: 29/05/2007, 18h59
  3. [SOURCE] [SDL] Comment programmer une rotation
    Par millie dans le forum Contribuez
    Réponses: 19
    Dernier message: 29/08/2006, 00h59
  4. Réponses: 5
    Dernier message: 06/04/2006, 16h37
  5. Réponses: 2
    Dernier message: 24/06/2003, 20h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo