Те, кто следит за моей активностью на GitHub, могли заметить, что у меня появился новый репозиторий dagon – проект, который позиционируется как новая эволюционная ступень DGL. В процессе работы над Atrium я пришел к выводу, что в движке не хватает средств автоматизации некоторых рутинных задач. Например, управление памятью в типичном игровом приложении может быть почти полностью автоматизировано, поскольку выделение и высвобождение памяти происходит в специально задуманных паузах, таких как переключение между локациями (это не относится к играм с открытым миром с фоновой подгрузкой, но это уже специфический случай). Кроме того, в обсуждении на Reddit звучал вопрос, почему DGL не использует SDL2. Так родилась новая ветка движка, которую я решил сделать отдельным экспериментальным проектом.
На сегодняшний день Dagon включает следующие возможности:
- Использование SDL2
- Новая модель памяти на основе концепции владельца (owner), позаимствованной из Delphi
- Модель образцов и компонентов (entity-component), позволяющая расширять функциональность объектов динамически, без наследования классов
- Динамическая перезагрузка ресурсов при их модификации сторонним приложением без перезапуска игры
- Поддержка форматов OBJ и IQM
- Поддержка текстур PNG, JPG, TGA, BMP
- Поддержка контейнера Box для ресурсов
- Новая система материалов с разделением на фронтенд (набор параметров) и бэкенд (передатчик параметров графическому конвейеру – фиксированному или шейдерному, в зависимости от выбранной реализации бэкенда). Система позволяет использовать как стандартные материалы с известным набором параметров, так и создавать свои, специализированные
- Некоторые компоненты, напрямую портированные из DGL – например, система событий, система освещения, рендеринг текста.