Chillwave Drive — новое видео

Выложил ролик с обновленной демкой автомобильной физики. Скачать свежую сборку можно на GitHub и на GameJolt.

YouTube, конечно, замедляют/блокируют, но я не собираюсь от него отказываться и переходить на другие видеохостинги — VK Video неудобный до жути, да и аудитория там не моя совсем.

RAD Debugger

Очень интересный проект от Epic Games — визуальный отладчик под x64, работающий с файлами PDB. Оказалось, что отлично совместим с D, так как windows-версии компиляторов как раз и выдают отладочную инфу в этом формате. Показывает не просто функцию, в которой произошло исключение, но и прямо конкретное его место в коде.

https://github.com/EpicGamesExt/raddebugger

Итоги 2025 года

Традиционно подвожу итоги за уходящий год. Выдалось очень много свободного времени для хобби-проектов — я не только хорошо поработал над движком, но и изучил множество новых для себя технологий.

  • Перенес почти все свои онлайн-ресурсы на новый сервер. Блог переехал на новый домен и был переименован в PixelPerfect Blog. Заодно я добавил некоторые оптимизации, за счет которых он теперь работает заметно быстрее;
  • Выпустил множество версий Dagon, от 0.19 до 0.36. Я перешел на новый итеративный принцип обновлений: теперь релизы выходят по мере добавления небольших наборов фич, вместо того, чтобы по полгода накапливать много изменений. В этом году движок был очень серьезно обновлен, перечислю тут лишь наиболее важное.
    • Состоялся переход на OpenGL 4.3;
    • Добавлена поддержка вычислительных шейдеров;
    • Появилась поддержка GPU-скиннинга и анимированных моделей glTF;
    • Реализована поддержка HiDPI;
    • Реализовано расширение для работы с устройствами виртуальной реальности посредством OpenVR;
    • В систему событий добавлена многопоточность с асинхронным обменом сообщениями между потоками;
    • Улучшена система загрузки текстур: изображения теперь загружаются через библиотеку SDL2_Image, что обеспечивает поддержку новых форматов — WebP, AVIF, SVG и многих других. Также реализована поддержка текстур в формате KTX/KTX2 с транскодированием из Basis Universal в различные профили аппаратного сжатия. Добавлена поддержка анизотропной фильтрации текстур;
    • Встроенный звуковой движок на основе SoLoud;
    • Поддержка видео на основе libVLC;
    • Поддержка теней для позиционных источников света (PSM и DPSM);
    • Объемное рассеивание для позиционных источников света;
    • Префильтрация кубических карт;
    • Бокс-проекция для зондов окружения;
    • Упрощенный рендер SimpleRenderer для казуальных игр и ретро-графики;
    • Шейдер океана;
    • Шейдер луж для ландшафта;
    • Поддержка Matcap-проекций для текстур;
    • Встроенная система проверки столкновений;
    • Логгер;
    • Простой GUI-тулкит;
    • Поддержка нескольких игровых контроллеров;
    • Ввод с Wintab-совместимых графических планшетов с учетом силы нажатия;
    • Поддержка локализации приложений;
    • Обновился сайт Dagon. Также у проекта наконец-то появилась онлайн-документация.
  • Выпустил dlib 1.3.1, 1.3.2, 1.3.3 и 1.4.0;
  • Написал биндинги к Vulkan, GLSLang, SPIRV-Cross, PhysFS. Все мои биндинги теперь живут в GitHub-организации DLangGamedev;
  • Значительно обновил Chillwave Drive, демку физики автомобиля;
  • Начал работу над GScript3, третьей версией моего скриптового языка;
  • Форкнул Programmer’s Notepad, мой любимый текстовый редактор под Windows, и выпустил три новые версии, 2.5, 2.6 и 2.7, с несколькими важными изменениями по сравнению с оригиналом;
  • Завершил работу над Xtreme3D 4.0.

Ну и, конечно, мой личный список интересных событий в мире D, Open Source и IT в целом:

  • D используется в NASA! В этом году стало известно, что ПО для сбора данных в рамках миссии TRACERS было написано на D;
  • D отметили в списке 10 самых быстрых языков программирования;
  • Выход демо-версии The Art of Reflection, новой инди-игры на D;
  • Выход в ранний доступ InZOI, next-gen симулятора жизни с реалистичной графикой — это первый в истории серьезный конкурент серии The Sims. Несмотря на сыроватый геймплей, игра поражает технологическим уровнем, особенно возможностями встроенных нейросетей для генерации моделей;
  • GreenSock Animation Platform, самый мощный фреймворк браузерной анимации, стал полностью бесплатным. Я использую GSAP во всех своих коммерческих браузерных играх, так что новость для меня весьма радостная.

dlib 1.4.0

На днях вышла новая версия dlib — в нее вошли новые модули, которые изначально были частью Dagon:

  • dlib.memory.arena — универсальный арена-аллокатор;
  • dlib.container.spscqueue — SPSC-очередь для межпоточного взаимодействия;
  • dlib.container.mappedlist — список с символьным доступом к элементам.

Также добавлена новая функция wrapAngle в dlib.math.utils. Matrix.isAffine, Matrix.inverse, Matrix.getColumn, Quaternion.toMatrix4x4, Quaternion.toMatrix3x3 помечены как const.

Dagon 0.36.0

Вышла новая версия движка — скорее всего, это последний релиз в 2025 году.

Добавлен новый тип событий EventType.HardwareSpecific для поддержки кастомных устройств ввода. Это событие не имеет определенной спецификации — данные события зависят от типа устройства. Обработчик события, onHardwareSpecificEvent, принимает индекс устройства, пользовательский код и непрозрачный указатель void*, по которому могут быть любые данные.

Добавлен EventManager.tmpHeap — арена-аллокатор для короткоживущих объектов (строк, массивов и структур, создаваемых для событий). Он сбрасывается, когда обработаны все пользовательские события.

EventDispatcher.onUserEvent теперь принимает вторым параметром указатель void* для пользовательских данных.

Реализован новый класс приложений BaseGame, который не включает рендер, но включает управление сценой. Game теперь наследует от него. Renderer теперь принимает объект Application в конструкторе для потенциально более глубокой интеграции рендера с приложением.

Добавлено новое расширение dagon:openvr, реализующее базовую поддержку гарнитур виртуальной реальности через API OpenVR. Поддерживается синхронизация с HMD и отправка текстур для вывода. К сожалению, стандартный рендер-пайплайн Dagon в настоящее время несовместим с VR, он для этого нуждается в серьезной переделке. Для тестов в расширении реализован простейший StereoRenderer. Подробности о том, как работать с VR, вскоре будут в отдельном посте.