LINUX.ORG.RU

LDL 0.1

 , , , ,


2

2

Состоялся первый публичный релиз мультимедийной библиотеки LDL (Little DirectMedia Layer), позволяющей создавать графические приложения, способные работать, как на современных, так и на устаревших системах (Windows 95+, дистрибутивы с ядром Linux 2.0+, FreeBSD 3.0+). Предоставляется простой кроссплатформенный API для управления окнами и обработки событий с устройств ввода. Для отрисовки может использоваться OpenGL 1.0-4.6. Код поставляется под лицензией LGPL 3.0.

Выпуск примечателен переходом с использования языка C++98 на язык ANSI C (C89) для обеспечения максимальной переносимости и совместимости со старыми компиляторами и платформами, включая DOS, Windows 95 и PlayStation 1.

Проект планирует развиваться постепенно — в первой версии предложены возможности для работы с окнами, событиями ввода и графикой, после чего начнётся развитие 2D-рендера, средств для работы со звуком и шрифтами, бэкендов для работы поверх библиотек SDL 1.2, SDL 2.x, SDL 3.x, SFML и GLFW. Использование бэкендов SDL, SFML и GLFW позволит без изменения кода собирать приложения для платформ, напрямую не поддерживаемых в LDL. В планах на будущее также отмечается создание универсального API для работы со спрайтами и 2D-графикой, который можно использовать независимо от выбранного бэкенда (OpenGL, Vulkan, программная отрисовка, библиотеки типа SDL).

>>> Репозиторий LDL



Проверено: dataman ()
Последнее исправление: hobbit (всего исправлений: 5)
Ответ на: комментарий от dataman

Сделал, спасибо. Я не знал, что так можно.

JordanCpp
() автор топика

позволяющей создавать графические приложения, способные работать, как на современных, так и на устаревших системах (Windows 95+, дистрибутивы с ядром Linux 2.0+, FreeBSD 3.0+)

А собственно зачем? Неужели вы думаете что Windows 95+ ещё актуальна?

Rodegast ★★★★★
()
Ответ на: комментарий от mak8kammerer

Ещё раз пожелаю удачи. И, замечу, ни одного скриншота с Linux или с какой-нибудь UNIX OC :)

Спасибо, справедливое замечание. Сам я веду разработку на Lubuntu 25.10

Обязательно добавлю скриншоты на гитхаб.

JordanCpp
() автор топика
Ответ на: комментарий от wandrien

Вот это я понимаю JFF так JFF. Чистый восторг безумия.

Спасибо, абсолютно верно. Чистейший JFF.

JordanCpp
() автор топика
Ответ на: комментарий от Rodegast

А собственно зачем? Неужели вы думаете что Windows 95+ ещё актуальна?

Все так. Но много энтузиастов использующих старое железо, виртуалки, эмуляторы.

Которые хотят создавать игры или софт, который будет запускаться на старом железе, так и на новом.

Ну и мне лично нравится старое железо, так как программируя под него, чувствуешь оптимизацию на кончиках пальцев:)

Я уже не могу нахерачить просто код. Я понимаю, что библиотеку могут запускать на десятках мегагерц. Значит, нужно предусмотреть это.

JordanCpp
() автор топика
Ответ на: комментарий от Rodegast

Суть, в том. Что мне это нравится. Какой либо коммерческой причины нет.

JordanCpp
() автор топика

Выпуск примечателен переходом с использования языка C++98 на язык ANSI C (C89)

Как-то очень уж хардкорненько. На c++ и во времена доса писали…

hobbit ★★★★★
()

как на современных, так и на устаревших системах

простой кроссплатформенный API

совместимости со старыми компиляторами и платформами

поверх библиотек SDL 1.2, SDL 2.x, SDL 3.x, SFML и GLFW

использовать независимо от выбранного бэкенда (OpenGL, Vulkan, программная отрисовка, библиотеки типа SDL)

Ну прям объять необъятное :) Нет, я в хорошем смысле. Чуваки годноту пилят! Давно такого не встречал.

Gonzo ★★★★★
()
Последнее исправление: Gonzo (всего исправлений: 1)
Ответ на: комментарий от JordanCpp

Я понимаю, что библиотеку могут запускать на десятках мегагерц. Значит, нужно предусмотреть это.

жаль, современные софто-строители «имеют эту мысль как угодно...»

sunjob ★★★★★
()
Последнее исправление: sunjob (всего исправлений: 1)

переходом с использования языка C++98 на язык ANSI C (C89)

можно услышать причины? (надеюсь, они веские?!)

sunjob ★★★★★
()

LGPL 3.0

Я может чего не понимаю, но в репе две лицензии

  • GPLv3 в COPYING
  • LGPLv3 в LICENSE

Так под GPLv3 или LGPLv3, это же две разные лицензии. Да я вижу ниже что

The LDL library is licensed under the GNU Lesser General Public License v3.0. You can use it in both open-source and proprietary projects (with dynamic linking).

То есть как бы тогда LGPLv3, но всё же GPLv3 указана явно, значит какая-то часть не под LGPLv3. Слов о том что можно выбрать одну из лицензий нет. Обычно либо под GPL, либо под LGPL публикуют, а если под двумя то типа выбирай или или. Это может путать по моему, так как эти лицензии разные и совместимы только в 1 сторону. То есть, если в проекте есть код чисто под GPLv3 то он вроде не может быть включён в динамическую линковку на условиях LGPLv3.

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от BruteForce

Поддержка мобильных платформ

Моторолла C200???

drfaust ★★★★★
()
Ответ на: комментарий от hobbit

Как-то очень уж хардкорненько. На c++ и во времена доса писали…

Проект изначально был на написан на С++ 98. И в принципе мне удалось портировать и под DOS. Но есть много других систем особенно старых, где С++ нет. Поэтому я и перешел на С89, для тотальной портабельности и возможности собирать библиотеку нативно на этих старых ОС.

Я сейчас делаю С++ обертку и биндинги к другим языкам. Поэтому использовать LDL можно будет но только как си.

JordanCpp
() автор топика
Ответ на: комментарий от LINUX-ORG-RU

То есть как бы тогда LGPLv3, но всё же GPLv3 указана явно, значит какая-то часть не под LGPLv3. Слов о том что можно выбрать одну из лицензий нет. Обычно либо под GPL, либо под LGPL публикуют, а если под двумя то типа выбирай или или. Это может путать по моему, так как эти лицензии разные и совместимы только в 1 сторону. То есть, если в проекте есть код чисто под GPLv3 то он вроде не может быть включён в динамическую линковку на условиях LGPLv3.

Для оформления лицензии проекта под LGPLv3, я добавил в каждый файл исходного кода библиотеке именно лицензию LGPLv3.

Так же, я добавил в основной файл лицензии описание лицензии LGPLv3, но для полной корректности нужно еще в репу добавить лицензию GPLv3. Так как LGPLv3 это не отдельная лицензия а разрешительная для GPLv3.

Юридически и практически, код библиотеки именно под LGPLv3.

JordanCpp
() автор топика
Ответ на: комментарий от BruteForce

Пушка! Поддержка мобильных платформ и браузера планируется?

Да конечно, осталось найти время и заняться этим. Я ещё планирую портировать на ms-dos 16 бит, не только 32 бит с расширителем.

JordanCpp
() автор топика
Ответ на: комментарий от Gonzo

Ну прям объять необъятное :) Нет, я в хорошем смысле. Чуваки годноту пилят! Давно такого не встречал.

Спасибо.

поверх библиотек SDL 1.2, SDL 2.x, SDL 3.x, SFML и GLFW

Да это как доп функция, но сейчас Windows, Linux и BSD поддерживается нативно.

JordanCpp
() автор топика
Ответ на: комментарий от sunjob

жаль, современные софто-строители «имеют эту мысль как угодно…»

Мне тоже жаль, так как практически это реально и не требует писать на ассемблере. Просто немного задумываться о производительности. Не нужен конкретный язык, тот софт который написан на С#, Java и т.д можно ускорить. Им даже не нужен по сути не си и не С++.

можно услышать причины? (надеюсь, они веские?!)

Тотальная переносимость. Новые старые ПК, консоли, микроконтроллеры и т.д Это цена за возможность собрать где угодно и портировать под, что угодно.

JordanCpp
() автор топика
Ответ на: комментарий от PcheloBiaka

Так под это теперь ещё и проги писать-переписывать? Какие планы?

Использовать LDL для своих проектов. Для новых или ретро систем. Улучшать LDL, делать биндинги для других языков. И возможно, LDL заметят и будут использовать.

JordanCpp
() автор топика

Более подробный ответ почему С89.

  1. С89 не требует лишних либ только libc.
  2. Весь код укладывается в стандарт С89 и ограниченный набор функций libc.
  3. Для win9x используется набор старых функций доступных с windows 95 и выше. Аналогично для linux, и bsd.

OpenGL это просто мною объявленные функции и при загрузке встроенный загрузчик загружает нужные функции в зависимости от версии. Я не завишу от заголовков типа gl.h и подобного. Все мое.

Если в компиляторе нет поддержки stdbool или stdint, я реализую единый файл через ifdef с проверкой если нет, то реализую typedef сам, если есть использую стандартные.

Не использую компиляторо специфичного кода. Код собирается как с89 или выше. Или как С++. Не просто С++ компилятором как си, а именно как С++ код.

Пример для порта под debian 3 я использовал старую функцию времени и это позволило работать на старых дистрах. На новых уже выпили. В будущем я сделаю проверку и буду использовать на старых старую функцию, на новых новую.

Я думаю напишу с пятью об этом и более подробно расскажу и покажу на примерах. Так как тема интересная.

Как дойду до vulkan, так же сделаю набор функций совместимый, который можно из вне установить. Что бы не было жёсткой зависимости от vulkan sdk.

JordanCpp
() автор топика

Я получил обратную связь всем большое спасибо.

Планы на 0.1.1

  1. Исправление замечаний по коду, особенно нужно поправить код на WinAPI проблема с созданием и пропусков событий, так же при создании нужно хитрее следить за размерами окна.
  2. Рефакторинг cmake, добавить опции сборки и о умолчанию собирать dll/so с возможностью установки.
  3. Доделать тесты.
  4. Исправить ворнинги на максимальных уровнях предупреждений.
  5. Дополнительные сборки на разных компиляторах.
  6. Начать делать документацию (ИИ + doxygen)
JordanCpp
() автор топика

Для отрисовки может использоваться OpenGL

Непонятно, а может и не использоваться?

dataman ★★★★★
()

LDL 0.1

А где собственно сам релиз 0.1? Смотрю:

  • Releases -> No releases published
  • Switch branches/tags -> Tags -> Nothing to show
nvl ★★★★
()

На скриншотах представлены лучшие визуализации, полученные с помощью библиотеки LOL. Графика, которая всегда была уделом профессиональных графических станций SGI, наконец то добралась до PC! Раздвигая горизонты реальности, графические приложения преображают мир!

Журнал «PC-piss Press», 1993 год.

Byers
()
Ответ на: комментарий от nvl

А где собственно сам релиз 0.1? Смотрю:

Релиз сделал. Чуть позже, положу dll собранные для разных компиляторов 32/64 Я как раз сейчас занимаюсь сборкой на VC 6.0 и Msvc 2026 думаю, такие версии под Windows нужны в первую очередь.

JordanCpp
() автор топика
Ответ на: комментарий от dataman

Непонятно, а может и не использоваться?

Пока нет 2D рендера, поэтому вывод графики только на OpenGL. Криво сформулировано. Надо будет поправить. Спасибо.

JordanCpp
() автор топика
Ответ на: комментарий от Byers

На скриншотах представлены лучшие визуализации, полученные с помощью библиотеки LOL. Графика, >которая всегда была уделом профессиональных графических станций SGI, наконец то добралась до PC! >Раздвигая горизонты реальности, графические приложения преображают мир! Журнал «PC-piss Press», 1993 год.

Мне честно нравятся скриншоты тех лет. Да они простые, графика слабая. Но очень вдохновляющая. Это ведь начало развития 3D на ПК. И с каждым годом графика становилась лучше, писали статьи, обсуждали. Я вижу в этом не просто раньше, а красоту развития технологии. О как:)

JordanCpp
() автор топика
Ответ на: комментарий от anonmyous

А тут недавно народ 64битный тулчейн под ДОС выкатывал: создан 64битный кросс-тулчейн для DOS: dj64dev

Спасибо посмотрю и обязательно проверю.

Дело в том, что меня уже просили проверить собирается ли с помощью tcc. А у меня просто руки до всего не доходят. Я обязательно проверю и почитаю. Спасибо за ссылку.

JordanCpp
() автор топика
Ответ на: комментарий от JordanCpp

Я так понимаю, что можно и на djgpp проверить. Они вроде бы совместимы.

anonmyous ★★★
()
Ответ на: комментарий от JordanCpp

Перспективная вещь, хочется связаться с автором. Планируется ли софтварная отрисовка X11 без OpenGL?
Я собираюсь перенести на OpenVMS, есть еще несколько вопросов.
Занимался портированием SDL до версии 2.х какой-то, пока не пришлось бросить из-за нарастающего уровня дебилизма в коде.

Alphaer ★★
()
Последнее исправление: Alphaer (всего исправлений: 2)
Ответ на: комментарий от Alphaer

Перспективная вещь, хочется связаться с автором. Планируется ли софтварная отрисовка X11 без OpenGL?

Да конечно. Будет 2D рендер, вывод изображений, примитивы и т.д С несколькими версиями, OpenGL 1.2, 2.1. 3.3 и конечно вариант на цпу буфером в озу.

Как раз в С++ версии он был, я его буду переносить, переписывая на С89.

JordanCpp
() автор топика
Ответ на: комментарий от JordanCpp

Как раз в С++ версии он был,

Может, я за основу старую версию брал, в конце прошлого года возился,
но там была проблема какой-то невычищаемой зависимости от OpenGL, поэтому пришлось временно бросить перенос. Тогда надо ждать версию с 2D, я правильно понимаю? Есть какой-то контакт у Вас?

Alphaer ★★
()
Ответ на: комментарий от Alphaer

Тогда надо ждать версию с 2D, я правильно понимаю?

Да обязательно. Сейчас LDL неразрывен с OpenGL. Так как нет софтвар реализации. Сейчас невозможно даже создать окно не GL.

При добавлении 2D рендера, я как раз добавлю и окно и сам рендер без зависимости от GL.

Можно будет как собрать полную библиотеку и динамически выбирать контекст gl1,gl3, софтвар. Или собрать только с нужной поддержкой.

JordanCpp
() автор топика
Ответ на: комментарий от JordanCpp

Так портабельность C89 не миф? Сам тоже стараюсь на C89 писать, но программ, которые написаны на C89 прям очень мало.

Выглядит очень прикольно, давно есть идеи для программ с 3D графикой. Пробовал Raylib, но:

  • Там C99 (хотя есть поправить заголовочник, можно линковаться кодом написанным на C89);
  • Выяснилось, что там используются какие-то совсем новомодные штуки из libc.

На досуге попробую заценить LDL, может это именно то что мне надо. Единственное, предпочитаю классический make, но тут уже…

Jullyfish
()
Ответ на: комментарий от Alphaer

Еще подскажите пож., SDL3Lite это отдельный проект или это все будет LDL ?

Это отдельны проект, остался для истории. Я репу переведу в архив.

JordanCpp
() автор топика
Ответ на: комментарий от Jullyfish

Так портабельность C89 не миф? Сам тоже стараюсь на C89 писать, но программ, которые написаны на C89 прям очень мало.

Да С89 тотально портабелен. Он есть под всё, сначала делается железка и к нему компилятор си в первую очередь.

На досуге попробую заценить LDL, может это именно то что мне надо. Единственное, предпочитаю классический make, но тут уже…

Я добавлю make для очень старых систем для совместимости. К примеру для linux дистров от 2000-го года. Это первые версии ubuntu, debian 3 и остальные.

JordanCpp
() автор топика
Ответ на: комментарий от JordanCpp

Он есть под всё, сначала делается железка и к нему компилятор си в первую очередь.

Но как-то редко встречается. FreeBSD C99, проекты suckless.org тоже. Как у OpenBSD, NetBSD не знаю. SDL2 это C89 и libpng, кажется тоже, больше ничего не могу вспомнить.

Я добавлю make для очень старых систем для совместимости.

Ну прям радуете. :^)

Для идеала ещё бы сделать поставку без внешних зависимостей.

Jullyfish
()
Ответ на: комментарий от Jullyfish

Но как-то редко встречается. FreeBSD C99, проекты suckless.org тоже. Как у OpenBSD, NetBSD не знаю. SDL2 это C89 и libpng, кажется тоже, больше ничего не могу вспомнить.

C89 бывает единственным компилятором под старую железку. С89 позволяет нативно собирать библиотеку, на старой или очень старой системе. Именно из-за этого я пишу на строгом С89. Выбрал минимально возможный вариант си.

Для идеала ещё бы сделать поставку без внешних зависимостей.

Что имеется в виду? Сейчас есть зависимость от xlib и gl. В варианте софт рендера, зависимость будет только от xlib. Куда еще меньше:)

JordanCpp
() автор топика
Ответ на: комментарий от Jullyfish

Да я еще сделаю вариант Null ОС, это просто заглушки без реализации, но это поможет собрать библиотеку и проверить предварительно код на совместимость с компилятором. Как пример допустим порт под PS1. Я добиваюсь сборки этого Null бэкенда, исправляю синтаксис, ключи сборки. И как только начинает собираться. Я уверен, что уже добавив функционал PS1, уже не будет проблем с портированием.

Такой лайфхак.

JordanCpp
() автор топика
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.