2 votes

Erreur SDL lors de la création d'une fenêtre ?

#include<SDL2/SDL.h>
#include<stdio.h>
#include<stdbool.h>

bool init(char *title, int width, int height);
void close();

SDL_Window *window = NULL;
SDL_Surface *screen = NULL;

bool init(char *title, int width, int height){

    bool success = true;

// SDL_Init 0 on success and returns negative on failure
   if( SDL_Init(SDL_INIT_EVERYTHING) != 0 ){
       SDL_Log("Couldn't initialize SDL: %s",SDL_GetError());
       success = false;
   }

// creating Window and Surface
  window = SDL_CreateWindow(title, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, width, height, SDL_WINDOW_SHOWN );

// SDL_CreateWindow returns window on creation and NULL on failure
    if ( !window ){
        SDL_Log("Couldn't create window: %s",SDL_GetError());
        success = false;
    } else {
        // get window surface
        screen = SDL_GetWindowSurface( window );
        if ( screen == NULL ){
            SDL_Log("Couldn't get window surface: %s",SDL_GetError());
            success = false;
        }
    }
    return success;
}

void close(){
    // deallocate surface
    SDL_FreeSurface( screen );
    // destroy window
    SDL_DestroyWindow( window );
    // SDL_Quit();
    SDL_Quit();
}

int main(){
    bool running  = true;
    SDL_Event event;
    if( init("My Window", 800, 600) ){
       printf("Congrats\n");
    } else {
        printf("Sorry :(\n");
    }

   while( running ) {
      //  start = SDL_GetTicks();
        while ( SDL_PollEvent( &event ) ){
            switch( event.type ){
                case SDL_QUIT:
                    running = false;
                    break;
            }
        SDL_UpdateWindowSurface( window );
        }
    }

    close();
}

J'ai essayé de créer une fonction distincte pour initialiser la fenêtre SDL, puis j'ai essayé d'y attacher une surface, mais j'ai obtenu les résultats suivants Segmentation fault (core dumped) . et parfois il donne l'erreur Info: invalid window aussi.

Si je ne crée pas de fonction séparée et que j'exécute ce code dans la fonction principale uniquement, cela fonctionne !

0voto

nevzatseferoglu Points 65

Vous avez oublié d'implémenter une fonction cruciale qui est :

SDL_BlitSurface( SDL_Surface* ,const SDL_Rect* , SDL_Surface* , SDL_Rect* ) ;

Cette fonction permet d'éditer la surface et de charger les données (informations graphiques) dans la structure SDL_Surface.

Si vous voulez en savoir plus sur cette fonction, vous pouvez consulter le lien.

Lien : https://wiki.libsdl.org/SDL_BlitSurface

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X