Новый блог

Я со своим блогом вынужден переехать во второй раз. К сожалению, Hostingru, на котором я уже долгое время держу большинство своих сайтов, стремительно скатился во второсортный хостинг с чуть ли не еженедельными даунтаймами. Сломанный FTP, потери данных, проблемы с доступом к cPanel — с 2019 года я повидал все. Решил перейти на нидерландский VPS с Linux, на котором у меня уже почти год как крутятся облачные сервисы, связанные с персональным брендом PixelPerfect — доволен абсолютно, никаких проблем ни разу не испытывал. В связи с этим адрес меняется на https://blog.pixperfect.online/.

Спешу заверить, что тематика блога радикально не меняется — я все так же буду писать о своем опыте разработки на D и комментировать то, что делаю на GitHub. Но PixelPerfect — это больше, чем геймдев: отныне мой блог станет универсальным домом для всех моих профессиональных интересов.

По состоянию на 30.05.25 все материалы перенесены, причем удалось даже пофиксить проблемы с битыми изображениями в самых старых постах. Дизайн остался без изменений, я только поменял плагин WordPress для просмотра изображений и пофиксил строку поиска в мобильном режиме. Также слегка изменилась структура главного меню и добавился календарь постов.

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

Новый сайт Dagon

Серьезно обновил https://gecko0307.github.io/dagon — реализован новый движок на основе рендеринга Markdown-документов, сайт переверстан в более современном дизайне, добавлены уроки, появилась отдельная страница со списком фич и скриншотами. Напомню, справка по API теперь живет на том же сайте: https://gecko0307.github.io/dagon/doc/dagon.html.

Написал новые уроки:

Также обновил урок Tutorial 11. Exporting Assets from Blender — там теперь подробности по экспорту из Blender и загрузке в Dagon моделей glTF.

Dagon 0.23.0

Обновил Dagon. Релиз не содержит нововведений и, в основном, оптимизирующий: теперь объекты Shader хранят прямые ссылки на параметры и обращаются по ним вместо строковых имен, когда записывают данные в методе bind. Индексы субрутин GLSL также извлекаются один раз при инициализации шейдера. Эта оптимизация дала весьма ощутимый прирост производительности на стороне CPU.

Удалено расширение dagon:stbi, так как стандартный загрузчик текстур Dagon полностью его заменяет. bindbc-sdl обновлен до версии 1.5.2.

К движку наконец-то появилась онлайн-документация — она доступна здесь. Документация генерируется из исходников. Полностью задокументированы пакеты dagon.core, dagon.graphics, dagon.resource, dagon.game и dagon.ui.

Лаунчер для Electronvolt

Майские праздники не прошли даром: на пару дней я основательно засел за Python и написал собственный лаунчер. Зачем? Он нужен для того, чтобы не привязывать игру к конкретной игровой платформе. В моем случае, я использую GameJolt, но такой подход работает для любого сервиса. Лаунчер служит посредником между игрой и API площадки. Все, что нужно делать игре — это сообщать лаунчеру о событиях наподобие «игрок получил такую-то ачивку». Лаунчер, в свою очередь, передает эти данные игровому сервису. Если надо переехать на другой сервис, достаточно просто обновить лаунчер, а игру патчить не придется — это удобно и экономит массу времени.

(далее…)

Dagon 0.22.0

Вышла новая версия движка! Как уже было упомянуто, добавил поддержку скелетной анимации glTF — спасибо denizzzka за реализацию модуля dagon.resource.gltf.animation с необходимыми классами GLTFAnimationSampler, GLTFAnimationChannel и GLTFAnimation. Скелетная анимация постепенно будет интегрирована в ядро движка: уже добавил абстрактный класс Pose для хранения матриц костей и необходимую функциональность для их передачи в вершинные шейдеры во всех стандартных пайплайнах Dagon. Вычисление этих матриц зависит от конкретного анимационного воркфлоу, для glTF предусмотрены GLTFPose и GLTFBlendedPose.

Также появилась поддержка мешей glTF без текстурных координат, нормалей и индексов. Загрузчик выводит предупреждение, если важные атрибуты отсутствуют, но такие модели теперь можно использовать без проблем.

В движок добавлен встроенный логгер — dagon.core.logger, который позволяет делать записи функциями logInfo, logDebug, logError и logFatalError. Лог по умолчанию выводится в консоль, можно также включить вывод в файл. Функции логирования работают аналогично writeln — то есть, поддерживают вариативные параметры любых типов. Можно отключить записи ниже минимального уровня, изменив глобальную переменную logLevel (по умолчанию — LogLevel.All).

Улучшения в dagon.core.event: горячее подключение игрового контроллера и поддержка вибрации (EventManager.gameControllerRumble).

Добавлен новый примитив — конус (ShapeCone).