我得到了一个分段错误,我已经将它跟踪到我的表面,这是NULL(但是检查就位不会触发)。
我不确定我是否正确地创建了表面。创建Surface时是否需要添加一些东西,我错过了什么?
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;
}
答案 0 :(得分: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;
}