我一直在研究SDL中的一个项目,并且我已经将问题缩小到表面为NULL。 表面初始化如下:
boardSurface = SDL_CreateRGBSurface(0, 780, 480, NULL, 0, 0, 0, 0);
if (boardSurface == NULL)
{
std::cout << "SURFACE ERROR " << SDL_GetError() << std::endl;
}
打印“SURFACE ERROR未知像素格式”。 我假设它引用了SDL_CreateRGBSurface函数中的最后四个参数,但我不知道可能导致什么。谷歌一直没有帮助。所以我转向你。
答案 0 :(得分:1)
第四个参数depth
不能为NULL。尝试将其更改为32。
该函数声明为:
SDL_Surface* SDL_CreateRGBSurface(Uint32 flags,
int width,
int height,
int depth,
Uint32 Rmask,
Uint32 Gmask,
Uint32 Bmask,
Uint32 Amask)
请参阅SDL 2.0文档:https://wiki.libsdl.org/SDL_CreateRGBSurface
答案 1 :(得分:0)
来自http://sdl.beuc.net/sdl.wiki/SDL_CreateRGBSurface
SDL_CreateRGBSurface
的原型是:
SDL_Surface *SDL_CreateRGBSurface(Uint32 flags, int width, int height, int bitsPerPixel,
Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask);
您正在为NULL
参数传递bitsPerPixel
。这应该是8,24或32之类的数字,取决于你所追求的目标。
在任何情况下,您都可以使用SDL_GetError()
来获取更有帮助的确切错误消息:
surface = SDL_CreateRGBSurface(SDL_SWSURFACE, width, height, 32,
rmask, gmask, bmask, amask);
if(surface == NULL) {
fprintf(stderr, "CreateRGBSurface failed: %s\n", SDL_GetError());
exit(1);
}