SDL_DisplayFormat не объявлен в этой области: Использование SDL2

Компилятор не возвращает отсутствующий SDL.h, но SDL_DisplayFormat не объявляется в области действия функции-члена класса, расположенной в другом заголовке, даже если он инициализирован в main.

SDL_Surface *SpriteLoad::Load(char *File)
{
SDL_Surface *temp = NULL;
SDL_Surface *opt = NULL;

if ((temp = IMG_Load(File)) == NULL)
{
return NULL;
}

opt = SDL_DisplayFormat(temp);
SDL_FreeSurface(temp);

return opt;
}

Где мои основные элементы SDL через класс и функцию-член:

int main (int args, char *argc[])
{
bool quit = false;

OnRun Game;           // Class that init's SDL
Window TestWin;

GlobalTimer fps;
TestWin.Debug();

Я могу создать окно, используя SDL_Window, используя этот класс, а также использовать SDL_GetTick.

РЕДАКТИРОВАТЬ: заголовки, используемые для Sprite :: Load в настоящее время SDL, SDL_image, SDL_ttf и SDL_mixer извлечены и построены из ртутного репо. Я не думаю, что это ошибка связи, хотя

2

Решение

Причина, по которой вы получаете эту ошибку компилятора, заключается в том, что SDL_DisplayFormat больше не существует в SDL-2.0.

Посмотрев на SDL Wiki Doc кажется SDL_DisplayFormat из SDL-1.2 был заменен SDL_ConvertSurfaceFormat в SDL-2.0.

10

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

Я бы переписал ваш код следующим образом для SDL 2.0;

SDL_Surface *SpriteLoad::Load(SDL_Window *window, char *File)
{
SDL_Surface *temp = NULL;
SDL_Surface *opt = NULL;

if ((temp = IMG_Load(File)) == NULL)
{
return NULL;
}

// If the window wasn't created yet, just return the texture
if(window == NULL) return temp;

opt = SDL_ConvertSurfaceFormat(temp, SDL_GetWindowPixelFormat(window), 0);
SDL_FreeSurface(temp);

return opt;
}

В моем собственном коде я возвращаю изображение неоптимизированным, если окно еще не создано (иногда я использую его для заставки перед окном). Но вы можете изменить это так, чтобы он освобождает temp и возвращает NULL, если это важно для вас, возможно, с предупреждением о создании окна в первую очередь.

0

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