eepp — это кроссплатформенная среда разработки игр и приложений с открытым исходным кодом, ориентированная на разработку богатых графических пользовательских интерфейсов.
Официальная поддержка Linux, Windows, macOS, Android и iOS.
Экспорт в HTML5 с использованием emscripten с некоторыми небольшими ограничениями.
Также работает на BSD и Haiku.
Базовые виджеты для управления объектами приложения/игры как узлами со всеми основными событиями взаимодействия с вводом (щелчки, нажатия клавиш, наведение курсора мыши, фокус и т. д.).
Полнофункциональная система пользовательского интерфейса, поддержка анимации, масштабирования, вращения, обрезки, событий, сообщений и т. д.
Поддержка тем и скинов/декораций.
Поддержка плотности пикселей (масштабирование элементов пользовательского интерфейса, определяемое плотностью пикселей экрана).
Реализованы все основные виджеты (кнопка, текстовое поле, поле со списком, поле ввода, меню, список, полосы прокрутки и т. д.).
Нарисуйте поддержку аннулирования. Его можно использовать для создания реальных приложений с низким потреблением ресурсов (перерисовывается только при необходимости).
Система макетов аналогична макетам Android (LinearLayout, RelativeLayout, GridLayout).
Расширенные функции, такие как выделение текста, копирование и вставка, а также привязка клавиш.
Загрузка и оформление макетов из XML-файлов
Стилизация с помощью каскадных таблиц стилей
Средства визуализации для OpenGL 2 (фиксированный конвейер), OpenGL 3 (программируемый конвейер), OpenGL ES 2, OpenGL ES 1 и OpenGL Core Profile.
Пакетный рендерер (весь рендеринг автоматически группируется движком).
Поддержка шрифтов (TrueType, BMFont и XNA Fonts).
Поддержка кадрового буфера.
Поддержка шейдеров (с автоматическими фиксированными конвейерными шейдерами в программируемый конвертор).
Поддержка объектов буфера вершин.
Система частиц.
Выдвижная консоль.
Анимированные спрайты.
Поддержка атласа текстур (автоматическое создание и обновление атласа текстур, редактор включен).
Обтравочные маски (трафарет, ножницы, самолетики)
Поддержка растровых изображений с изменяемым размером Nine Patch.
Примитивы.
Поддерживаются многие форматы изображений (включая растровый SVG), поддержка сжатых текстур (по возможности прямая загрузка в графический процессор).
Модуль на основе бэкэнда, это означает, что вы можете легко создать бэкэнд для обработки окон/ввода.
В настоящее время поддерживает SDL 2 в качестве серверной части.
Поддержка буфера обмена.
Аппаратные курсоры.
Диспетчер отображения
Поддержка джойстика.
Предоставляет все базовые возможности для полной многопоточной поддержки библиотеки, поддержки форматов файлов для упаковки, часов, менеджера ресурсов, переводчика и многого другого.
Класс виртуальной файловой системы (абстрагирует поставщиков ресурсов в единую виртуальную файловую систему, абстрагируя zip-файлы и локальную файловую систему в одну для прозрачной загрузки ресурсов, аналогично PhysicsFS).
Настраиваемый менеджер памяти. Используется по умолчанию в режиме отладки для отслеживания утечек памяти.
Поддержка UTF8, UTF-16, UTF-32, Ansi, Wide Char.
Строковый класс, использующий внутренние символы UTF-32.
Отладка макросов
Функции и шаблоны общего назначения (вектор, квадрат, многоугольник и т. д.).
Классы интерполяции с ослаблением.
Некоторые второстепенные математические утилиты включают реализацию генератора случайных чисел Mersenne Twister, шум Перлина и многое другое.
Веб-запросы с помощью HTTP-клиента с поддержкой TLS (предоставляется mbedtls или openssl).
Асинхронные HTTP-запросы.
Передача файлов с помощью FTP-клиента и FTPS-клиента (FTP с явным TLS).
TCP- и UDP-сокеты.
Поддержка HTTP-кодирования контента и передачи-кодирования.
Поддержка HTTP-прокси.
Поддержка HTTP-сжатых ответов.
Также поддержка возобновления/продолжения загрузки HTTP и автоматическое перенаправление.
Узловая система для удобного управления сценами.
Полный контроль над событиями узла (щелчки, наведение курсора мыши, фокус и т. д.).
Система событий.
Система сообщений узла.
Программируемые действия для узлов (затухание, поворот, перемещение, масштабирование и т. д.).
Плиточные карты с программным динамическим освещением.
Полнофункциональный редактор карт.
Очень простой редактор пользовательского интерфейса. Загружайте макеты из XML-файла и наблюдайте за вносимыми изменениями в режиме реального времени.
Редактор текстурного атласа. Очень простой инструмент, позволяющий разработчику создавать и редактировать атласы текстур.
Редактор карт: продвинутый, но простой редактор карт для игрового движка. В нем отсутствуют некоторые функции, так как у меня не было времени над ним работать, этот конкретный инструмент, вероятно, умрет в пользу поддержки карт TMX в ближайшем будущем (но я не фанат карт TMX, поэтому нет никакого решения для момент).
Документация находится здесь. В настоящее время я работаю над его улучшением. Около 50% проекта в настоящее время задокументировано, поэтому еще предстоит проделать большую работу. Пожалуйста, проверьте примеры кода, расположенные в src/examples
, а также вы можете проверить тест ( src/test
) и инструменты ( src/tools
).
Я прилагаю все усилия для улучшения документации по модулю пользовательского интерфейса, поскольку на данный момент это самый важный и сложный модуль, но у него нет надлежащей документации. Если у вас есть какие-либо вопросы, вы можете связаться со мной в любое время.
В репозитории используются подмодули git, поэтому вам необходимо клонировать репозиторий и его подмодули. Чтобы легко добиться этого, вы можете просто клонировать с помощью:
git clone --recurse-submodules https://github.com/SpartanJ/eepp.git
ecode — редактор кода, созданный на базе lite. Он использует новейшую тему на чистом CSS, основанную на темной теме Plasma по умолчанию: Breeze Dark.
Редактор, отображающий в режиме реального времени изменения любого макета и CSS, помогающий ускорить разработку пользовательских интерфейсов. На скриншоте показаны некоторые виджеты по умолчанию, доступные в epp.
Небольшой инструмент, используемый для создания и редактирования атласов текстур.
Редактор 2D-карт с использованием темы оформления по умолчанию (с использованием одного атласа текстур с изображениями из 9 патчей).
Это должно выглядеть очень знакомо любому разработчику Android. Это окно с основными виджетами в вертикальном линейном расположении.
< window layout_width = " 300dp " layout_height = " 300dp " window-flags = " default|maximize|shadow " >
< LinearLayout id = " testlayout " orientation = " vertical " layout_width = " match_parent " layout_height = " match_parent " layout_margin = " 8dp " >
< TextView text = " Hello World! " gravity = " center " layout_gravity = " center_horizontal " layout_width = " match_parent " layout_height = " wrap_content " backgroundColor = " black " />
< PushButton text = " OK! " textSize = " 16dp " icon = " ok " gravity = " center " layout_gravity = " center_horizontal " layout_width = " match_parent " layout_height = " wrap_content " />
< Image src = " thecircle " layout_width = " match_parent " layout_height = " 32dp " flags = " clip " />
< Sprite src = " gn " />
< TextInput text = " test " layout_width = " match_parent " layout_height = " wrap_content " />
< DropDownList layout_width = " match_parent " layout_height = " wrap_content " selectedIndex = " 0 " >
< item >Test Item</ item >
< item >@string/test_item</ item >
</ DropDownList >
< ListBox layout_width = " match_parent " layout_height = " match_parent " layout_weight = " 1 " >
< item >Hello!</ item >
< item >World!</ item >
</ ListBox >
</ LinearLayout >
</ window >
Введение в UI можно найти здесь .
Как это выглядит с реальным кодом?
UITextView::New ()->setText( " Text on test 1 " )
->setCharacterSize( 12 )
->setLayoutMargin( Rect ( 10 , 10 , 10 , 10 ) )
->setLayoutSizePolicy( SizePolicy::MatchParent, SizePolicy::WrapContent )
->setParent( layout );
Стилизацию элемента можно выполнить с помощью специальной реализации каскадных таблиц стилей. Доступны наиболее распространенные правила CSS2, а также несколько правил CSS3 (некоторые примеры: анимация, переходы, пользовательские свойства, медиа-запросы, правило @font-face at, элемент :root). . Вот небольшой пример того, как выглядит CSS:
@font-face {
font-family : "OpenSans Regular" ;
src : url ( "https://raw.githubusercontent.com/SpartanJ/eepp/develop/bin/assets/fonts/OpenSans-Regular.ttf" );
}
@import url ( "assets/layouts/imported.css" ) screen and ( min-width : 800 px );
: root {
--font-color : black;
--background-input-color : rgba ( 255 , 255 , 255 , 0.7 );
--border-color : black;
--border-width : 1 dp ;
}
. screen TextView {
color : var ( --font-color );
}
. form {
background-image : @drawable /back;
background-repeat : no-repeat;
background-size : cover;
}
. form . form_inputs {
background-color : var ( --non-existent , var ( --background-input-color ));
margin-left : 100 dp ;
margin-right : 100 dp ;
padding-top : 72 dp ;
padding-left : 57 dp ;
padding-right : 57 dp ;
padding-bottom : 115 dp ;
}
. screen TextView . input ,
. screen TextInput . input {
font-family : AkzidenzGroteskBQ-Cnd;
layout-width : match_parent;
layout-height : 80 dp ;
border-color : var ( --border-color );
border-width : var ( --border-width );
color : var ( --font-color );
padding-left : 40 dp ;
padding-right : 40 dp ;
margin-bottom : 32 dp ;
skin : none;
hint-font-family : AkzidenzGroteskBQ-Cnd;
hint-font-size : 46 dp ;
hint-color : # 818285 ;
background-color : # FFFFFF00 ;
transition : all 0.125 s ;
}
. screen TextInput . input : focus {
background-color : # FFFFFF66 ;
border-color : # 796500 ;
}
. screen TextInput . input : hover {
background-color : # FFFFFF66 ;
}
@media screen and ( max-width : 1024 px ) {
. form . form_inputs {
background-color : red;
}
}
Полную спецификацию CSS можно найти в документации: здесь.
Вы также можете проверить, как выглядит тема на чистом CSS в epp: здесь.
Поскольку eepp поддерживает emscripten, вы можете быстро ознакомиться с некоторыми примерами, демонстрациями и инструментами, которые в настоящее время предоставляет библиотека. Имейте в виду, что вы обнаружите некоторые различия, основанные на ограничениях, которые emscripten имеет на данный момент (нет доступа к файловой системе, нет пользовательских курсоров и т. д.), а также демо-версии не оптимизированы по размеру и больше, чем должны. быть. Примечание. Используйте современный браузер с хорошей поддержкой WebGL и WASM (Chrome/ium 70+ или Firefox 80+).
ecode — Редактор кода
Редактор пользовательского интерфейса
Пользовательский интерфейс Привет, мир!
Редактор атласа текстур
Редактор карт
Пример шрифта
Демонстрация физического модуля
Пример спрайтов
Полный тест
7GUIs известен как «тест программирования графического пользовательского интерфейса», который используется для сравнения различных библиотек графического интерфейса и изучения каждого библиотечного подхода к программированию графического пользовательского интерфейса. Все 7 задач, предложенных в 7GUI, реализованы для epp. Задачи очень хорошо отражают то, чего можно достичь с помощью графического интерфейса epp, а также очень полезны для демонстрации того, как реализовать различные задачи с помощью библиотеки.
7GUI состоят из следующих задач:
Счетчик: Демо и реализация кода.
Преобразователь температуры: демонстрация и реализация кода.
Flight Booker: Демо и реализация кода.
Таймер: Демо и реализация кода.
CRUD: Демо и реализация кода.
Circle Drawer: Демо и реализация кода.
Ячейки: Демо и реализация кода.
Библиотека имеет только одну внешнюю зависимость. Вам понадобится только библиотека SDL2 с установленными заголовками. Также premake5 или premake4 необходимы для создания файлов Makefile или файлов проекта для сборки библиотеки. Я предполагаю, что вы знаете, что делаете, и пропущу основы.
Примечание: eepp по умолчанию использует mojoAL в качестве замены OpenAL. OpenAL опционально доступен в качестве аудиосервера. Если вы хотите использовать его, у вас есть альтернатива, чтобы включить его. Чтобы включить его и отключить замену модуля mojoAL, вам необходимо добавить параметр --without-mojoal
к любому вызову premake
(например: premake5 --without-mojoal gmake2
).
В системе Ubuntu это будет что-то вроде (также вам понадобится gcc, но он все равно будет установлен):
sudo apt-get install premake5 libsdl2-2.0-0 libsdl2-dev libopenal1 libopenal-dev
Клонируйте репозиторий и запустите в корневом каталоге репозитория:
premake5 gmake2
или если у вас установлен premake4, вы можете запустить:
premake4 gmake
Затем просто создайте библиотеку:
make -C make/linux
Вот и все. Это построит весь проект.
У вас есть два варианта: построить с помощью Visual Studio или с помощью MinGW. Чтобы иметь возможность построить проект с использованием любого из этих параметров, вам сначала необходимо сгенерировать файлы проекта с помощью premake4 или premake5. Затем вам нужно будет добавить двоичный файл в любой из путей к исполняемому файлу, определенных в PATH
(или добавить его, или использовать его из локального пути). Загрузите файлы Visual Studio или MinGW в зависимости от ваших потребностей.
Вам нужно будет использовать premake5 и запустить:
premake5.exe --windows-vc-build vs2022
Затем файлы проекта должны быть найдены в make/windows/
. Полное решение и весь проект будут доступны. Установив все, вы сможете собрать решение Visual Studio, как любой другой проект.
Использование аргумента строки командной строки --windows-vc-build
автоматически загрузит зависимость SDL2 и добавит пути к процессу сборки для связи с ним без необходимости вручную загружать какие-либо внешние зависимости.
Затем просто создайте решение в Visual Studio или запустите MSBuild
вручную в консоли:
"%MSBUILD_PATH%MSBuild.exe" .makewindowseepp.sln -m
Где %MSBUILD_PATH%
— это путь к MSBuild.exe Visual Studio, например для VS2022 Community Edition путь обычно следующий:
C:Program FilesMicrosoft Visual Studio2022CommunityMSBuildCurrentBin
Сборки Windows MinGW создаются и тестируются с использованием дистрибутива w64devkit. MSYS в настоящее время официально не поддерживается из-за некоторых проблем, обнаруженных в процессе сборки (но сборку можно выполнить, выполнив некоторые дополнительные действия).
Если вы используете w64devkit, вам придется загрузить его и извлечь. Мы будем считать, что он извлечен в C:w64devkit
.
Запустите C:w64devkitw64devkit.exe
от имени администратора ( right click
-> Run as administrator
).
Затем перейдите в каталог клонированного репозитория eepp
и запустите:
premake5.exe --windows-mingw-build gmake2
--windows-mingw-build
автоматически загрузит и свяжет внешние зависимости (SDL2).
Затем просто создайте проект, расположенный в make/windows/
с помощью mingw32-make.exe
или любого его эквивалента:
mingw32-make.exe -C make\windows config=release_x86_64
Чтобы построить отладочную сборку, запустите:
mingw32-make.exe -C make\windows config=debug_x86_64
Затем обязательно скопируйте файл SDL2.dll
, расположенный по адресу src/thirdparty/SDL2-2.XX.X/x86_64-w64-mingw32/bin/SDL2.dll
в bin
. Если по какой-то причине eepp.dll
(или eepp-debug.dll
) не копируется автоматически, вы можете скопировать их из libs/windows/x86_64/
в bin
.
Вам потребуются готовые двоичные файлы и библиотеки разработки SDL2, OpenAL включен в состав ОС. Установите платформу SDL2, и вы сможете собрать проект.
У вас есть два варианта сборки проекта: с помощью XCode или с помощью Makefiles . Чтобы сначала выполнить сборку с использованием любого из обоих вариантов, вам также потребуется собрать файлы проекта с помощью premake4 или premake5.
Сгенерируйте проект:
premake5 --use-frameworks gmake2
И постройте его:
make -C make/macosx
Вы можете использовать сценарий projects/osx/make.sh
, который генерирует файлы Makefile и собирает проект.
Бегать:
premake5 --use-frameworks xcode4
И откройте проект XCode, созданный в make/macosx/
или просто создайте его из командной строки с помощью:
xcodebuild -project make/macosx/project-name.xcodeproj
В projects/android-project/
есть проект Gradle. Он создаст библиотеку со всеми включенными зависимостями. Используйте пример проекта в качестве основы для своего проекта. Обратите внимание, что существует файл проекта eepp.mk
, который собирает библиотеку. Этот файл можно использовать в ваших проектах.
Проект предоставляет два файла для сборки библиотеки и демонстрационных версий. Вы можете использовать любой из них в зависимости от ваших потребностей. Файлы расположены в projects/ios
:
Этот скрипт можно использовать для создания проектов xcode и решения всех включенных проектов в epp (демоверсии, инструменты, общие библиотеки, статические библиотеки и т. д.). Он также загрузит и создаст статическую статическую библиотеку SDL2, чтобы иметь возможность ссылаться на нее в проекте. К сожалению, после создания проектов вам придется внести некоторые незначительные изменения в любой/все проекты, которые вы не хотите создавать или тестировать, поскольку в созданном проекте отсутствуют некоторые незначительные конфигурации. После запуска этого сценария вам нужно будет открыть решение, расположенное в make/ios/eepp.xcworkspace
. Со сборкой статических библиотек у вас не возникнет никаких проблем (это будет работать «из коробки»). Но для тестирования некоторых примеров необходимо:
Выберите (нажмите на имя проекта) проект, который хотите протестировать, например eepp-empty-window
. Вы увидите несколько вкладок/параметров, перейдите в «Настройки сборки» и найдите файл опции Info.plist , дважды щелкните его, чтобы отредактировать, и напишите: Info.plist
. Это будет означать, что нужно прочитать файл, который находится в том же каталоге, что и проект. Перейдите на вкладку «Общие» и заполните идентификатор пакета идентификатором пакета приложения, который будет создан. Для этого примера вы можете использовать что-то вроде: eepp-empty-window
. Это позволит вам создать и запустить проект.
Эта демонстрация eepp-empty-window
не использует никаких ресурсов/ресурсов, но другие демоверсии должны будут загружать ресурсы, и эти ресурсы необходимо добавить в проект, чтобы они были доступны в пакете приложений. Например, проект eepp-ui-hello-world
потребует от вас добавить в проект папку assets
. Что вам нужно сделать, это: выберите проект и перейдите на вкладку «Фазы сборки» , в разделе «Копировать ресурсы пакетов» щелкните значок плюса (+), затем перейдите в «Добавить другое...» , найдите и выберите папку bin/assets/
и Заканчивать . Этого должно быть достаточно.
Этот скрипт можно использовать для сборки SDL2 и EEPP как двух толстых статических библиотек с архитектурами Arm64 и x86_64 (arm64 для iPhone/iPad и x86_64 для симуляторов). Чтобы сгенерировать сборку выпуска, передайте config=release
в качестве параметра сценария ( sh compile-all.sh config=release
). Собранные файлы будут расположены в libs/ios/
как libSDL2.a
и libeepp.a
(или libeepp-debug.a
для отладочной сборки). Эти два файла могут быть интегрированы в ваш проект.
Сначала вам необходимо скачать и установить emscripten. Кроме того, в projects/emscripten/make.sh
есть сценарий для сборки проекта emscripten . Перед запуском этого сценария не забудьте установить среду emsdk, она должна быть примерно такой: source /path/to/emsdk/emsdk_env.sh
. Этого должно быть достаточно в GNU/Linux или macOS (проверено только на GNU/Linux).
Все двоичные файлы после сборки располагаются в каталоге bin
. Для двоичных файлов требуются два файла: библиотека eepp и библиотека SDL2. Библиотека eep будет расположена в libs/{OS}/
. Сценарий сборки попытается связать библиотеку epp с символической ссылкой на bin
. Если это не удастся, ее следует скопировать или создать символическую ссылку вручную. Что касается библиотеки SDL2, она не представлена в репозитории, поэтому для запуска демонстраций вам необходимо загрузить правильную версию ОС и архитектуру библиотеки SDL2.
Библиотека разрабатывается уже несколько лет, с момента своего создания она претерпела множество изменений, я вношу любые изменения, которые считаю необходимыми для ее улучшения, поэтому API все еще не полностью стабилен (но близок к этому). Он используется в нескольких приложениях, ориентированных на рекламные кампании, в основном разработанных для устройств Android и ПК с Windows.
Лично у меня никогда не было времени использовать его для разработки сложной игры с библиотекой (несколько несостоявшихся проектов), но я сделал несколько UI-ориентированных игр для клиентов.
В настоящее время основное внимание в проекте уделяется модулю пользовательского интерфейса. И я продолжу работать, сосредоточив свое внимание на этом.
План состоит в том, чтобы предоставить альтернативный набор инструментов пользовательского интерфейса, полностью аппаратно ускоренный, аналогичный набору инструментов Android, но более простой (например, удобный в использовании), а также ориентированный на настольные приложения.
Аудио и сетевые модули основаны на модулях SFML с несколькими важными отличиями, упомянутыми выше.
Мне нравится использовать то, что хорошо сделано и соответствует моим потребностям, но поскольку у меня есть свои личные взгляды на то, как реализовать некоторые вещи, я предпочитаю брать код, чтобы иметь полный контроль над ним.
Также многие идеи были взяты из других проектов. Некоторые из них, о которых я могу подумать: cocos2d-x , raylib , Android SDK , libGDX , Godot , XNA , LÖVE и многие другие проекты.
Если все это кажется вам интересным по какой-то безумной причине, свяжитесь со мной и дайте мне знать, смогу ли я помочь вам попасть в библиотеку, и, возможно, если вы захотите, вы сможете внести свой вклад в это в будущем. Этот проект нуждается в участниках больше, чем что-либо еще.
Текущее состояние библиотеки достойное. С точки зрения функций он должен находиться в таком же положении, как и наиболее часто используемые 2D-игровые движки. Но, конечно, не хватает поддержки + сообщества, которое вы можете получить от Godot или cocos2d-x, и это пара.
Основная идея этой библиотеки состоит в том, чтобы сосредоточиться на лучшем общем подходе к разработке приложений и игр с большим количеством пользовательского интерфейса, чем другие варианты, с более чистым кодом и реализацией.
Основная причина, по которой я разработал библиотеку, — это развлечение и изучение новых технологий. Мне нравится проводить время, работая над библиотекой, но я знаю, что, вероятно, нет реальной причины разрабатывать что-то подобное при огромном количестве подобных альтернатив.
Что касается качества кода: этот проект стартовал очень давно и со временем претерпел множество модификаций. Значительная часть кода по-прежнему использует старые практики C++ (например, необработанные указатели, собственную реализацию потоков, мьютекс и т. д.). Некоторые из этих вещей можно «модернизировать», но другие не имеют особого смысла, или их капитальный ремонт займет слишком много времени, чтобы оправдать затраченные усилия. Я работаю над «модернизацией» некоторых частей кода, и новый код обычно выглядит более современно.
Продолжайте совершенствовать систему пользовательского интерфейса, добавляя новые виджеты и макеты, а также улучшая поддержку CSS.
Упростите и улучшите поддержку оформления/тем оформления виджетов пользовательского интерфейса.
Улучшить/создать документацию для модуля пользовательского интерфейса.
Добавьте больше примеров и инструментов.
Добавьте поддержку скриптов, но сначала хотелось бы стабилизировать библиотеку, но у меня это получается.
Добавьте поддержку 2D-скелетной анимации (вероятно, Spine2D, реализация не составит большого труда).
Вероятно, модуль «Карты» устареет, поскольку я сосредоточу свои усилия на системе пользовательского интерфейса.
Шон Барретт за stb_image и все библиотеки stb.
Сэм Латинга за Simple DirectMedia Layer.
Джонатан Даммер за простую библиотеку изображений OpenGL.
Лоран Гомила для SFML
Юрий Кобец для litehtml
Майкл Р.П. Рагаццон для RmlUI
rxi для облегченной версии
Андреас Клинг для SerenityOS
Райан С. Гордон для mojoAL
Дэвид Рид для dr_libs
Лев (Лиефф) для minimp3 и не только
Льюис Ван Винкль для PlusCallback
Дитер Барон и Томас Клаузнер для libzip
Жан-Лу Гайи и Марк Адлер для zlib
Милан Икитс и Марсело Магаллон для GLEW
Микко Мононен для nanosvg
Скотт Лембке для Chipmunk2D
Кристоф Риччио для glm
Рич Гелдрайх за imageresampler и jpeg-compressor
Арсений Капулькин для pugixml
Джейсон Перкинс для премейка
Мартин Лукас Голини (я) и все участники SOIL2 и efsw.
Сообщество открытого исходного кода Xiph для libogg и libvorbis
Сообщество ARMmbed для mbed TLS
kcat для openal-soft
Проект FreeType
И еще много людей!
Лицензия MIT