Препарируем движок MagicEngine

Чтоже такое 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, в дальнейшем я планирую написать серию статей по разбору внутренностей каждого из модулей в отдельности. Возможно люди смогут посоветовать интересные идеи которые я смогу внедрить в движок)


4 Responses to Препарируем движок MagicEngine

  1. А движек сейчас под DOS работает?

    admin Reply:

    Нет, DOS не рассматривается в качестве платформы вообще. Его сейчас ненайти, в нем нет 3Д ускорения.

  2. Что такое? Попробуй тыкнуться на «2 комментария» в «мыслях об удобстве». У меня «not found» выдаёт 🙁
    А я там отписаться хотел…

    admin Reply:

    Поправил. была бага связанная с переходом на постоянные ссылки. возможно еще где осталась