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

Fermé
The Programmeur (du dimanche...) - Modifié par The Programmeur (du dimanche...) le 22/03/2011 à 22:46
musicetcie Messages postés 391 Date d'inscription mardi 10 juin 2008 Statut Membre Dernière intervention 24 mars 2013 - 23 mars 2011 à 22:31
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 391 Date d'inscription mardi 10 juin 2008 Statut Membre Dernière intervention 24 mars 2013 97
23 mars 2011 à 22:29
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 391 Date d'inscription mardi 10 juin 2008 Statut Membre Dernière intervention 24 mars 2013 97
23 mars 2011 à 22:31
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