Простой слой DirectMedia


Из Википедии, свободной энциклопедии
  (Перенаправлено с Libsdl )
Перейти к навигации Перейти к поиску

Simple DirectMedia Layer ( SDL ) — это кроссплатформенная библиотека разработки программного обеспечения , предназначенная для обеспечения уровня аппаратной абстракции для компьютерных мультимедийных аппаратных компонентов . Разработчики программного обеспечения могут использовать его для написания высокопроизводительных компьютерных игр и других мультимедийных приложений, которые могут работать во многих операционных системах , таких как Android , iOS , Linux , macOS и Windows . [4]

SDL управляет видео , аудио , устройствами ввода , CD-ROM , потоками , загрузкой общих объектов , сетью и таймерами. [6] Для 3D-графики он может обрабатывать контекст 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 демонстраций. [10]

История

Сэм Лантинга создал библиотеку, впервые выпустив ее в начале 1998 года, работая в Loki Software . Идея пришла ему в голову при переносе приложения Windows на Macintosh. Затем он использовал SDL для переноса Doom на BeOS (см. Порты исходного кода Doom ). Для работы вместе с SDL было разработано несколько других бесплатных библиотек, таких как SMPEG и OpenAL . Он также основал Galaxy Gameworks в 2008 году, чтобы помочь в коммерческой поддержке SDL, хотя планы компании в настоящее время приостановлены из-за нехватки времени. [11]

Вскоре после приостановки работы Galaxy Gameworks Лантинга объявил, что SDL 1.3 (который позже станет SDL 2.0) будет лицензироваться в соответствии с лицензией zlib . [12] Лантинга анонсировал SDL 2.0 14 июля 2012 года, в то же время объявив, что он присоединяется к Valve , первая версия которой была анонсирована в тот же день, когда он присоединился к компании. [13] Компания Lantinga объявила о выпуске стабильной версии SDL 2.0.0 13 августа 2013 г. [14]

SDL 2.0 — это крупное обновление кодовой базы SDL 1.2 с другим, несовместимым с предыдущими версиями [15] API . Он заменяет несколько частей API 1.2 более общей поддержкой нескольких параметров ввода и вывода. Некоторые дополнительные функции включают поддержку нескольких окон, двухмерную графику с аппаратным ускорением и улучшенную поддержку Unicode . [16]

Поддержка Мира и Wayland была добавлена ​​в SDL 2.0.2 [17] и включена по умолчанию в SDL 2.0.4. [18] В версии 2.0.4 также улучшена поддержка Android. [19]

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

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

Игра, использующая Simple DirectMedia Layer, не будет автоматически запускаться в каждой операционной системе; необходимо применять дальнейшие адаптации. Они сведены к минимуму, поскольку SDL также содержит несколько API-интерфейсов абстракции для часто используемых функций, предлагаемых операционной системой.

Синтаксис SDL основан на функциях: все операции, выполняемые в SDL, выполняются путем передачи параметров подпрограммам (функциям). Специальные структуры также используются для хранения конкретной информации, которую должен обрабатывать SDL. Функции SDL подразделяются на несколько различных подсистем.

Подсистемы

SDL делится на несколько подсистем: [21]

Основы
Инициализация и завершение работы, переменные конфигурации, обработка ошибок, обработка журналов
видео
Управление отображением и окнами, функции поверхности, ускорение рендеринга и т. д.
Входные события
Обработка событий , поддержка клавиатуры, мыши, джойстика и игрового контроллера
С силовой обратной связью
SDL_haptic.h реализует поддержку «Force Feedback».
Аудио
SDL_audio.h реализует управление аудиоустройствами, воспроизведение и запись
Потоки
многопоточность : управление потоками, примитивы синхронизации потоков, атомарные операции
Таймеры
Поддержка таймера
Файловая абстракция
Пути файловой системы, абстракция файлового ввода-вывода
Поддержка общих объектов
Загрузка общих объектов и поиск функций
Информация о платформе и ЦП
Обнаружение платформы, определение характеристик ЦП, порядок байтов и перестановка байтов, манипулирование битами
Управление энергопотреблением
Статус управления питанием
Дополнительный
Функциональность для конкретной платформы

Помимо этой базовой низкоуровневой поддержки, существует также несколько отдельных официальных библиотек, которые предоставляют дополнительные функции. Они составляют «стандартную библиотеку», представлены на официальном сайте и включены в официальную документацию:

  • SDL_image — поддержка нескольких форматов изображений [22]
  • SDL_mixer — сложные аудиофункции, в основном для микширования звука [23] .
  • SDL_net — поддержка сети [24]
  • SDL_ttf — поддержка рендеринга шрифтов TrueType [25]
  • SDL_rtf — простой рендеринг в формате Rich Text Format [26]

Существуют и другие нестандартные библиотеки. Например: SDL_Collide на SourceForge, созданный Амиром Тааки .

Привязки к языку

Библиотека SDL 2.0 имеет языковые привязки для:

  • Ада [8]
  • Говядина
  • С
  • С++
  • С# [8]
  • Д [8]
  • Фортран [27]
  • Джинн
  • Перейти [8] [28]
  • Хаскелл [29] [30]
  • Java (например, JSDL)
  • Юлия [31] [32] [33] [28]
  • Луа [8]
  • Ним
  • ОКамл [8]
  • Паскаль [8]
  • Perl (через SDL) [34]
  • PHP [35]
  • Python (несколько, например, pygame_sdl2 и sdl2hl) [8]
  • Раку [36]
  • Ржавчина [8]
  • Вала
  • Общий шепелявый язык [37]

Поддерживаемые серверные части

Уровни абстракции нескольких платформ SDL

Из-за того, как разработан 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 по умолчанию. [38] [39]
  • Серверная часть Xlib для оконной системы на основе X11 в различных операционных системах. [40]
  • Контексты OpenGL на разных платформах. [41]
  • Серверная часть EGL при использовании в сочетании с оконной системой на основе Wayland, [42] Raspberry Pi [43] и другими системами.
  • Контексты Vulkan на платформах, которые его поддерживают. [7]
  • Серверная часть sceGu, похожая на Sony OpenGL, родная для PSP .

SDL 1.2 имеет поддержку ОС RISC (отсутствует в версии 2.0).

Неофициальная серверная часть Sixel доступна для SDL 1.2. [44]

Прошивка MP3-плеера Rockbox также распространяет версию SDL 1.2, которая используется для запуска таких игр, как Quake . [45]

Прием и принятие

Семинар по SDL, Кадисский университет

На протяжении многих лет SDL использовался во многих коммерческих и некоммерческих проектах видеоигр. Например, MobyGames перечислила 120 игр, использующих SDL в 2013 году [46] , а сам веб-сайт SDL перечислил около 700 игр в 2012 году. [47] Важными коммерческими примерами являются Angry Birds , [48] Unreal Tournament и игры, разработанные с использованием Valve . Source Engine , широко использующий SDL для межплатформенной совместимости; одними из доменов с открытым исходным кодом являются OpenTTD , [49] The Battle for Wesnoth [50] или Freeciv . [51]

Выпуски кроссплатформенных игр популярных Humble Indie Bundles для Linux, Mac и Android часто основаны на SDL.

SDL также часто используется для более поздних переносов на новые платформы с устаревшим кодом. Например, компьютерная игра Homeworld была портирована на карманные компьютеры Pandora [52] и Jagged Alliance 2 для Android [53] через SDL.

Кроме того, несколько программ, не связанных с видеоиграми, используют SDL; примерами являются эмуляторы , такие как DOSBox , эмулятор FUSE ZX Spectrum и VisualBoyAdvance .

Было написано несколько книг по разработке с использованием SDL (см. дополнительную литературу).

SDL используется в университетских курсах по мультимедиа и информатике , например, на семинаре по программированию игр с использованием libSDL в Университете Кадиса в 2010 году или в дисциплине Game Design в UTFPR (кампус Понта-Гросса) в 2015 году.

Примеры видеоигр с использованием SDL

  • Неизведанные горизонты [54]

  • Хеджварс [55]

  • Выжженный 3D [56]

  • Лады в огне [57]

  • Оолит [58]

  • Битва за Веснот [59]

  • OpenTTD

  • 0 г. н.э. [60]

  • Секретные хроники Марио [61]

  • Трина

  • Трина 2 [62]

Смотрите также

  • Аллегро
  • КланЛиб
  • Промежуточное ПО для межплатформенной поддержки
  • ДиректFB
  • Общий графический интерфейс
  • ГЛФВ
  • OpenML
  • Пигейм
  • Райлиб
  • Рен'Пи
  • SFML
  • SVGAlib

использованная литература

  1. ^ «Простой слой DirectMedia - SDL версии 2.0.20 (стабильная)» . Libsdl.org . Проверено 11 января 2022 г.
  2. ^ «Указатель / выпуска» . Libsdl.org . Проверено 11 января 2022 г.
  3. ^ «О, смотрите, у нас будет официальная поддержка tvOS в SDL 2.0.5 для людей, которые хотят, чтобы их игры на основе SDL были на Apple TV!» . 15 сентября 2016 г.
  4. ^ a b c "список платформ, поддерживаемых SDL" . Libsdl.org. Архивировано из оригинала 1 апреля 2016 года . Проверено 9 апреля 2016 г.
  5. ^ а б "Лицензия SDL" . Проверено 3 марта 2014 г.
  6. ^ "Официальный сайт SDL" . Libsdl.org . Проверено 19 марта 2010 г.
  7. ^ a b " КатегорияVulkan - SDL Wiki " . wiki.libsdl.org . Проверено 5 мая 2019 г. .
  8. ^ a b c d e f g h i j «Языковые привязки SDL» . libsdl.org . Простой слой DirectMedia . Проверено 13 августа 2014 г.
  9. ^ «Лицензирование библиотеки Simple DirectMedia Layer» . Проверено 30 января 2012 г.
  10. ^ «Простой слой DirectMedia» . 29 июня 2010 г. Архивировано из оригинала 29 июня 2010 г .. Проверено 7 августа 2021 г.
  11. ^ "Исследование Галактики" . 6 апреля 2011 г. . Проверено 30 января 2012 г.
  12. SDL 1.3 будет лицензирована zLib , список рассылки SDL, 7 апреля 2011 г.
  13. ^ «Очень скоро появится SDL 2.0 с новыми функциями» . Проверен 17 Август +2012 .
  14. Анонс SDL 2.0.0 , Список рассылки SDL, 13 августа 2013 г.
  15. ^ MigrationGuide - SDL Wiki' . Wiki.libsdl.org (21 ноября 2013 г.). Проверено 8 декабря 2013 г.
  16. ^ "Дорожная карта SDL 1.3" . 14 июня 2011 г. . Источник +25 июля 2011 .
  17. ^ Sneddon, Джоуи-Илия (5 февраля 2014). «Некоторые из самых популярных игр для Linux будут работать на Mir» . Источник +19 March 2 014 .
  18. ↑ Лантинга , Сэм (2 января 2016 г.). «Журнал изменений SDL 2.0.4» . Проверено 6 января 2016 г.
  19. ^ https://wiki.libsdl.org/SDL_SysWMinfo
  20. ^ «Введение в SDL» . Проверено 3 марта 2014 г.
  21. ^ https://wiki.libsdl.org/APIByCategory
  22. ^ "SDL_изображение 2.0" . libsdl.org . Проверено 19 июля 2014 г.
  23. ^ "SDL_mixer 2.0" . libsdl.org . Проверено 19 июля 2014 г.
  24. ^ "SDL_net 2.0" . libsdl.org . Проверено 19 июля 2014 г.
  25. ^ "SDL_ttf 2.0" . libsdl.org . Проверено 19 июля 2014 г.
  26. ^ "SDL_rtf 0.1" . libsdl.org . Проверено 19 июля 2014 г.
  27. ^ "f03sdl2" . Гитхаб . Проверено 28 октября 2019 г.
  28. ↑ a b Робисон, Арч Д. (9 ноября 2015 г.). «Go + Julia + Fourier = Frequon Invaders с открытым исходным кодом» . software.intel.com . Проверено 2 августа 2019 г. .
  29. Викискладе есть медиафайлы по теме SDL .
  30. Викискладе есть медиафайлы по теме SDL2 .
  31. ^ Билер, Джонатан (30 июля 2020 г.). "Джонатан Билер/SimpleDirectMediaLayer.jl" . Проверено 8 августа 2020 г. .
  32. ↑ SquidSinker (2 августа 2020 г.). "Примеры игр для GameZero.jl" . Проверено 8 августа 2020 г. .
  33. Дейли, Натан (31 июля 2019 г.). "Пример игры, написанной на julia с использованием SDL2" . Проверено 2 августа 2019 г. .
  34. ^ "PerlGameDev/SDL" . Гитхаб . Проверено 20 февраля 2019 г.
  35. ^ "PHP-SDL" . Гитхаб . Проверено 28 октября 2019 г.
  36. Викискладе есть медиафайлы по теме SDL2 :: Raw . modules.raku.org . Проверено 15 мая 2020 г.
  37. ^ "cl-sdl2" . Гитхаб . Проверено 23 ноября 2017 г.
  38. ^ "WhatsNew.txt" . Проверено 28 сентября 2020 г. .
  39. ^ «[Commits] SDL: включить сборку средства визуализации Metal по умолчанию и слабую связь ...» 7 декабря 2017 г.
  40. ^ "SDL: README-platforms.txt@3e2f230a6d62" . Hg.libsdl.org . libsdl.org. Архивировано из оригинала 15 декабря 2013 года . Проверено 8 декабря 2013 г.
  41. ^ «Использование OpenGL с SDL» . Проверено 9 июля 2015 г.
  42. Викискладе есть медиафайлы по теме SDL и Wayland .
  43. ↑ Ларабель , Майкл (30 сентября 2013 г.). «Поддержка Raspberry Pi добавлена ​​в библиотеку SDL2» .
  44. Викискладе есть медиафайлы по теме SDL 1.2 . Проверено 9 апреля 2016 г.
  45. ^ "SDLPluginPort" . Проверено 11 августа 2019 г. .
  46. ^ «Промежуточное ПО: описание группы SDL» . MobyGames . 27 сентября 2013 г. . Проверено 18 мая 2012 г. Игры, использующие очень портативный Simple DirectMedia Layer.
  47. ^ "Игры" . libsdl.org. 18 мая 2012 года. Архивировано из оригинала 29 июня 2010 года . Проверено 18 мая 2012 г.
  48. ^ "Отзывы SDL" . Galaxygameworks.com. Архивировано из оригинала 16 июля 2011 года . Проверено 1 февраля 2012 г.
  49. Викискладе есть медиафайлы по теме развития . ОпенТТД . Проверено 19 марта 2010 г.
  50. ^ "CompilingWesnoth" . Веснот. 27 февраля 2010 г. . Проверено +19 March 2010 .
  51. ^ "SDLClient - Freeciv.org" . Freeciv.wikia.com . Источник +19 March +2010 .
  52. ^ May88 (23 июня 2011). «Игра недели №3 — Homeworld SDL» . pandorapress.net . Проверено 8 May 2012 . [...] выпущен порт HomeworldSDL. Участник форума Edglex позволяет вашей Pandora оценить превосходную работу, проделанную ребятами из HomeworldSDL.
  53. ^ JA2 Stracciatella Feedback »Выпуск Jagged Alliance 2 Android Stracciatella Port RC2 - пожалуйста, проверьте . Архивировано 23 октября 2012 г. на Wayback Machine на форуме Bear's Pit, 3 октября 2011 г.
  54. ^ «Возможности · fifengine / fifengine Wiki · GitHub» . Проверено 9 марта 2015 г.
  55. ^ "Часто задаваемые вопросы Хеджварс" . www.hedgewars.org . Проверено 3 октября 2014 г. ...SDL >= 1.2.5...
  56. ^ «Детали разработки» . scorched3d.co.uk . Архивировано из оригинала 6 октября 2014 года . Проверено 3 октября 2014 г. ...Simple DirectMedia Layer - SDL для межплатформенных оконных игр...
  57. ^ "Об игре" . Проверено 20 сентября 2021 г.
  58. ^ «Зависимости OOlite SDL» . 29 мая 2016 г. . Проверено 21 сентября 2021 г.
  59. ^ "Дорожная карта - Веснот" . www.wesnoth.org . Проверено 9 марта 2015 г.
  60. ^ «Новый выпуск: 0 AD Alpha 19 Syllepsis» . 26 ноября 2015 г. . Проверено 20 сентября 2021 . Пользователи Linux, имейте в виду, что SDL2 теперь включен по умолчанию в Linux.
  61. ^ "Секретные хроники Марио" . sourceforge.net . Источник +3 Октября +2014 . ... на основе SDL ...
  62. ^ «Поддержка 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 , No Starch, ISBN 1-886411-49-2 ( Первая книга SDL, написанная Loki Games , заархивированная онлайн-версия: PDF на Wayback Machine (заархивировано 22 января 2003 г.), исходники LaTex на Wayback Машина (архивировано 14 февраля 2003 г.)) 
  • Разработка игр SDL, Шон Митчелл
  • Учебники по SDL
  • Разработка игр с помощью SDL 2.0 на YouTube - видео Райана С. Гордона от 11 февраля 2014 г.

внешняя ссылка

  • Официальный сайт
Получено с https://en.wikipedia.org/w/index.php?title=Simple_DirectMedia_Layer&oldid=1066732711 "