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
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!
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; }
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; }
Partager