Введение

Свободная мультимедийная библиотека

Simple DirectMedia Layer (SDL) — это кроссплатформенная библиотека разработки программного обеспечения, предназначенная для обеспечения аппаратной абстракции для компьютерных мультимедийных компонентов. Разработчики программного обеспечения могут использовать её для создания высокопроизводительных компьютерных игр и других мультимедийных приложений, работающих во многих операционных системах, таких как Android, iOS, Linux, macOS и Windows. SDL управляет видео, аудио, устройствами ввода, CD-ROM, потоками, загрузкой общих объектов, сетевыми соединениями и таймерами. Для 3D-графики она может работать с контекстом OpenGL, Vulkan, Metal или Direct3D11 (также поддерживается более старая версия Direct3D 9). Распространённое заблуждение состоит в том, что SDL — это игровой движок. Однако библиотека подходит для непосредственной разработки игр или может использоваться косвенно движками, созданными на её основе. Библиотека реализована на C и, возможно, в зависимости от целевой платформы, на C++ или Objective C, и предоставляет интерфейс прикладного программирования (API) на C, с доступными привязками к другим языкам. Это свободное программное обеспечение с открытым исходным кодом, распространяемое по лицензии zlib, начиная с версии 2.0, а более ранние версии — по лицензии GNU Lesser General Public License. SDL 2.0, выпущенная в 2013 году, значительно отличалась от предыдущих версий, предлагая больше возможностей для аппаратного 3D-ускорения, но нарушая обратную совместимость. SDL широко используется в индустрии как в крупных, так и в небольших проектах. На веб-сайте библиотеки размещено более 700 игр, 180 приложений и 120 демонстраций.

История

Сэм Лантинга создал библиотеку, впервые выпустив её в начале 1998 года, работая в Loki Software. Идея пришла к нему во время переноса приложения Windows на Macintosh. Затем он использовал SDL для портирования Doom на BeOS (см. исходные порты Doom). Ряд других бесплатных библиотек были разработаны для совместной работы с SDL, таких как SMPEG и OpenAL. В 2008 году он также основал Galaxy Gameworks для коммерческой поддержки SDL, хотя планы компании в настоящее время приостановлены из-за нехватки времени. Вскоре после приостановки деятельности Galaxy Gameworks, Лантинга объявил, что SDL 1.3 (который впоследствии стал SDL 2.0) будет распространяться под лицензией zlib. Лантинга объявил о выпуске SDL 2.0 14 июля 2012 года, одновременно сообщив о своём переходе в Valve, первая версия которой была анонсирована в тот же день, когда он присоединился к компании. Лантинга объявил о стабильном выпуске SDL 2.0.0 13 августа 2013 года. SDL 2.0 – это значительное обновление кодовой базы SDL 1.2 с другим, не обратно совместимым API. Он заменяет несколько частей API 1.2 более общей поддержкой различных вариантов ввода и вывода. Среди новых функций – поддержка нескольких окон, аппаратное ускорение 2D-графики и улучшенная поддержка Unicode. Поддержка Mir и Wayland была добавлена в SDL 2.0.2 и включена по умолчанию в SDL 2.0.4. Версия 2.0.4 также обеспечила улучшенную поддержку Android.

Архитектура программного обеспечения

SDL — это оболочка, обертывающая специфические для операционной системы функции, к которым игре необходимо иметь доступ. Единственная цель SDL — предоставить единую основу для доступа к этим функциям на различных операционных системах (кроссплатформенность). SDL поддерживает 2D-пиксельные операции, звук, доступ к файлам, обработку событий, таймеры и многопоточность. Его часто используют в сочетании с OpenGL для настройки графического вывода и обеспечения ввода с мыши и клавиатуры, поскольку OpenGL отвечает только за рендеринг. Игра, использующая Simple DirectMedia Layer, не будет автоматически запускаться на всех операционных системах; потребуются дополнительные адаптации. Однако они сведены к минимуму, так как SDL также содержит несколько абстрактных API для часто используемых функций операционной системы. Синтаксис SDL основан на функциях: все операции в SDL выполняются путем передачи параметров в подпрограммы (функции). Для хранения специфической информации, необходимой SDL для обработки, также используются специальные структуры. Функции SDL сгруппированы по различным подсистемам.

Прием и усыновление

На протяжении многих лет SDL использовался во множестве коммерческих и некоммерческих игровых проектов. Например, по данным MobyGames, в 2013 году 120 игр использовали SDL, а на самом сайте SDL в 2012 году было указано около 700 игр. Важными коммерческими примерами являются Angry Birds, Unreal Tournament и игры, разработанные с использованием движка Source от Valve, который активно использует SDL для обеспечения кроссплатформенной совместимости; среди проектов с открытым исходным кодом можно выделить OpenTTD, The Battle for Wesnoth и Freeciv. Кроссплатформенные релизы популярных Humble Indie Bundle для Linux, Mac и Android часто создаются на основе SDL. SDL также часто применяется при портировании игр на новые платформы с использованием устаревшего кода. Например, PC-игра Homeworld была портирована на портативную консоль Pandora, а Jagged Alliance 2 – на Android с помощью SDL. Помимо этого, SDL используется в ряде программ, не являющихся играми, например, в эмуляторах DOSBox, FUSE ZX Spectrum и VisualBoyAdvance. Существует несколько книг, посвященных разработке с использованием SDL (см. раздел «Дополнительная литература»). SDL применяется в университетских курсах по мультимедиа и информатике, например, в семинаре по программированию игр с использованием libSDL в Университете Кадиса в 2010 году или в дисциплине «Game Design» в UTFPR (кампус Понта-Гроса) в 2015 году.