【发布时间】:2016-07-01 13:45:45
【问题描述】:
我有一个创建白色窗口的小 SDL2 程序。它完美地工作。但是当我尝试使用函数SDL_CreateRenderer() 创建SDL_Renderer 时,函数SDL_FillRect() 突然失败并出现以下错误:SDL_FillRect(): Unsupported surface format。有时,函数不返回错误而是产生分段错误!!
这是我的初始化函数的代码,这是我程序的第一个函数:
SDL_Surface *screenSurface = NULL;
SDL_Window *window = NULL;
SDL_Renderer *renderer = NULL;
bool initialize() {
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER | SDL_INIT_EVENTS) < 0) {
cout << "SDL could not initialize: " << SDL_GetError() << endl;
return false;
}
window = SDL_CreateWindow("SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS);
if (window == NULL) {
cout << "Window error: " << SDL_GetError() << endl;
return false;
}
if ((screenSurface = SDL_GetWindowSurface(window)) == NULL) {
cout << "GetWindowSurface() error: << endl;
return false;
}
/*
** here, I create my SDL_Renderer. The function returns non NULL
** However, if the code is present, SDL_FilRect() fails
** if the code is not preset, SDL_FillRect works.
*/
if ((renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED)) == NULL) {
cout << "Renderer error: " << SDL_GetError() << endl;
return false;
}
/*
** Here, SDL_FillRect sometimes works depending on SDL_CreateRenderer
** getUint32Color() is only a custom function that map an enum with Uint32 values
*/
if (SDL_FillRect(screenSurface, NULL, getUint32Color(WHITE)) < 0) {
cout << "SDL_FillRect error: " << SDL_GetError() << endl;
return false;
}
return true;
}
有什么想法吗?
【问题讨论】:
-
你确定 getUint32Color 返回一个有效的颜色吗?如果您使用的是 SDL_Renderer,为什么还要使用 FillRect?如何在屏幕上显示表面?
-
是的,我确定 getUint32Color(),当我显示它们有效的值时,问题与它无关。我使用 FillRect() 来绘制白色背景,我想使用 SDL_Renderer() 来绘制一条线(我是 SDL 的新手,这可能不是这样做的好方法)。最后,我使用 SDL_UpdateWindowSurface(window) 在屏幕上显示表面,但这并不重要,因为我的代码没有到达这一行。