Простой слой DirectMedia
Оригинальный автор(ы) | Сэм Лантинг |
---|---|
Разработчик(и) | Сообщество SDL |
Первоначальный выпуск | 1998 год |
Стабильная версия | 2.30.5 [1] / 3 июля 2024 г. |
Репозиторий | |
Написано в | С |
Операционная система | Linux (например, SteamOS ), Windows, macOS 10.4+ , iOS 3.1.3+ , tvOS , [2] Android 2.3.3+ , FreeBSD 8.4+ , Nintendo Switch , PlayStation 2 , Haiku, RISC OS 3.5+ [3] Дополнительно до версии 2.0.0: например, AmigaOS и MorphOS, а также консоли (PlayStation, XBox, Wii и т. д.), Nintendo DS. |
Тип | API |
Лицензия | Лицензия zlib До версии 2.0.0: ГНУ ЛГПЛ [4] |
Веб-сайт | www |
Simple DirectMedia Layer ( SDL ) — это кроссплатформенная разработки программного обеспечения библиотека , предназначенная для обеспечения уровня абстракции оборудования для компьютерного мультимедийного компонентов оборудования . Разработчики программного обеспечения могут использовать его для написания высокопроизводительных компьютерных игр и других мультимедийных приложений, которые могут работать во многих операционных системах, таких как Android , iOS , Linux , macOS и Windows . [5]
SDL управляет видео , аудио , устройствами ввода , потоками , общих объектов загрузкой , сетью и таймерами. [6] Для 3D-графики он может обрабатывать OpenGL , Vulkan , [7] Metal или контекст Direct3D11 (также поддерживается более старая версия Direct3D 9). Распространенным заблуждением является то, что SDL — это игровой движок . Однако библиотека подходит для создания игр напрямую или может использоваться косвенно движками, созданными на ее основе.
Библиотека внутренне написана на C и, возможно, в зависимости от целевой платформы, на C++ или Objective-C , и предоставляет интерфейс программирования приложений на C с доступными привязками к другим языкам. [8] Это бесплатное программное обеспечение с открытым исходным кодом, на которое распространяются требования лицензии zlib, начиная с версии 2.0, а на предыдущие версии распространяется действие лицензии GNU Lesser General Public License . [4] По лицензии zlib SDL 2.0 доступен бесплатно для статического связывания в с закрытым исходным кодом , в отличие от SDL 1.2. проектах [9] хотя пользователь может переопределить статически связанную библиотеку предоставленной им библиотекой. [10] SDL 2.0, выпущенный в 2013 году, значительно отличался от предыдущих версий, предлагая больше возможностей для аппаратного 3D-ускорения, но, нарушив обратную совместимость, позже стала доступна библиотека-оболочка, предназначенная для преобразования вызовов 1.2 в 2.0. [11]
SDL широко используется в отрасли как в крупных, так и в небольших проектах. На сайте библиотеки размещено более 700 игр, 180 приложений и 120 демоверсий. [12]
История
[ редактировать ]Сэм Лантинга создал библиотеку, впервые выпустив ее в начале 1998 года, работая в Loki Software . Идея пришла ему в голову при портировании приложения Windows на Macintosh. Затем он использовал SDL для портирования Doom на BeOS (см. исходные порты Doom ). [13] Для работы вместе с SDL было разработано несколько других бесплатных библиотек, таких как SMPEG и OpenAL . Он также основал Galaxy Gameworks в 2008 году, чтобы помочь в коммерческой поддержке SDL, хотя планы компании в настоящее время приостановлены из-за нехватки времени. [14]
Вскоре после приостановки работы Galaxy Gameworks Лантинга объявил, что SDL 1.3 (который позже станет SDL 2.0) будет лицензироваться по лицензии zlib License . [15] Лантинга анонсировал SDL 2.0 14 июля 2012 года, одновременно объявив о своем присоединении к Valve , первая версия которой была анонсирована в тот же день, когда он присоединился к компании. [16] Лантинга объявила о стабильном выпуске SDL 2.0.0 13 августа 2013 года. [17]
SDL 2.0 — это крупное обновление кодовой базы SDL 1.2 с другим, не обратно совместимым [18] API . Он заменяет несколько частей API 1.2 более общей поддержкой нескольких вариантов ввода и вывода. Некоторые дополнения к функциям включают поддержку нескольких окон, 2D-графику с аппаратным ускорением и улучшенную поддержку Unicode . [19]
Поддержка Mir и Wayland добавлена в SDL 2.0.2. [20] и включен по умолчанию в SDL 2.0.4. [21] Версия 2.0.4 также обеспечила лучшую поддержку Android. [22]
Архитектура программного обеспечения
[ редактировать ]SDL — это оболочка для функций, специфичных для операционной системы, к которым игра должна иметь доступ. Единственная цель SDL — предоставить общую структуру для доступа к этим функциям для нескольких операционных систем (кроссплатформенность). [23] SDL обеспечивает поддержку операций с 2D-пикселями, звука, доступа к файлам, обработки событий, синхронизации и потоковой обработки. Его часто используют в качестве дополнения к OpenGL , настраивая графический вывод и обеспечивая ввод с помощью мыши и клавиатуры, поскольку OpenGL включает в себя только рендеринг.
Игра, использующая Simple DirectMedia Layer, не будет автоматически запускаться в каждой операционной системе; необходимо применить дальнейшие адаптации. Они сведены к минимуму, поскольку SDL также содержит несколько API-интерфейсов абстракции для часто используемых функций, предлагаемых операционной системой.
Синтаксис SDL основан на функциях: все операции, выполняемые в SDL, выполняются путем передачи параметров подпрограммам (функциям). Специальные структуры также используются для хранения конкретной информации, которую должен обрабатывать SDL. Функции SDL подразделяются на несколько различных подсистем.
Подсистемы
[ редактировать ]SDL разделен на несколько подсистем: [24]
- Основы
- Инициализация и завершение работы, переменные конфигурации, обработка ошибок, обработка журналов
- Видео
- Управление дисплеем и окнами, функции поверхности, ускорение рендеринга и т. д.
- Входные события
- Обработка событий , поддержка клавиатуры, мыши, джойстика и игрового контроллера
- Силовая обратная связь
- SDL_haptic.h реализует поддержку «Force Feedback».
- Аудио
- SDL_audio.h реализует управление аудиоустройствами, воспроизведение и запись.
- Темы
- многопоточность : управление потоками, примитивы синхронизации потоков, атомарные операции.
- Таймеры
- Поддержка таймера
- Абстракция файла
- Пути файловой системы, абстракция файлового ввода-вывода
- Поддержка общих объектов
- Загрузка общих объектов и поиск функций
- Информация о платформе и процессоре
- Обнаружение платформы, определение функций ЦП, порядок и замена байтов, битовые манипуляции
- Управление питанием
- Статус управления питанием
- Дополнительный
- Функциональность, специфичная для платформы
Помимо этой базовой низкоуровневой поддержки, существует также несколько отдельных официальных библиотек, которые предоставляют еще несколько функций. Они составляют «стандартную библиотеку», представлены на официальном сайте и включены в официальную документацию:
- SDL_image — поддержка нескольких форматов изображений. [25]
- SDL_mixer — сложные аудиофункции, в основном для микширования звука. [26]
- SDL_net — поддержка сети [27]
- SDL_ttf — TrueType. поддержка рендеринга шрифтов [28]
- SDL_rtf — простой в формате Rich Text Format рендеринг [29]
Существуют и другие нестандартные библиотеки. Например: SDL_Collide на SourceForge, созданный Амиром Тааки .
Языковые привязки
[ редактировать ]Библиотека SDL 2.0 имеет языковые привязки для:
- Есть [8]
- Говядина
- С
- С++
- С# [8]
- Общий Лисп [30]
- Д [8]
- Фортран [31]
- Креветки [32]
- Джинн
- Идти [8] [33]
- Хаскелл [34] [35]
- Java (например, JSDL)
- Юлия [36] [37] [38] [33]
- Два [8]
- Nim [39]
- OCaml [8]
- Паскаль [8]
- Perl (через SDL) [40]
- PHP [41]
- Python (несколько, например pygame_sdl2 и sdl2hl) [8]
- Раку [42]
- Кольцо [43] [44]
- Ржавчина [8]
- Налить
Поддерживаемые серверные части
[ редактировать ]Из-за особенностей конструкции SDL большая часть его исходного кода разделена на отдельные модули для каждой операционной системы для выполнения вызовов базовой системы. При компиляции SDL для целевой системы выбираются соответствующие модули. Доступны следующие серверные части: [5]
- GDI Серверная часть для Microsoft Windows .
- DirectX Серверная часть ; более старая версия SDL 1.2 по умолчанию использует DirectX 7, а версия 2.0 по умолчанию использует DirectX 9 и может получить доступ к DirectX 11.
- Quartz Серверная часть для macOS (убрана в версии 2.0).
- Металлический бэкенд для macOS / iOS / tvOS начиная с 2.0.8; более старые версии по умолчанию используют OpenGL. [45] [46]
- Xlib Серверная часть X11 на базе для оконной системы в различных операционных системах. [47]
- Контексты OpenGL на различных платформах. [48]
- EGL при использовании в сочетании с оконной системой на основе Wayland. Серверная часть [49] Малиновый Пи [50] и другие системы.
- Контексты Vulkan на платформах, которые его поддерживают. [7]
- sceGu — серверная часть Sony OpenGL, встроенная в PSP .
неофициальный сервер Sixel . Для SDL 1.2 доступен [51]
Прошивка MP3-плеера Rockbox также распространяет версию SDL 1.2, которая используется для запуска таких игр, как Quake . [52]
Прием и усыновление
[ редактировать ]На протяжении многих лет SDL использовался во многих коммерческих и некоммерческих проектах видеоигр. Например, в 2013 году MobyGames перечислила 120 игр, использующих SDL. [53] а на самом веб-сайте SDL в 2012 году было перечислено около 700 игр. [54] Важными коммерческими примерами являются Angry Birds , [55] Unreal Tournament и игры, разработанные с использованием Valve движка Source Engine , который широко использует SDL для кроссплатформенной совместимости; из домена с открытым исходным кодом — OpenTTD , [56] Битва за Веснот [57] или Фрицив . [58]
Кроссплатформенные версии игр популярных пакетов Humble Indie Bundles для Linux, Mac и Android часто основаны на SDL.
SDL также часто используется для более поздних портов на новых платформах с устаревшим кодом. Например, компьютерная игра Homeworld была портирована на Pandora. портативный компьютер [59] и Jagged Alliance 2 для Android [60] через СДЛ.
Кроме того, несколько программ, не связанных с видеоиграми, используют SDL; примерами являются эмуляторы , такие как DOSBox , эмулятор FUSE ZX Spectrum и VisualBoyAdvance .
Было написано несколько книг по разработке с использованием SDL (см. дополнительную литературу).
SDL используется в университетских курсах по преподаванию мультимедиа и информатики , например, на семинаре по программированию игр с использованием libSDL в Университете Кадиса в 2010 году или по дисциплине «Дизайн игр» в UTFPR (кампус Понта-Гросса) в 2015 году.
Примеры видеоигр с использованием SDL
[ редактировать ]- Хеджварс [62]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «Выпуск 2.30.5» . 3 июля 2024 г. Проверено 27 июля 2024 г.
- ^ «Ой, посмотрите, у нас будет официальная поддержка tvOS в SDL 2.0.5 для людей, которым нужны игры на основе SDL на Apple TV!» . 15 сентября 2016 г.
- ^ «SDL/docs/README-riscos.md по адресу 9d83c0a65d969a902c91f4f94fd5a904c0828a33 · libsdl-org/SDL» . Гитхаб . Проверено 17 марта 2024 г.
- ^ Перейти обратно: а б «Лицензия SDL» . Проверено 3 марта 2014 г.
- ^ Перейти обратно: а б «список платформ, поддерживаемых SDL» . Libsdl.org. Архивировано из оригинала 1 апреля 2016 года . Проверено 9 апреля 2016 г.
- ^ «Официальный сайт СДЛ» . Libsdl.org . Проверено 19 марта 2010 г.
- ^ Перейти обратно: а б «КатегорияVulkan — SDL Wiki » . wiki.libsdl.org . Проверено 5 мая 2019 г.
- ^ Перейти обратно: а б с д и ж г час я дж «Языковые привязки SDL» . libsdl.org . Простой слой DirectMedia . Проверено 13 августа 2014 г.
- ^ «Лицензирование библиотеки Simple DirectMedia Layer» . Проверено 30 января 2012 г.
- ^ «SDL/docs/README-dynapi.md в главном · libsdl-org/SDL» . Гитхаб . Проверено 25 июня 2024 г.
- ^ libsdl-org/sdl12-compat , Simple Directmedia Layer, 1 июня 2024 г. , получено 25 июня 2024 г.
- ^ «Простой уровень DirectMedia» . 29 июня 2010 года. Архивировано из оригинала 29 июня 2010 года . Проверено 7 августа 2021 г.
- ^ Лантинга, Сэм (1 сентября 1999 г.). «SDL: Делаем Linux интересным» . ИБМ . Архивировано из оригинала 11 мая 2003 года . Проверено 15 декабря 2023 г.
- ^ «Исследование Галактики» . 6 апреля 2011 года . Проверено 30 января 2012 г.
- ^ SDL 1.3 будет иметь лицензию zLib , список рассылки SDL, 7 апреля 2011 г.
- ^ «Скоро появится SDL 2.0 с новыми функциями» . Проверено 17 августа 2012 г.
- ^ Анонс SDL 2.0.0 , список рассылки SDL, 13 августа 2013 г.
- ^ Руководство по миграции — SDL Wiki' . Wiki.libsdl.org (21 ноября 2013 г.). Проверено 8 декабря 2013 г.
- ^ «Дорожная карта SDL 1.3» . 14 июня 2011 года . Проверено 25 июля 2011 г.
- ^ Снеддон, Джоуи-Элайджа (5 февраля 2014 г.). «Некоторые из самых популярных игр для Linux будут работать на Mir» . Проверено 19 марта 2014 г.
- ^ Лантинга, Сэм (2 января 2016 г.). «Журнал изменений SDL 2.0.4» . Проверено 6 января 2016 г. .
- ^ «SDL_SysWMinfo» .
- ^ «Введение в SDL» . Проверено 3 марта 2014 г.
- ^ «APIByCategory» .
- ^ «SDL_image 2.0» . libsdl.org . Проверено 19 июля 2014 г.
- ^ «SDL_mixer 2.0» . libsdl.org . Проверено 19 июля 2014 г.
- ^ «SDL_net 2.0» . libsdl.org . Проверено 19 июля 2014 г.
- ^ «SDL_ttf 2.0» . libsdl.org . Проверено 19 июля 2014 г.
- ^ «SDL_rtf 0.1» . libsdl.org . Проверено 19 июля 2014 г.
- ^ "cl-sdl2" . Гитхаб . Проверено 23 ноября 2017 г.
- ^ "f03sdl2" . Гитхаб . Проверено 28 октября 2019 г.
- ^ "gb.sdl2" . Гамбас Вики . Проверено 2 февраля 2023 г.
- ^ Перейти обратно: а б Робисон, Арч Д. (9 ноября 2015 г.). «Go + Julia + Fourier = захватчики частот с открытым исходным кодом» . программное обеспечение.intel.com . Проверено 2 августа 2019 г.
- ^ «SDL на взломе» .
- ^ «SDL2 на взломе» .
- ^ Билер, Джонатан (30 июля 2020 г.). "jonathanBieler/SimpleDirectMediaLayer.jl" . Гитхаб . Проверено 8 августа 2020 г.
- ^ SquidSinker (2 августа 2020 г.). «Примеры игр для GameZero.jl» . Гитхаб . Проверено 8 августа 2020 г.
- ^ Дейли, Натан (31 июля 2019 г.). «Пример игры, написанной на языке Julia с использованием SDL2» . Гитхаб . Проверено 2 августа 2019 г.
- ^ «SDL2 для Нима» . Гитхаб . Проверено 31 мая 2022 г.
- ^ «ПерлГамеДев/SDL» . Гитхаб . Проверено 20 февраля 2019 г.
- ^ «PHP-SDL» . Гитхаб . Проверено 28 октября 2019 г.
- ^ "SDL2::Raw" . Modules.raku.org . Проверено 15 мая 2020 г.
- ^ Начало кольцевого программирования – от новичка до профессионала | Мансур Аюни | Апресс .
- ^ «Использование RingLibSDL — документация Ring 1.16» .
- ^ «WhatsNew.txt» . Проверено 28 сентября 2020 г.
- ^ «[Commits] SDL: включить сборку рендеринга Metal по умолчанию и слабую линию…» 7 декабря 2017 г.
- ^ «SDL: README-platforms.txt@3e2f230a6d62» . Hg.libsdl.org . libsdl.org. Архивировано из оригинала 15 декабря 2013 года . Проверено 8 декабря 2013 г.
- ^ «Использование OpenGL с SDL» . Проверено 9 июля 2015 г.
- ^ «СДЛ и Вэйланд» .
- ^ Ларабель, Майкл (30 сентября 2013 г.). «В библиотеку SDL2 добавлена поддержка Raspberry Pi» .
- ^ «СДЛ 1.2 Сиксель» . Гитхаб . Проверено 9 апреля 2016 г.
- ^ «SDLPluginPort» . Проверено 11 августа 2019 г.
- ^ «Промежуточное ПО: Описание группы SDL» . МобиИгры . 27 сентября 2013 года . Проверено 18 мая 2012 г.
Игры, в которых используется очень портативный Simple DirectMedia Layer.
- ^ «Игры» . libsdl.org. 18 мая 2012 года. Архивировано из оригинала 29 июня 2010 года . Проверено 18 мая 2012 г.
- ^ «Отзывы СДЛ» . Galaxygameworks.com. Архивировано из оригинала 16 июля 2011 года . Проверено 1 февраля 2012 года .
- ^ "Разработка" . ОпенТТД . Проверено 19 марта 2010 г.
- ^ «Компиляция Веснота» . Веснот. 27 февраля 2010 г. Проверено 19 марта 2010 г.
- ^ «SDLClient — Freeciv.org» . Freeciv.wikia.com . Проверено 19 марта 2010 г.
- ^ may88 (23 июня 2011 г.). «Игра недели №3 — Homeworld SDL» . pandorapress.net . Проверено 8 мая 2012 г.
[...] выпущен порт HomeworldSDL. Участник форума Edglex позволяет вашей Pandora испытать отличную работу, проделанную ребятами из HomeworldSDL.
{{cite web}}
: CS1 maint: числовые имена: список авторов ( ссылка ) - ^ JA2 Stracciatella Обратная связь » Выпуск Jagged Alliance 2 для Android Stracciatella Port RC2 — протестируйте. Архивировано 23 октября 2012 г. на форуме Wayback Machine на форуме Bear's Pit, 3 октября 2011 г.
- ^ «Функции · fifengine/fifengine Wiki · GitHub» . Гитхаб . Проверено 9 марта 2015 г.
- ^ «Часто задаваемые вопросы по хеджварам» . hedgewars.org . Проверено 3 октября 2014 г.
...SDL >= 1.2.5...
- ^ «Детали разработки» . scorched3d.co.uk . Архивировано из оригинала 6 октября 2014 года . Проверено 3 октября 2014 г.
...Простой слой DirectMedia - SDL для оконного управления кроссплатформенными играми...
- ^ «Об игре» . Проверено 20 сентября 2021 г.
- ^ «Зависимости OOlite SDL» . Гитхаб . 29 мая 2016 года . Проверено 21 сентября 2021 г.
- ^ «Дорожная карта — Веснот» . www.wesnoth.org . Проверено 9 марта 2015 г.
- ^ «Новый выпуск: 0 AD Alpha 19 Syllepsis» . 26 ноября 2015 года . Проверено 20 сентября 2021 г.
Пользователи Linux, обратите внимание, что SDL2 теперь включен в Linux по умолчанию.
- ^ «Тайные хроники Марио» . sourceforge.net . 28 августа 2014 года . Проверено 3 октября 2014 г.
... на основе SDL...
- ^ «Поддержка замороженного байта» . trine2.com . Проверено 1 сентября 2020 г.
- ^ «[HowTo] Компилировать 0.7 для Windows (Страница 1) — Разработка — Форум Teeworlds» .
Дальнейшее чтение
[ редактировать ]- Альберто Гарсиа Серрано: программирование видеоигр в SDL , Ediversitas, ISBN 84-95836-08-4 (испанский)
- Эрнест Пазера: Сосредоточьтесь на SDL , Muska & Lipman/Premier-Trade, ISBN 1-59200-030-4
- Рон Пентон: Структуры данных для программистов игр , Маска и Липман/Премьер-Трейд, ISBN 1-931841-94-2 ( примеры программирования игр с использованием SDL )
- Джон Р. Холл: Программирование игр для Linux , без крахмала, ISBN 1-886411-49-2 ( первая книга SDL от Loki Games , архивная онлайн-версия: PDF на Wayback Machine (архивировано 22 января 2003 г.), исходники LaTex на Wayback Machine (архивировано 14 февраля 2003 г.))
Внешние ссылки
[ редактировать ]- Простой слой DirectMedia
- Интерфейсы прикладного программирования
- Аудио библиотеки
- Библиотеки C (язык программирования)
- Кроссплатформенное программное обеспечение
- Графические библиотеки
- API-интерфейсы Linux
- API-интерфейсы MacOS
- Программное обеспечение, использующее лицензию zlib
- Разработка видеоигр
- Программное обеспечение для разработки видеоигр для Linux
- API-интерфейсы Windows