1. Друзья, в это тяжёлое и непонятное для всех нас время мы просим вас воздержаться от любых упоминаний политики на форуме, - этим ситуации не поможешь, а только возникнут ненужные ссоры и обиды. Это касается также шуток и юмора на тему конфликта. Пусть войны будут только виртуальными, а политики решают разногласия дипломатическим путём. С уважением, администрация Old-Games.RU.

    Скрыть объявление
  2. Пожалуйста, внимательно прочитайте правила раздела.
  3. Если Вы видите это сообщение, значит, вы ещё не зарегистрировались на нашем форуме.

    Зарегистрируйтесь, если вы хотите принять участие в обсуждениях. Перед регистрацией примите к сведению:
    1. Не регистрируйтесь с никами типа asdfdadhgd, 354621 и тому подобными, не несущими смысловой нагрузки (ник должен быть читаемым!): такие пользователи будут сразу заблокированы!
    2. Не регистрируйте больше одной учётной записи. Если у вас возникли проблемы при регистрации, то вы можете воспользоваться формой обратной связи внизу страницы.
    3. Регистрируйтесь с реально существующими E-mail адресами, иначе вы не сможете завершить регистрацию.
    4. Обязательно ознакомьтесь с правилами поведения на нашем форуме, чтобы избежать дальнейших конфликтов и непонимания.
    С уважением, администрация форума Old-Games.RU
    Скрыть объявление

Пишу фреймворк LDL, аналог SDL но на С++ и с поддержкой старых систем

Тема в разделе "Мастерская", создана пользователем Jordan 63, 26 окт 2022.

  1. Tigoro AI General

    Tigoro

    Регистрация:
    4 фев 2010
    Сообщения:
    3.151
    Посмотрел, некоторые примеры не понятно правильно работают или нет ) По старым вроде было все правильно раньше.
    Последние три с тайтловой картой - первый норм, второй пустой экран, на третьем картинка сдвинута направо на какоую-то часть изображения.
     
    AndyFox нравится это.
  2. Jordan 63

    Jordan 63

    Регистрация:
    26 янв 2010
    Сообщения:
    535
    Карту можно перемещать клавишами WASD, так же можно растинуть окно.
     
    AndyFox нравится это.
  3. Jordan 63

    Jordan 63

    Регистрация:
    26 янв 2010
    Сообщения:
    535
    Начал портировать фреймворк на OpenGL 3.3

    Так как я никогда не работал с графикой выше OpenGL 1.2, для начала решил портировать
    уроки от Ravesli.

    ai.ibb.co_nPcFwDH_ddddddddd.jpg

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

    Столкнулся с тем, что библиотека glm не поддерживает компиляцию в Visual C++ 6.0 Однако под Windows 98 нет драйверов с OpenGL 3.3, поэтому не вижу смысла оставлять поддержку для рендера OpenGL 3.3. Совместимость останется для OpenGL 1.2

    Проект развивается, конечно не стой скоростью, но тоже неплохо:)
    --- добавлено 15 мар 2023, предыдущее сообщение размещено: 15 мар 2023 ---
    Еще как вариант, написать свой минимальный glm, взять из проекта matrix4 и переписать для совместимости. Тогда не будет зависимости в проекте от glm и можно будет использовать для всех версий OpenGL и DirectX.
     
    AndyFox нравится это.
  4. Helmut Herr Mannelig

    Helmut

    Переводчик

    Регистрация:
    18 мар 2008
    Сообщения:
    7.083
    Хех. Почитал статью по ссылке в шапке, про всратость софта. Я тоже не так давно накропал что-то типа этого, только с другой стороны:
    Правила выживания в крупной конторе

    А вообще, как человек, пишущий системы управления пром. оборудованием с веб интерфейсом на Raspberry PI, могу с уверенностью сказать, что любые фреймворки - зло. Только ваниль, только хардкор. Все равно тормозит? Изо всех сил морщим моск, вспоминая, чему учили в универе, лезем в справочники и кое-как пытаемся накропать функцию на ASM, проклиная себя за то, что когда-то недостаточно внимания уделял этому в учебе.
     
  5. Jordan 63

    Jordan 63

    Регистрация:
    26 янв 2010
    Сообщения:
    535
    Мне статья понравилась. Есть желание запостить на Хабр?
    --- добавлено 16 мар 2023, предыдущее сообщение размещено: 16 мар 2023 ---
    Я как простой богоязненный бэкендер, все же за золотую середину в использовании фреймворков и библиотек. Асм это тупик.
     
    AndyFox нравится это.
  6. Helmut Herr Mannelig

    Helmut

    Переводчик

    Регистрация:
    18 мар 2008
    Сообщения:
    7.083
    Не на Пи-шке, где буквально каждый такт приходится считать.
    Постоянный аккаунт у меня только здесь. В остальных случаях - либо одноразовые, либо никаких (это про соцсети).

    ЗЫ: А так я тоже не фанат ASM, я и не силен в нем от слова совсем. Но отдельные функции на нем могут ощутимо повлиять на общую производительность.
     
    Последнее редактирование: 16 мар 2023
    AndyFox нравится это.
  7. Jordan 63

    Jordan 63

    Регистрация:
    26 янв 2010
    Сообщения:
    535
    Добавил поддержку С API. И пример к нему.

    Пришлось немного перелопатить код, что бы отделить зависимость текстуры от рендера. Теперь нет циклической зависимости классов Render <-> Texture.

    Добавил класс RenderContext, который позволяет добраться до графического апи и пару примеров на Direct3D9.

    Код:
    #include <iostream>
    #include <LDL/Core/RuntimeError.hpp>
    #include <LDL/Graphics/Render.hpp>
    #include <LDL/Contexts/Direct3D9.hpp>
    #include <d3dx9math.h>
    
    using namespace LDL::Graphics;
    using namespace LDL::Contexts;
    
    int main()
    {
      try
      {
       Window window(Point2u(0, 0), Point2u(800, 600), "01_GetContext");
    
       RenderContext renderContext;
                   //Получаем доступ к потрохам Direct3D9
       Direct3D9* direct3D9 = (Direct3D9*)renderContext.Context();
    
       Render render(&renderContext, &window);
    
       LDL::Events::Event report;
    
       D3DXMATRIX projection;
       D3DXMatrixIdentity(&projection);
       direct3D9->Device->SetTransform(D3DTS_PROJECTION, &projection);
    
       while (window.GetEvent(report))
       {
         direct3D9->Device->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 255), 1.0f, 0);
    
         direct3D9->Device->BeginScene();
    
         direct3D9->Device->EndScene();
    
         direct3D9->Device->Present(NULL, NULL, NULL, NULL);
    
         if (report.Type == LDL::Events::IsQuit)
         {
           window.StopEvent();
         }
       }
      }
      catch (const LDL::Core::RuntimeError& error)
      {
       std::cout << error.what() << '\n';
      }
    
      return 0;
    }
     
    AndyFox и Solanacean нравится это.
  8. Jordan 63

    Jordan 63

    Регистрация:
    26 янв 2010
    Сообщения:
    535
    Проект жив!

    Выступил на конференции с докладом о старом железе и рассказал о фреймворке LDL. Доклад будет доступен после конференции.

    Сейчас готовлю фреймворк к первому релизу. Привожу гитхаб к более удобному виду.

    Еще начал проект на своём фреймворке, по написанию open source движка для игры Arcanum. И по мере реализации движка, буду вносить изменения во фреймворк.
    Проект в самом начале.

    agithub.com_JordanCpp_ArcanumWorld_raw_main_screenshots_0.png
    [​IMG]
    [​IMG]
     
    Последнее редактирование: 13 май 2023
    Neitan, Чёрный Думер, Tigoro и 4 другим нравится это.
  9. Jordan 63

    Jordan 63

    Регистрация:
    26 янв 2010
    Сообщения:
    535
    Обновил фреймворк. Добавил инструкцию как собрать, подключить.

    Вынес из фреймворка лишнее.

    Туториал с примера на OpenGL 1.2 и 3.3
    GitHub - JordanCpp/Lib-LDL-Samples

    Сборки dll под разные версии компиляторов для Windows.
    GitHub - JordanCpp/Lib-LDL-WindowsBuilds
     
    Solanacean, Neresar, Maelstrom и 3 другим нравится это.
  10. Tigoro AI General

    Tigoro

    Регистрация:
    4 фев 2010
    Сообщения:
    3.151
    ) попробую запустить, либо запустится на сейчасном калькуляторе, либо нет )
     
  11. Maelstrom

    Maelstrom

    Регистрация:
    23 авг 2021
    Сообщения:
    630
    А для Windows 95 есть рабочий Вулкан?!
     
  12. Jordan 63

    Jordan 63

    Регистрация:
    26 янв 2010
    Сообщения:
    535
    Запустится на любой версии Windows начиная с 95'ой. Но нужно собирать старым компилятором. Я ещё подредактирую cmake, что бы можно было указывать другие рендеры. Пока их нужно указывать вручную, что очень неудобно.
    По умолчанию фреймворк работает на OpenGL 1.0 И есть проблемы с поддержкой gl на Windows 95 (стабильно работает только Software версия, нужно отладить и разобраться)

    Нет и даже эмулироать невозможно под Windows 9x, 2000, Xp. Поддержка Vulkan будет, его так же можно будет явно юзать в коде, но только для современных операционок.
     
  13. Чёрный Думер и все виды материала

    Чёрный Думер

    Регистрация:
    17 мар 2010
    Сообщения:
    2.434
    Много лет ждал подобного проекта, очень круто. Главное, чтобы не надоело. За С++98 отдельный плюс.
    Буду следить, может даже закоммичу чего. :)

    Планируется ли поддержка совсем ранних DirectX и его предшественников? Windows Games SDK, WinG, вот эти вот ребята.
     
    Последнее редактирование: 31 май 2023
  14. Tigoro AI General

    Tigoro

    Регистрация:
    4 фев 2010
    Сообщения:
    3.151
    CMake Error at CMakeLists.txt:1 (cmake_minimum_required):
    CMake 3.25 or higher is required. You are running version 3.18.4
    (это под Debian 11, раньше после заглушек что-то другое было :)
    В целом - тесты на временном моём куркуляторе точно не стоит запускать. Если раньше весь тестовый набор проходил нормально на нормальном железе, сейчас что-то не запустилось, что-то падает едва показавшись - но это не понятно что сбоит (более старый штатный wine, железо никакое и какие-то ограничения из-за этого или что-то еще :)
     
  15. Jordan 63

    Jordan 63

    Регистрация:
    26 янв 2010
    Сообщения:
    535
    Будет здорово.

    Да. Сейчас самый ранний API DirectX 5.0 недоделанный.

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

    Linux пока не поддерживается. Сфокусировался в релиз предоставить, что то одно. Для cmake понижу версию.

    Компилятор я не менял для старых windows 9x. Посмотрю по комитам, может и правда какую несовместимость добавил.
    --- добавлено 1 июн 2023, предыдущее сообщение размещено: 1 июн 2023 ---
    Спасибо за оценку.
     
    Чёрный Думер нравится это.
  16. s0nought I click buttons

    s0nought

    Хелпер

    Регистрация:
    16 ноя 2015
    Сообщения:
    557
    Offtop
    Ничего не понятно, но очень интересно) Лови звезду :yess:
     
  17. Tigoro AI General

    Tigoro

    Регистрация:
    4 фев 2010
    Сообщения:
    3.151
    @Jordan 63, я под десяткой ещё не запускал на том же железе. Если пойдет, значит претензии к debian 11, ядру и wine по умолчанию. На современном железе ядро и wine последние стояли, тут проблематично, проц медленный и довольно старый. Кое что не идёт из новья из за неподдержки инструкций расширений, а если видео должен строго проц обрабатывать, а не видеокарта, тоже мимо :-) не тянет
     
    Последнее редактирование: 1 июн 2023
  18. Bobbie

    Bobbie

    Регистрация:
    28 ноя 2016
    Сообщения:
    145
    @Jordan 63, у меня маленький совет по коду. Покажу на примере.

    У вас есть проверка версии Opengl.

    bool OpenGLLoader::Equal(size_t major, size_t minor)
    {
    return Major() == major && Minor() == minor;
    }

    Ее лучше переписать так:

    bool OpenGLLoader::Equal(const size_t major, const size_t minor) const
    {
    return (Major() == major) && (Minor() == minor);
    }

    Аргументы методов по возможности следует делать константными. Сами методы делаете константными где это возможно. Второй пункт относиться к большинству get методов.

    Для подобных проверок кода рекомендую использовать анализатор CppCheck.
     
  19. Jordan 63

    Jordan 63

    Регистрация:
    26 янв 2010
    Сообщения:
    535
    Спасибо за ревью. Обязательно воспользуюсь анализатором. Я просто нацелен на функционал, но периодически рефакторю код. Нужно будет пройтись и поправить сомнительный код. На вскидку его там не мало.

    Спасибо, за фидбек.
     
  20. Jordan 63

    Jordan 63

    Регистрация:
    26 янв 2010
    Сообщения:
    535
    На данный момент, доделываю поддержку звука, осталось реализовать стриминг музыки. Короткие звуки работают.
    После Займусь сетью. Думаю, взять библиотеку enet. Простая не имеет зависимостей и используется в 100500 открытых проектах. Сделаю обёртку над ней.

    И в принципе, можно сделать релиз 1.0 Получится вполне функциональный мультимедийный фреймворк.
     
  1. На этом сайте используются файлы cookie, чтобы персонализировать содержимое, хранить Ваши предпочтения и держать Вас авторизованным в системе, если Вы зарегистрировались.
    Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление