Пишу фреймоврк для разработки софта или игр. Идею взял из библиотеки SDL, но пишу на С++. Главная идея это кроссплатформенность, производительность и поддержка старых и новых систем.
На данный момент фреймворк работает начиная с Windows 95 и Debian Linux 3.
Поддержка старых систем 25+ лет. Модульный дизайн. Динамическая загрузка рендера при запуске приложения. Весь код написан на С++ 98, для поддержки большего числа компиляторов и систем. Но разработчик, может использоать любой стандарт языка, хоть С++ 23. Ограничение есть лишь у меня как у разработчика фреймворка. Высокоуровневый ООП API. Есть возможнось заюзать свои кастомные аллокаторы. Поддержка старого железа 25+ лет. Производительность. Минимальная внешняя зависимость. Проект собирается следующими компиляторами. Windows: Visual C++ 6.0 и выше вплоть по MSVC 2022 (На нём под Windows и разрабатываю), OpenWatcom v2 Linux: gcc начиная с версии 3 и выше.
В проекте есть тесты, но пока нет документации.
Что сделано: 1. Статическая и динамическая линковка фреймворка. 2. Реазизована поддержка 2D API. 3. Реализована поддержка звука 4. Рендер OpenGL 1.2, OpenGL 3.3, Sowfware рендер. 5. Загрузка графических форматов png,bmp, tga, jpeg и т.д 6. Загрузка звуковых форматов mp3,wav, ogg, и т.д
Мои желания по общей архитектуре: 1. На сколько возможно, делать api и внутренний код простым. 2. Максимальная производительность. 3. Упростить работу с аллокаторами памяти. 4. Создавать библиотеку общего назначения(графичесйи интерфей, звук и т.д)
Я не спец в этой теме, но за Арканум готов простить почти что всё и поставить лайк, а также написать положительный отзыв.
Я вроде понял общую мысль и доводы. НО! Можно я выскажу свое мнение(ни в коем случае не хейт или недовольство, я же понимаю как для разрабов важны мотивация и хорошие комментарии, что бы не загубить всё на корню). Прочитав вашу статью меня немного удивляет ваше решение. Особенно когда вы в статье высказали те же мысли что пришли мне, а уж тем более когда я встретил похожее в комментариях. Если обобщить одним словом - проблема то не в софте, а в людях. Причем даже не всегда в людях, а в заданиях/обстоятельствах. Грубо - программисту говорят допилить чужой код в сжатые сроки, у него нет выбора сделать хорошо или плохо. Или такой момент. Допустим мы доживём до завершения вашего проекта, как вы(и остальные) думаете каковы шансы что это изменит ситуацию? Те же инди разрабы(и не только инди) слезут с того же юнити? В комментариях уже кто-то сказал - тема поднимается не в первый раз и решение тоже не первое, но как бы сдвигов нету.
Вы же понимаете, что я писал статьи с долей иронии и сарказма. Конечно многие вещи я гиперболизировал, но это больше подчеркивает явную проблему между всё растущими требованиями софта к железу. Я сам фулл стек разработчик, понимаю, вижу как я или используемые мной библиотеки во многом неоптимальны и т.д
Данным проектом я ещё хочу доказать, что не так уж и много требуется усилий для поддержки старого железа и обеспечения достаточной производительности. К примеру поддержка OpenGL 1.2 занимает 1000 строк, OpenGL 3.3 примерно столько же + код шейдеров, а взамен дает совместимость с десятилетиями железа.
ЦитатаKxarog ()
Допустим мы доживём до завершения вашего проекта, как вы(и остальные) думаете каковы шансы что это изменит ситуацию? Те же инди разрабы(и не только инди) слезут с того же юнити?
Я не пилю игровой движок, делаю именно фреймворк как кроссплатформенную базу, для простой 2D графики, управлениями событиями ос. SDL но на С++ и с поддержкой в том числе и старых систем. Так же фреймворк инициализирует для разработчика, OpenGL от 1.0 по 4.6
Сообщение отредактировал JordanCpp - Среда, 22 Ноября 2023, 07:43
Данным проектом я ещё хочу доказать, что не так уж и много требуется усилий для поддержки старого железа и обеспечения достаточной производительности.
помимо сложности, экономика роль начинает играть. Одно дело, когда выходит новый софт (операционка, игра, рабочий софт не суть), его красиво презентуют, показывают всевозможные преимущества и т.п. Но чтобы установить, нужно уже памяти побольше, ну и процессор поновее, а вместе с ним и материнку надо обновить, ну и места на диске надо побольше заодно. А если бы все и на старом работало, то резона обновлять железо поубавилось бы Разработка и продвижение сайтов. Дизайн
Но чтобы установить, нужно уже памяти побольше, ну и процессор поновее, а вместе с ним и материнку надо обновить, ну и места на диске надо побольше заодно. А если бы все и на старом работало, то резона обновлять железо поубавилось бы
Я согласен с вами. Мой проект поддерживает в том числе и очень старое железо и это его главная фича. Но если не брать системы 20+ лет, задача становится ещё проще по поддержке. Десятилетний ПК это современность, но уже на нём современные Windows и дефолтные Linux дистры уже начинают подлагивать и эта ситуация искусственная, библиотеки пожирнели, на старый код навесили ещё абстракций, запилили новые фичи не потратив время на их оптимизацию и т.д И конечно всё это зависит от экономики, если дешевле чик чик и в продакшн, так будет.
Начав работу над фреймворком, у меня был скепсис, я думал, что это не реально сделать один универсальный API для всех систем, но с каждой новой строчкой кода, после портирования под Linux очень старых годов к примеру тот же debian 3, я начал понимать, что оказывается это возможно. На практике проверил идею и она подтвердиась.
Мне ещё нравится тестировать производительность фреймворка на старом железе, сразу видны проблемы производительности.
Добавлено (22 Ноября 2023, 10:22) --------------------------------------------- Я понимаю, что фреймворком под Windows 95 и старые версии Linux будут использовать пару человек в мире, один из которых я:) Но лучше когда есть такая возможность, чем ёё отсутствие. И поддержка всего этого зоопарка не так сложна, я не пишу движок, фреймворк лишь тонкая кроссплатформенная прослойка.
Очень важный момент, что API единое для всех новых и старых систем, не требуется как то иначе разрабатывать проект, что бы он завелся на большинстве старых систем и железяк.
Добавлено (22 Ноября 2023, 10:26) --------------------------------------------- Я удивляюсь, как может тормозить графический интерфейс KDE, Gnome при аппаратном ускорении. Но у него получается:)
Добавлено (22 Ноября 2023, 10:48) --------------------------------------------- И ещё один из моментов, у меня появился козырь в рукаве. Не просто рассуждение, что современный софт тормозит, а непосредственное практическое утверждение. Но я не первопроходец, те же кастомные дистры Linux запускающиеся и работающие на Pentium 2. Конечно я понимаю, что если сделать быструю ОС, программу, софт, игру, всё будет зависеть от браузера, современный веб всё равно отъест гигабайты данных и время ЦПУ.
Сообщение отредактировал JordanCpp - Среда, 22 Ноября 2023, 10:49
Xfce уже даже не та легонькая система, что ранее летала на любом старичке
Что только подтверждает правило.
Добавлено (22 Ноября 2023, 11:25) --------------------------------------------- Странная ситуация, что графическое окружение требует те же ресурсы, что и игра Far Cry 1-2. В игре мне понятно, в ней миллионы треугольников в секунду на экране рисуются.
Сообщение отредактировал JordanCpp - Среда, 22 Ноября 2023, 11:25
Круто, но большой вопрос: зачем поддерживать старые системы? У меня у самого стоит в кладовке старый пенек 97 года с Windows 98 SE и даже до сих пор прекрасно работает, но какой от него реальный толк помимо ностальгии? Индустрия сформировалась таким образом, что намного дешевле, приятнее и быстрее обновить железо, нежели ковыряться в старом хламе. И это хорошо! Хорошо, что мы не бегаем по барахолкам, помойкам и прочим злополучным местам в поисках железа, как это было раньше.
Вопрос производительности никак не связан со "старостью" системы и решается иным образом - пишите мерж реквесты в существующие библиотеки, чтобы оптимизировать медленные компоненты. Но, если мы возьмем Core технологии, например SQL СУБД, графические API и т.п, то там и так все очень сильно оптимизированно, особенно в последних версиях, того же DirectX 12/Vulkan API, например. Что Вы там будете оптимизировать - непонятно. Мелкие либы и фреймворки - уже другой вопрос, они могут в угоду производительности давать фундаментальные преимуществе в виде разных абстракций.
Круто, но большой вопрос: зачем поддерживать старые системы? У меня у самого стоит в кладовке старый пенек 97 года с Windows 98 SE и даже до сих пор прекрасно работает, но какой от него реальный толк помимо ностальгии?
Индустрия сформировалась таким образом, что намного дешевле, приятнее и быстрее обновить железо, нежели ковыряться в старом хламе. И это хорошо! Хорошо, что мы не бегаем по барахолкам, помойкам и прочим злополучным местам в поисках железа, как это было раньше.
Это замечательно, но в то же время и породила другой момент, связанный с быстрым устареванием, тормозящими играми, программами, с высокими требованиями не пропорциональные функционалу софта или игры.(Я в презентации в первом сообщении, как раз рассматривал данный вопрос).
Что тот функционал требующий минимум времени на старых ПК и до сих пор являющийся константной сложностью. Пример десктопного GUI, сейчас реализуется по аналогии: нужен комбайн, а что бы его использовать требуется ещё и кран:)
ЦитатаStorm54 ()
Вопрос производительности никак не связан со "старостью" системы и решается иным образом - пишите мерж реквесты в существующие библиотеки, чтобы оптимизировать медленные компоненты. Но, если мы возьмем Core технологии, например SQL СУБД, графические API и т.п, то там и так все очень сильно оптимизированно, особенно в последних версиях, того же DirectX 12/Vulkan API, например. Что Вы там будете оптимизировать - непонятно. Мелкие либы и фреймворки - уже другой вопрос, они могут в угоду производительности давать фундаментальные преимуществе в виде разных абстракций.
Всё верно. Старое железо может показать, где и какой неоптимальный вызов присутсвует в коде. Какой функционал занимает много времени ЦПУ. К примеру когда тестируешь фреймворк на Pentium 166 mhz, открываются просто бездны тормозящего кода, а так как я позиционирую фреймворк как кроссплатформенную прослойку, она должна быть максимально тонкой и работать быстро. Чисто практичный подход. А если не тормозит на Pentium 166, тестируем на Pentium 75 mhz и далее по аналогии.
Добавлено (22 Ноября 2023, 14:24) --------------------------------------------- В коде нет ни одной строчки на ассемблере, но используются контейнеры STL, namespace, исключения. И всё это непотребство работает на Windws 95 с соответствующим железом. Я стараюсь писать простой и понятный и модульный код. Без жесткого хардкода. Присутствуют тесты.
Сообщение отредактировал JordanCpp - Среда, 22 Ноября 2023, 14:25
Машинки, которые не тянут современные операционки и графику, до сих пор в ходу, и не только на работах, но и дома. При этом, со стороны пользователя, абсолютно неясны предпосылки, когда программы перестают поддерживать какую-то ОСь, ведь буквально только что весь тот же самый функционал работал достойно и всё было хорошо Например, Стим прекращает поддержку семёрки в клиенте, и есть мнение, что это из-за того, что так сделал лежащий в его основе хромиум. А пользователю-то что с этого?) Или клиент Дискорда несколько месяцев назад спокойно работал на машине с семёркой и OpenGL 3.3-4.1, а после своего обновления стал показывать белое полотно с подсказкой. А что творят иные веб-сайты -- вообще неописуемо. Количество контента и функционал визуально воспринимается меньшим, чем в древние нулевые, но страница может съедать сотни мегабайт оперативы и заставлять браузер виснуть от обилия метрик, асинхронных загрузок и непонятной активности -- а пользователь только успевает браузер обновлять, потом операционку и вообще всё железо, а вместе с ним покупать заново лицензии на все программы, которые привязывались к тому железу И всё чаще мучает пользователя один и тот же вопрос: "Ну ок, обновился, а что получил взамен кроме кратковременного избавления от тормозов?"
Чтобы уважать пользователя, которому комфортно в любимом окружении
Сообщение отредактировал Oscillograph - Среда, 22 Ноября 2023, 15:25
но в то же время и породила другой момент, связанный с быстрым устареванием, тормозящими играми, программами, с высокими требованиями не пропорциональные функционалу софта или игры.
Не сказать что это большая проблема. При цене серверного процессора в 300 рублей и серверной ОЗУ 32гб за 2000 рублей на Алиэкспресс.
Не сказать что это большая проблема. При цене серверного процессора в 300 рублей и серверной ОЗУ 32гб за 2000 рублей на Алиэкспресс.
Сам факт того, что миллиарды инструкций исполняются напрасно, грея проц и увеличивая энтропию, огорчает. Или возможно, у меня просто проф деформация от 4-ых лет высоконагруженного веба на С++.
Сложно будет потянуть такой проект - этой весьма академическая задача, написать аналог SDL. Закон Мерфи: "Если вы уверены, что ваш поступок встретит всеобщее одобрение, кому-то он обязательно не понравится".
Сложно будет потянуть такой проект - этой весьма академическая задача, написать аналог SDL.
Я это осознаю. И немало сделано. Что готово. События и работа с окном ОС. Api для 2D графики. Воспроизведение звука. Api для работы с ttf текстом. Интегрирован opengl 1.0-4.6 и его загрузчик.
Осталось доделать для первого выпуска. Поточное воспроизведение звука. Доделать вывод ttf текста. Интегрировать сеть, буду делать на основе enet.
А возможно для первой версии ограничиться только минимальным функционалом графики. Остальное доделать в следующей версии.
Для фреймворка я храню все зависимости в проекте, это freetype, std_image, и header only библиотеки для чтения звуковых форматов, портировал библиотеку glu. Всё в исходниках.
Добавлено (02 Декабря 2023, 09:27) --------------------------------------------- Опубликовал новость на Хабре о первом выпуске библиотеки LDL. Возможно это привлечёт новых разработчиков и будет содействовать известности библиотеки.
Добавлено (19 Декабря 2023, 12:52) --------------------------------------------- Сделал некоторые обновления, последующие обновления буду делать в новогодние праздники. И ещё раз предлагаю всем желающим присоединиться к проекту.
Добавил базовую поддержку 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 студию.
Добавлено (19 Декабря 2023, 13:28) --------------------------------------------- Пример кода на Glide. Заливаем экран зелёным цветом.
using namespace LDL::Glide; using namespace LDL::Graphics; using namespace LDL::Events; using namespace LDL::Enums; using namespace LDL::Core; using namespace LDL::Math;
JordanCpp, я правильно понимаю, что графический API выбирается на этапе компиляции и нельзя сменить в рантайме? Или эта проблема уже исправлена? Btw проект интересный, добавил в копилку для копания в праздники. Надеюсь, у вас получится добиться задуманного (✿◡‿◡)
Сообщение отредактировал Abel399 - Воскресенье, 24 Декабря 2023, 02:04
Данным проектом я ещё хочу доказать, что не так уж и много требуется усилий для поддержки старого железа и обеспечения достаточной производительности.
Неужели я дожил до этого дня, когда где-то могу прочитать такие строки? Не нашёл смайлик со слезами счастья для выражения эмоций, переделал грустный...
Цитатаlvovand ()
помимо сложности, экономика роль начинает играть. Одно дело, когда выходит новый софт (операционка, игра, рабочий софт не суть), его красиво презентуют, показывают всевозможные преимущества и т.п. Но чтобы установить, нужно уже памяти побольше, ну и процессор поновее, а вместе с ним и материнку надо обновить, ну и места на диске надо побольше заодно. А если бы все и на старом работало, то резона обновлять железо поубавилось бы
Ага, только им как то абсолютно наплевать на то, что человек - это не машина, и со временем он привыкает к тому, чем пользуется, причём ещё так, что это становится частью его самого... Не зря же говорят, что привычка вторая натура?
ЦитатаJordanCpp ()
Конечно я понимаю, что если сделать быструю ОС, программу, софт, игру, всё будет зависеть от браузера, современный веб всё равно отъест гигабайты данных и время ЦПУ.
Да, только веб сам по себе не существует, его реализуют программисты (если их так можно назвать), которые погрязли в абстракциях (в прочем, это касается не только веба), которые они готовы плодить тоннами, лишь бы только решить задачи из ТЗ...
Сейчас писать что-то с нуля большинству просто лень, проще взять готовое, а какого оно будет качества не важно... Впрочем, это уже было написано выше, так что, желаю Вам, JordanCpp, удачи и пусть эти тру-программисты увидят, что при желании и должном стремлении, что-то выдающееся можно запустить даже на старом железе, и оно будет работать! А их поделкам нужна ещё одна порция оперативки и процессор поновей, и может быть тогда их код даст результат, а не просто подвесит систему, как в предыдущий раз...
Сообщение отредактировал DmitriyIM - Понедельник, 25 Декабря 2023, 03:35
еужели я дожил до этого дня, когда где-то могу прочитать такие строки? Не нашёл смайлик со слезами счастья для выражения эмоций, переделал грустный...
Рад, что нахожу всё больше единомышленников.
ЦитатаDmitriyIM ()
Да, только веб сам по себе не существует, его реализуют программисты (если их так можно назвать), которые погрязли в абстракциях (в прочем, это касается не только веба), которые они готовы плодить тоннами, лишь бы только решить задачи из ТЗ...
Я сам фулл стек разработчик и понимаю о чем вы говорите. Я даже не представляю, что нужно сделать с вебом, что бы оно всё залетало как десктоп приложения.
ЦитатаDmitriyIM ()
А их поделкам нужна ещё одна порция оперативки и процессор поновей, и может быть тогда их код даст результат, а не просто подвесит систему, как в предыдущий раз
Как раз данный проект и задумывался как создание базовой библиотеки. Небольшая, но функциональная и оптимизированная библиотека.
Добавлено (23 Февраля 2024, 08:20) --------------------------------------------- Стало доступно видео доклада о библиотеке. Внимательно смотрите слайды, они доставляют:)
Сообщение отредактировал JordanCpp - Понедельник, 25 Декабря 2023, 13:02