LINUX.ORG.RU

Первый выпуск мультимедийной библиотеки LDL c поддержкой старых систем

 ,


6

2

Представляю Вашему вниманию разработанную мной первую версию мультимедийной библиотеки Little DirectMedia Layer, сокращённо LDL.

Библиотека написана на С++ 98 стандарта, что позволяет компилировать ее начиная с Visual C++ 6.0. Код распространяется на условиях Boost Software License 1.0. Но библиотека не ограничивает программистов в выборе стандарта языка C++, программист может использовать любой современный стандарт языка. Я придерживаюсь философии downgrade — это использование старых устройств и софта в повседневной жизни, когда компании не поддерживают свои же «устаревшие» операционные системы или устройства, увеличивая с каждой новой версией своего продукта системные требования, или прекращают поддержку девайса. Миллиарды устройств по всему миру ежесекундно перемалывают миллиарды инструкций неоптимизированного кода.

В этом году я выступил на конференции С++ 2023 с докладом «Вперед в прошлое, или Разрабатываем фреймворк под Windows 95 в 2023 году».

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

В самом начале процесса разработки я и не предполагал, что данная библиотека вообще возможна. Но при практической реализации прототипа, добавляя строчку за строчкой в фундамент будущей библиотеки, убеждался в возможности ее создания и практическом применении.

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

Возможности библиотеки:

  • поддержка Linux Debian 3 и выше (обеспечена нативная сборка);
  • поддержка Windows 95 — Windows 11;
  • простое API для работы с 2D графикой;
  • загрузка множества графических форматов (bmp, png, tga, jpg);
  • кроссплатформенное API над окнами и событиями ОС;
  • для аппаратного ускорения графики используется OpenGL 1.2 и
  • OpenGL 3.3, присутствует поддержка обработки графики только на ЦПУ, если отсутствует аппаратное ускорение;
  • рендер может быть выбран динамически при загрузке приложения;
  • единое API для всех систем — напиши один раз и компилируй везде!
  • воспроизведение звука;
  • динамическая и статическая линковка.

Планы на будущее:

  • поточное воспроизведение звука;
  • вывод текста с поддержкой библиотеки freetype;
  • дополнительные рендеры Direct3D 9, 10, 11;
  • API для работы с потоками;
  • встроенная поддержка API для работы с сетью;
  • портирование фреймворка на другие платформы: Android, IOS, MacOs.

Ссылки:

>>> Подробности



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

Ответ на: комментарий от tiinn

Так им и пользоваться как компом общего назначения нельзя

Ну а с 64 - можно. Были бы дрова. А их нет. Ну, точнее, как… Что-то бы работало, веб в линксе, мп3, джаббер. Дум2. Такое бы всё пошло. А остальное - нет. Это как, можно пользоваться, как компом общего назначения? Не то, чтобы… Но только и win2K тут совершенно не при чём. Так как и под ним вы на вряд ли получите фейсбук, ютуб или блендер. По этому, операционка тут особо то и не при чём. Другие факторы играют роль.

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

Но только и win2K тут совершенно не при чём. Так как и под ним вы на вряд ли получите фейсбук, ютуб или блендер

Да. Зато, куча игорей, какое-никакое видео, MS Office и те же веб в IE и мп3. Возможно, джаббер. Насчёт FB кстати, проверить надо

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

Да. Зато, куча игорей, какое-никакое видео

А вот! По тому, что там видео драйвера есть… В этом и весь косяк. Сделайте их для линукса - и всё то же самое.

Насчёт FB кстати, проверить надо

Да не надо. Пытался я им на 3 гигах пользоваться - ну 1 вкладку ещё тянет, а потом всё уходит в свап на пару минут. Это не работа. И то на 3 гигах! На 64 метрах - и не проверяйте. :)

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

Сделайте их для линукса - и всё то же самое.

Так, никто же не сделает дрова для линукса - и вы это знаете

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

Так, никто же не сделает дрова для линукса - и вы это знаете

Речь не обо мне. :) Я лишь выдвигаю тезис. Дескать, хочешь сделать поддержку старого железа - запили, для начала, драйвера вудушки. Это, на мой взгляд, принесёт ожидаемый результат. Народ же, вместо этого, запилил либу… Ожидаемый результат это не принесёт. Вот и всё, что я пытался сказать.

А то, что этот «ожидаемый результат», на самом деле, никому не нужен, и дрова всё равно никто не запилит - ну это и так понятно.

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

Речь не обо мне. :) Я лишь выдвигаю тезис. Дескать, хочешь сделать поддержку старого железа - запили, для начала, драйвера вудушки.

И что это даст? Увеличит время разработки вообще. Напиший драйвер, потом пересобери библиотеки, ядро внеси изменения ещё кудато. И количество работы будет только увеличиваться. Спасибо за совет, но нет.

Это, на мой взгляд, принесёт ожидаемый результат. Народ же, вместо этого, запилил либу… Ожидаемый результат это не принесёт. Вот и всё, что я пытался сказать.

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

А то, что этот «ожидаемый результат», на самом деле, никому не нужен, и дрова всё равно никто не запилит - ну это и так понятно.

Ещё раз повторю. Поддержка в том числе и старогых ОС и старого железа, это возможность которая даёт библиотека. Понимаете? Возможностью можно как воспользоваться, так и нет.

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

А чё, я бы под Borland C++ пописАл бы. Синенькое и вот это вот всё.

Особого смысла нет, mingw поддерживает С++11 создающий совместимые бинарники с windows 95.

Я сам ещё не тестировал сборку под borlad C++. Но думаю соберется.

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

Интересная техно-некрофилия.

Это не самоцель, просто некая фича. Дальше будет поддержка dx 10,11,12 и vulkan.

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

Смысла нет, просто, тряхнуть стариной.

tiinn ★★★★★
()

Главная цель, это сделать быструю и потабельную библиотеку. Которая бы использовала то, что доступно. Если есть OpenGL 1, могла и на нём работать. И не вываливалась с ошибкой поставьте видеокарту c OpenGL 3 или Vulkan, что бы отрисовать пару спрайтов и линий.

Современные DE могут спокойно работать и на Voodoo 2 с её производительностью, если подойти к делу более рассудительно. Что такое окошки, текст. Это просто картинки, которые рисовались и на xerox бородатых годов.

А сейчас требуют ресурсов компьютера как ААА игры.

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

Так, никто же не сделает дрова для линукса - и вы это знаете

Ну, кстати то сказать… мир чудесами полон. В частности, нашёл я вот тут 1го фрика: https://www.facebook.com/zxc64.hw который, за небольшие деньги, перепиливает людям под заказ старые вудушки на… на старые вудушки, но уже с разъёмом PCI-e! Купить у него такую, запихать в тундерболтовское шасси, и можно пилить драйвера. Вот такие люди действительно занимаются поддержкой старого железа. Не на словах, а на деле. :) Лично я бы даже покраудфандил проект по созданию драйвера к его видюшке. Сейчас они работают с оригинальными старыми дровами под новой виндой, если я всё верно понял. А значит, если сделать драйвер к его видюшке под линуксом, то он будет совместим и с оригинальной тоже.

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

Цель в поддержке старых дистров которые работаю на старом железе. Цель достигнута.

Хорошо, если ваша цель достигнута без единой рабочей проги под это, то я вам не мешаю. :)

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

Хорошо, если ваша цель достигнута без единой рабочей проги под это, то я вам не мешаю. :)

А вы мне и не мешали и не можете мешать. Прог нет, только примеры написанные мной.

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

Да не надо. Пытался я им на 3 гигах пользоваться - ну 1 вкладку ещё тянет, а потом всё уходит в свап на пару минут. Это не работа

На моём кухонном компе с PIII не 3 гига, а 380 с копейками Мегабайт ОЗУ, и FB там работает. Но это боль и ацкие тормоза. Что там будет с 64Мб ОЗУ - страшно представить.

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

А чё, я бы под Borland C++ пописАл бы. Синенькое и вот это вот всё.

Смысла нет, просто, тряхнуть стариной.

Добавил поддержку сборки на Borland C++ 6.0 и выше. Можете тряхнуть:)

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

Шутка

Ещё бы http://old-dos.ru/files/file_137.html Microsoft QuickC

Шутки, шутками, а в 1995 году на нём за три недели разработал библиотеку для работы с DBF файлами (полноценно была поддержана работа с idx файлами Foxpro 2.6).
Кроме этого API поддерживало все «вкусняшки» Foxpro 2.6 (работа с строками, ..., интерфейс для работы с Perl, ...).

Понадобилось это API для выполнения «шабашки» - «Система подготовки данных».
Ещё вдобавок реализовал возможность одновременной работы четырёх пользователей в MSDOS с использованием польских терминалов Селезия на AT-286 1MB.

На заработанные деньги купил себе AT-286, которая в те времена стоила как четыре Волги.

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

На заработанные деньги купил себе AT-286, которая в те времена стоила как четыре Волги.

В 1995, или всё же раньше?

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

Ныне а-ля Си на C++, так как синтаксис C++ местами удобней.
STL, STD, template, class, ... не использую.
Своё API реализующее работу с объектами.
Итроспекция, рефлексия, ... поддержаны (run-time однако).
Не понимаю «хныкающих» на ЛОР - «Возьмите и сделайте!».
Кому-то, что-то доказывать - «не моё».
Спорят БЕЗДЕЛЬНИКИ.

Из запланированного процентов семь (в лучшем случае) сделано.

Жаль, что нет форума для разработчиков.
Все форумы в лучшем случае БАЗАР НЕАДЕКВАТОВ.

В предыдущем треде рассказывал немного о разработке, но «всё течёт и меняется».

Forum0888
()
Последнее исправление: Forum0888 (всего исправлений: 5)

Сделал некоторые обновления, последующие обновления буду делать в новогодние праздники. И ещё раз предлагаю всем желающим присоединиться к проекту.

Добавил базовую поддержку 3dfx Glide Добавил поддержку сборки для Borland C++ 6.0 и выше. Добавляю поддержку d3d11

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

  1. GCC 3 и выше
  2. MinGW 3 и выше
  3. OpenWatcom V2 и выше
  4. Visual C++ 6.0 и выше
  5. Borland C++ 6.0 и выше

Как всё это работает: Библиотека поддерживает 2D API под капотом в зависимости от выбранного рендера это API работает на OpenGL, Directx и теперь Glide. Но так же есть доступ к нативному программированию графических API напрямую, OpenGL, DirectX. Glide. К примеру можно написать игру на Glide и запускать как на нативном железе, так и используя врапперы. Для разработки и тестирования интеграции с Glide я использую dgVoodoo.

Можно используя Glide создать игру и воспользоваться библиотекой LDL для управлениями окнами и событиями ОС. Работать будет на Windows, Linux + на нативном железе. Вполне не плохо. Linux версия немного отстаёт от Windows, до нового года подтяну.

Заинтересовался портированием под Android. Пока гуглю информацию, настраиваю Android студию.

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

Пример кода на Glide. Заливаем экран зелёным цветом.

#include <LDL/Core/RuntimeError.hpp>
#include <LDL/Graphics/Window.hpp>
#include <LDL/Graphics/Render.hpp>
#include <LDL/Enums/RenderMode.hpp>
#include <LDL/APIs/Glide/GlideLoader.hpp>

#include <iostream>

using namespace LDL::Glide;
using namespace LDL::Graphics;
using namespace LDL::Events;
using namespace LDL::Enums;
using namespace LDL::Core;
using namespace LDL::Math;

int main()
{
  try
  {
    GlideLoader glideLoader;
    RenderContext renderContext(RenderMode::Glide);
    Window window(&renderContext, Vec2u(0, 0), Vec2u(800, 600), "01_Glide_Line");

    Event report;
    FxU32 handle = (FxU32)window.NativeHandle();

    grGlideInit();
    grSstSelect(0);

    FxBool result = grSstWinOpen(handle, GR_RESOLUTION_800x600, GR_REFRESH_60Hz, GR_COLORFORMAT_RGBA, GR_ORIGIN_UPPER_LEFT, 2, 1);

    if (!result)
      throw RuntimeError("grSstWinOpen failed");

    grVertexLayout(GR_PARAM_XY, 0, GR_PARAM_ENABLE);
    grColorCombine(GR_COMBINE_FUNCTION_LOCAL, GR_COMBINE_FACTOR_NONE, GR_COMBINE_LOCAL_CONSTANT, GR_COMBINE_OTHER_NONE, FXFALSE);

    Color screenColor(34, 177, 76);

    while (window.Running())
    {
      grBufferClear(screenColor.toInt(), 0, 0);

      while (window.GetEvent(report))
      {
        if (report.Type == IsQuit)
        {
          window.StopEvent();
        }
      }

      grBufferSwap(1);

      window.PollEvents();
    }

    grGlideShutdown();
  }
  catch (const RuntimeError& error)
  {
    std::cout << error.what() << '\n';
  }

  return 0;
}
JordanCpp
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.