Чтоже такое MagicEngine который я использую в своей разработке.
Некоторое время назад, лет 5-6 когда я только начинал программировать я начал писать этот движок. Он эволюционировал по следующей схеме: DOS(защищенный режим)->WinAPI->SDL->GLUT->самопальная система для создания окон(OpenGL)->Кросплатформенный с использованием glfw и OpenGL . Изначально движок разрабатывался как 2Д что сохранено по сей день, его цель — легкое создание 2Д игр.
MagicEngine построен на модульной архитектуре. Движок состоит из нескольких модулей:
- dynamicloader — предназначен для динамической загрузки библиотек. Поддерживает кеширование загруженных быблиотек и символов чтобы не грузить их несколько раз
- signals — библиотека сигналов, обеспечивает связь между различными объектами с помощью отсылки сигналов в слоты. Идея позаимствована из QT и дополнена до требуемой для моих нужд функциональности.
- config — отвечает за предоставление средств хранения/загрузки/сохранения конфигурационных файлов, не привязан ни к какому формату файлов.
- video — отвечает за видео интерфейс, предоставляет драйверо-независимый интерфейс для совершения операций с видео данными. Умеет работать со спрайтами, поверхностями и частицами. Также видео модуль отвечает за ввод данных от пользователя. Он состоит из нескольких подмодулей:
- video — занимается выводом данных и получением событий от пользователя
- imageloader — занимается загрузкой различных видов графических изображений и представление их в виде, понятном модулю video
- textrenderer — занимается рендерингом текста
- sceneengine — сердце движка, модуль, использующий все остальные. Предоставляет высокоуровневый доступ к остальным интерфейсам, работает на уровне игровых сущностей, кусков интерфейса.
Напрямую модули незавязаны на какуюто одну библиотеку для выполнения своих функций, вместо этого они используют драйвера.
Драйвера в MagicEngine это отдельные сущности, которые занимаются низкоуровневой работой модуля, так есть драйвер GL_glfw, который занимается отрисовкой графики через OpenGL с использованием библиотеки glfw, существуют драйвера для загрузки png и jpg картинок, рендеринга ttf шрифтов и чтения конкретных форматов конфигов. Все драйвера загружаются во время выполнения и могут быть заменены аналогичными но делающими это через друго интерфейс ОС. Например одно время было два драйвера видео — libGL_glfw и libGL_mogul.
Любой из этих модулей может использоваться отдельно, конечно у них есть зависимости но они довольно маленькие.
Пожалуй это все по основной архитектуре MagicEngine, в дальнейшем я планирую написать серию статей по разбору внутренностей каждого из модулей в отдельности. Возможно люди смогут посоветовать интересные идеи которые я смогу внедрить в движок)
Tags: MagicEngine строение
2 comments so far