Simple DirectMedia Layer ( SDL ) - это кроссплатформенная библиотека разработки программного обеспечения, предназначенная для обеспечения уровня аппаратной абстракции для компьютерных мультимедийных аппаратных компонентов . Разработчики программного обеспечения могут использовать его для написания высокопроизводительных компьютерных игр и других мультимедийных приложений, которые могут работать во многих операционных системах, таких как Android , iOS , Linux , macOS и Windows . [4]
Автор (ы) оригинала | Сэм Лантинга |
---|---|
Разработчики) | Сообщество SDL |
Первый выпуск | 1998 |
Стабильный выпуск | |
Репозиторий | |
Написано в | C |
Операционная система | Linux , Windows, AmigaOS , macOS 10.4+ , iOS 3.1.3+ , tvOS , [3] Android 2.3.3+ , FreeBSD 8.4+ , Haiku Дополнительно до версии 2.0.0 (устарело): ОС RISC [4] |
Тип | API |
Лицензия | Лицензия zlib до 2.0.0: GNU LGPL [5] |
Веб-сайт | www |
SDL управляет видео , аудио , устройствами ввода , CD-ROM , потоками , загрузкой общих объектов , сетью и таймерами. [6] Для трехмерной графики он может обрабатывать контекст OpenGL , Vulkan , [7] Metal или Direct3D11 (также поддерживается более старая версия Direct3D 9). Распространенное заблуждение состоит в том, что SDL - это игровой движок , но это неверно. Однако библиотека подходит для создания игр напрямую или косвенно может использоваться движками, построенными на ее основе.
Библиотека внутренне написана на C и, возможно, в зависимости от целевой платформы, C ++ или Objective-C , и предоставляет интерфейс прикладного программирования на C с привязками к другим доступным языкам. [8] Это бесплатное программное обеспечение с открытым исходным кодом в соответствии с требованиями лицензии zlib начиная с версии 2.0, а с предыдущими версиями распространяется действие Стандартной общественной лицензии ограниченного применения GNU . [5] В соответствии с лицензией zlib SDL 2.0 свободно доступен для статической компоновки в проектах с закрытым исходным кодом , в отличие от SDL 1.2. [9] SDL 2.0, выпущенный в 2013 году, сильно отличался от предыдущих версий, предлагая больше возможностей для аппаратного 3D-ускорения, но нарушая обратную совместимость.
SDL широко используется в отрасли как в крупных, так и в небольших проектах. На сайте библиотеки размещено более 700 игр, 180 приложений и 120 демонстраций. [ необходима цитата ]
История
Сэм Лантинга создал библиотеку, впервые выпустив ее в начале 1998 года, работая в Loki Software . Идея пришла ему в голову при переносе приложения Windows на Macintosh. Затем он использовал SDL для переноса Doom на BeOS (см. Исходные порты Doom ). Для работы вместе с SDL было разработано несколько других бесплатных библиотек, таких как SMPEG и OpenAL . Он также основал Galaxy Gameworks в 2008 году, чтобы помочь коммерческой поддержке SDL, хотя планы компании в настоящее время приостановлены из-за нехватки времени. [10]
Вскоре после того, как Galaxy Gameworks был приостановлен, Лантинга объявил, что SDL 1.3 (который позже станет SDL 2.0) будет лицензироваться в соответствии с лицензией zlib . [11] Лантинга объявил о SDL 2.0 14 июля 2012 года, одновременно объявив, что он присоединяется к Valve , первая версия которой была объявлена в тот же день, когда он присоединился к компании. [12] Lantinga объявила о стабильном выпуске SDL 2.0.0 13 августа 2013 года. [13]
SDL 2.0 - это крупное обновление кодовой базы SDL 1.2 с другим, не обратно совместимым [14] API . Он заменяет несколько частей API 1.2 более общей поддержкой нескольких параметров ввода и вывода. Некоторые дополнения к функциям включают поддержку нескольких окон, 2D-графику с аппаратным ускорением и улучшенную поддержку Unicode . [15]
Поддержка Mir и Wayland была добавлена в SDL 2.0.2 [16] и включена по умолчанию в SDL 2.0.4. [17] Версия 2.0.4 также улучшила поддержку Android. [18]
Архитектура программного обеспечения
SDL - это оболочка для специфичных для операционной системы функций, к которым игра должна получить доступ. Единственная цель SDL - предоставить общую структуру для доступа к этим функциям для нескольких операционных систем (кроссплатформенность). [19] SDL обеспечивает поддержку 2D-пиксельных операций, звука, доступа к файлам, обработки событий, синхронизации и потоковой передачи. Он часто используется для дополнения OpenGL путем настройки графического вывода и обеспечения ввода с помощью мыши и клавиатуры, поскольку OpenGL включает только рендеринг.
Игра, использующая Simple DirectMedia Layer, не запускается автоматически во всех операционных системах; должны быть применены дальнейшие адаптации. Они сведены к минимуму, поскольку SDL также содержит несколько API абстракции для часто используемых функций, предлагаемых операционной системой.
Синтаксис SDL основан на функциях: все операции, выполняемые в SDL, выполняются путем передачи параметров подпрограммам (функциям). Специальные структуры также используются для хранения конкретной информации, которую должен обрабатывать SDL. Функции SDL подразделяются на несколько различных подсистем.
Подсистемы
SDL разделен на несколько подсистем: [20]
- Основы
- Инициализация и завершение работы, переменные конфигурации, обработка ошибок, обработка журналов
- видео
- Управление отображением и окном, функции поверхности, ускорение рендеринга и т. Д.
- Входные события
- Обработка событий , поддержка клавиатуры, мыши, джойстика и игрового контроллера
- С силовой обратной связью
- SDL_haptic.h реализует поддержку "Force Feedback".
- Аудио
- SDL_audio.h реализует управление аудиоустройствами, воспроизведение и запись
- Потоки
- многопоточность : управление потоками, примитивы синхронизации потоков, атомарные операции
- Таймеры
- Поддержка таймера
- Файловая абстракция
- Пути файловой системы, абстракция файлового ввода-вывода
- Поддержка общих объектов
- Загрузка общих объектов и поиск функций
- Информация о платформе и процессоре
- Обнаружение платформы, обнаружение функций ЦП, порядок байтов и перестановка байтов, манипуляции с битами
- Управление энергопотреблением
- Состояние управления питанием
- Дополнительный
- Платформенная функциональность
Помимо этой базовой низкоуровневой поддержки, есть также несколько отдельных официальных библиотек, которые предоставляют еще несколько функций. Они составляют «стандартную библиотеку», представлены на официальном сайте и включены в официальную документацию:
- SDL_image - поддержка нескольких форматов изображений [21]
- SDL_mixer - сложные аудио функции, в основном для микширования звука [22]
- SDL_net - сетевая поддержка [23]
- SDL_ttf - поддержка рендеринга шрифтов TrueType [24]
- SDL_rtf - простой рендеринг в формате RTF [25]
Существуют и другие нестандартные библиотеки. Например: SDL_Collide на Sourceforge, созданный Амиром Тааки .
Языковые привязки
Библиотека SDL 2.0 имеет языковые привязки для:
- Ада [8]
- Говядина
- C
- C ++
- C # [8]
- D [8]
- Фортран [26]
- Джинн
- Перейти [8] [27]
- Хаскелл [28] [29]
- Юлия [30] [31] [32] [27]
- Lua [8]
- Ним
- OCaml [8]
- Паскаль [8]
- Perl (через SDL) [33]
- PHP [34]
- Python (несколько, например pygame_sdl2 и sdl2hl) [8]
- Раку [35]
- Ржавчина [8]
- Вала
- Общий Лисп [36]
Поддерживаемые серверы
Из-за того, как SDL спроектирован, большая часть его исходного кода разбита на отдельные модули для каждой операционной системы, чтобы выполнять вызовы базовой системы. При компиляции SDL для целевой системы выбираются соответствующие модули. Доступны следующие серверные части: [4]
- Серверная часть 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. [37] [38]
- Серверная часть Xlib для оконной системы на основе X11 в различных операционных системах. [39]
- Контексты OpenGL на различных платформах. [40]
- Серверная часть EGL при использовании вместе с оконной системой на основе Wayland, [41], Raspberry Pi [42] и другими системами.
- Контексты Vulkan на платформах, которые его поддерживают. [7]
- Внутренняя часть sceGu, серверная часть, подобная Sony OpenGL, встроенная в PSP .
SDL 1.2 поддерживает RISC OS (исключено из 2.0).
Для SDL 1.2 доступен неофициальный бэкэнд Sixel . [43]
Rockbox прошивка MP3 - плеер также распространяет версию SDL 1.2, который используется для запуска игр , таких как Quake . [44]
Прием и усыновление
На протяжении многих лет SDL использовался для многих коммерческих и некоммерческих проектов видеоигр. Например, MobyGames перечислил 120 игр, использующих SDL в 2013 г. [45], а сам веб-сайт SDL перечислил около 700 игр в 2012 г. [46] Важными коммерческими примерами являются Angry Birds [47] и Unreal Tournament ; из домена с открытым исходным кодом - OpenTTD , [48] Битва за Веснот [49] или Freeciv . [50]
Кроссплатформенные выпуски игр популярных Humble Indie Bundles для Linux, Mac и Android часто основаны на SDL.
SDL также часто используется для более поздних портов на новых платформах с устаревшим кодом. Например, компьютерная игра Homeworld была перенесена на КПК Pandora [51] и Jagged Alliance 2 для Android [52] через SDL.
Кроме того, SDL используют несколько программ, не связанных с видеоиграми; примерами являются эмуляторы , такие как DOSBox , эмулятор FUSE ZX Spectrum и VisualBoyAdvance .
Было написано несколько книг для разработки с использованием SDL (см. Дополнительную литературу).
SDL используется в университетских курсах по обучению мультимедиа и информатике , например, на семинаре по программированию игр с использованием libSDL в Университете Кадиса в 2010 году или в дисциплине игровой дизайн в UTFPR (кампус Понта-Гросса) в 2015 году.
Примеры видеоигр с использованием SDL
Неизвестные горизонты [53]
Живая изгородь [54]
Выжженный 3D [55]
Лады в огне
Oolite , трехмерная космическая игра
Битва за Веснот [56]
OpenTTD
0 г. н.э.
Секретные хроники Марио [57]
Трина
Трина 2 [58]
Смотрите также
- Аллегро
- ClanLib
- CreateJS
- Межплатформенное промежуточное ПО поддержки
- DirectFB
- Общий графический интерфейс
- GLFW
- OpenML
- Pygame
- Райлиб
- Ren'Py
- SFML
- SVGALib
Рекомендации
- ^ «Простой уровень DirectMedia - SDL версии 2.0.14 (стабильный)» . Libsdl.org . Проверено 23 декабря 2020 года .
- ^ «Указатель / выпуск» . Libsdl.org . Проверено 23 декабря 2020 года .
- ^ «О, смотрите, у нас будет официальная поддержка tvOS в SDL 2.0.5 для людей, которым нужны игры на основе SDL на Apple TV!» . 15 сентября 2016 г.
- ^ а б в «список платформ, поддерживаемых SDL» . Libsdl.org. Архивировано из оригинала на 1 апреля 2016 года . Проверено 9 апреля +2016 .
- ^ а б «Лицензия SDL» . Проверено 3 марта 2014 .
- ^ «Официальный сайт SDL» . Libsdl.org . Проверено 19 марта 2010 года .
- ^ а б "CategoryVulkan - SDL Wiki ' " . wiki.libsdl.org . Дата обращения 5 мая 2019 .
- ^ Б с д е е г ч я J «Привязки языка SDL» . libsdl.org . Простой слой DirectMedia . Проверено 13 августа 2014 .
- ^ «Лицензирование библиотеки Simple DirectMedia Layer» . Проверено 30 января 2012 года .
- ^ «Изучение Галактики» . 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 .
- ^ https://wiki.libsdl.org/SDL_SysWMinfo
- ^ «Введение в SDL» . Проверено 3 марта 2014 .
- ^ https://wiki.libsdl.org/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 года .
- ^ "f03sdl2" . GitHub . Проверено 28 октября 2019 года .
- ^ а б Робисон, Арч Д. (9 ноября 2015 г.). «Go + Julia + Fourier = Frequon Invaders с открытым исходным кодом» . software.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 .
- ^ «PerlGameDev / SDL» . GitHub . Проверено 20 февраля 2019 .
- ^ «PHP-SDL» . GitHub . Проверено 28 октября 2019 года .
- ^ "SDL2 :: Raw" . modules.raku.org . Дата обращения 15 мая 2020 .
- ^ "cl-sdl2" . GitHub . Проверено 23 ноября 2017 года .
- ^ "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 .
- ^ «SDL и Wayland» .
- ^ Ларабель, Майкл (30 сентября 2013 г.). «В библиотеку SDL2 добавлена поддержка Raspberry Pi» .
- ^ «SDL 1.2 Sixel» . Проверено 9 апреля +2016 .
- ^ «SDLPluginPort» . Проверено 11 августа 2019 .
- ^ «Промежуточное ПО: описание группы SDL» . MobyGames . 27 сентября 2013 . Проверено 18 мая 2012 года .
Игры, в которых используется очень портативный Simple DirectMedia Layer.
- ^ «Игры» . libsdl.org. 18 мая 2012 года Архивировано из оригинала 29 июня 2010 . Проверено 18 мая 2012 года .
- ^ «Отзывы SDL» . Galaxygameworks.com. Архивировано из оригинала 16 июля 2011 года . Проверено 1 февраля 2012 года .
- ^ «Развитие» . OpenTTD . Проверено 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.
- ^ JA2 Stracciatella Отзыв »Jagged Alliance 2 Android Stracciatella Port RC2 Release - пожалуйста, протестируйте Архивировано 23 октября 2012 г. на Wayback Machine на форуме Bear's Pit, 3 октября 2011 г.
- ^ «Возможности · fifengine / fifengine Wiki · GitHub» . Проверено 9 марта 2015 года .
- ^ "FAQ Hedgewars" . hedgewars.org . Проверено 3 октября 2014 года .
... SDL> = 1.2.5 ...
- ^ «Детали разработки» . scorched3d.co.uk . Архивировано из оригинала на 6 октября 2014 года . Проверено 3 октября 2014 года .
... Simple DirectMedia Layer - SDL для управления окнами кроссплатформенных игр ...
- ^ «Дорожная карта - Веснот» . www.wesnoth.org . Проверено 9 марта 2015 года .
- ^ «Тайные хроники Марио» . sourceforge.net . Проверено 3 октября 2014 года .
... на основе SDL ...
- ^ «Поддержка Frozenbyte» . trine2.com . Дата обращения 1 сентября 2020 .
дальнейшее чтение
- Альберто Гарсиа Серрано: Programación de videojuegos en SDL , Ediversitas, ISBN 84-95836-08-4 (испанский)
- Эрнест Пазера: фокус на SDL , Muska & Lipman / Premier-Trade, ISBN 1-59200-030-4
- Рон Пентон: структуры данных для программистов игр , Muska & Lipman / Premier-Trade, 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 г.))
- Разработка игр SDL, Шон Митчелл
- Руководства по SDL
- Разработка игр с помощью SDL 2.0 на YouTube - видео от 11 февраля 2014 г., автор: Райан С. Гордон.
Внешние ссылки
- Официальный веб-сайт