Обновить

Рефакторинг 22 000 строк C++: Как победить класс-монстр в Vulkan-движке [Анонс стрима]

Привет, Хабр!

Меня зовут Shagu, и последние несколько месяцев я в одиночку пишу Shuttle Engine — экспериментальный 3D-рендерер и редактор сцен на C++20 и Vulkan 1.3/1.4. Проект ориентирован на современные графические технологии: GPU-driven pipeline (Indexed Indirect Drawing, Compute-пассы для подготовки геометрии), Bindless Descriptors, Buffer Device Address (BDA) и PBR/IBL освещение.

Но, как это часто бывает в инди-разработке, за быстрым прогрессом и красивой картинкой скрывается технический долг.

История одной боли: Эволюция монолита

Изначально весь проект начинался как прототип, и вся инициализация Vulkan, окон и отрисовки находилась… в одной гигантской функции main(). Когда масштабы стали критическими, я перенес этот код в класс Application.

Но теперь и Application превратился в классический «Класс-Бог» (God Class). В одном месте у меня намешано всё:

  • Инициализация устройств и очередей Vulkan;

  • Создание Swapchain и управление кадрами;

  • Запись барьеров (pipelineBarrier2) прямо внутри кадра рендеринга;

  • Редакторский интерфейс ImGui и логика загрузки ассетов.

Добавление любого нового пасса рендеринга (например, теней или SSAO) превращается в ручное дописывание сотен строк кода в этот монолит и риск сломать синхронизацию Vulkan. Пора это исправить.

Что будем делать на стриме?

В эту пятницу, 5 сентября в 19:00 по МСК (UTC+3), я проведу свой первый LIVE-стрим, который будет полностью посвящен фундаментальному архитектурному рефакторингу Shuttle Engine.

Мы превратим класс Application в легкий и понятный оркестратор (Mediator), разбив его на три независимых модуля:

  1. Application Module (PAL): Полностью изолируем работу с ОС (Win32/SDL), событиями ввода и созданием нативных окон.

  2. Engine Module (Vulkan Runtime): Перенесем туда всю работу с графическим API, VMA, RenderGraph и сценой.

  3. UI Module (RmlUi + ImGui): Выделим интерфейс в отдельный слой.

Этот рефакторинг — критически важный шаг, который подготовит фундамент для следующих тем: асинхронного многопоточного рендеринга и перехода на полноценную архитектуру RenderGraph.

Детали трансляции:

Если вам интересны низкоуровневая графика, Vulkan, C++ и проектирование сложных систем реального времени — подключайтесь к трансляции. Это будет живой, нерепетированный процесс написания кода, обсуждения архитектурных компромиссов и поиска решений.

P.S. Проект разрабатывается независимо. Если вы хотите поддержать создание Shuttle Engine и помочь автору в обустройстве новой рабочей базы в это непростое время, вы можете сделать это на моей странице поддержки: https://boosty.to/shagunov. Любой вклад очень помогает продолжать работу над движком!

До встречи на стриме!

Теги:
+3
Комментарии5

В России начали блокировать протоколы DoH и DoT

С середины августа 2026 года у части абонентов «Ростелекома», «Дом.ру», «Таттелекома», SkyNet и «Билайна» одновременно перестал работать зашифрованный DNS от Google и Cloudflare. Не зависал, не подтормаживал, а именно перестал отвечать. Причём ложился он по-разному в зависимости от протокола, и это различие — самое интересное в истории.

Давайте разберём, что именно происходит на проводе, почему DoT и DoH ломаются не одинаково, как это потрогать руками, и что со всем этим делать.

В России начали блокировать протоколы DoH и DoT

Публикации