C : problème création fenêtre (lib SDL)

The Programmeur (du dimanche...) -  
musicetcie Messages postés 393 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'ai réussi à créer 2 fenêtres basiques en C, grâce à la bibliothèque SDL. La première est bordeaux avec un carré gris au milieu et la 2e est constituée d'un dégradé noir&blanc. Tout simple. Là, j'ai voulu faire une graaande fenêtre, avec l'arc en ciel, en gros. Mais quand le programme se lance, la fenêtre s'ouvre, blanche, et se referme dans la seconde (alors que j'ai une fonction pause, externe, qui me bloque la fermeture de la fenêtre tant que je n'ai pas cliqué sur la croix)

Voici mon code (ne désespérez pas tout de suite s'il vous plait ! ;-) ) :

    
int FenetreDegradeCouleurs()    
{    
    SDL_Surface *ecran = NULL;   
    SDL_Surface *lignes[256] = {NULL};   
    SDL_Rect position;   
    int i=0;    

    if (SDL_Init(SDL_INIT_VIDEO) == -1)    
    {    
        fprintf(stderr, "Erreur d'initialisation de la SDL");   
        exit(EXIT_FAILURE);  
    }    

       
    ecran = SDL_SetVideoMode(640, 1000, 32, SDL_HWSURFACE);   
    if (ecran == NULL)   
    {    
        fprintf(stderr, "Impossible de charger le mode vidéo : %s\n", SDL_GetError());    
        exit(EXIT_FAILURE);    
    }    

    for (i = 0 ; i <= 255 ; i++)    
        {lignes[i] = SDL_CreateRGBSurface(SDL_HWSURFACE, 640, 1, 32, 0, 0, 0, 0);}   

    SDL_WM_SetCaption("Fenetre arc-en-ciel", NULL);     
    SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));    


   for (i = 9 ; i <= 255 ; i++)  
    {  
        position.x = 0;  
        position.y = i%2;  
        SDL_FillRect(lignes[i], NULL, SDL_MapRGB(ecran->format, 255, i, 9));  
        SDL_FillRect(lignes[i+123], NULL, SDL_MapRGB(ecran->format, 255-i, 255, 9));  
        SDL_FillRect(lignes[i+246], NULL, SDL_MapRGB(ecran->format, 9, 255, i));  
        SDL_FillRect(lignes[i+369], NULL, SDL_MapRGB(ecran->format, 9, 255-i, 255));  
        SDL_FillRect(lignes[i+492], NULL, SDL_MapRGB(ecran->format, i, 9, 255));  
        SDL_FillRect(lignes[i+615], NULL, SDL_MapRGB(ecran->format, 9, 255-i, 255));  
        SDL_FillRect(lignes[i+738], NULL, SDL_MapRGB(ecran->format, 255, 9, 255-i));  
    }  
    for (i=0; i<1000;i++)  
        SDL_BlitSurface(lignes[i], NULL, ecran, &position);  

    SDL_Flip(ecran);   

    pause(); // Mise en pause du programme (fermeture quand on clique sur la croix)   
    SDL_Quit();   
    return EXIT_SUCCESS;   
}    



Merci à vous !!

PS : je peux rajouter des commentaires dans mon code, si ça vous arrange !! =)

1 réponse

musicetcie Messages postés 393 Date d'inscription   Statut Membre Dernière intervention   97
 
Je ne sais pas si ça va tout changer, mais lorsque tu crées ton tableau "lignes", tu dois mettre le nombre final de lignes, non? Parce que là tu as 256, et ta fenêtre fait 1000pixels de hauteur...

0
musicetcie Messages postés 393 Date d'inscription   Statut Membre Dernière intervention   97
 
Aussi, je ne pense pas qu'il apprécie ton position.y = i%2 ...
A mon avis le modulo 2 ne sert à rien (déjà vu ce que je vois, tu veux faire diviser pas modulo, non?), voire même il fait planter l'ouverture de ta fenêtre.

D'ailleurs as-tu vérifié le fichier stderr.txt qui a du se créer au moment de la compilation ?
0