Компиляция и установка библиотеки SDL_mixer. Компиляция и установка библиотеки SDL_image

Если вы когда-нибудь пытались программировать графику в операционной системе DOS , то наверно знаете, что большая часть кода — это низкоуровневая работа с портами ввода-вывода, прерываниями и т.п. С одной стороны это интересно, но в то же время такая работа очень сложна и код получается абсолютно непереносимый на другие платформы. В нормальных ОС непосредственный доступ к регистрам железа крайне ограничен или невозможен. Работа осуществляется посредством драйверов. Работа с драйвером все еще сложна, особенно для начинающих. По этой причине появляются библиотеки, которые являются прослойкой между вашей программой и драйверами устройств. Такие библиотеки значительно облегчают жизнь и позволяют писать простой код. Но библиотека библиотеке рознь. И так, разрешите представить — Simple DirectMedia Layer.

Иначе — SDL. Библиотека предоставляет доступ к видео и аудио оборудованию вашего компьютера, а также к устройствам ввода, таким как мышь, клавиатура и джойстик. Эту библиотеку используют в самых различных программах, начиная от MPEG-проигрывателей и заканчивая эмуляторами. Но по большей части SDL используется для создания игр. Например таких как и Civilization: Call to Power . Вот скриншоты:

SDL по своим возможностям очень напоминает Microsoft DirectX API . Но поддерживает большое число операционных систем (то есть ваши программы будут работать в нескольких операционных системах) и имеет интерфейс с многими языками программирования. Библиотека написана на Си (хотя прекрасно работает с С++), но поддерживает очень много других языков, даже такие как Perl, Python и PHP ! Поддерживаемые операционные системы: Linux, BeOS, MacOS, Solaris, FreeBSD, IRIX, Win32 . Распространяется библиотека по лицензии GNU Lesser General Public License version 2 . Это означает, что вы можете без проблем создавать коммерческие программы.

SDL создал замечательный человек Sam Lantinga , который работает в компании Blizzard Entertainment и работал в компании Loki Entertainment Software ведущим программистом. История SDL начинается с времен, когда Сэм работал над программой эмулятором Макинтош для Windows . Он заметил, что многие куски кода без проблем могут работать в Linux. И он решил создать небольшую библиотеку, чтобы ей могли воспользоваться другие программисты. В октябре 1997 был выпущен релиз библиотеки с версией 0.3, а позже эту библиотеку во всю использовала компания Loki Software для портирования игр под Linux .

Как говорит Сэм, сравнивать SDL и DirectX все равно что сравнивать апельсин и яблоко. Единственное сходство в том, что это фрукты. SDL предоставляет значительно более простой API , чем DirectX . SDL изначально создана для 2D-графики и не имеет непосредственно функций для 3D-графики, но прекрасно дружит с OpenGL. Для поддержки сетевых функций можно использовать библиотеку SDL_net .

Конечно, выбор библиотеки для своего проекта — личное дело каждого, но все-таки SDL является бесспорным лидером для создания игр или мультимедиа-программ. Если вы не хотите использовать SDL для своей игры, то все равно рекомендую ознакомиться с приемами работы с библиотекой, чтобы повысить уровень своего образования.

Я решил попробовать свои силы в SDL. Да вот незадача, каких-либо толковых уроков по SDL версии 2.0 на русском языке найти мне не удалось. Это и подтолкнуло меня к переводу замечательной серии туториалов Twinklebear, в оригинале доступных .

Добро пожаловать!
Цель данных уроков - познакомить вас с основами SDL 2.0 и гейм-дева на С++. Подразумевается, что у читателя есть некоторый опыт программирования на С++ и минимальные знания массивов, векторов, управляющих структур, функций и указателей.

Если вы испытываете трудности при разборе кода в примерах, воспользуйтесь одной из книг, представленных в этом чудесном списке на StackOverflow .

Если вы хотите увидеть полный исходник или же скачать ресурсы для уроков, то все это можно получить на GitHub ’е. Но не копируйте!

Также документация по SDL 2.0 доступна для чтения в этой вики .

Урок 1: Hello World!

В этом уроке мы научимся открывать окно, создавать контекст рендеринга и рисовать загруженное изображение на экране. Ниже вы можете забрать BMP картинку, которую мы будем рисовать. Сохраните ее где-нибудь в своем проекте. Так давайте уже начнем!
Запуск SDL
Первый шаг обычно заключается в подключении заголовочного файла SDL.

#include
Для того, чтобы начать работать с SDL, нам необходимо инициализировать различные SDL подсистемы, которые мы хотим использовать. Это можно сделать с помощью функции SDL_Init , которая принимает набор флагов , указывающих, какие подсистемы мы хотим инициализировать. Сейчас мы просто скажем, что хотим инициализировать все, но если хотите, вы можете это изменить. Минимум, что необходимо для нашего урока - это SDL_INIT_VIDEO. Если все пройдет успешно, SDL_Init вернет 0, в противном случае мы напечатаем ошибку и выйдем.

Заметка для пользователей Visual Studio: если вы установили значение системы как Windows в настройках компоновщика, то вы не получите стандартный вывод в консоль. Чтобы этого не произошло, вам необходимо изменить значение системы на Console.

If (SDL_Init(SDL_INIT_EVERYTHING) != 0){ std::cout << "SDL_Init Error: " << SDL_GetError() << std::endl; return 1; }

Открытие окна
Нам нужно окно, чтобы можно было в нем отображать на рендер. Мы можем создать его, используя функцию SDL_CreateWindow , которая принимает название окна, его координаты, высоту, ширину и некоторые флаги , чтобы задать параметры окна. Данная функция возвращает SDL_Window*. Этот указатель будет NULL, если что-нибудь пойдет не так при создании окна.

SDL_Window *win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN); if (win == nullptr){ std::cout << "SDL_CreateWindow Error: " << SDL_GetError() << std::endl; return 1; }

Создание рендерера
Теперь мы можем создать рендерер, с помощью SDL_CreateRenderer . Это необходимо для того, чтобы получить возможность рисовать в окне. Данная функция принимает указатель на окно, с которым необходимо ассоциировать рендерер, индекс драйвера, который будет использоваться для рендеринга (или -1, чтобы выбрать первый подходящий под наши требования) и различные флаги , использующие для указания типа рендерера, который нам нужен. В данном случае мы запрашиваем рендерер с аппаратным ускорением и включенной вертикальной синхронизацией. Мы получим SDL_Renderer*, который будет NULL, если что-то пошло не так.

SDL_Renderer *ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); if (ren == nullptr){ std::cout << "SDL_CreateRenderer Error: " << SDL_GetError() << std::endl; return 1; }

Загрузка BMP изображения
Для того, чтобы отрендерить BMP картинку, нам необходимо сначала загрузить ее в память, а затем в устройство рендеринга, которое мы используем (в данном случае GPU). Мы можем загрузить изображение с помощью SDL_LoadBMP . Эта функция возвращает SDL_Surface* , которую мы можем загрузить в SDL_Texture , чтобы ей мог воспользоваться рендерер.

SDL_LoadBMP принимает путь к нашему изображению, который вы должны изменить, чтобы он соответствовал структуре вашего проекта, и возвращает SDL_Surface* или NULL, в случае ошибки.

SDL_Surface *bmp = SDL_LoadBMP("../res/Lesson1/hello.bmp"); if (bmp == nullptr){ std::cout << "SDL_LoadBMP Error: " << SDL_GetError() << std::endl; return 1; }
Теперь мы можем загрузить изображение в рендерер, используя SDL_CreateTextureFromSurface . Мы передаем контекст рендеринга и картинку в памяти (SDL_Surface), а получаем загруженную текстуру. В случае, если что-то пошло не так, мы получим NULL. Также SDL_Surface нам больше не потребуется, поэтому мы освободим занимаемую ей память.

SDL_Texture *tex = SDL_CreateTextureFromSurface(ren, bmp); SDL_FreeSurface(bmp); if (tex == nullptr){ std::cout << "SDL_CreateTextureFromSurface Error: " << SDL_GetError() << std::endl; return 1; }

Отрисовка текстуры
Все, что осталось сделать, это получить нашу текстуру на экране! Сперва мы очистим рендерер, после отрендерим текстуру , а затем покажем обновленный экран, чтобы увидеть результат. Так как мы хотим отрендерить изображение целиком и заставить его растянутся по размеру экрана, мы передадим NULL как исходный и целевой прямоугольники для SDL_RenderCopy. Также мы хотим сохранить окно открытым на некоторое время, чтобы увидеть результат до завершения программы, поэтому мы добавим вызов SDL_Delay .

SDL_RenderClear(ren); SDL_RenderCopy(ren, tex, NULL, NULL); SDL_RenderPresent(ren); SDL_Delay(2000);

Уборка мусора
Перед тем, как выйти, мы должны уничтожить все созданные нами объекты с помощью различных SDL_DestroyX функций и завершить SDL.

SDL_DestroyTexture(tex); SDL_DestroyRenderer(ren); SDL_DestroyWindow(win); SDL_Quit();

Конец урока
В случае успеха, при запуске вы должны увидеть изображение во все окно, а через две секунды программа завершится. В случае проблем убедитесь, что SDL установлена и настроена правильно. Подробная инструкция по установке и настройке SDL под различные платформы доступна .

Среда программирования:

Добрый день и добро пожаловать. Это серия статей будет посвящена библиотеке SDL2. В них я дам базовые знания, необходимые для написания графических приложений с помощью этой библиотеки. SDL2 - низкоуровневая библиотека, написанная для получения "почти" прямого доступа ко всему оборудованию компьютера. Что это значит? Больше скорости работы, меньше памяти, но и требования по знаниям у нее чуть больше. Но ничего бояться не нужно. Самый большой ее плюс в том, что она кроссплатформена, хотите писать код с минимальным отличием, который будет работать как в Windows так и в Linux/Mac? Тогда вам сюда.

Сразу же скачаем библиотеку. . Распакуйте этот архив куда угодно. Я положил в корень диска С (С:\SDL2)

Открываем студию и создаем новый проект -> Пустой проект.
Создаем в нем любой.cpp файл. Это важный шаг.
Нажимаем правой кнопкой мыши (ПКМ) в обозревателе решений по проекту -> свойства.

Если все хорошо то видим такое окно:

Выбираем С/С++ -> Общие -> Дополнительные каталоги включаемых файлов
Находим папку SDL2 и заходим в папку Includes. Нажимаем ОК. В строке получится что-то вроде C:\SDL2\include;%(AdditionalIncludeDirectories)

Компоновщик -> Ввод -> Дополнительные зависимости
Здесь необходимо нажать изменить и в Дополнительные зависимости прописать это:

SDL2.lib SDL2main.lib SDL2test.lib

Заходим в Компоновщик -> Система -> Подсистема
Выбираем (если не стоит) консоль.

А теперь последний штрих. Соберите проект как он есть. Это создаст ехе-файл.
Перейдите в папку "мои документы" и найдите свой проект (у меня мои документы/Visual studio 2015/projects/project1/debug) и помеcтите туда файл SDL2.DLL. Ваша программа НЕ БУДЕТ работать без этого файла.

Теперь небольшой код для проверки всего, что мы настроили:

//подключим SDL и stdio #include #include //Некоторые константы нашего окна const int SCREEN_WIDTH = 640 ; const int SCREEN_HEIGHT = 480 ; int main(int argc, char * args ) { //Какое окно будет рендерится SDL_Window* window = NULL ; //Поверхность окна SDL_Surface* screenSurface = NULL ; //Включим SDL if (SDL_Init(SDL_INIT_VIDEO) < 0 ) { printf ("SDL не смог запуститься! SDL_Error: %s\n " , SDL_GetError() ) ; } else { //Создаем окно window = SDL_CreateWindow("Урок1" , SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN) ; if (window == NULL ) { printf ("Окно не может быть создано! SDL_Error: %s\n " , SDL_GetError() ) ; } else { //Получаем поверхность screenSurface = SDL_GetWindowSurface(window) ; //Заполняем ее белым цветом SDL_FillRect(screenSurface, NULL , SDL_MapRGB(screenSurface- > format, 0xFF , 0xFF , 0xFF ) ) ; //Обновляем поверхность SDL_UpdateWindowSurface(window) ; //Ждем две секунды SDL_Delay(2000 ) ; } } //И удаляем из памяти окно SDL_DestroyWindow(window) ; //Выход из SDL SDL_Quit() ; return 0 ; }

Если в результате его выполнения вы увидели консоль и окно (Которое через 2 секунды закрылось), то вы все сделали правильно! До встречи на следующем уроке.

Simple DirectMedia Layer (SDL) - свободная кроссплатформенная мультимедийная библиотека, реализующая единый программный интерфейс к графической подсистеме, звуковым устройствам и средствам ввода для широкого спектра платформ. Данная библиотека активно используется при написании кроссплатформенных мультимедийных программ (в основном игр).

Официально поддерживаются следующие операционные системы: Microsoft Windows, Mac OS X, Linux, iOS и Android.

Основная часть SDL содержит базовый, весьма ограниченный спектр возможностей. Дополнительную функциональность обеспечивают библиотеки расширений, которые обычно входят в поставку SDL.

Начиная с версии 2.0, SDL распространяется под условиями лицензии ; до этого использовалась лицензия GNU Lesser General Public License, что позволяло свободно использовать библиотеку в коммерческих программах при условии, что она используется в них как динамически подключаемая библиотека.

SDL создал Сэм Лантинга, будучи ведущим программистом компании Loki Entertainment Software. История SDL начинается со времен, когда Сэм работал над программой-эмулятором Microsoft Windows для Macintosh. Он заметил, что многие куски кода без проблем могут работать на Linux. И он решил создать небольшую библиотеку, чтобы ей могли воспользоваться другие программисты. В октябре 1997 был выпущен релиз библиотеки с версией 0.3, а позже эту библиотеку вовсю использовала компания Loki Software для портирования игр под Linux.

После банкротства Loki Software Сэм работал в качестве ведущего разработчика в Blizzard, где велись работы по портированию World of Warcraft на Linux, но в компании решили закрыть проект.

С июля 2012 года Сэм присоединился к команде разработчиков Valve, где занимается дальнейшей разработкой SDL.

Структура Simple DirectMedia Layer

SDL сам по себе довольно прост. Его можно рассматривать как тонкую прослойку, обеспечивающую поддержку для 2D-операций над пикселами, звука, доступа к файлам, обработки событий и т. п.. Он часто используется в дополнение к OpenGL, предоставляя поддержку мыши, клавиатуры и джойстиков.

Библиотека состоит из нескольких подсистем, таких как Video, Audio, CD-ROM, Joystick и Timer. В дополнение к этой базовой низкоуровневой функциональности, существует ряд стандартных библиотек, предоставляющих дополнительную функциональность:

  • SDL image - поддержка различных растровых форматов;
  • SDL mixer - функции для организации сложного аудио, в основном, сведение звука из нескольких источников;
  • SDL net - поддержка сетевых функций;
  • SDL ttf - поддержка шрифтов TrueType;
  • SDL rtf - отрисовка текста в формате RTF.

По своей структуре библиотека SDL не является полноценным SDK (Software Development Kit) для разработчиков игр, так как не включает в себя высокоуровневые функции для работы с графикой, звуком и внешними устройствами. Но благодаря тому, что она предоставляет прямой доступ к графической системе, звуковой карте, устройствам ввода (клавиатуре, мыши, джойстику), CD-ROM’ому, таймеру и в ней реализованы некоторые низкоуровневые функции для работы с графикой и звуком, библиотеку вполне можно использовать для разработки не слишком сложных приложений или портирования существующих, где SDL библиотека будет использоваться как блиттер. В библиотеке реализован только минимум необходимых функций, она не раздута на десятки мегабайт и достаточно быстра. По своей сути SDL является каркасом для других библиотек, которые поддерживают более сложные функции в какой-то одной области (графика, микширование звука, поддержка различных форматов файлов, GUI и. т. д). И уже вместе с этими дополнительными библиотеками SDL и образует достаточно многофункциональный, хоть и уже устаревший, SDK для разработчиков игр.

В этом разделе я рассмотрю сборку частоиспользуемых библиотек SDL. Некоторые из них поддерживаются официально, некоторые поддерживаются сторонними разработчиками. Собраное SDL-окружение для MinGW позволит вам легко перенести множество игр на платформу Windows.

2.3.1. Компиляция и установка основной библиотеки SDL

Описание:


Сборка:

2.3.1.1. Скачиваем последнюю версию исходников библиотеки SDL с официального сайта, на момент написания статьи это 1.2.15: SDL-1.2.15.tar.gz

2.3.1.2. Распаковываем архив в папку “C:\Qt\build\SDL”, исходники библиотеки должны быть в папке “C:\Qt\build\SDL\SDL-1.2.15”.

2.3.1.3. Компилируем и устанавливаем SDL-библиотеку:

Запускаем “C:\Qt\MinGW\msys\1.0\msys.bat” и набираем в консольном окне такие команды:


cd / c / Qt / build / SDL / SDL - 1.2 . 15 ./ configure -- prefix =/ mingw make make install

./ configure -- help

Например, опция “–enable-stdio-redirect=no” отключает файлы “stdout.txt” и “stderr.txt”, которые создаются при запуске программы, и направляет вывод в консольное окно.

2.3.1.4. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы должны скопироваться в соответствующие папки:

Динамическая “SDL.dll” в “C:\Qt\MinGW\bin”

Статические “libSDL.a”, “libSDL.dll.a” и “libSDLmain.a” в “C:\Qt\MinGW\lib”

2.3.1.5. Запуск и компиляция небольшого демо-кода:

Создаем файл “sdldemo.c” в папке “C:\Qt\build\SDL” с таким содержимым:


#include #include void display () { glClear (GL_COLOR_BUFFER_BIT ); glColor3f (1.0f , 0.5f , 0.0f ); glBegin (GL_TRIANGLES ); glVertex2f (- 1.0 , - 1.0 ); glVertex2f (0 , 1.0 ); glVertex2f (1.0 , - 1.0 ); glEnd (); glFlush (); SDL_GL_SwapBuffers (); } void SDL_Loop () { Uint8 * keys ; int done = 0 ; while (! done ) { SDL_Event event ; display (); while (SDL_PollEvent (& event )) { switch (event . type ) { case SDL_QUIT : done = 1 ; break ; } } keys = SDL_GetKeyState (NULL ); if (keys [ SDLK_ESCAPE ]) done = 1 ; } } int main (int argc , char * argv ) { SDL_Surface * screen ; SDL_Init (SDL_INIT_VIDEO ); screen = SDL_SetVideoMode (200 , 200 , 16 , SDL_OPENGL ); SDL_Loop (); SDL_Quit (); return 0 ; }

и сохраняем.

Для компиляции и запуска кода запускаем “C:\Qt\MinGW\msys\1.0\msys.bat” и набираем в консольном окне такие команды:


cd / c / Qt / build / SDL gcc - mwindows sdldemo . c - o sdldemo - lmingw32 - lSDLmain - lSDL - lopengl32 ./ sdldemo . exe

Приложение “sdldemo.exe” создаст простое и небольшое окно с оранжевым треугольником в центре:

2.3.2. Компиляция и установка библиотеки SDL_image

Описание:

Библиотека SDL_image является расширением основной библиотеки SDL и позволяет использовать в SDL-приложениях различные форматы изображений, не ограничиваясь форматом “*.bmp”. SDL_image позволяет программистам легко использовать несколько форматов без необходимости написания функций загрузки и преобразования.


Сборка:

Внимание! Зависимости:

2.3.2.2. Распаковываем скачанный архив в папку “C:\Qt\build\SDL”, исходники библиотеки должны быть в папке “C:\Qt\build\SDL\SDL_image-1.2.12”.

2.3.2.3. Компилируем и устанавливаем библиотеку SDL_image:


cd / c / Qt / build / SDL / SDL_image - 1.2 . 12 ./ configure -- prefix =/ mingw make make install

Библиотека скомпилировалась с дефолтными параметрами. Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду


./ configure -- help

2.3.2.4. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы должны скопироваться в соответствующие папки:

Динамическая библиотека “SDL_image.dll” в “C:\Qt\MinGW\bin”

Статическая “libSDL_image.a” в “C:\Qt\MinGW\lib”

Хэдеры в “C:\Qt\MinGW\include\SDL”

2.3.2.5. На этом установка завершена. При желании можно скомпилировать утилиту “showimage.exe”:


cd / c / Qt / build / SDL / SDL_image - 1.2 . 12 gcc showimage . c - o showimage - I / mingw / include / SDL - lmingw32 - lSDLmain - lSDL - lSDL_image - mwindows

Если на “showimage.exe” перетащить любое изображение – оно откроется в окне.

2.3.3. Компиляция и установка библиотеки SDL_net

Описание:

Сетевая библиотека SDL_net является расширением основной библиотеки SDL и позволяет использовать в SDL-приложениях сеть. SDL_net позволяет программистам легко обработавать сетевые соединения и передачу данных. Код, написанный с использованием функций из этой библиотеки, будет кроссплатформенным.


Сборка:

2.3.3.1. Скачиваем последнюю стабильную версию исходников библиотеки SDL_net, на момент написания статьи последняя версия 1.2.8: SDL_net-1.2.8.tar.gz

2.3.3.2. Распаковываем скачанный архив в папку “C:\Qt\build\SDL”, исходники библиотеки должны быть в папке “C:\Qt\build\SDL\SDL_net-1.2.8”.

2.3.3.3. Компилируем и устанавливаем библиотеку SDL_net:

Запускаем “C:\Qt\MinGW\msys\1.0\msys.bat” или ConEmu и набираем в консольном окне такие команды:


cd / c / Qt / build / SDL / SDL_net - 1.2 . 8 ./ configure -- prefix =/ mingw make make install

Библиотека скомпилировалась с дефолтными параметрами. Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду


./ configure -- help

2.3.3.4. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы должны скопироваться в соответствующие папки:

Динамическая библиотека “SDL_net.dll” в “C:\Qt\MinGW\bin”

Статическая “libSDL_net.a” в “C:\Qt\MinGW\lib”

Хэдер “SDL_net.h” в “C:\Qt\MinGW\include\SDL”

2.3.4. Компиляция и установка библиотеки SDL_gfx

Описание:

Библиотека SDL_gfx содержит в себе функции рисования примитивов и работы над изображениями-спрайтами (масштабирование, повороты, фильтры и т.д). Она развились из проекта SDL_gfxPrimitives, который представлял основные процедуры рисования примитивов, таких как: линии, окружности и многоугольники. Библиотека не относится к официальным, но большое количество проектов ее используют.


Сборка:

2.3.4.1. Скачиваем последнюю стабильную версию исходников библиотеки SDL_gfx, на момент написания статьи последняя версия 2.0.24: SDL_gfx-2.0.24.tar.gz

2.3.4.2. Распаковываем скачанный архив в папку “C:\Qt\build\SDL”, исходники библиотеки должны быть в папке “C:\Qt\build\SDL\SDL_gfx-2.0.24”.

2.3.4.3. Компилируем и устанавливаем библиотеку SDL_gfx:

Запускаем “C:\Qt\MinGW\msys\1.0\msys.bat” или ConEmu и набираем в консольном окне такие команды:


cd / c / Qt / build / SDL / SDL_gfx - 2.0 . 24 ./ configure -- prefix =/ mingw make make install

Если при компиляции возникла ошибка:


libtool : Version mismatch error . This is libtool 2.4 . 2 , but the libtool : definition of this LT_INIT comes from libtool 2.4 . libtool : You should recreate aclocal . m4 with macros from libtool 2.4 . 2 libtool : and run autoconf again . make : *** [ SDL_gfxPrimitives . lo ] Error 63

Выполните команду:


autoreconf - fvi

И повторите конфигурирование, а затем компиляцию.


Библиотека скомпилировалась с дефолтными параметрами. Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду


./ configure -- help

2.3.4.4. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы должны скопироваться в соответствующие папки:

Динамическая библиотека “libSDL_gfx-14.dll” в “C:\Qt\MinGW\bin”

Статическая “libSDL_gfx.a” и “libSDL_gfx.dll.a” в “C:\Qt\MinGW\lib”

Хэдеры в “C:\Qt\MinGW\include\SDL”

2.3.4.5. На этом установка завершена. При желании можно скомпилировать утилиту “TestGfxTexture.exe”:


cd / c / Qt / build / SDL / SDL_gfx - 2.0 . 24 / Test gcc TestGfxTexture . c - o TestGfxTexture - I / mingw / include / SDL - lmingw32 - lSDLmain - lSDL - lSDL_gfx - mwindows ./ TestGfxTexture

При запуске откроется окно, показывающее результат текстурирования.

2.3.5. Компиляция и установка библиотеки SDL_ttf 2.0

Описание:

SDL_ttf 2.0 представляет собой библиотеку отрисовки шрифтов TrueType, и используется вместе с библиотекой SDL. Это позволяет программистам использовать шрифты TrueType без написания собственного рендера шрифта. Благодаря функциям масштабирования шрифтов и антиалиасинга можно получить высокое качество вывода текста без особых усилий.


Сборка:

Внимание! Зависимости:

2.3.5.1. Скачиваем последнюю стабильную версию исходников библиотеки SDL_ttf 2.0, на момент написания статьи последняя версия 2.0.11: SDL_ttf-2.0.11.tar.gz

2.3.5.2. Распаковываем скачанный архив в папку “C:\Qt\build\SDL”, исходники библиотеки должны быть в папке “C:\Qt\build\SDL\SDL_ttf-2.0.11” .

2.3.5.3. Компилируем и устанавливаем библиотеку SDL_ttf 2.0:

Запускаем “C:\Qt\MinGW\msys\1.0\msys.bat” или ConEmu и набираем в консольном окне такие команды:


cd / c / Qt / build / SDL / SDL_ttf - 2.0 . 11 ./ configure -- prefix =/ mingw make make install

Библиотека скомпилировалась с дефолтными параметрами. Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду


./ configure -- help

2.3.5.4. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы должны скопироваться в соответствующие папки:

Динамическая библиотека “SDL_ttf.dll” в “C:\Qt\MinGW\bin”

Статическая “libSDL_ttf.a” и остальные в “C:\Qt\MinGW\lib”

Хэдеры в “C:\Qt\MinGW\include\SDL”

2.3.5.5. На этом установка завершена. При желании можно скомпилировать утилиту “showfont.exe”:


cd / c / Qt / build / SDL / SDL_ttf - 2.0 . 11 gcc showfont . c - o showfont - I / mingw / include / SDL - lmingw32 - lSDLmain - lSDL - lSDL_ttf

Если на “showfont.exe” перетащить любой “*.ttf” шрифт – он откроется в окне.

2.3.6. Компиляция и установка библиотеки SDL_mixer

Описание:

SDL_mixer это библиотека микширования звука, которая может использоваться вместе с библиотекой SDL. Она позволяет программистам использовать звуки вместе с музыкой и не писать собственные микшеры. Библиотека также упрощает загрузку, обработку и воспроизведения звуков и музыки всевозможных форматов файлов, в собираемой нами конфигурации библиотека сможет поддерживать такие форматы как “*.mp3”, “*.ogg”, “*.flac”, “*.mod” и несколько других.


Сборка:

Внимание! Зависимости:

Перед компиляцией библиотеки скомпилируйте и установите все зависимости!

2.3.6.1. Скачиваем последнюю стабильную версию исходников библиотеки SDL_mixer, на момент написания статьи последняя версия 1.2.12: SDL_mixer-1.2.12.tar.gz

2.3.6.2. Распаковываем скачанный архив в папку “C:\Qt\build\SDL”, исходники библиотеки должны быть в папке “C:\Qt\build\SDL\SDL_mixer-1.2.12”.

2.3.6.3. Открываем файл “C:\Qt\build\SDL\SDL_mixer-1.2.12\Makefi le.in” и заменяем одинаковые строки #69 и #72 :


$ (LIBTOOL ) -- mode = link $ (CC ) - o $@ $ (objects )/ playwave . lo $ (SDL_CFLAGS ) $ (SDL_LIBS ) $ (objects )/ $ (TARGET )

на строку


$ (LIBTOOL ) -- mode = link $ (CC ) - o $@ $ (objects )/ playwave . lo $ (SDL_CFLAGS ) $ (objects )/ $ (TARGET ) $ (SDL_LIBS )

после замены сохраняем файл.

2.3.6.4. Компилируем и устанавливаем библиотеку SDL_mixer:

Запускаем “C:\Qt\MinGW\msys\1.0\msys.bat” или ConEmu и набираем в консольном окне такие команды:


cd / c / Qt / build / SDL / SDL_mixer - 1.2 . 12 ./ configure -- enable - music - mp3 - mad - gpl -- disable - music - mp3 -- disable - music - fluidsynth - midi -- prefix =/ mingw make make install

export LIBS = "-L/mingw/lib -logg -lws2_32"

А потом уже выполнять конфигурирование. Без этой строки “conftest.c” может не слинковаться. После компиляции не забудьте выполнить:


export - n LIBS

Чтобы очистить переменную окружения LIBS.


Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду


./ configure -- help

2.3.6.5. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы должны скопироваться в соответствующие папки:

Динамическая библиотека “SDL_mixer.dll” в “C:\Qt\MinGW\bin”

Статическая “libSDL_mixer.a” и остальные в “C:\Qt\MinGW\lib”

Хэдер “SDL_mixer.h” в “C:\Qt\MinGW\include\SDL”

2.3.6.6. В комментариях обнаружилась интересная ошибка на стадии линковки, при компилировании библиотеки SDL_mixer компилятором MinGW (GCC 4.7.2). Ошибка возникала из-за того, что libtool, используевшийся для компиляции в SDL_mixer не мог подлинковать библиотеку libpthread, отвечающую за потоки и нужную для дефолтного конфигурирования libmikmod. В данном блоке показана последовательность действий, выполнив которые вы сохраните многопоточность библиотеки libmikmod и сможете скомпилировать и установить библиотеку SDL_mixer.

Все действия актуальны на момент написания этого блока (04.06.2012).


Все библиотеки в зависимостях, кроме MikMod, конфигурируются, компилируются и устанавливаются стандартно.

Библиотека “libmikmod-3.2.0” конфигурируется теперь так:


export CFLAGS = "-march=native" ./ configure -- prefix =/ mingw make make install export - n CFLAGS

И, наконец, библиотека “SDL_mixer-1.2.12” компилируется так:

2.3.6.6.1. Открываем файл “C:\Qt\build\SDL\SDL_mixer-1.2.12\Makefi le.in” и заменяем строки #26 , #69 и #72 на следующие,


LDFLAGS = - pthread @BUILD_LDFLAGS@ $ (LIBTOOL ) -- mode = link $ (CC ) - o $@ $ (objects )/ playwave . lo $ (SDL_CFLAGS ) $ (objects )/ $ (TARGET ) $ (SDL_LIBS ) $ (LIBTOOL ) -- mode = link $ (CC ) - o $@ $ (objects )/ playwave . lo $ (SDL_CFLAGS ) $ (objects )/ $ (TARGET ) $ (SDL_LIBS )

сохраняя порядок соответственно.


Затем обычное конфигурирование и компиляция:


. /configure --enable-music-mp3-mad-gpl --disable-music-mp3 --disable-music-fluidsynth-midi --prefix=/ mingw make make install

Стоит заметить, что теперь приложения, использующие SDL_mixer будут еще требовать и библиотеку “pthreadGC2.dll”. В комментариях есть примеры сборок SDL_mixer без libmikmod’a или с libmikmod’ом, но без потоков.

2.3.6.7. На этом установка завершена. Для проверки правильности работы библиотеки можно скомпилировать простейший плеер “sdlwav.exe”. Для этого нужно скачать файл “sdlwav.c “, сохранить его в папку “C:\Qt\build\SDL” и скомпилировать его следующим образом:


cd / c / Qt / build / SDL gcc sdlwav . c - o sdlwav - I / mingw / include / SDL - lmingw32 - lSDLmain - lSDL - lSDL_mixer

Теперь если на “sdlwav.exe” перетащить любой файл, содержащий музыку или звук в формате “*.mp3”, “*.flac”, “*.ogg”, “*.wav” или “*.mod” – он должен воспроизвестись, помимо этого должно открыться окно простенького визуализатора, если окно с ним активно то можно перемотать трек стрелками на клавиатуре или поставить его на паузу пробелом.



После запуска в файле “stdout.txt” (он будет рядом с “sdlwav.exe”), или в выводе консоли будут показаны доступные декодеры и их количество. Для нашей конфигурации SDL_mixer получился следующий лог:


Before Mix_Init SDL_mixer supported : None After Mix_Init SDL_mixer supported : FLAC MOD OGG There are 5 available chunk (sample ) decoders : WAVE AIFF VOC OGG FLAC There are 6 available music decoders : WAVE MIKMOD NATIVEMIDI OGG FLAC MP3 Opened audio at 44100 Hz 16 bit stereo , 1024 bytes audio buffer Music type : MUS_MP3_MAD