Итоги 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 во всех своих коммерческих браузерных играх, так что новость для меня весьма радостная.

Обновления

Dagon 0.29.0

В очередной версии Dagon добавлены эффекты ретро-рендеринга — снаппинг вершин (SimpleRenderPass.retroVertexSnapping) и пикселизация (PresentRenderer.pixelization, PresentRenderer.pixelSize). SimpleRenderer теперь поддерживает свечение, туман и фоновые объекты. Исправлен баг с неправильным рендерингом упрощенной тени в SimpleRenderer.

В модуль dagon.graphics.texture добавлены функции конвертации текстурных форматов между различными API: dxgiFormatToGLFormat, vkFormatToGLFormat, glFormatToVkFormat.

Исправлены некоторые важные баги, в том числе интерполяция кадров в GLTFPose и GLTFBlendedPose, а также, благодаря переходу на новую версию dlib, очень неприятный баг с повреждением памяти в загрузчике glTF.

dlib 1.3.3

Багфикс-релиз, исправляющий повреждение памяти в декодере JSON из-за неправильного поведения лексера.

PN Reloaded 2.7.0

К этой версии редактора прилагается плагин PNScript, реализующий поддержку скриптов на JavaScript (на основе Node.js). Скрипты работают как текстовые фильтры, с их помощью можно реализовать форматирование, умный поиск, деобфускацию, различные алгоритмы анализа данных и т.д. Можно устанавливать NPM-пакеты, что дает практически неограниченные возможности обработки текстов. Автоматизация самого редактора (создание макросов) пока не поддерживается.

Также добавлена опция «Load ASCII files as UTF-8».

Сборку можно скачать на странице релиза.

PN Reloaded 2.6

Практически сразу занялся добавлением в Programmer’s Notepad новых фич, которые хотел годами.

  • Файлы с неизвестной кодировкой теперь загружаются как UTF-8. Раньше очень раздражало, когда они открывались как ANSI/Windows-1251 — я считаю, что теперь надобность в устаревших кодировках отпала, и любой ASCII-файл должен бесшовно интерпретироваться как UTF-8;
  • Автоматическое определение индентации (табы/пробелы) из содержимого файла — очень понравилась эта фича из VSCode. Предусмотрена галочка, чтобы отключить эту опцию, и тогда будет работать по-старому — символ индентации по умолчанию будет всегда как в настройках;
  • Файлы *.exe теперь запускаются двойным кликом в браузере файлов и дереве проекта;
  • Схемы подсветки синтаксиса для HLSL и Haskell. В схему для GLSL добавлены новые типы и ключевые слова;
  • Поддержка JSON — json-файлы интерпретируются как JavaScript для подсветки синтаксиса;
  • Добавлены файлы, необходимые для сборки CHM-справки с помощью HTML Help Workshop.

Сборку можно скачать на странице релиза.

Programmer’s Notepad Reloaded

Некоторые, я думаю, знают, как я люблю старый/экзотический софт) Например, я до сих пор использую редактор Programmer’s Notepad, заброшенный еще с 2016 года. Ну а что, вещь хорошая, проверенная, редактор не перегруженный, не тормозит, не мешает подсказками. Поддерживает D из коробки. Конечно, это не IDE, но лучший «продвинутый блокнот» из бесплатных. На днях решил сделать его форк под названием Programmer’s Notepad Reloaded: https://github.com/gecko0307/pn-reloaded. Пока ничего значительно не менял, только исправил мелкие проблемы совместимости с современной Студией и добавил схемы подсветки синтаксиса для GLSL и WGSL.

Для компиляции нужен Boost 1.57 (🤮) — его надо скопировать в lib/boost/boost-1_57_0. WTL скачивать не нужно, я его положил прямо в репозиторий, так как весит совсем мало.

Можно скачать готовую сборку на странице релиза. К сожалению, пока только x86 — в 64-битном режиме PN собрать затруднительно из-за старых библиотек, но я работаю над этим.