Raylib (стилизованное написание строчными буквами raylib) — кроссплатформенная библиотека с открытым исходным кодом. Была разработана для использования при создании игр и мультимедийных приложений.
Библиотека была спроектирована для решения задач прототипирования, создания необходимого инструментария, приложений с графическим интерфейсом, приложений для встраиваемых систем и для обучения программированию. Исходный код написан на С и распространяется под zlib/libpng OSI лицензией. Библиотека поддерживает сборку под многочисленные платформы, включая Windows, Linux, macOS, FreeBSD, Android, Raspberry Pi и HTML5.
В Raylib можно использовать в более чем 70 языках программирования при помощи библиотек привязки, однако не все они имеют стабильные версии.
История создания
Разработка Raylib началась в августе 2013 года Рамоном Сантамарией для поддержки курсов программирования, нацеленных на студентов без предварительного опыта в программировании; библиотека являлась прямой заменой устаревшей к тому времени графической библиотеки Borland BGI. В течение курсов Raylib получала дополнительные усовершенствования на основе обратной связи от студентов и к июню 2014 года начала появляться на различных мероприятиях, посвященных разработке игр в Барселоне.
Raylib 1.0 была выпущена в ноябре 2013 года и включала в себя порядка 80 функций для управления созданием окон, обработки пользовательского ввода, отрисовки базовых геометрических форм в 2D и 3D, загрузке и отрисовки текстур, загрузке шрифтов, отрисовке текста, управления звуковой подсистемой с возможностью загрузки и воспроизведения звуковых файлов. Первая версия Raylib претерпела восемь небольших изменений (от версии Raylib 1.1 до Raylib 1.8) в течение пяти лет, каждое из которых привнесло какие-то новые возможности. Среди наиболее заметных улучшений была поддержка платформ Android, WebAssembly и Raspberry Pi, различных реализаций OpenGL, поддержка виртуальной реальности, а также создание десяти примеров использования библиотеки.
Raylib 2.0 была выпущена в июле 2018 года и исключила все внешние зависимости из системы сборки. Эта версия также предоставила опции для конфигурирования системы сборки, предназначенных для уменьшения размера собранной библиотеки и увеличения поддержки различными системами непрерывной интеграции. В течение следующих двух лет части библиотеки подверглись пересмотру и обновлению, а также вокруг библиотеки сформировалась экосистема. Единственным небольшим релизом за этот период являлась версия 2.5.
Raylib 3.0 была выпущена в апреле 2020 года. Переработке кода подверглись многие части кода. Её целью стало улучшение переносимости на другие платформы и улучшение к другим языкам программирования. Это было достигнуто путем переноса глобальных переменных ближе к контексту, добавленной поддержке пользовательских функций выделения памяти, файловой системы для загрузки , а также созданию более 115 примеров использования. Эта версия получала единственный небольшой релиз, Raylib 3.5, в декабре 2020 года.
Raylib 4.0 была выпущена в ноябре 2021 года, привнеся с собой полный пересмотр системы наименования для улучшения связности и последовательности: изменению подверглись имена функций, параметров, описания, комментарии и сообщения протоколирования. Была внедрена система управления событиями и доступ к основному игровому циклу был предоставлен пользователю. Также появилась возможность использования внутренних модулей библиотеки как отдельных обособленных модулей: rlgl и raymath. Добавилась поддержка языков программирования Zig и Odin. Эта версия стала крупнейшим на данный момент обновлением библиотеки.
Raylib 4.5 была выпущена в марте 2023, 7 месяцев спустя с прошлого релиза. Эта версия принесла с собой поддержку ANGLE для платформы настольных приложений, полностью новый модуль для работы с камерой, поддержка моделей в формате M3D и M3D/GLTF анимаций, совместимость с QOA аудиоформатом, полностью новый модуль для загрузки сжатых текстур (rl_gputex), изменения в модулях rlgl и rshapes, валидация данных (IsImageReady(), IsTextureReady() и IsSoundReady()) для множества структур Raylib а также много других изменений.
Raylib 5.0 была выпущена 18 ноября 2023. Переработан и разбит для работы на различных платформах модуль rcore. Добавлена поддержка новых бэкендов SDL, Nintendo Switch. Добавлена API для работы со сплайнами; новый генератор псевдослучайных чисел rprand; API для работы с событиями. Обновлен модуль raygui для разработки утилит с помощью графического интерфейса немедленного режима использованием Raylib.
Raylib 5.5 была выпущена 18 ноября 2024. Добавлен инструмент для создания новых проектов. Новые бэкенды модуля rcore - RGFW и SDL3. Поддержка новых платформ: Dreamcast, N64, PSP, PSVita, PS4. Добавлена поддержка GPU скиннинга (дя всех платформ и версий OpenGL). В модуле raymath добавлены перегрузки операторов для C++.
Возможности Raylib поддерживает следующие возможности:
не используются внешние зависимости, все требуемые библиотеки включены в состав raylib; поддержка множества платформ, включая Windows, Linux, macOS, Raspberry Pi, Android, HTML5 и других; написано на чистом C99; поддержка OpenGL версий 1.1, 2.1, 3.3, 4.3 а также OpenGL ES 2.0 и 3.0 в качестве бэкенда; уникальный модуль rlgl, обеспечивающий уровень абстракции от OpenGL (возможно использование модуля отдельно от raylib); поддержка многочисленных форматов шрифтов (TTF, OTF, FNT, BDF, спрайтовые шрифты); поддержка многочисленных форматов, включая сжатые, текстур (DXT, ETC, ASTC); полная поддержка 3D, включая 3D примитивы, модели, билборды, карты высот и многое другое; гибкая система материалов, поддерживая классические и PBR карты; поддержка анимированных 3D моделей (скелетная анимация) (IQM, M3D, glTF); поддержка шейдеров моделей и ; математические операции с векторами, матрицами и кватернионами; загрузка и воспроизведение нескольких форматов аудио данных с поддержкой потокового аудио (WAV, QOA, OGG, MP3, FLAC, XM, MOD); поддержка симуляции виртуальной реальности с возможностью настраивать параметры наголовного дисплея; огромная коллекция содержащая более 140 примеров кода; привязки к более чем 70 языкам программирования; свободное програмное обеспечение с открытым исходным кодом.
Примеры использования Raylib изначально предназначалась для обучения работы с графикой и написания игр. Однако, так как многие разработчики убедились в простоте и легкости использования библиотеки, она была успешно адаптирована для применения в многочисленных хобби-проектах.
Существует множество сообществ, посвященных Raylib, на сервисах, таких как Reddit и Discord. На сайте Raylib есть ссылки на социальные сети, включая личные сайты Сантамарии, а также сообществ Raylib.
GitHub содержит список 120 проектов использующих тему raylib.
Архитектура библиотеки
Модули
Raylib содержит несколько модулей доступных пользователю при помощи API.
core — Управляет созданием окон и инициализацией контекста OpenGL; также обрабатывает пользовательский ввод (клавиатура, мышь, геймпад и тачпад); rlgl — Обрабатывает бэкенд OpenGL, абстрагируя множество реализаций общим API. Этот модуль может использоваться обособленно; shapes — Управляет отрисовкой основных 2D примитивов (отрезок, прямоугольник, окружность…) и базовым обнаружением столкновений; textures — Обрабатывает загрузку текстур и изображений (используя CPU и GPU) и управление ими, включая возможности манипуляций изображениями (обрезка, масштабирование, оттенок, и т. д.); text — Обрабатывает загрузку шрифтов в виде листов спрайтов и отрисовку текста. Также включает в себя некоторую функциональность по работе с текстом (соединение, разъединение, замена, и т. д.); models — Обрабатывает загрузку и отрисовку 3D моделей, включая поддержку анимированных моделей; raudio — Обрабатывает управление аудио-устройствами, загрузкой и воспроизведением аудиоданных, включая возможность работать с потоковыми данными. Этот модуль может использоваться обособленно; raymath — Предоставляет набор математических функций для работы с векторами, матрицами и кватернионами.
Привязки к другим языкам программирования Raylib имеет , созданные сообществом разработчиков, включая Rust, Go, C#, Lua, Python, и Nim., для более, чем 70 различных языков программирования. Список доступных привязок находится в файле BINDINGS.md в raylib GitHub репозитории.
Расширения Сообществом Raylib были разработаны несколько расширений, дополняющих функционал, и обеспечивающих связи с дополнительными библиотеками:
raygui — Immediate mode GUI модуль raylib; physac — физический модуль, предназначенный для работы с raylib; libpartikel — модуль для работы с системами частиц для raylib; spine-raylib — интеграция скелетной анимации в raylib; cimgui-raylib — модуль интеграции Dear Imgui для raylib.
Награды В апреле 2019 года Сантамария был награждён Google Open Source Peer Bonus за вклад в open-source экосистему своей библиотекой Raylib. В августе 2020 года raylib получил Epic MegaGrant от Epic Games для поддержки развития проекта. В апреле 2021 года Сантамария был награждён ещё одним Google Open Source Peer Bonus по той же причине. В марте 2022 года Raylib был номинирован в категории BEST GAME ENGINE на MOBILE GAMES AWARDS 2022.
См. также BGI SDL SFML MonoGame Allegro ClanLib
GLFW
Примечания
Ссылки
raylib games on Itch.io
Категория:API Категория:Библиотеки Си Категория:Графические библиотеки Категория:Аудиобиблиотеки Категория:Кроссплатформенное программное обеспечение Категория:Windows API Категория:OS X API Категория:Программное обеспечение для разработки компьютерных игр