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 :

Problème à l'affichage quand j'utilise SDL


Sujet :

SDL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 22
    Points : 8
    Points
    8
    Par défaut Problème à l'affichage quand j'utilise SDL
    Bonjour,

    J'ai un problème qui me semble très bizarre avec la librairie SDL.
    Je l'ai bien installé et créer dans des exemples simples et cela marche correctement.
    Par contre, quand j'ai besoin à l'intérieur de mon projet d'utiliser la librairie SDL à la fois dans le fichier .cpp et .h (notamment parce que j'ai un constructeur qui prend en paramètre une image SDL), je ne peux plus rien afficher dans la console.
    Plus précisément, j'ai dans mon projet différents printf pour afficher certaines valeurs dans ma console au cours de la simulation. Cela marche très bien même quand j'utilise SDL dans un seul fichier. Par contre, dès que j'ai besoin de SDL dans le .cpp et le .h et donc que j'ajoute dans les 2 le #include <SDL/SDL.h>, plus rien ne s'affiche dans la console. Et pourtant je ne vois pas en quoi ce serait lié. Et j'ai bien testé, juste l'ajout du #include <SDL/SDL.h> dans un fichier.h va empêcher l'affichage.

    Je vous remercie par avance pour votre aide car cela me pose un très gros problème.

    Cordialement,

    Vincent

  2. #2
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par vincechaff10
    Bonjour,

    J'ai un problème qui me semble très bizarre avec la librairie SDL.
    Je l'ai bien installé et créer dans des exemples simples et cela marche correctement.
    Par contre, quand j'ai besoin à l'intérieur de mon projet d'utiliser la librairie SDL à la fois dans le fichier .cpp et .h (notamment parce que j'ai un constructeur qui prend en paramètre une image SDL), je ne peux plus rien afficher dans la console.
    Plus précisément, j'ai dans mon projet différents printf pour afficher certaines valeurs dans ma console au cours de la simulation. Cela marche très bien même quand j'utilise SDL dans un seul fichier. Par contre, dès que j'ai besoin de SDL dans le .cpp et le .h et donc que j'ajoute dans les 2 le #include <SDL/SDL.h>, plus rien ne s'affiche dans la console. Et pourtant je ne vois pas en quoi ce serait lié. Et j'ai bien testé, juste l'ajout du #include <SDL/SDL.h> dans un fichier.h va empêcher l'affichage.

    Je vous remercie par avance pour votre aide car cela me pose un très gros problème.

    Cordialement,

    Vincent
    Déjà du code dans un .h ? Bien que accepté, c'est une habitude à perdre... Ensuite, un include <SDL/SDL.h> dans un .cpp ? cela devrait se trouver dans le .h ...

    Au final, il faudrait un seul include<SDL/SDL.h> dans un Define.h par exemple...

    Mais je ne pense pas que ce soit la base du problème. Un souci serait que tu aies des appels SDL avant l'appel SDL_init, est-ce possible dans ton code?

    Et au final, un code minimal, compilable qui montre le problème serait plus simple pour faire un diagnostic...

    Et dernières remarques :
    - on dit bibliothèque et pas librairie
    - tu utilises quel Système d'exploitation, ce serait bien de le spécifier...

    Jc

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 22
    Points : 8
    Points
    8
    Par défaut
    Désolé pour le post précédent je l'ai envoyé avant de le finir.
    Donc dans le .h, j'ai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #include <SDL/SDL.h>
     
    class Field{
    public:
    Field(SDL_Surface *image);
    //Field();
    ~Field(void);
     
     
    //float gethauteur(int i, int j);
     
    //Uint32 getPixel(SDL_Surface *surface, int x, int y);
     
    SDL_Surface *image;
    };
    et dans le .cpp:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #include <stdio.h>
    #include "Field.h"
    #include <GL/glut.h>
    #include <GL/glut.h>
    #include <SDL/SDL.h>
     
    Field::Field(SDL_Surface *image) {
    this->image=image;
    }
     
    /*Field::Field() {
    }*/
     
    Field::~Field(void) {
    }
    Le problème étant que je suis obligé de mettre le #include <SDL/SDL.h> dans les 2, sinon cela ne passe pas à la compilation (il ne reconnait pas le SDL_Surface).
    Sinon, je n'ai pas utilisé de SDL_Init car je ne me sers pas de SDL pour l'affichage, je m'en sers juste pour utiliser une image (qui me servira à déterminer la hauteur d'un terrain).
    Je l'utilise donc de la manière suivante dans ma fonction principale:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SDL_Surface *image, *screen, *firstscreen;
    image = SDL_LoadBMP("b2test2.bmp");
    //printf("%d",image->w);
    field = new Field(image);
    J'espère que ca précise mon problème et que ça vous donne une meilleure idée de comment le résoudre.

    Encore merci,

    Vincent

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 22
    Points : 8
    Points
    8
    Par défaut
    Autre précision à laquelle j'ai oublié de répondre, je travaille sous Windows avec DevC++.
    En fait, je viens de remarquer que c'est le même problème rien que pour la définition de mes variables, c'est à dire que si dans le fichier principal.cpp,

    je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #include <SDL/SDL.h>
    SDL_Surface *image, *screen, *firstscreen;
    image = SDL_LoadBMP("b2test2.bmp");
    printf("%d",image->w);
    et rien dans le fichier .h, cela marche.

    Par contre, si je mets dans le .h,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #include <SDL/SDL.h>
    SDL_Surface *image, *screen, *firstscreen;
    et dans le .cpp
    image = SDL_LoadBMP("b2test2.bmp");
    printf("%d",image->w);
    le programme marche bien mais je n'ai plus rien à l'affichage dans ma console.

    Merci,

    Vincent

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Le code que tu nous montres se trouve dans quelle fonction ? Quand est-elle appelée ?

    Sinon, tu peux virer l'inclusion de SDL.h dans ton en-tête en plaçant une déclaration anticipée de la structure SDL_Surface.

    Je soupçonne une fonction appelée avant le main et qui serait exécutée avant la redirection de la sortie standard par SDL.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 22
    Points : 8
    Points
    8
    Par défaut
    En fait dans mon projet, j'ai une fonction main qui fait appelle au constructeur Window.
    Dans le contructeur Window et donc dans Window.cpp, j'ai:
    SDL_Surface *image, *screen, *firstscreen;
    image = SDL_LoadBMP("relief.bmp");
    field = new Field(image);

    et j'ai mis le include SDL dans Window.cpp.

    Ensuite, mes 2 fichiers Field.cpp et .h sont comme indiqués ci-dessus.

    Je vois pas comme tu le dis dans ta réponse comment placer la déclaration anticipée.

    Merci encore,

    Vincent

  7. #7
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Bizarre... Est-ce que tu as un fichier stdout.txt qui se crée dans le répertoire de ton application ?

    Je vois pas comme tu le dis dans ta réponse comment placer la déclaration anticipée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // A la place de l'inclusion
    struct SDL_Surface;
    Et merci de penser à

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 22
    Points : 8
    Points
    8
    Par défaut
    Oui, il contient les valeurs suivantes:
    120032
    32
    32
    32
    32
    32
    32
    32
    32
    32
    32
    32
    32
    32

    J'ai aussi un fichier stderr.txt mais celui-ci est vide.

  9. #9
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    - Pourrait-on avoir le code de tout le .cpp et tout le .h qui posent problèmes...

    - De toute facon, il faut savoir que la bibliothèque SDL peut arrêter d'afficher la sortie vers ces fichiers sous Windows, cherche dans ce forum, tu trouveras quelques discussions à ce propos...

    - Donc tu risques d'avoir des problèmes... Le plus "simple" serait de gérer une sorte de log graphique directement avec SDL_ttf par exemple... Cela t'éviterais des problèmes...

    - Au pire, la sortie se trouve dans ces fichiers, en as-tu besoin pendant l'exécution ?

    Jc

Discussions similaires

  1. [CakePHP] Problème sous Cakephp quand j'utilise Facebook Share
    Par freezlike dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 21/10/2014, 15h40
  2. Problème d'affichage quand champ NULL
    Par audrey1912 dans le forum Langage SQL
    Réponses: 8
    Dernier message: 19/05/2011, 12h15
  3. Problème d'affichage quand champ NULL
    Par audrey1912 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 19/05/2011, 08h31
  4. Réponses: 18
    Dernier message: 19/05/2010, 11h24
  5. Réponses: 2
    Dernier message: 23/03/2009, 18h19

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