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

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

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

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

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

  1. Jordan 63

    Jordan 63

    Регистрация:
    26 янв 2010
    Сообщения:
    480
    Не исключено:)
    --- добавлено 8 ноя 2022, предыдущее сообщение размещено: 8 ноя 2022 ---
    Решил переделать api. Сейчас функционал ориентирован на использование кастомных алокаторов памяти. Так как это довольно сильно усложняет программирование на фреймворке, ввиду еще вариант без ручного распределения памяти. У разработчика будет выбор, какой вариант использовать.
    --- добавлено 8 ноя 2022 ---
    Скопирую дизайн библиотеки SDL2, но с поправкой на ООП.
     
  2. Jordan 63

    Jordan 63

    Регистрация:
    26 янв 2010
    Сообщения:
    480
    Добавил поддержку DirectX 5. Проект компилируется и окно выводится. Уже не плохо. Позже добавлю полноценную поддержку, вывода текстур, рисования линий и т.д
    --- добавлено 8 ноя 2022, предыдущее сообщение размещено: 8 ноя 2022 ---
    Теперь я понимаю, почему Кармак плевался на старые версии DirectX. Интерфейс реально запутанный. OpenGL 1 намного проще.
     
    Чёрный Думер нравится это.
  3. Bobbie

    Bobbie

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

    Jordan 63

    Регистрация:
    26 янв 2010
    Сообщения:
    480
    Обязательно сделаю. Сначала утресу минимальное рабочее api и буду делать документацию, сразу на английском. Буду юзать Doxygen.
    --- добавлено 8 ноя 2022, предыдущее сообщение размещено: 8 ноя 2022 ---
    На днях добавлю поддержку Linux.
    --- добавлено 8 ноя 2022 ---
    @Bobbie,

    Lib-LDL/Examples/Graphics/Gpu at master · JordanCpp/Lib-LDL

    Вы видели примеры приложений из фреймворка, у вас есть идеи как улучшить api, или что то добавить, изменить?
    --- добавлено 8 ноя 2022 ---
    Поэкспериментировал с кодом, возможно без особых переделок понизить уровень компилятора до С++ 98.
    --- добавлено 8 ноя 2022 ---
    Это добавит нативную поддержку старых систем.
     
  5. Bobbie

    Bobbie

    Регистрация:
    28 ноя 2016
    Сообщения:
    137
    @Jordan 63, об улучшениях в API лучше говорить после его стабилизации. За C++ 98 жму руку. Классика лучше всего если нужен ясно читаемый код.
     
  6. Jordan 63

    Jordan 63

    Регистрация:
    26 янв 2010
    Сообщения:
    480
    Поправил код, теперь для компиляции фреймворка можно использовать компиляторы С++ 98. Для использования stdint.h добавил портабельный вариант http://www.azillionmonkeys.com/qed/pstdint.h
     
    AxXxB нравится это.
  7. Jordan 63

    Jordan 63

    Регистрация:
    26 янв 2010
    Сообщения:
    480
    Убрал из API функционал аллокаторов, так с ними код усложняется.
     
  8. Jordan 63

    Jordan 63

    Регистрация:
    26 янв 2010
    Сообщения:
    480
    Как вариант дополнить классы аллокаторами в таком виде:

    Загрузка изображения без аллокатора

    Код:
            
    
    Загружаем картинку
    loader.Load("Gorgosaurus_BW_transparent.png");
    
    Копируем загрженную картинку в наше изображение. Теперь можно рисовать.
    image.Create(&loader);
    
    
    Пример с аллокатором

    Код:
           
    
    Создаем аллокатор на 4 мб
    LDL::Allocators::FixedLinear allocator(LDL::Allocators::Allocator::Mb * 4);
    
    Загружаем картинку
    loader.Load("Gorgosaurus_BW_transparent.png");
    
    Инициализируем наш класс, теперь вся память будет выделяться из аллокатора
    LDL::Graphics::CpuImage image(&allocator);
    
    Копируем загрженную картинку в наше изображение. Теперь можно рисовать.
    image.Create(&loader);
    
    
    Такой вариант более прост как в использовании, так и в понимании. И есть выбор в ручном управлении памятью или без управления.
    --- добавлено 10 ноя 2022, предыдущее сообщение размещено: 10 ноя 2022 ---
    Возня с аллокаторами нужна для того, что бы минимально фрагментировать память. К примеру можно выделить сотню мб и загружать в эту память изображения, после чего сделать ресет аллокатора и снова подгрузить в эту же память другие данные. Как вариант удобно использовать при загрузке ресурсов уровня.
    --- добавлено 10 ноя 2022 ---
    Для интереса соберу прямо в Windows 98 сам фреймворк и примеры используя Visual C++ 6.0
    --- добавлено 10 ноя 2022 ---
    Удалось собрать несколько примеров с помощью Visual C++ 6.0

    Примеры работаю.
     
    Чёрный Думер и Tigoro нравится это.
  9. Jordan 63

    Jordan 63

    Регистрация:
    26 янв 2010
    Сообщения:
    480
    Эксперименты это хорошо, но...

    На данный момент дополняю и стабилизирую основной API. А именно: Создание окна, добавляю поддержку на полный экран, в окне, растяггивание окна и т.д Нормально доделать события, мышь, геймпад, изменение окна, ввод и т.д
    Что бы проект не выглядел как поделка. Фреймворк пока будет поддерживать только 2D графику, но будет стабильным и в своей нише полным. На это нужно время.
    --- добавлено 10 ноя 2022, предыдущее сообщение размещено: 10 ноя 2022 ---
    Еще работа с каталогами, унифицированная работа со временем, поддержка нескольких мониторов. И проверить, весь ли графический функционал работает.
    --- добавлено 10 ноя 2022 ---
    В общем не скучаю:)
     
  10. rusty_dragon

    rusty_dragon

    Регистрация:
    17 ноя 2007
    Сообщения:
    5.557
    Вот кстати тоже. Не много ли чести для бота будет? гитхаб далеко не единственный хостинг для git.
     
    Tigoro нравится это.
  11. Jordan 63

    Jordan 63

    Регистрация:
    26 янв 2010
    Сообщения:
    480
    Мысли по реализации 2D аппаратного ускорения.

    OpenGL и DirectX для 2D графики реализую следующим образом. Задаю ортографическую проекцию, что бы на экране работали привычные координаты x y. GpuImage является текстурой хранящейся в памяти видеокарты, CpuImage это набор пикселей изображения хранящейся в озу (отрисовывается простым переносом из озу в память видеокарты).

    На данный момент читаю мануалы и ищу как в разных версиях DirectX и OpenGL задать ортографическую проекцию, как работать и создавать текстуры и т.д Если у кого то есть код или ссылки на мануалы, буду рад.
    --- добавлено 11 ноя 2022, предыдущее сообщение размещено: 11 ноя 2022 ---
    Полностью поддержка 2D графики реализована на OpenGL 1.2 Альфа(прозрачность) тоже работает.
    --- добавлено 11 ноя 2022 ---
    Возможно следует добавить поддержку OpenGL 1.0

    Для информации по поддержке графического API и характеристик видеокарт использую википедию.

    nvidia
    List of Nvidia graphics processing units - Wikipedia

    AMD(Radeon)
    List of AMD graphics processing units - Wikipedia

    Intel
    List of Intel graphics processing units - Wikipedia
     
    Tigoro нравится это.
  12. Bobbie

    Bobbie

    Регистрация:
    28 ноя 2016
    Сообщения:
    137
    Tigoro нравится это.
  13. Tigoro

    Tigoro

    Регистрация:
    4 фев 2010
    Сообщения:
    2.938
    Sourceforge только знаю ещё из крупных. В основном когда ищу какие то поделки (утилиты, программы скомпилированные и в коде), почти всегда на гитхаб попадаю.
     
  14. Bobbie

    Bobbie

    Регистрация:
    28 ноя 2016
    Сообщения:
    137
    @Tigoro, можно на ваши репозитории посмотреть?
     
  15. rusty_dragon

    rusty_dragon

    Регистрация:
    17 ноя 2007
    Сообщения:
    5.557
    Поиском легко находятся. Технически гитхаб не более чем крупный хостинг-сервер.
     
  16. Tigoro

    Tigoro

    Регистрация:
    4 фев 2010
    Сообщения:
    2.938
    Если всерьез - нет их, я не программист, т.е. сам ничего в настоящее время не разрабатываю. Если это и требовалось доказать - вы доказали )
    То что мне интересно - к себе локально сохраняю, поскольку источники кода разные были + надежнее все же когда оно у тебя есть, а не где-то там. В основном весь код под линукс (под другими платформами не пробовал его компилировать; что-то совсем не кроссплатформенное), что-то с доработками небольшими (из игр вроде бы только поправить под линукс получилось bermuda syndrome, проблема с титрами и с русским языком была - под windows это не так очевидно; нашел решение у консольщиков :))
    В основном - аудиоутилиты разные (конвертеры-плееры-трекеры, прочее), архиваторы, немного эмуляторы и чуток других утилит. Поскольку источники (сайты авторов, хостинги кода) и лицензионная политика разная (весь код из официально открытых источников), то делать где-то git с кучей клонов (или форков) будет наверное не правильно. Если интересно, могу список дать или всё архивом выложить, мне не жалко.

    Это понятно ) не было необходимости, поскольку сугубо для себя, а поиском по конкретным поделками либо страницы авторов, либо гитхаб в 95% случаев. Иногда какие-то другие сервисы (с которых не всегда еще скачать можно легко, если не зарегистрирован).
    --- добавлено 12 ноя 2022, предыдущее сообщение размещено: 12 ноя 2022 ---
    @Jordan 63, по примерам, запуск разумеется под WINE (запускал то что выложено файлами в репозитарии, не из архива).
    Все работают. Но, в прошлый раз не обратил внимание, а сейчас заметил: 05_CPU_Image.exe выводит перевернутого динозаврика. Картинка с ним в прошлый раз выводилась мелкая и он в углу вверх ногами был тоже, сейчас при крупном изображении это стало более заметно, в сравнении с другими примерами. Если он не должен быть перевернутым - ошибка.
     
  17. Bobbie

    Bobbie

    Регистрация:
    28 ноя 2016
    Сообщения:
    137
    @Tigoro, не хотел вас обидеть. Просто чтение исходников это форма обучения.
     
    Tigoro нравится это.
  18. Jordan 63

    Jordan 63

    Регистрация:
    26 янв 2010
    Сообщения:
    480
    Да это ошибка. Для OpenGL нужна перевёрнутая картинка, когда выводишь на ЦПУ, выводится как есть. Подумаю как лучше исправить, или при загрузке изображения или при выводе переворачивать.
    --- добавлено 12 ноя 2022, предыдущее сообщение размещено: 12 ноя 2022 ---
    На днях добавлю поддержку Linux, уже начал пилить поддержку xlib. Сможете запустить нативно.
     
    Tigoro нравится это.
  19. Bobbie

    Bobbie

    Регистрация:
    28 ноя 2016
    Сообщения:
    137
    @Jordan 63, ошибку можно исправить через glrotate или через передачу -1 в качестве аргумента для glscale.
     
    AxXxB нравится это.
  20. Jordan 63

    Jordan 63

    Регистрация:
    26 янв 2010
    Сообщения:
    480
    Полностью согласен. К примеру для реализации фреймворка я смотрю код sdl2 и sfml, и начинаю лучше понимать как они работают и как мне нужно сделать в своём.
     
    Tigoro нравится это.
  1. На этом сайте используются файлы cookie, чтобы персонализировать содержимое, хранить Ваши предпочтения и держать Вас авторизованным в системе, если Вы зарегистрировались.
    Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление