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

OpenGL Discussion :

Afficher texte -> seg fault :( !


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de lXT95l
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 106
    Par défaut Afficher texte -> seg fault :( !
    Bonjour a tous,
    j'essais d'afficher du texte dans un programme ogl. Comme j'utilise la sdl je m'en sere pour créer une "image texte" comme ca :
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
     
     
     
    void CTexte::createTextureFromText()
     
    {
     
     
     
        SDL_Surface *texte_surface,*gl_surface,*gl_fliped_surface; 
     
        Uint32 rmask, gmask, bmask, amask;
     
        SDL_Color textColor = { 255, 255, 255 };
     
        texte_surface = TTF_RenderText_Solid(font,texte,textColor);
     
    	width = texte_surface->w;
     
        height = texte_surface->h;
     
     
     
    #if SDL_BYTEORDER == SDL_BIG_ENDIAN
     
     
     
        rmask = 0xff000000;
     
        gmask = 0x00ff0000;
     
        bmask = 0x0000ff00;
     
        amask = 0x000000ff;
     
    #else
     
     
     
        rmask = 0x000000ff;
     
        gmask = 0x0000ff00;
     
        bmask = 0x00ff0000;
     
        amask = 0xff000000;
     
    #endif
        SDL_Surface * good_text;
     
     
     
        good_text =  SDL_CreateRGBSurface(SDL_SWSURFACE, texte_surface->w,texte_surface->h, 32,
     
                                      rmask,gmask,bmask,amask);
     
        SDL_BlitSurface(texte_surface,NULL,good_text,NULL);
     
     
     
     
     
     
     
        SDL_PixelFormat format = *(good_text->format);
     
        format.BitsPerPixel = 32;
     
        format.BytesPerPixel = 4;
     
        format.Rmask = rmask;
     
        format.Gmask = gmask;
     
        format.Bmask = bmask;
     
        format.Amask = amask;
     
     
     
        gl_surface = SDL_ConvertSurface(good_text,&format,SDL_SWSURFACE);
     
     
     
        gl_fliped_surface = flipSurface(gl_surface);
     
     
     
        glBindTexture(GL_TEXTURE_2D,textureTexte);
     
     
     
        glTexImage2D(GL_TEXTURE_2D, 0, 4, gl_fliped_surface->w,
     
                         gl_fliped_surface->h, 0, GL_RGBA,GL_UNSIGNED_BYTE,
     
                         gl_fliped_surface->pixels);
     
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
     
        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
     
     
     
     
     
        SDL_FreeSurface(good_text);
     
        SDL_FreeSurface(gl_surface);
     
        SDL_FreeSurface(gl_fliped_surface);
     
        SDL_FreeSurface(texte_surface);
     
    }
    Le code marche, mais si je met un espace dans le texte sa m'affiche segmentation fault :/ !
    Merci de votre aide !

  2. #2
    Yno
    Yno est déconnecté
    Membre éprouvé Avatar de Yno
    Inscrit en
    Novembre 2005
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 138
    Par défaut
    Alors comme ça on prétend avoir résolu son problème ?

    Tiens, voilà la fonction que j'utilise:

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    GLuint loadString(const char *string, TTF_Font *font)
    {
    	GLuint glID = 0;
    	SDL_Color color = {255, 255, 255};
    	SDL_Surface * picture_surface = NULL;
    	SDL_Surface * gl_surface = NULL;
    	SDL_Surface * gl_fliped_surface = NULL;
    	Uint32 rmask, gmask, bmask, amask;
    	int i=0, pitch=0;
     
    	picture_surface = TTF_RenderText_Solid(font, string, color);
     
    	if(picture_surface == NULL) {
    		printf("%s\n", TTF_GetError());
    		TTF_CloseFont(font);
    		return (0);
    	}
     
     
    #if SDL_BYTEORDER == SDL_BIG_ENDIAN
     
    	rmask = 0xff000000;
    	gmask = 0x00ff0000;
    	bmask = 0x0000ff00;
    	amask = 0x000000ff;
    #else
     
    	rmask = 0x000000ff;
    	gmask = 0x0000ff00;
    	bmask = 0x00ff0000;
    	amask = 0xff000000;
    #endif
     
    	SDL_PixelFormat format = *(picture_surface->format);
     
    	format.BitsPerPixel = 32;
    	format.BytesPerPixel = 4;
    	format.Rmask = rmask;
    	format.Gmask = gmask;
    	format.Bmask = bmask;
    	format.Amask = amask;
     
    	gl_surface = SDL_ConvertSurface(picture_surface, &format, SDL_SWSURFACE);
     
    	gl_fliped_surface = SDL_CreateRGBSurface(SDL_SWSURFACE,
                                       gl_surface->w,gl_surface->h,
                                       gl_surface->format->BitsPerPixel,
                                       gl_surface->format->Rmask,
                                       gl_surface->format->Gmask,
                                       gl_surface->format->Bmask,
                                       gl_surface->format->Amask);
     
    	pitch = gl_surface->pitch;
     
    	SDL_LockSurface(gl_surface);
    	SDL_LockSurface(gl_fliped_surface);
     
    	/* On flip pour OpenGL :) */
    	for(i=0; i<gl_surface->h; i++)
    	{
    		memcpy(&((unsigned char* )gl_fliped_surface->pixels)[i*pitch],
    		       &((unsigned char* )gl_surface->pixels)[(gl_surface->h - 1 - i)*pitch],
    			pitch);
    	}
     
    	SDL_UnlockSurface(gl_fliped_surface);
    	SDL_UnlockSurface(gl_surface);
     
    	glGenTextures(1, &glID);
     
    	glBindTexture(GL_TEXTURE_2D, glID);
     
    	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
     
     
    	glTexImage2D(GL_TEXTURE_2D, 0, 4,
    		     gl_fliped_surface->w,
    		     gl_fliped_surface->h,
    		     0,
    		     GL_RGBA,
    		     GL_UNSIGNED_BYTE,
    		     gl_fliped_surface->pixels);
     
     
    	SDL_FreeSurface(gl_surface);
    	SDL_FreeSurface(gl_fliped_surface);
    	SDL_FreeSurface(picture_surface);
     
    	return (glID);
    }
    NOTE:
    Nécessite que la SDL_ttf soit déjà initialisée.

  3. #3
    Membre confirmé Avatar de lXT95l
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 106
    Par défaut
    Ben pareil !
    Ta fonction marche comme la mienne et des que je met un espace sa marche pas !
    Sauf qu'avec la tienne j'ai une erreur et pas segmention fault !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    g++ -o main.o -c main.cpp
    g++ main.o -o main       -L/usr/lib -lSDL -lpthread -lXT3D -lSDL -lSDL_image -lSDL_ttf -lGL -lGLU -lGLEW 
    Failed loading glXGetSwapIntervalMESA: /usr/lib/nvidia/libGL.so.1: undefined symbol: glXGetSwapIntervalMESA
    [XT95@localhost Test]$
    Apres avoir googleliser apparament ce serait juste avec Fedora Core 6 d'ailleurs sous windows sa marchait tres bien !
    Ben je vais chercher sur cette piste mais cette fois je met pas résolu !

  4. #4
    Membre confirmé Avatar de lXT95l
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 106
    Par défaut
    Cette fois c'est bien résolus par une maj de la lib mesa
    Merci a toi Yno !

  5. #5
    Yno
    Yno est déconnecté
    Membre éprouvé Avatar de Yno
    Inscrit en
    Novembre 2005
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 138
    Par défaut
    Failed loading glXGetSwapIntervalMESA: /usr/lib/nvidia/libGL.so.1: undefined symbol: glXGetSwapIntervalMESA

    -->

    Rhaa, ça fait 24h que je moisi sur cette erreur, t'as pas la solution ?
    Ca déconne au niveau de TTF_RenderText_Solid()... qui renvoie NULL.
    Mes libs mesa sont à jour...

  6. #6
    Membre confirmé Avatar de lXT95l
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 106
    Par défaut
    T'est sous quoi ? moi fedora core 6, hier j'ai lancer yum et j'ai fais une maj de tout ce qui est mesa et sdl !

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

Discussions similaires

  1. [JTabbedPane] afficher texte étiquette bas en haut.
    Par spoutyoyo dans le forum Agents de placement/Fenêtres
    Réponses: 11
    Dernier message: 07/07/2009, 17h46
  2. [HTMLEditorKit] afficher texte html dans excel
    Par Invité dans le forum Composants
    Réponses: 1
    Dernier message: 23/08/2005, 10h43
  3. Afficher texte
    Par mune dans le forum MFC
    Réponses: 1
    Dernier message: 19/05/2005, 00h56
  4. [JButton] Afficher texte en survolant bouton.
    Par Galima dans le forum Composants
    Réponses: 2
    Dernier message: 04/06/2004, 22h21
  5. afficher texte avec retour chariot aprèq requète sql
    Par frenchy371 dans le forum Requêtes
    Réponses: 2
    Dernier message: 07/01/2004, 17h33

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