Первый релиз LDL 0.1 — маленькая библиотека с большой душой. Один API на 30 лет компьютерной истории

от автора

Приветствую, Хабравчане!

Рад представить первый публичный релиз библиотеки 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

LGPLv3

Примеры кода

CC0 1.0 (общественное достояние)

Скриншоты

Буду рад вашим комментариям, предложениям и критике.

Репозиторий библиотеки LDL
Тема на Old-Games.ru
Тема нв Linux.org.ru
Тема на Gamedev.ru

ссылка на оригинал статьи https://habr.com/ru/articles/1030614/