2017-05-08 5 views
0

私はセグメンテーションフォルトを取得していますが、これは私の表面にはトラッキングされていますが、これはNULLです(ただし、チェックインがトリガーされません)。SDLサーフェスはNULLを返しますか?

表面を正しく作成しているかどうかは不明です。サーフェスを作成するときに追加する必要があるものはありますか?私が逃したものはありますか?

bool init() 
{ 
    //Initialize SDL 
    if(SDL_Init(SDL_INIT_VIDEO) < 0) 
    { 
     printf("SDL could not initialize! SDL Error: %s\n", SDL_GetError()); 
     return false; 
    } 
    else 
    { 
     //Set texture filtering to linear 
     if(!SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "1")) 
     { 
      printf("Warning: Linear texture filtering not enabled!"); 
      return false; 
     } 
     else 
     { 
      //Create window 
      gWindow = SDL_CreateWindow("kPaint", 575, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN); 
      GUI = SDL_CreateWindow("GUI", 0, SDL_WINDOWPOS_UNDEFINED, 573, 542, SDL_WINDOW_SHOWN); 

      if(gWindow == NULL || GUI == NULL) 
      { 
       printf("Window could not be created! SDL Error: %s\n", SDL_GetError()); 
       return false; 
      } 
      else 
      { 
       //Create renderer for window 
       gRenderer = SDL_CreateRenderer(gWindow, -1, SDL_RENDERER_ACCELERATED); 

       if(gRenderer == NULL) 
       { 
        printf("Renderer could not be created! SDL Error: %s\n", SDL_GetError()); 
        return false; 
       } 
       surface = SDL_GetWindowSurface(gWindow); 
       GUIsurface = SDL_GetWindowSurface(GUI); 

       if(surface == NULL) 
       { 
        printf("surface could not be created!"); 
        return false; 
       } 
       SDL_FillRect(surface, NULL, SDL_MapRGB(surface->format, 255,255,255)); 

       //Initialize PNG loading 
       int imgFlags = IMG_INIT_PNG; 
       if(!(IMG_Init(imgFlags) && imgFlags)) 
       { 
        printf("SDL_image could not initialize! SDL_image Error: %s\n", IMG_GetError()); 
        return false; 
       } 

      } 
     } 
    } 
    return true; 
} 
+2

SDL_GetWindowSurface()の前にレンダラーを作成しないでください。私は間違っているかもしれませんが、iirc SDLはそのウィンドウのレンダラーを作成した後にウィンドウサーフェスを取得することを許可しません。 – neoaggelos

+2

作成した直後にnullではなく、後でnullになった場合は、その間に – molbdnilo

+0

また、SDL_FillRect()の戻り値をチェックして、何かが間違っていないかどうかを確認することができます – neoaggelos

答えて

0

ありがとうございますNeoAgglos。

私はサーフェスの前にレンダラーを作成していました。

bool init() 
{ 
    //Initialize SDL 
    if(SDL_Init(SDL_INIT_VIDEO) < 0) 
    { 
     printf("SDL could not initialize! SDL Error: %s\n", SDL_GetError()); 
     return false; 
    } 
    else 
    { 
     //Set texture filtering to linear 
     if(!SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "1")) 
     { 
      printf("Warning: Linear texture filtering not enabled!"); 
      return false; 
     } 
     else 
     { 
      //Create window 
      gWindow = SDL_CreateWindow("kPaint", 575, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN); 
      GUI = SDL_CreateWindow("GUI", 0, SDL_WINDOWPOS_UNDEFINED, 573, 542, SDL_WINDOW_SHOWN); 

      if(gWindow == NULL || GUI == NULL) 
      { 
       printf("Window could not be created! SDL Error: %s\n", SDL_GetError()); 
       return false; 
      } 
      else 
      { 
       surface = SDL_GetWindowSurface(gWindow); 
       GUIsurface = SDL_GetWindowSurface(GUI); 

       if(surface == NULL) 
       { 
        printf("surface could not be created!"); 
        return false; 
       } 
       SDL_FillRect(surface, NULL, SDL_MapRGB(surface->format, 255,255,255)); 

       //Create renderer for window 
       gRenderer = SDL_CreateRenderer(gWindow, -1, SDL_RENDERER_ACCELERATED); 
       if(gRenderer == NULL) 
       { 
        printf("Renderer could not be created! SDL Error: %s\n", SDL_GetError()); 
        return false; 
       } 

       //Initialize PNG loading 
       int imgFlags = IMG_INIT_PNG; 
       if(!(IMG_Init(imgFlags) && imgFlags)) 
       { 
        printf("SDL_image could not initialize! SDL_image Error: %s\n", IMG_GetError()); 
        return false; 
       } 
      } 
     } 
    } 
    return true; 
} 
+1

それはできません。あなたはSDLの内部エラーチェックをだましていますが、正しいとは言えません。 'SDL_GetWindowSurface'のSDLマニュアルでは、それをレンダリングAPIと混在させることはできません。 – keltar

関連する問題