GCC / SDL2 se bloque indéfiniment et cesse de répondre

Salut les gars, je suis à cette question depuis quelques jours maintenant et je ne peux pas trouver la réponse. Après une construction réussie de SDL2, mes projets se bloquent et ne répondent pas. Ils n’acceptent pas l’entrée et se bloquent indéfiniment sauf si je les ferme à l’aide de la fenêtre d’invite de commande. Même le ‘X’ sur la fenêtre de l’application ne répond pas. Autant que je sache, ce problème semble être lié à la fenêtre elle-même, car le programme peut attirer le moteur de rendu. S’il vous plaît aider.

J’utilise Windows 7, MinGW32, Eclipse Europa et SDL2

Voir ci-dessous pour un exemple du problème ….

Internal Builder est utilisé pour la construction

gcc -O0 -g3 -Wall -c -fmessage-length = 0 -osrc \ CTestProject.o .. \ src \ CTestProject.c

gcc -oCTestProject.exe src \ CTestProject.o -lmingw32 -lSDL2main -lSDL2

Construction complète pour le projet CTestProject

Temps consommé: 562 ms.

SDL2 ne répond pas

Voici le programme d’exemple

#include  #include  #include  int main(int argc, char* args[]) { SDL_Init(SDL_INIT_EVERYTHING); SDL_Event event; SDL_Window* sdlWindow = SDL_CreateWindow("test",SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,300,300,SDL_WINDOW_OPENGL); SDL_Renderer* sdlRenderer = SDL_CreateRenderer(sdlWindow, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); while(event.type != SDL_QUIT){ SDL_RenderClear(sdlRenderer); SDL_SetRenderDrawColor(sdlRenderer, 150, 0, 0, 255); SDL_RenderPresent(sdlRenderer); } SDL_DestroyRenderer(sdlRenderer); SDL_DestroyWindow(sdlWindow); SDL_Quit(); return EXIT_SUCCESS; } 

  while(event.type != SDL_QUIT) { SDL_RenderClear(sdlRenderer); SDL_SetRenderDrawColor(sdlRenderer, 150, 0, 0, 255); SDL_RenderPresent(sdlRenderer); } 

Vous comparez une variable qui ne change pas dans votre boucle while. Vous devez le mettre à jour à chaque itération de boucle à l’aide de SDL_PollEvent(&event) .

 bool quit = false; SDL_Event event; // Loop while user hasn't quit while ( !quit ) { // Check all new event to see if a SDL_QUIT event has come in... while (SDL_PollEvent(&event) ) { // SDL_QUIT event has come in, quit. if ( event.type == SDL_QUIT ) { quit = true; } } SDL_RenderClear(sdlRenderer); SDL_SetRenderDrawColor(sdlRenderer, 150, 0, 0, 255); SDL_RenderPresent(sdlRenderer); } 

De plus, je ne pense plus que vous ayez besoin de SDL2_main. Au moins, je ne l’utilise pas dans mon code. Vous n’avez pas non plus besoin de #include et de #include dans votre exemple spécifique.


Tutoriels

SDL2 est relativement nouveau, il n’ya donc pas beaucoup de tutoriels. Les seuls que je connaisse sont TwinklebearDev. Mais dans la plupart des cas, SDL1.3 et SDL2 sont assez similaires. Ainsi, dans la plupart des cas, vous pouvez utiliser le code SDL_Texture avec SDL_Texture , SDL_Renderer et SDL_Window. Vous pouvez consulter ici pour plus d’informations sur le portage de la version 1.3 à la version 2.0. Pour SDL1.3, j’ai utilisé les tutoriels de LazyFoo .