Relict Engine: ослик Иа или Ввод и Вывод
В преддверье начала работ над графическим процессором предлагаю поговорить о таких фундаментальных вещах, как ввод и вывод. Т.е. ввод с клава/мыши или контроллера и вывод на экран графической информации. Казалось бы все просто. Бери SDL или glfw и пиши - там это все есть, но не все так просто.
Архитектура Relict Engine подразумевает, что ввод и вывод должны быть прописаны в разных модулях(или подсистемах), и, возможно, в разных потоках. Что означает, что с высокой долей вероятности придется отказаться от готовых библиотек и писать подсистемы для работы с вводом и выводом самостоятельно. В принципе это не страшно, но займет какое-то дополнительное время.
И если мы берем этот метод, соблюдая заложенный концепт архитектуры, то у нас получится примерно следующая структура:
Ввод:
Subsystem.Input - подсистема для работы с устройствами ввода
Реликт Input.Raw - модуль для работы с клавиатурой и мышью (в том числе с высоким DPI)
Реликт Input.Xinput - модуль для работы с Xinput (для поддержки контроллеров) [опциональный]
Вывод:
Subsystem.Renderer - некий универсальный api для работы непосредственно с графикой
Реликт Renderer.Window - модуль универсального api для работы с окнами
Реликт Renderer.Window.WinAPI - модуль для работы с окнами Windows
Реликт Renderer.Window.XWindow - модуль для работы с окнами Xorg
Реликт Renderer.Window.Wayland - модуль для работы с окнами Wayland (замена Xorg) [и вот еще нужно почитать нужны ли они будут обе, или достаточно только одной, ибо с Wayland еще не работал никогда]
Реликт Renderer.Null - модуль-затычка, на случай, если нам нужно только окно, но не рендер (ну и как прототип для GL и VK)
Реликт Renderer.GL - для работы с OpenGL
Реликт Renderer.VK - для работы с Vulkan
В случае, использования SDL/glfw, нам придется его зашивать намертво в модуль Engine, как прямую зависимость. Кода будет сильно меньше, но при этом мы несколько потеряем в гибкости (плюс SDL забирает на себя еще и работу со звуком, при этом F·Mod туда впиливается через непонятно кем написанный плагин, что не очень хорошо [хотя в принципе непонятно, на кой фиг это надо, т.к. F·Mod всегда был вещью в себе]).
В общем, пока думаю и читаю документации к api. А непосредственно работу начну, наверное, не раньше мая.
Лига Разработчиков Видеоигр
9.2K поста23.2K подписчиков
Правила сообщества
ОБЩИЕ ПРАВИЛА:
- Уважайте чужой труд и используйте конструктивную критику
- Не занимайтесь саморекламой, пишите качественные и интересные посты
- Никакой политики
СТОИТ ПУБЛИКОВАТЬ:
- Посты о Вашей игре с историей её разработки и описанием полученного опыта
- Обучающие материалы, туториалы
- Интервью с опытными разработчиками
- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе
НЕ СТОИТ ПУБЛИКОВАТЬ:
- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры
- Посты, единственная цель которых - набор команды для разработки игры
- Посты, не относящиеся к тематике сообщества
Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.
ЗАПРЕЩЕНО:
- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции
- Выдавать чужой труд за свой
Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.
О РАЗМЕЩЕНИИ ССЫЛОК:
Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:
- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества
- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз
- Cсылка размещается в формате: "Страница игры в Steam: URL"