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 :

Problème création surface


Sujet :

SDL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Problème création surface
    Bonjours bonjours! Je cherches à apprendre à me servir de la SDL 2.0, mais je bloque de façon magistrale lors de la création de surface ( ).

    L'idée, c'est de faire un jeu en 2D assez basique. Or, pour ne pas à avoir à ré-assembler le niveau à chaque frame, je souhaite garder une image de mon niveau initialisé dans une texture. Je sais pas trop ce que ça vaut comme méthode, étant néophyte, m'enfin mon problème n'est pas vraiment la.

    L'idée, c'est donc que je veux composer mon niveau initialisé dans une surface, puis créer une texture à partir de celle ci. Or, je n'arrive pas à créer ma surface. Je ne comprends vraiment pas!

    Merci du temps que vous voudrez bien m'accorder

    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
    bool _InitLevel(SDL_Renderer * window_renderer, SDL_Texture * initLevelTexture){
    	bool success = true;
    	SDL_Surface * initLevelSurface = NULL;
    	Uint32  Rmask, Gmask, Bmask, Amask;
    	//define the RGBA mask for the format
    	if (SDL_PixelFormatEnumToMasks(SDL_PIXELFORMAT_RGB24, &bitsPerPixel, &Rmask, &Gmask, &Bmask, &Amask) == SDL_FALSE){
    		fprintf(error, "Error creating the RGBA mask in _InitLevel: %s\n", SDL_GetError());
    		success = false;
    	}
    	else {
    		initLevelSurface = SDL_CreateRGBSurface(0, WINDOW_WIDTH, WINDOW_HEIGHT, 32, Rmask, Gmask, Bmask, Amask);
    		//controls the creation of the surface
    		if (initLevelSurface == NULL) {
    			fprintf(error, "Error creating surface in _InitLevel: %s\n", SDL_GetError());
    			success = false;
    		}
    		else {
     
    			/* CREATION DU FOND DU NIVEAU , PUIS...*/
     
    			//creates the texture from the surface
    			initLevelTexture = SDL_CreateTextureFromSurface(window_renderer, initLevelSurface);
    			if (initLevelTexture == NULL){
    				fprintf(error, "Error creating Texture in _InitLevel: %s\n", SDL_GetError());
    				success = false;
    			}
    			else SDL_Delay(1000);
    			//releases the RGB surface
    			SDL_FreeSurface(initLevelSurface); } }
    	//return the success status of the function
    	return success;
    }
    Voila donc ma fonction, qui est censé me créer une surface, puis une texture depuis celle ci. Mais j'ai fini par me rendre compte qu'en fait, ça bloquait au niveau de la création de surface. Je n'arrive pas à définir proprement le mask RGBA à partir du format de pixel. Je ne comprends pas du tout comment ça marche!

    Chaque fois que je crée ma surface, que ce soit en définissant au préalable mon mask à l'aide de la fonction SDL_FormatEnumToMask(), ou alors en copiant des codes directement pris d'exemples internet, ça ne marche pas. Lorsque je tente de vérifier le format, il me retourne toujours Unknown Pixel Format, et jamais ce que je veux.

    Je me doute donc que j'ai loupé un truc, et que la SDL 2.0 doit fonctionner autrement que comme je l'ai comprit, ou alors que j'ai une erreur dans mon code. Mais impossible de trouver de solution sur internet. Les tutoriaux ne sont pas complets et sont en anglais (ce qui ne facilite pas toujours les choses).

    Du coup je viens vous demander "à l'aide!!!".


    Ps: au cas ou, voila la fonction main (je commence tout juste comme je le disais):
    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
    int main(int argc, char *argv[]){
        //Log File Openning
    	errno_t errorCode = fopen_s(&error, "logs.txt", "w+");
     
        //Initialisation of SDL
        if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_EVENTS) != 0){
    		fprintf(error, "Error initialising SDL: %s\n", SDL_GetError());
            return -1;
        }
     
        //Creation of the window
        SDL_Window * windowGame = NULL;
        SDL_Renderer * windowGame_renderer = NULL;
        if (_CreateWindow(&windowGame, &windowGame_renderer)) {
     
    		//Initialisation of the level
    		SDL_Texture * initialLevelTexture = NULL;
    		if (_InitLevel(windowGame_renderer, initialLevelTexture)){
     
    			SDL_Event evenements;
    			bool continuer = true;
     
    			do{
    				SDL_WaitEvent(&evenements);
    				if (evenements.window.event == SDL_WINDOWEVENT_CLOSE)
    					continuer = false;
    			} while (continuer);
    		}
     
            //Destruction of the window
            _DestroyWindow(&windowGame, &windowGame_renderer);
        }
     
        SDL_Quit();
    	fclose(error);
        return 0;
    }

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Est ce que les fonction retournent des erreurs ?
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bonjours.
    Aucune fonction SDL ne me retourne d'erreur dans le code ci dessus.

    En ajoutant (code ci dessous) je récupère cependant SDL_PIXELFORMAT_UNKNOWN sur la surface. Et ce malgré l'utilisation de SDL_PixelFormatEnumToMasks.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //ajout dans _InitLevel
    fprintf(error, "Format Surface: %s\n", SDL_GetPixelFormatName(initLevelSurface->format));
    De plus, si je tente de copier ma texture dans mon renderer (code ci dessous), je récupère l'erreur suivante: Invalid texture.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    //ajout dans le main
    if (SDL_RenderCopy(windowGame_renderer, initialLevelTexture, NULL, NULL) < 0){
        fprintf(error, "Error copying texture in renderer: %s\n", SDL_GetError());
    }
    else {
        //ON CONTINUE
    }
    Voila, je ne comprends pas trop où est le problème. Merci à vous de bien vouloir m'aider.

    note: il y avait une petite erreur dans le code que j'ai donné, la variable bitsPerPixel n'était pas déclarée. C'est réglé, un simple oubli quand j'ai éclaircis le code. Du coup, pas besoin d'en tenir compte. Elle est simplement déclarée comme un int.

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Le SDL_PixelFormatEnumToMasks ne fonctionne pas car votre surface n'est pas créée (elle est à NULL). Du coup, il ne peux donner de résultat valable.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

Discussions similaires

  1. problème création de process
    Par skaii dans le forum MFC
    Réponses: 6
    Dernier message: 01/06/2005, 17h24
  2. .htaccess problème création sous windows
    Par Leviathan_72 dans le forum Apache
    Réponses: 2
    Dernier message: 18/05/2005, 20h29
  3. Problème création et destruction de processus.
    Par loupdeau dans le forum MFC
    Réponses: 5
    Dernier message: 08/04/2005, 13h33
  4. Problèmes création de procédures et de triggers
    Par missllyss dans le forum SQL
    Réponses: 2
    Dernier message: 06/11/2003, 10h42
  5. Problème création de DLL
    Par monsieur.voie.lactee dans le forum C++Builder
    Réponses: 4
    Dernier message: 12/08/2003, 16h56

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