Неизвестная ошибка формата пикселя SDL2

Я работал над проектом в 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, но я не знаю, что может быть причиной. Google был .. бесполезен. И поэтому я обращаюсь к вам.

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

Другие решения

От 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);
}
0

По вопросам рекламы [email protected]