1

我一直在从事 SDL 的一个项目,并将问题缩小到 NULL 的表面。表面初始化如下:

boardSurface = SDL_CreateRGBSurface(0, 780, 480, NULL, 0, 0, 0, 0);
    if (boardSurface == NULL)
    { 
        std::cout << "SURFACE ERROR " << SDL_GetError() << std::endl;
    }

它打印“表面错误未知像素格式”。我假设它指的是 SDL_CreateRGBSurface 函数中的最后四个参数,但我不知道可能导致什么。谷歌一直……没有帮助。所以我转向你。

4

2 回答 2

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

于 2014-02-10T02:36:29.687 回答
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);
}
于 2014-02-10T02:35:56.813 回答