2017-05-08 1 views
0

세분화 오류가 발생했습니다.이 오류는 내 표면 (NULL 인 경우)에서 추적했습니다 (그러나 체크인은 실행되지 않습니다).SDL Surface가 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

관련 문제