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 :

Initialiser une fenêtre


Sujet :

SDL

  1. #1
    Membre du Club Avatar de Mic75
    Homme Profil pro
    Développeur Frontend
    Inscrit en
    Janvier 2006
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Frontend
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 143
    Points : 52
    Points
    52
    Par défaut Initialiser une fenêtre
    Bonjour à tous,
    Je viens de commencer à m'intéresser à la SDL et actuellement je suis les tutos de Loka proposés sur développez.

    Mon problème est le suivant :
    Dans un soucis de portabilité du code, j'utilise les fonctions proposées par Loka avec une petite variante, par exemple :

    la fonction void init() devient chez moi void init(SDL_Surface *ecran), afin que je puisse lui passer la variable globale screen, qui gère la surface de l'écran.
    Le code de la fonction init que j'appelle dans le main, avec le paramètre screen est le suivant :
    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
    bool init(SDL_Surface *ecran)
    {
        //initialisation de tout les sous-systemes de sdl
        if( SDL_Init( SDL_INIT_EVERYTHING ) == -1 )
        {
            return false;
        }
     
        //on met en place l'ecran
        ecran = SDL_SetVideoMode( WIDTH, HEIGHT, BPP, SDL_SWSURFACE );
     
        //Si il y a une erreur lors de la mise en place de l'ecran
        if( ecran == NULL )
        {
            return false;
        }
     
        return true ;
    }
    Cependant après l'exécution de cette fonction, la variable globale screen vaut toujours NULL et le progamme me lance un SIGSEV au niveau de la fonction SDL_Flip(screen)
    Le code de mon main pour illustrer mes propos :
    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
    int main(int argc, char **argv)
    {
     
    	bool quit = false ;
    	if(!(init(screen)))
    		fprintf(stderr,"Echec à l'initialisation de la SDL") ;
     
     
    	if(!(load_files(image)))
    		fprintf(stderr,"Impossible de charger l'image") ;
     
    	apply_surface(0,0,image,screen) ;
     
    	if(SDL_Flip(screen) == -1)
    		fprintf(stderr,"Erreur durant l'actualisation : %s\n",SDL_GetError()) ;
     
    	//Tant que l'utilisateur ne veut pas quitter
    	while(!quit)
    	{
    		//Tant qu'il y a un évènement à traiter 
    		while(SDL_PollEvent(&event))
    		{
    			if(event.type == SDL_QUIT)
    				quit = true ;
    		}
    	}
     
    	clean_up(image) ;
    	return 0 ;
    }
    Je resignal au passage que screen (et image) est définit comme variable globale.
    Merci d'avance pour vos réponse

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Tu passes ton pointeur par copie, tout changement effectué dans la fonction init sera fait sur une copie locale et non sur l'original. Si tu es en C tu peux passer un pointeur sur ton pointeur, ou une référence en C++.

    Tu peux utiliser la valeur de retour, et renvoyer NULL au lieu de false en cas d'erreur.

    PS : lorsque tu détectes une erreur d'initialisation c'est bien de printf-er sur stderr, mais ce serait encore mieux de quitter immédiatement après, car je doute que le reste du programme fonctionne

  3. #3
    Membre du Club Avatar de Mic75
    Homme Profil pro
    Développeur Frontend
    Inscrit en
    Janvier 2006
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Frontend
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 143
    Points : 52
    Points
    52
    Par défaut
    Merci beaucoup pour la réponse et les conseils, c'était exactement ça.

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    N'oublie pas de cliquer sur

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 21/10/2022, 13h29
  2. initialiser le width d'une fenêtre
    Par savoir dans le forum VB.NET
    Réponses: 3
    Dernier message: 01/10/2009, 13h06
  3. [WD14] Initialiser une table (Fenêtre)
    Par Raptor92 dans le forum WinDev
    Réponses: 5
    Dernier message: 30/07/2009, 12h19
  4. Réponses: 4
    Dernier message: 05/03/2009, 14h13
  5. icône d'une fenêtre fille
    Par bastien dans le forum C++Builder
    Réponses: 6
    Dernier message: 27/05/2002, 13h46

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