Игровые движки на D

Ситуация с игровыми движками для D на сегодняшний день, к сожалению, далека от удовлетворительной. Проект Dash, гремевший год-два назад, сегодня практически не развивается, и это подтверждается не только отсутствием значимых коммитов в репозитории, но и словами самих авторов: “Unfortunately we aren’t doing much active development on Dash at this point, but we are still relatively quick at doing PRs and providing support”. Попытки портировать на D такие движки, как OGRE и Irrlicht, заглохли еще раньше – так же, как и проект по переписыванию на D2 движка Yage, который был достаточно популярен в эпоху D1.

Вот еще парочка проектов, которые проявляли активность в течение последних лет, но нынешняя актуальность которых вызывает сомнения:

  • EncoXD – кроссплатформенный движок на основе SDL2 и OpenGL 3.2 со скриптингом на Lua и начальной поддержкой сети
  • ZuzuStudio Game Engine – курсовая работа студентов из Минска. Курсачи редко перерастают во что-то более серьезное, так что особых надежд питать не стоит.
А что же актуальные проекты? Тут выбор невелик:
  • Unecht – очень любопытный 3D-фреймворк. Работает на GLFW и OpenGL 3.3, поддерживает физику (ODE), OpenAssimp, FreeImage, FMOD, включает собственный редактор сцен
  • DGL – моя скромная разработка, графический движок под Windows, Linux и OSX. Работает на SDL и OpenGL 1.2 (но большая часть функциональности основана на шейдерах и расширениях OpenGL). Нет встроенного редактора, зато есть экспортер сцен для Blender. DGL все еще находится на стадии рефакторинга: есть стабильная версия и экспериментальная ветка DGL/GC-free с ручным управлением памятью, шейдерной системой материалов и многими другими фичами, но некоторые возможности основной ветки до сих пор в нее не портированы – например, скелетная анимация.

Если вы разрабатываете свой игровой движок на D, сообщите в комментариях, и я дополню список.

Vulkan, SDL и D

Частично переписал пример Vulkan/SDL на D. Исходники доступны в моем репозитории экспериментов с Vulkan:

https://github.com/gecko0307/vulkan-demos

Пример представляет собой минимальное приложение, создающее окно SDL, инициализирующее Vulkan и закрашивающее в цикле экран синим цветом. Больше ничего рисоваться не должно.

Функциональность, относящаяся с Vulkan, отделена от SDL и остальной логики приложения, вынесена в модуль vkctx.d. Используются Derelict 2, SDL 1.2 и модифицированный биндинг VulkanizeD. Линковалось и тестировалось на системе с Windows 8.1 и видеокартой NVIDIA GeForce GT 740 с драйвером версии 356.39.

dlib.image и OpenCL

На сайте LightHouse Software вышла моя гостевая статья, посвященная обработке изображений на GPU средствами OpenCL и dlib. Рассматривается биндинг DerelictCL и реализация ядра для простейшего оконного фильтра (box blur), через который пропускается изображение dlib.image.

Vulkan и SDL

Подключил рендеринг Vulkan к приложению SDL (все-таки писать под голый WinAPI не слишком удобно). Правда, пишу пока на C – с биндингами к Vulkan для D под Windows какая-то странная проблема, пока не удается загрузить функции расширений (проблема решена, скоро перепишу демку Vulkan/SDL на D).

Свои наработки решил выкладывать на GitHub – вдруг кому-нибудь еще понадобятся:

https://github.com/gecko0307/vulkan-demos

В репозитории – пример кубика из LunarG SDK, портированный на SDL2.

Vulkan + D

Буквально этим утром прочитал новость о выходе спецификации Vulkan (подробнее можно прочитать тут). Обновил драйвер Nvidia, сижу, любуюсь свежесобранным примером вращающегося кубика из LunarG SDK:

Кстати, на Гитхабе уже появились биндинги к Vulkan для D, так что можно понемногу начинать осваивать новинку. Мне уже удалось собрать простейшее приложение с использованием VulkanizeD, выводящее информацию о видеокарте, кубик теперь тоже не за горами.