私はセグメンテーションフォルトを取得していますが、これは私の表面にはトラッキングされていますが、これは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;
}
SDL_GetWindowSurface()の前にレンダラーを作成しないでください。私は間違っているかもしれませんが、iirc SDLはそのウィンドウのレンダラーを作成した後にウィンドウサーフェスを取得することを許可しません。 – neoaggelos
作成した直後にnullではなく、後でnullになった場合は、その間に – molbdnilo
また、SDL_FillRect()の戻り値をチェックして、何かが間違っていないかどうかを確認することができます – neoaggelos