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 :

[SDL_ttf] plantage sur TTF_RenderText_Solid


Sujet :

SDL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 82
    Par défaut [SDL_ttf] plantage sur TTF_RenderText_Solid
    Bonjour, voila, je m'initie a la programmation avec SDL, et j'attaque l'affichage du texte, sauf que la je bloque complètement...
    voici mon code :
    Fenetre.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
    16
     
    ...
    void Fenetre::ecrireTexte(int x,int y,char* texte,Couleur coul){
        TTF_Font *font;
        SDL_Surface *message;
        font = TTF_OpenFont("arial.ttf", 20);
        SDL_Color textColor = { coul.rouge(), coul.vert(), coul.bleu() };
        message = TTF_RenderText_Solid( font,"test", textColor );
        SDL_Rect offset;
     
        offset.x = x;
        offset.y = y;
        SDL_BlitSurface(message, NULL, this->f, &offset );
        SDL_Flip(this->f);
    }
    ...
    a savoir que this->f est de type SDL_Surface* (c'est ma fenêtre)
    et que Couleur est une de mes classe qui dispose de 3 fonction rouge() vert() et bleu() qui retourne respectivement la valeur rouge vert et bleu de cette couleur (ces fonction retourne un int)
    main.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    int main(int argc, char** argv)
    {
      initVideo();
      Fenetre f("Bonjour toto");
      Couleur c(255,0,0);
     
      f.afficher();
      f.ecrireTexte(100,100,"Texte juste pour essayer",Couleur(125,150,125));
      attendreTouche();
      return EXIT_SUCCESS;
     
    }
    en sachant que mon initVideo fait référence a cet include :

    Graphisme.h
    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
    #ifndef _GRAPHIQUE
    #define _GRAPHIQUE
    #include <stdlib.h>
    #include <stdio.h>
    #include <iostream>
    #include <string>
    #include "SDL.h"
    #include "SDL_ttf.h"
    #include "Couleur.h"
     
    void initVideo();
    void attendreTouche(void);
     
     
    #endif
    Graphisme.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
    16
    17
    18
    19
    20
    21
    22
    23
    #include "Graphique.h"
    void initVideo(void)
    {
      if (SDL_Init(SDL_INIT_VIDEO) < 0) {
        fprintf(stderr, "Erreur à l'initialisation de la SDL : %s\n", SDL_GetError());
        exit(EXIT_FAILURE);
      }
      if (TTF_Init()==-1){
        fprintf(stderr, "Erreur à l'initialisation de la SDL_TTF", SDL_GetError());
        exit(EXIT_FAILURE);
      }
     
      atexit(SDL_Quit);
    }
     
    void attendreTouche(void)
    {
      SDL_Event event;
     
      do
        SDL_WaitEvent(&event);
      while (event.type != SDL_QUIT && event.type != SDL_KEYDOWN);
    }
    voila donc je sait que sa plante au niveau de l'appel de la fonction TTF_RenderText_Solid, mais j'ai cherché partout, sur google ya rien et sa me gave...

    les symptômes sont les suivants :
    la fenêtre de mon programme s'ouvre et se referme immédiatement,
    la console me retourne [cpp]Process terminated with status 3 (0 minutes, 5 seconds)[/cpp]
    donc voila je ne sait vraiment pas quoi faire, et la j'ai vrément besoin d'aide...

    merci d'avance
    @+
    fab

  2. #2
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 084
    Par défaut
    un return 3 et aucune verif de chargement.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 82
    Par défaut
    En modifiant mon Fenetre.cpp de cette façon
    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
    16
    void Fenetre::ecrireTexte(int x,int y,char* texte,Couleur coul){
        TTF_Font *font;
        SDL_Surface *message;
        font = TTF_OpenFont("arial.ttf", 20);
        SDL_Color textColor = { coul.rouge(), coul.vert(), coul.bleu() };
        message = TTF_RenderText_Solid( font,"test", textColor );
        if (!message)
            fprintf(stderr,"impossible d'appliquer la fonction TTF");
        SDL_Rect offset;
     
    	offset.x = x;
    	offset.y = y;
    	SDL_BlitSurface(message, NULL, this->f, &offset );
        SDL_Flip(this->f);
        TTF_CloseFont( font );
    }
    mon programme plante toujours...
    au moins qu'il y est des vérif a faire ailleur je ne voi pas...

    la question est donc toujour la même : quel est le problème? qu'est ce que je dois faire?

    Un petit truc aussi : toutes les vérifications se font avec 'fprintf', sauf que je code avec code::block et mes fprintf ne s'affichent nulle part...
    ces erreurs sont censé apparaitre où?

    merci
    @++
    fab

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 82
    Par défaut
    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
    16
    17
    18
    19
    int Fenetre::ecrireTexte(int x,int y,char* texte,Couleur coul){
        TTF_Font *font;
        SDL_Surface *message=NULL;
        font = TTF_OpenFont("arial.ttf", 20);
        SDL_Color textColor = { coul.rouge(), coul.vert(), coul.bleu() };
        if (!font)
            return 5;
        message = TTF_RenderText_Solid( font,"test", textColor );
        if (!message)
            fprintf(stderr,"impossible d'appliquer la fonction TTF");
        SDL_Rect offset;
     
    	offset.x = x;
    	offset.y = y;
    	SDL_BlitSurface(message, NULL, this->f, &offset );
        SDL_Flip(this->f);
        TTF_CloseFont( font );
        return 0;
    }
    ce test la m'a permis de voir que le problème viens en fait de OpenFont...
    mais comment le résoudre?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 82
    Par défaut
    Problème résolut...

    je suis juste un abruti de base :
    je charger ma police en pensant que mon programme irait cherché tt seul la police dans les dossier système, en fait je n'avait pas copier la police dans le répertoire de mon application

    merci pour la réponse...
    fab

  6. #6
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 084
    Par défaut
    T'es un rapide toi. Trois réponse en moins d'une heure ?

    Bref, oui, les verifications doivent se faire en priorité sur les OpenFont & Cie.
    Pour les fprintf, printf, ils sont redirigé dans stdout et stderr.
    Si rien n'est écrit dedans, alors ces fichiers sont supprimé a la fin.

    De plus, comme je l'ai ecrit sur plus de la moitié de ma bio, ils faut afficher la cause du plantage. Car bon, savoir que OpenFont plante c'est cool, mais savoir pourquoi, c'est encore plus utile.

    Utilise la fonction d'erreur qui doit ressembler a TTF_GetError.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MFC] Plantage sur LoadFrame
    Par thieum74 dans le forum MFC
    Réponses: 11
    Dernier message: 06/09/2007, 13h15
  2. Plantage sur boutton.enabled
    Par ip203 dans le forum IHM
    Réponses: 2
    Dernier message: 15/06/2006, 15h04
  3. [firefox] plantage sur une url
    Par ggnore dans le forum Firefox
    Réponses: 2
    Dernier message: 12/05/2005, 22h06
  4. [DB2]Plantage sur COMMIT
    Par Dundee dans le forum DB2
    Réponses: 1
    Dernier message: 24/11/2004, 11h05
  5. [LG]plantage sur une commande basique !
    Par Jeff on the web dans le forum Langage
    Réponses: 5
    Dernier message: 13/01/2004, 19h07

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