Bonjour,
Je suis encore bloqué sur mon générateur de fractales mais au moins tout compile désormais.
J'obtiens bien une image ressemblante à celle-ci:
http://whatisnotseen.files.wordpress...elbrot_set.jpg
Mais je ne parviens à faire afficher un texte sur cette surface par le biais de SDL_TTF.
Je voudrais pour commencer afficher abscisse du pixel pointé par le curseur de la souris.
Voici mon main.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
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <SDL.h>
#include <Complexe.h>
#include <Mandelbrot.h>
#include <Julia.h>
#include <coloration.h>
#include <Buddhabrot.h>
#include <create_text.h>
 
 
 
int main(int argc, char *argv[])
{
    Uint8 *keystates = SDL_GetKeyState(NULL);
    SDL_Surface *screen = NULL;  // declaration de l'ecran
    SDL_Event event;
	SDL_Init(SDL_INIT_VIDEO);
    screen = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE | SDL_DOUBLEBUF); // on génère une interface de taille 640*480
 
    Mandelbrot f(screen,0, 0, 1,50);  //On Initialise une fractale
    f.dessine();                         // Puis on la dessine.
 
  /*   Complexe j(-0.683,-0.408);
     Julia f(screen, 0, 0, 1,30,j);
     f.dessine();*/
 
/*    Buddhabrot f(screen,320,240,0.7,500);
    f.dessine(); */
 
 
 
	while(true)
    {
		SDL_PollEvent(&event);
 
		if( event.type == SDL_MOUSEMOTION )
		{
		    char *txt=(char *)event.motion.x;
            Create_text (screen,580, 460,10, SDL_MapRGB(screen->format, 255, 255, 255),
                    "C:\WINDOWS\Fonts\ARIAL.TTF", txt ) ;
            SDL_Flip(screen);
		}
 
		if( event.type == SDL_MOUSEBUTTONDOWN )  // Par un clic de la souris, on centre sur la partie
		{                                        // qui nous intéresse.
			f.setAbs( f.getAbs() + (event.motion.x-280)/(140*f.getZoom()) );
			f.setOrd( f.getOrd() + (event.motion.y-240)/(120*f.getZoom()) );
			f.dessine();
 
		}
		SDL_PumpEvents();
 
		if( event.button.button == SDL_BUTTON_WHEELUP || keystates[SDLK_UP]) // On zoome
		{
			f.setZoom(f.getZoom()*2);
			f.setIter(f.getIter()+10);
			f.dessine();
		}
 
		if( event.button.button == SDL_BUTTON_WHEELDOWN || keystates[SDLK_DOWN]) // Et on dézoome.
		{
			f.setZoom(f.getZoom()/2);
			f.setIter(f.getIter()-10);
			f.dessine();
		}
        if (event.type==SDL_QUIT) break;
 
		SDL_PumpEvents();
        SDL_Flip(screen);
    }
 
	SDL_FreeSurface(screen);
    SDL_Quit();
    return EXIT_SUCCESS;
}
J'utilise au passage une fonction trouvée sur un forum. En voici le code:

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
#include <SDL.h>
#include <SDL_ttf.h>
 
#define ERROR_MSG(func_name, msg)                  \
            fprintf                                \
            (                                      \
               stderr,                             \
               "**>> Erreur: "func_name": "msg     \
            );
/* --------------------------------------------------------------------------
   Create_text
   --------------------------------------------------------------------------
   Fonction privee de creation de texte.
   --------------------------------------------------------------------------
   E: Pointeur de la surface sur laquelle rendre le texte.
   E: Position X du texte.
   E: Position Y du texte.
   E: Taille de la police.
   E: Couleur de la police (a creer avec la fonction SDL_MapRGB).
   E: Nom de la police a utiliser.
   E: Texte a rendre.
   S:
   -------------------------------------------------------------------------- */
static void Create_text (SDL_Surface * p_screen,
                         short x, short y,
                         short font_size, Uint32 i_color,
                         const char * p_font_face, const char * p_message)
{
   TTF_Font      *   p_font      = NULL;
   SDL_Surface   *   s_text      = NULL;
   SDL_Rect          rect_dest;
   SDL_Color         color;
 
 
 
 
   /* ----- Initialisation de SDL_ttf ----- */
 
   if (TTF_Init () < 0)
   {
      ERROR_MSG (
         "draw_text",
         "Impossible d'initialiser SDL_ttf !\n"
      );
 
      return;
   }
 
   /* ----- */
 
 
 
 
   /* ----- Chargement de toutes les donnees necessaires ----- */
 
   /* Recuperation des informations de couleurs. */
   color.r = (i_color & SDL_MapRGB (p_screen->format, 255, 0, 0)) >> 16;
   color.g = (i_color & SDL_MapRGB (p_screen->format, 0, 255, 0)) >> 8;
   color.b = (i_color & SDL_MapRGB (p_screen->format, 0, 0, 255));
 
 
   /* Chargement de la police */
   p_font = TTF_OpenFont (p_font_face, font_size);
 
   if (! p_font)
   {
      ERROR_MSG (
         "draw_text",
         "Impossible de charger la police !\n"
      );
 
      return;
   }
 
   /* ----- */
 
 
 
 
   /* ----- Rendu du texte ----- */
 
   s_text = TTF_RenderText_Solid (p_font, p_message, color);
 
 
   /* Mise en place du message sur la surface de jeu */
   if (s_text == NULL)
   {
      ERROR_MSG (
         "draw_text",
         "Impossible de rendre le texte !\n"
      );
   }
   else if (s_text != NULL)
   {
      rect_dest.x = x;
      rect_dest.y = y;
      rect_dest.w = s_text->w;
      rect_dest.h = s_text->h;
 
      /* On blit la surface a  l'ecran */
      SDL_BlitSurface (s_text, NULL, p_screen, & rect_dest);
      SDL_FreeSurface (s_text);
   }
 
 
   /* Fermeture de la police */
   TTF_CloseFont (p_font);
 
   /* ----- */
 
 
   return;
}

Pour résumer, mon problème est que ces lignes de code:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
		if( event.type == SDL_MOUSEMOTION )
		{
		    char *txt=(char *)event.motion.x;
            Create_text (screen,580, 460,10, SDL_MapRGB(screen->format, 255, 255, 255),
                    "C:\WINDOWS\Fonts\ARIAL.TTF", txt ) ;
            SDL_Flip(screen);
		}
Ne m'affichent rien sur l'écran...

Merci de votre aide.