Первый релиз 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/