Приветствую, Хабравчане!
Рад представить первый публичный релиз библиотеки LDL.
Что такое LDL?
LDL (Little Directmedia Layer) это не просто кроссплатформенная библиотека, а мост между разными эпохами разработки. Она позволяет писать код, который одинаково хорошо работает на Windows 95 и Windows 11, на старых ядрах Linux и современных дистрибутивах, на FreeBSD 3.0 и свежих релизах.
Библиотека написана на чистом C89 (ANSI C), что обеспечивает максимальную переносимость даже на самые экзотические компиляторы и платформы.
Раньше я писал LDL на C++98, что уже давало хорошую портабельность. Но со временем я пересмотрел подход. Во-первых, я полностью перешёл на C89, что дало максимальную совместимость со старыми компиляторами и платформами, включая DOS, Windows 95, Solaris и даже PlayStation 1. Во-вторых, я отказался от идеи выпустить сразу версию 1.0 со всей функциональностью. Теперь релизы выходят итеративно: сначала окна, события и графика, потом 2D-рендер, затем звук и шрифты. Так проект не зависает в офлайне на годы, а постепенно развивается на глазах у сообщества.
Да, ещё одна важная часть стратегии, бэкенды. LDL не пытается заменить SDL, SFML или GLFW, а становится надстройкой поверх них. В планах добавить бэкенды для:
-
SDL 1.2
-
SDL 2.x
-
SDL 3.x
-
SFML
-
GLFW
Это значит, что приложение на LDL можно собрать поверх любой из этих библиотек без изменения кода. API остаётся единым, а внизу можно подставить любую поддерживаемую систему окон и ввода.
Такой подход решает несколько задач. Во-первых, если нативной реализации под какую-то платформу ещё нет, можно временно использовать бэкенд через существующую библиотеку. Во-вторых, разработчики, уже знакомые с SDL или GLFW, могут попробовать LDL без полной замены своего инструментария. В-третьих, появляется возможность использовать возможности этих библиотек (например, звук или шрифты в SDL) раньше, чем они будут реализованы в нативном LDL.
Пример окна на LDL.
/* * ----------------------------------------------------------------------------- * This example is in the public domain (CC0 1.0 Universal). * You can copy, modify, use, and distribute it for any purpose. * ----------------------------------------------------------------------------- */#include <LDL/LDL.h>int main(void){ LDL_Result* result; LDL_Context* context; LDL_Window* window; LDL_Event event; result = LDL_ResultNew(); context = LDL_ContextNew(LDL_ContextOpenGL1); window = LDL_WindowNew(result, context, LDL_GetVec2i(0, 0), LDL_GetVec2i(800, 600), "LDL - Simple Window", LDL_WindowModeResized); if (LDL_ResultIsOk(result)) { while (LDL_WindowIsRunning(window)) { while (LDL_WindowGetEvent(window, &event)) { if (event.Type == LDL_EventIsQuit || LDL_EventIsKeyPressed(&event, LDL_KeyEscape)) { LDL_WindowStopEvent(window); } } LDL_WindowPresent(window); LDL_Delay(16); } LDL_WindowFree(window); LDL_ContextFree(context); LDL_ResultFree(result); } if (LDL_ResultIsFail(result)) { printf("Error: %s\n", LDL_ResultGetMessage(result)); } return 0;}
Возможности текущей версии
|
Функция |
Поддержка |
|---|---|
|
Окна |
✅ Создание, изменение размера, закрытие |
|
События |
✅ Клавиатура, мышь, ресайз, фокус |
|
Клавиатура |
✅ Полная карта клавиш |
|
Мышь |
✅ Движение, клики, колёсико |
|
OpenGL 1.0-4.6 |
✅ От immediate mode до compute shaders |
Поддерживаемые платформы
|
ОС |
Версии |
|---|---|
|
Windows |
95, 98, ME, 2000, XP, Vista, 7, 8, 10, 11 |
|
Linux |
Ядро 2.0 — 6.x (1996+) |
|
FreeBSD |
3.0 — 14.x (1998+) |
Установка и сборка
# Установка зависимостей (Debian/Ubuntu)sudo apt-get install libx11-dev libgl1-mesa-dev# Клонирование и сборкаgit clone https://github.com/JordanCpp/LDL.gitcd LDLcmake -B buildcmake --build build
Планы на версию 0.2
Добавить 2D-рендера в LDL, создать единый интерфейс для рисования спрайтов, линий, прямоугольников, который работает одинаково на любом железе. Разработчик не думает, что у него под капотом: современный Vulkan, старый OpenGL или вообще только процессор без видеокарты. LDL сам выбирает оптимальный бэкенд.
На современных системах рендер идёт через Vulkan или OpenGL с аппаратным ускорением. На ретро-железе включается программный растеризатор. Визуальный результат при этом остаётся одинаковым: один и тот же код даёт одну и ту же картинку везде.
API будет простым и интуитивным: загрузка спрайта, отрисовка по координатам, цветовые эффекты. Всё в рамках единого вызова, без возни с низкоуровневыми деталями.
Цель: чтобы код на LDL жил десятилетиями от винтажных консолей и ПК из 90-х до ультрасовременных рабочих станций без переписывания и без сюрпризов. То есть сделать 2D часть такой же переносимой и долговечной, как и всю остальную библиотеку.
Философия проекта
Мы стоим на плечах гигантов, чьи имена часто забываем, но чья работа продолжает формировать наш мир каждый день.
LDL — это попытка сохранить связь между поколениями разработчиков. Библиотека не пытается заменить существующие решения (SDL, GLFW), а дополняет их, предоставляя единый API для платформ, которые обычно остаются за бортом современной разработки.
LDL создан не просто как библиотека. Это попытка сохранить то особенное чувство, которое возникает при работе с техникой прошлых лет.
В мерцании электронно-лучевой трубки старого монитора. В ощутимом тепле процессора без кулера, который трудится над каждым тактом. В том, как инженеры 90-х выжимали невозможное из килобайтов памяти и мегагерц частоты.
Сегодня у нас терабайты и терафлопсы, но мы потеряли что-то важное, искусство делать многое из малого. LDL возвращает этот подход. Каждая строчка библиотеки написана с мыслью о том, что она может работать на Pentium 66 МГц с 8 МБ RAM.
Почему это важно?
Потому что современный софт живёт 3–5 лет. Мы выбрасываем работающее железо не потому, что оно сломалось, а потому, что программы стали слишком тяжёлыми и ленивыми. LDL — это протест против запланированного устаревания. Это код, который не требует замены оборудования каждые три года.
Один код. Тридцать лет компьютерной истории. И очарование, которое чувствуют те, кто застал эпоху, когда программирование было настоящим искусством выживания в ограничениях.
Лицензия
Скриншоты







Буду рад вашим комментариям, предложениям и критике.
Репозиторий библиотеки LDL
Тема на Old-Games.ru
Тема нв Linux.org.ru
Тема на Gamedev.ru
ссылка на оригинал статьи https://habr.com/ru/articles/1030614/