LINUX.ORG.RU

Я пишу облегчённую версию SDL3, с поддержкой старых систем.

 ,


1

3

Приветствую!

Проект решил назвать SDL3Lite. Проект пишу на C++ 98, но наружу торчит совместимый С API. Я хочу реализовать базовый функционал, поэтому вполне реально довести проект до конца. Главная идея проекта это сохранить совместимость с оригинальным C API SDL3. В идеале это конечно на уровне бинарной совместимости. Код единожды написанный должен собираться без изменений для всех поддерживаемых систем.

Сейчас работает рендер на OpenGL 1.2, добавляю версию software для старых систем без поддержки аппаратного ускорения. Также планирую добавить и поддержку vulkan. В репе есть скриншоты с выводом графики.

На данный момент поддерживается windows 95 и выше, linux начиная с Debian 3.

В будущих версиях планирую добавить поддержу windows 3.1 и ms-dos.

Рад буду советам, критике и предложениям.

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

Не устраивает, что с каждой новой версией дропают поддержку множества и не таких старых платформ.

Я пару дней крутил сорцы SDL3. И портировать сверх задача. Очень серьезные трудозатраты. Легче написать заново, но реализовать минимальный функционал. Простой рендер, окна, события. И уже остальной функционал добавлять по мере готовности.

Я пишу на С++, поэтому разработка идет быстрее.

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

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

И заодно закрываю гештальт по ретро кодингу под старые девайсы.

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

Да, я уже начал адаптировать примеры из оригинального SDL3. Недостающий функционал реализую и тестирую. Пока не выкладывал. Но постараюсь в ближайшие дни, выложить несколько готовых примеров.

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

Да мой интерес это фан и программирование игр. Не хочу писать под несколько версий SDL, что бы портировать под Windows 95. У меня есть проект по реализации движка игры Arcanum. Вот туда его применю. И возможно такой базовый функционал пригодится и другим разработчикам. Вдруг кто-то захочет портировать под системы 25+ лет. Особенно игры с 2D графикой.

И само по себе это интересно. Мне приходится напрямую взаимодействовать с тем старым железом или эмуляторами, операционными системами и старыми компиляторами.

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

А есть чем под эти цели компилировать C++ хотя бы 17-го стандарта?

Вот именно из-за этого и придерживаюсь С++ 98. Который более или менее поддерживается старыми компиляторами под старые ОС.

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

верно мыслишь! надо на инклюзивный говнолорчек твоё гумно тащить)) тут нельза фуйцов накидать за бакланопцтит, как на попеннете

Да ладно вам. Нормальный проект, не хуже других. И кстати на на OpenNet тоже завезли:)

https://www.opennet.ru/opennews/art.shtml?num=62909

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

Вот именно из-за этого и придерживаюсь С++ 98. Который более или менее поддерживается старыми компиляторами под старые ОС.

Это понятно, но пользователям библиотеки тоже придётся мучаться, чтобы их код на старых системах заработал. Логичнее было бы портировать на старую систему новый тулчейн и потом писать код без боли

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

гештальт по ретро кодингу под старые девайсы.

Какие именно, позволь узнать? Старые компы или старые портативные девайсы?

Вот у меня есть старые Linux’овые моторолки, там под SDL работают такие штуки:

https://youtu.be/lpoxch6yz_s

SDL там очень древний, вроде 1.2.15 и получить облегчённый SDL3 было бы интересно.

EXL ★★★★★
()

Проект пишу на C++ 98, но наружу торчит совместимый С API.

давно пишешь-то? там одни заглушки функций, больше и нет ничего. так оно и надо?

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

Логичнее было бы портировать на старую систему новый тулчейн и потом писать код без боли

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

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

Какие именно, позволь узнать? Старые компы или старые портативные девайсы?

По возможности на всё, до чего доберусь и хватит знаний портировать.

давно пишешь-то? там одни заглушки функций, больше и нет ничего. так оно и надо?

Около месяца. Заглушки для дальнейшей реализации, еще не до конца доделан software рендер. Но до этого был похожий проект, поэтому беру код из него. Там много реализованного функционала который нужен для SDL3Lite.

А чем обусловлен выбор лицензии Boost?

Раньше работал плотно с библиотекой boost, ну и взял её как основу для своих проектов.

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

Типа windows 3.1 и ms-dos?

Это уже мои хотелки.

На сайте SDL, при очередном релизе есть пункт drop systems. И с каждой новой версией список не маленький. И по опыту поддержки старых систем, не сказать, что это дорого и сложно. Около 1000-2000 строк кода на систему. Конечно это нужно сделать, поддерживать, отлаживать и т.д А когда таким систем десятки, нагрузка чувствуется. Ну и понятно, что основным разработчикам платят, а кто платит тот и танцует. А мне никто не платит, могу себе позволить добавить поддержку Windows 3.1 и MS-DOS.

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

Нужно знать на что обязательно завязаться чтобы старьёвщики не пытались лезть в мои проекты.

Вот, нашёл на опеннете:

Проблема с fheroes2 в том, что они используют новые фичи плюсов, а под некоторые архитектуры нет свежего gcc (например под armv4t самый свежий gcc/g++ это версия 4.4.3), а более новые хотя код вроде как генерят, но тащут свои объектники и либы заточные под более свежий арм. Поэтому данная либа им не поможет.

Т.е. достаточно писать на каком-нибудь C++21, и весь этот древний мусор останется в пролёте.

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

Проблема с fheroes2 в том, что они используют новые фичи плюсов

Интересно какие игры автор рассчитывает поддерживать своей библиотекой, ибо проекты переехавшие на совсем недавно релизнувшийся SDL3 и не переехавшие при этом на достаточно новый стандарт плюсов (или, не дай бог, написанные на чистом C) можно, наверное, по пальцам одной руки пересчитать.

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

Ты путаешь вообще никак не связанные (или диаметрально противоположные, это как посмотреть) вещи - запускать старые игры на новой библиотеке и запускать новые игры на поддельной библиотеке прикидывающейся SDL3, но поддерживающей никому не нужные древние платформы. Тут как бы можно даже настолько упороться что игру на SDL2 собрать с sdl2-compat чтобы вместо SDL2 она использовала SDL3, но вместо SDL3 подложить SDL3Lite, чтобы прост чтобы. Может быть можно даже sdl12-compat -> sdl2-compat -> SDL3Lite.

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

sdl12-compat

Оно говно. По факту игры с sdl1 на ней ломаются и не только игры. Тестил на openxcom, когда пересобрал вместо sdl1. Также в xine при сборке с sdl12-compat ломается вывод в sdl

vbcnthfkmnth123 ★★★★★
()

Сорян, я немного полистал код на гитхабе, хорошо оформлен, чист понятен читать приятно. Кругом ассерты, будто никто не будет это компилировать с -О2 и -О3, ну ладно имеет место быть, а тут то чего нет никаких ассертов, отрицательное число сюда никогда не придёт, а чому оно int а не uint тогда:


Palette::Palette(int ncolors)
{
    this->ncolors = ncolors;
    colors        = new Color[ncolors];
    version       = 0;
    refcount      = 0;
}

Прям вот так?


SDL_Renderer* SDL_CreateSoftwareRenderer(SDL_Surface* surface)
{
	return NULL;
}
Ygor ★★★★★
()
Ответ на: комментарий от Ygor

Сорян, я немного полистал код на гитхабе, хорошо оформлен, чист понятен читать приятно. Спасибо за отзыв.

Кругом ассерты, будто никто не будет это компилировать с -О2 и -О3, ну ладно имеет место быть,

Ассерты я заменю на обработку ошибок, так как в оригинальном SDL3 при ошибке нужно вызвать SDL_GetError. Пока assert это временное решение.

отрицательное число сюда никогда не придёт, а чому оно int а не uint тогда:

Мелкие шероховатости, пока остаются в коде. SDL_CreateSoftwareRenderer это заглушка до реализации.

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